Serial code half-Life Updates Pre & Post 188.8.131.52 file
Download Half-Life Retail Update Final. DemulShooter (Class) initial release. Dawn III Shadow of Erthil v1.37.
|1||Thedelouslae's articles tagged "keygen"||58%|
|2||Alumpadist's articles tagged "for" - alumpadist's blog||98%|
|3||TFDi Design 717: Version 1.1 Released||54%|
|4||Half-Life GAME MOD Half-Life WON Resolution FOV MP3 Patch||26%|
|5||Half-Life (1998) release dates||37%|
|6||The Adventures Of Tintin Seriel Key Crack||9%|
|7||Half-Life 184.108.40.206 Retail Update - Steamless CS Project||31%|
|8||Game Patches: Counter-Strike 1.4 Full Mod Client||43%|
|9||Half-Life update v220.127.116.11 - Patches - Goldsrc warehouse||23%|
Game Patches: Half-Life 18.104.22.168 Update
Added logging of 'banid' commands. Berrett Koehler Publishers Claiming Your Place At The Fire Living The Second Half Of Your Life On Purpose: Counter Strike V (Half-Life V) Server Crack: Easy Half Life V Easy Half Life V By Lz0: For Dummies Half Life 2 Mods For Dummies Jan Harpersanfrancisco Simple Secrets Of The Best Half Of Life What Scientists. Cyber-Rat.com - Half-Life maps and more.
Half life no cd patch" Keyword Found Websites Listing
PC Game Trainers, Cheats No-CD / No-DVD PlayFixes Patches. Half-Life Client Italian [Full Upgrade] The file will update your Italian version of Halflife to version, regardless of what version you currently have installed. Counter Strike 1.4 Crack, Serial & Keygen additional reading.
- Destmencotas's articles tagged "crack"
- BERNINA FAQ – frequently asked questions and their answers
- Game Patches: Half-Life v22.214.171.124 patch
- Inspirasi dan Kreasi qu: Game PC A-Z
- Game Patches: Half-Life - Counter-Strike Client Files
Activation code half-Life GAME PATCH v.126.96.36.199
SHOW COMMENTS (304) HIDE COMMENTS (304) good Submitted by Anonymous (not. Download Ebook Working With Half Lifelearn how to calculate half-life, but also as a way of finding the initial and final quantity of a substance or its decay constant. Scania S 3 axle v2.0 FS17.
Free Apps and PC Games Downloads and Reviews
Changes/Additions - Ricochet included in this release - Added logging of the anti-cheat system catching and kicking detected cheats. Fixed DropClient messages for Steam. This is the full version v1.5 Windows Half-Life Mod Version release.
Adguard life time keygen, serial, crack, generator, unlock
Retail-THETA; Arcania: Fall Of Setarrif; Age of Empires 3: Trilogyz; Afterfall Insanity; Assassin's Creed Revelations; AR-K; ALADDIN NASIRAS REVENGE; All-Star Baseball 2020; Airborne Troops; B: Batman Arkham City-FlightClub; Bus And Cable Car Simulator; Bang Bang Racing; Batman 2 DC SUPER HEROES; Bully: Scholarship Edition; Burnout Paradise: The Ultimate Box; Battlefield 3. Half-Life Patch is a good, free Windows game, that is part of the category PC games with subcateg. Download this if you don't have CS installed and you're running the Half-Life Mod Version of Counter-Strike.
Key half-Life - game update v.188.8.131.52
My brother got a similar virus several months ago and posted here, so I'm doing the same thing. Half-Life and Team Fortress Classic Patch - this patch upgrades Half-Life v to latest v and adds Team Fortress Classic and Deathmatch Classic - exe. The file will update your version of Halflife from to version Also within the update is the Ricochet Mod for Half-Life that changes the standard first-person style to a third-person game with TRON deadly disc-like game play.
- Kkkkk's ISO/DOX 2020-02-25
- Half-Life - PCGamingWiki PCGW - bugs, fixes, crashes, mods
- The Pirate Bay - The galaxy's most resilient bittorrent site
- Download Half-Life 184.108.40.206 Client (Full Client) for Free
- Crack Intervideo Windvd Recorder Platinum 54
- How To Properly Update The WON (Pre-Steam) Version of Half
- Half-Life Retail Update Download - It's here. It's good
- Kuroyama 1.1.0 hack pubg kr keygen, serial, crack, generator
- Half-Life (1998) Windows release dates
- Half-Life - game update v.220.127.116.11 - Download
- Game Fix / Crack: Half-Life v1.0/18.104.22.168 NoDVD NoCD
- JCB Fastrac 150 FS17 - Farming Simulator 17 mod / FS 2020 mod
- Download Astro 1.0 serial number, crack and keygen
- Half-Life Retail v22.214.171.124 Patch - Half-Life Mods, Maps
Cracks from the whole world H
With this stationary system from Lizard it is possible to produce your own bio diesel. AusGamers Files - Half-Life Patch v126.96.36.199. Added logging of 'kick' commands.
Game Patches: Half-Life auto updater
Uploaded 11-18 2020, Size 857.45 MiB, ULed by bidis: 0: 0: Games Half-Life 2 EMPORiO just fix. Put the MP3 soundtrack of Half-Life Steam. Delta Force: Black Hawk Down Official single.
Half-Life 1 WON 188.8.131.52 Patch file - Mod DB
Download Half-Life Full v Update now from AusGamers - its free, and no signup is required! Ga department of professional licensing 7. Comment * user login.
Download Half Life 1.0
View Profile View Forum Posts Private Message View Blog Entries View Articles Published on 07-18-2020 10: 47 AM 2020/07/17. Gamers] Sunday, 28 April 2020 Nothing to do with Half-Life or CS, but I just thought I should warn people that they need to be very careful about the latest e-mail virus that seems to be running wild at the moment. Release dates for Half-Life (Windows) database containing game description & game shots, cover art.
Half-Life Scripts - SourceRuns Wiki
Keygen halfLife - Official v184.108.40.206 Full Update Patch
Download Half-Life Patch v - v now from AusGamers - its free, and no signup is required. AusGamers Files - Half-Life Full v220.127.116.11 Update https://save-up.ru/crack/?key=62. All Files In Half-Life Patches.
Congratulations, you won! voice playing
It is with great pleasure that we. Best Download: Patches Games: Half-Life v Search. The Elder Scrolls V: Skyrim v1.0 + Update #1 Fixed Files.
Cheat Code Central: PC Video Game Cheats, Codes, Cheat
With this, you can upgrade Half-Life versions and even downgrade it. it keeps telling me im installing the half life update into an invalid. The full list of patch notes is listed below. This is a pack comes with 4 files you must unzip it and then put in mod folder.
Activation key realtek High Definition Audio Driver R2.50 Serial Number
Don't be rude (permban), use only English, don't go offtopic and read FAQ before asking a. Next Mod; Previous Mod; 1 Response. Half-Life Calculator Half-life is defined as the amount of time it takes a given quantity to decrease to half of its initial value.
LazyLibrarian, Calibre, Calibre-Web, Booksonic Installation Guide v1.0
If you follow this, please read through the whole thing first. There are some things that should come in a certain order to make life easier. I've tried to call out options where they are available and give some reasoning behind my choices.
I do NOT have all of the answers. And my choices are not always correct for me, let alone for you.
Hopefully coming soon will be some short guides for things you'll encounter after the installation (why won't my audiobooks import, why aren't calibre entries being written, etc.) As well as an inevitable edit of this guide once all of the flaws and shortcomings have been located.
To get started, you need a Linux installation. I'm assuming a plain vanilla install of Debian that you've booted into once, updated packages, and rebooted if necessary. Not sure if it matters, but I'm running it in a VM. Currently giving the system 4GB of RAM, 4 processors, and 70 GB of space, NOT counting space for the library. The RAM only rarely comes into play. The processors almost never come into play. At some point, I'll dial them both down by half or more. The disc space looks kinda ridiculous. In retrospect, 20-30 is probably more than enough, but I'm still figuring our the room for metadata.
(For comparison, I have 28GB of eBooks at the moment, as well as 164 GB of audiobooks. (Note to self: look into that. Database reporting in LazyLibrarian says I only have 624 books and 263 audio. That amount of disk space seems a bit much. Difference between du and df is interesting.))
Information and items to have before you start (* is mandatory, O is optional):
- * -Location of helpers like SABNZB, qbittorrent, etc.
- * -Intended Directory layout. More on this later
- * -IP address and hostname of your library server (this should be statically set, or you may have issues later) (for this document, we are assuming 192.168.1.100 and hostname librarian)
- O -Bot accounts on your favorite IRC servers if you like.
- O -GoodReads account.
- O -Kindle email to device address
Distribution ChoiceI prefer Debian based distros due to simplicity. Usually I go for Ubuntu (because everyone does, it makes it trivial to specific directions). For my library, I went with vanilla Debian. There are some changes in how Ubuntu handles certificates that aren't well documented and that I didn't feel like figuring out. This guide will be based on Debian Buster.
I haven't gotten around yet to playing with Docker. Sometime in the next year, I hope to do that. If you need Docker help, gotta ask someone besides me. This is a guide to putting a library on (virtual) metal.
Required additional packages
- git (For installing/updating.)
- xvfb (Required to do a few things with calibre. Most importantly, this is required if you didn't install a gui on your system)
- python3-pip (Not every python package is prepackaged.)
- libnss, python3-openssl, python3-oauth (Agh, lost my notes as to why we need this.)
- openssh-server (unless you are logging in locally or solely through VNC, which I don't recommend.)
- cifs-utils (if you are using a Samba/SMB share. No, it's not recommended, we're doing it anyway.)
- imagemagick, ghostscript, python3-pythonmagick, python3-wand (for generating covers and the like)
- rename (helps manipulate filenames, because ebook and audiobook naming is awful)
- id3v2 and id3tool (helps manipulate id3 tags because ebook and audiobook tagging is awful. Supposedly id3 v1 is sufficient, but you really need the v2 tool. If you are a super miser on space, skip id3tool)
- unzip (another file/metadata helper)
apt install git xvfb python3-pip libnss python3-openssl python3-oauth openssh-server cifs-utils imagemagick rename id3v2 id3tool unzip ffmpeg
You need to set up a user just to run the services. On this setup and for this guide, our user is 'librarian'. I shouldn't have, but did set it up as a normal user, but with a couple of adjustments.
adduser librarian --system --group
Your screen should give you something like this:
Adding system user `librarian' (UID 109) ... Adding new group `librarian' (GID 116) ... Adding new user `librarian' (UID 109) with group `librarian' ...Take note of the UID and GID numbers. We'll come back to that later.
Directory setupYou will need several directories to exist before you begin the installations.
/home/librarian should already exist. If not, make sure you have a 'librarian' user and group. Then create the directory and assign ownership to your librarian user:
chown -R librarian:librarian /home/librarian
If you don't have the usegroup, try creating them again.
Most of the server stuff I want in /srv. If it doesn't exist, /opt is another choice. And back in the day, /uslocal did the trick. This guide uses /srv.
Almost all of my data lies on network mounts. In my case, I use samba/SMB. Unfortunately, calibre does not deal with this very well due to samba/SMB not handling file locks well. So far it's mostly ok if you follow my steps and mounting options. The 'not mostly' part is that every so often you may need to reboot the system.
Filesystems are automounted. You'll have to edit your /etc/fstab file. This is a typical line for my mounts:
//fileserveebooks /mnt/ebooks cifs uid=109,gid=116,credentials=/root/creds,vers=2.1,auto,x-systemd.automount,_netdev,mfsymlinks,nobrl 0 0Fileserver is the smb name for the fileserver where the data resides.
/ebooks is the name of the share.
/mnt/ebooks is the location that our librarian system goes to in order to find those files.
cifs merely specifies the kind of fileshare we are using
uid and gid must match the numbers from your 'librarian' user and group. This will make that user and group own the mount and be able to do just about anything with the files.
credentials=/root/creds specifies the location of your smb username and password. You could put the info here, but this provides a little extra security. The /root/creds file should look like this:
Username=BigBadLibrarian Password=s00p3rsekr1+Or whatever your credentials are.
vers=2.1 may be unneccessary or may need changing depending on your client and server to get the compatibility right.
The next two sections make the mount happen automatically at startup, after the network comes up.
The last two sections "mfsymlinks,nobrl" are two options that minimize the locking problem earlier. It's not perfect, but it's the best that can be done.
What directories do you need?
- /mnt/ebooks/ebooks is where we will put our ebooks (naturally)
- /mnt/ebooks/audiobooks is for audiobooks
- /mnt/ebooks/comics is for comics (which are beyond the scope of this document)
- /mnt/downloads is where our torrent and nzb downloader will place completed downloads. I strongly suggest you place them all here. You can separate them if you wish, but at some point, it's not worth the extra effort of defining things out too finely.
- /mnt/manual_import is where we will place files that we want to bring in manually. Suppose you copy some files from your ereader or a thumb drive. You drop them into this folder. (In my case, the data is on the file server. I mount it as drive N: on my desktop and as /mnt/manual_import on my librarian. Drop it on the desktop, it appears on the server.)
- /home/librarian/logs is where we will keep our logs. This isn't the best location (should be /valog/librarian or similar) but this will do for now.
- /home/librarian/.config/calibre/ is where we will keep some configuration bits, including the user database.
Install calibre-serverLong story short: follow the directions here: https://calibre-ebook.com/download_linux
A stock install should have the correct tools and dependencies already installed.
Run this on the command line: "sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin"
This will fetch the calibre installer and run it, placing items in stock locations (/opt/calibre). This is perfectly acceptable.
Now we need a sample file to use to force calibre to create its database. This command will grab the freely available "Hearts of Darkness" from Project Gutenberg. Feel free to grab whatever you like:
sudo wget http://www.gutenberg.org/ebooks/219.epub.noimages -O heart.epub
Take note of where the file 'heart.pub' is located. I will assume it is in /mnt/manual_import. Whatever directory you choose, life is simpler if you have only one sample epub in there. Next, issue the following command:
sudo xvfb-run calibredb add /mnt/manual_import/* --library-path /mnt/ebooks/ebooks
Change the two directories that start with "/mnt" to your location of heart.epub that you just downloaded and the location where you want your calibre database.
Calibre will run just enough to create a database. The computer should take a few seconds and then come back with "Added book ids: 1". If you look in your library folder, there should be a folder labelled 'Joseph Conrad' (or the author of the book you downloaded) as well as a file named metadata.db.
So now we have our basic database. Some people are leaving us now, as that's a key sticking point. Next step is to verify that the server works. Enter the following command: "sudo calibre-server --port=8180 --enable-local-write /mnt/ebooks/ebooks" Then open up a browser and go to "http://192.168.1.100:8180". You should be able to 'browse' around a bit, seeing your massive one author and single book. That's enough. Go back to the screen where you last were at the command prompt, and press control-c to end the task.
We are going to have some logging in our install. Create the log file and set permissions with these commands: "sudo touch /home/librarian/logs/calibre.log && sudo chown -R librarian:librarian /home/librarian/logs/calibre.log"
We will have separate users for our install. It's not strictly necessary now, but might be down the road.
Create the user database and enter your first user by entering this: "sudo calibre-server --userdb /home/librarian/.config/calibre/server-users.sqlite --manage-users"
Create a library user. We assume username "librarian" and password "password" for this example. Don't type the quotation marks. In addition, give this user rights to all libraries in case you added another. Add another user if you like and provide credentials as well as what library you want that user to have access to.
Next we will need a service file to get calibre-server running at every boot. Using your favorite text editor, edit /etc/systemd/system/calibre-server.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=calibre content server #this can be anything you want After=remote-fs.target #this prevents calibre from starting until after network shares are mounted. If you are storing everything locally, change remote to local [Service] Type=simple User=librarian Group=librarian #previous two lines should reflect the name of the user and group you set above ExecStart=/usbin/calibre-server \ #this should be your calibre executable. You can display it by typing "which calibre-server" at the command prompt. /mnt/ebooks/ebooks/ \ #your library location --enable-auth \ #if you set up authentication as we did. If you REALLY don't want it, delete previous line or comment it out --userdb="/home/librarian/.config/calibre/server-users.sqlite" \ #location of the database we set above --log="/home/librarian/logs/calibre.log" \ #location of the log file we set above --max-log-size=2 #maximum size of the log in megabytes Restart=on-failure #If it crashes or has certain problems, it will try to restart RestartSec=30 #Tunes restarting of the service [Install] WantedBy=multi-user.target #We only want this if we are running services. Not in a single user mode for system. Even if you are the only user, it has nothing to do with this line. Don't touch unless you know what you're doing.Reload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start calibre-server"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status calibre-server" or "ps ax | grep calibre" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like:
Active: active (running)Stop the service with "systemctl stop calibre-server". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart calibre-server" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable calibre-server". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
You can go read your copy of Hearts of Darkness (a solid book, btw), take a rest, or forge on.
Install calibre-web (optional but recommended)This is completely optional but oh so desireable. As good as what calibre does, the author is not as good at UX as he is at other things. The marketplace of ideas stepped in and provided us with calibre-web. It is simply a different front end to calibre. If you like the basic server, you can skip this section.
Download a copy of the software. Currently located at https://github.com/janeczku/calibre-web/archive/master.zip. easiest way is to change to the /srv/ directory and type "wget https://github.com/janeczku/calibre-web/archive/master.zip" and hit enter. Then 'unzip master.zip'. There is now a directory named "calibre-web-master". Change it to "calibre-web" with "mv calibre-web-master calibre-web". Then assign ownership of this folder to your librarian with "chown -R librarian:librarian calibre-web"
Change into that directory. At this point you can largely follow the instructions here, beginning at step 3: https://github.com/janeczku/calibre-web/wiki/How-To:Install-Calibre-web-(-Python3-)-in-Linux-Mint-20---Linux-Mint-19-in-Linux-Mint-20---Linux-Mint-19).
- 1Install requirements with "sudo python3 -m pip install --system --target vendor -r requirements.txt"
- Run calibre-web with "sudo -u librarian python3 /srv/calibre-web/cps.py"
- Leave it running and do not close the terminal.
- Go to "http://192.168.1.100:8083" in your browser. You login username is admin and password is admin123
At this point you can setup the startup script or you can keep setting up calibre-web. The startup script will be used even if you have to wipe this out and reinstall what you have so far. OTOH, you won't have to bother with the startup script if you decide you hate the interface and don't want it.
Walk through the setup wizard, filling in as much information as you can. If you collected the right information regarding paths and filenames you should have it all above.
A few suggestions:
- Assign at least one other admin user in case you forget the password after changing it from 'admin123'.
- Decide which software is going to take 'lead' for importing books, especially manual imports. I chose LazyLibrarian because it pings calibre which backfills calibre-web. The other options would require more manual intervention from time to time. Not to say that this is free of it. Oh no, the metadata is too bad for that to be possible.
- If you have a Kindle, set up email to Kindle. You'll need to look up the address on Amazon's site. You'll need an email sender. (I use Google, which will require you to setup an application password. Searching "gmail application specific password" should get you to directions for that.
Next we will need a service file to get calibre-web running at every boot. Using your favorite text editor, edit /etc/systemd/system/calibre-web.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=Calibre-Web #any descriptive name you like After=remote-fs.target #this prevents calibre from starting until after network shares are mounted. If you are storing everything locally, change remote to local [Service] Type=simple User=librarian Group=librarian #previous two lines should reflect the name of the user and group you set above ExecStart=/usbin/python3 /srv/calibre-web/cps.py #determine the 'python' part by typing "which python3" at the command line. The cps.py part will be in the directory where everything is installed for calibre-web WorkingDirectory=/srv/calibre-web/ #can be changed to /home/librarian/calibre-web after creating the directory, but specifying this one makes installation and cleanup very tidy. [Install] WantedBy=multi-user.target #We only want this if we are running services. Not in a single user mode for system. Even if you are the only user, it has nothing to do with this line. Don't touch unless you know what you're doing.One other item of note. If you are keeping calibre-web, you should change your /etc/systemd/system/calibre-server.service file. The line saying "After" should be edited to read "After=calibre-web.service remote-fs.target" for network shares or "After=calibre-web.service local-fs.target" for local data. This makes sure that calibre-web starts firsts, calibre-server second. If it happens the other way around, calibre-web will not be able to access the database.
Reload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start calibre-web"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status calibre-web" or "ps ax | grep calibre-web" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like "Active: active (running)".
Stop the service with "systemctl stop calibre-web". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart calibre-web" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable calibre-web". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
Again, if you prefer the other interface, this one is optional. You can 'uninstall' it at this point by deleting /srv/calibre-web/ and going on about your life.
You can go read your copy of Hearts of Darkness (a solid book, btw), take a rest, or forge on.
Install lazylibrarianSwitch to /srv or wherever you want your installation executables and configs to go. Get the current source by entering the command: "git clone https://gitlab.com/LazyLibrarian/LazyLibrarian.git". This should create a directory named LazyLibrarian in the /srv directory. Start the program by running "python LazyLibrarian.py -d". If it crashes or provides errors, you probably are missing some required libraries. Double check the list above.
Cancel the program with control-c. Set ownership of the directory with "chown -R librarian:librarian /srv/LazyLibrarian". Start the program again, this time by running "sudo -u librarian python LazyLibrarian.py -d". Open a browser window and go to http://192.168.1.100:5299. Cancel the program with control-c. If you saw something, we need to make it start up automatically. If it didn't start or you have errors, now is the time to fix them.
We will need a service file to get lazylibrarian running at every boot. Using your favorite text editor, edit /etc/systemd/system/lazylibrarian.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=LazyLibrarian After=network.target [Service] ExecStart=/usbin/python3 /srv/LazyLibrarian/LazyLibrarian.py Type=simple User=librarian Group=librarian Restart=on-failure [Install] WantedBy=multi-user.targetReload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start lazylibrarian"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status lazylibrarian" or "ps ax | grep lazylibrarian" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like "Active: active (running)".
Stop the service with "systemctl stop lazylibrarian". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart lazylibrarian" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable lazylibrarian". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
Now it's time to configure LazyLibrarian.
Between each tab and subtab on the setup, hit save. It's easy to get lost and forget what you've done, so save often. All that will happen is some errors will get thrown because we won't really have this configured enough to work until 75% done. Similarly, if there's a 'test' button near data you enter, try it. If it throws an error at this stage, it almost certainly won't work for real. Better to fix now than hunt bugs later.
Switch to the config tab in the browser. It's the one with the gear icon. The first subtab is interface. Server details should be blank. Under logs, enter a location for a log file. "/srv/LazyLibrarian/Logs" works well if not already selected. Screenlog should be 500, files set to 10. 99% of people use the bootstrap skin (madeup statistic, but most screenshots online use it.) In the bottom right, untick magazines and comics if you aren't using those features. I'll discuss only ebooks and audiobooks. Most of these settings are personal preference. Set the proxy if your system needs one to reach the internet.
The next subtab is 'Importing'. First column, 'Information Sources'. Easiest source is a GoodReads API key. Go to that site, set it up, and copy the key. (If you don't have one, go to this link https://www.goodreads.com/api/keys provide the required information only, and it will provide the key). Do not enable 'GoodReads Sync' at this time. It's going to require reading and planning. I don't use it because I don't care if GoodReads tracks what I've read. I do care about getting want lists out of GoodReads and we'll do that elsewhere.)
Next is file formats. For each of the three boxes, enter a comma separated list of the file formats you want for a given category. "epub, mobi, pdf" is good for ebooks. The converters and process is most mature. I haven't gotten anything else to work. Maybe some day. Audiobooks works with mp3. I'm trying m4b, but haven't completed my testing with my stack. For now, stick with mp3. Magazines I have no opinion on except that pdfs are common. All of the checkboxes below should be blank for now. After your testing and you are satsified, I suggest adding the checkmarks for the two blacklist options. It will cut down on reloading the same bad files over and over.
Finally, language. Set this for your country. I'm an American English speaker, so I use "en, eng, en-US, en-GB, Unknown". You may not want Unknown unless you are having trouble getting books that should be available in your selected languages. The date display options are personal preference. "$m-$d-$Y" would be typical American date nomenclature. "$Y-$m-$d" probably more popular among Europeans.
Next tab is Downloaders. In this, I'm using SABnzbd+ and qBitTorrent.
For SABnzbd+, setup is straightforward. Enter your SABnzbd+ host's location and port. Credentials for the SABnzbd+ server (not your Usenet provider) and the api key. The API key can be found by clicking the gear icon in SABnzbd+ and then the 'General' tab. Get the api key, not the NZB key. SABnzbd+ should be setup with categories. ebooks should have their own category with a particular location for completed downloads. I have this setup, and the category is 'ebooks' which you enter here. 'Delete from sabnzbd history' is the only ticked box in this column.
For qBitTorrent, setup is pretty similar. Enter your qBitTorrent host's location and port. Enter credentials if needed. Provide category name. The download directory is where the torrent client saves files, but as seen by the lazylibrarian host. If you followed along, this should be '/mnt/downloads'. 'Use Torrent Blackhole' is the only UNticked box in this column.
Providers is the next tab. The content will depend on where you are looking for ebooks.
Priority doesn't have to be set. Use it to favor some providers (they have higher quality books for example) and disfavor others. A provider with a higher score/rating will be used over a lower scored one if the search results are scored at the same value.
Newznab generally provides Usenet searches. Your provider can provide the URL and the key.
Torznab is a way to interface to various torrent search engines using Jackett. Setting that up is beyond the scope of this document. If you've set it up, you should know how to get the data that LazyLibrarian needs here.
RSS/Wishlist feeds are, honestly, an odd little beast. They perform two functions. One is to periodically update a list of torrents available from certain trackers. If you know you need this, enter the rss feed for the url here. Of more interest is the ability to use these as sources for wanted books. If the rss feed is from GoodReads, Amazon, New York Times or Listopia, it will grab that list of books, begin searching, and then download them. I use this for my GoodReads want sync. Find/create a bookshelf on GoodReads. Populate that shelf. Then click on the shelf to show the list. At the bottom of the page, there is a small link labelled 'RSS'. Copy that link. It will be something like: "https://www.goodreads.com/review/list_rss/ANIDENTIFIER?key=AWHOLEBUNCHOFSTUFFTHATCOULDBEUSEDTOIDENTIFYME&shelf=to-read" except the all caps parts will be some identifying code. Paste that link into the RSS URL field in LazyLibrarian. Now, shortly after you add an item to this list in GoodReads, LazyLibrarian will notice and look for the book.
Torrent providers are built in torrent searches. These aren't all always working and or available. Use as needed.
IRC is probably the easiest provider to configure. Most of the time. 'Name' is a simple description. 'Server' is the server hostname, such as 'irc.irchighway.net' or 'irc.undernet.org'. Channel is just that: the name of the channel, including the octothorpe, such as '#ebooks'. The botnick and botpass are fields for servers where you can reserve a bot name. You'll have to look at your irc server and see if this is the case. If so, register the name and password, and enter the credentials here. This isn't universally allowed.
At the bottom of the page is a button marked 'Blocked Providers' There probably are not any right now. As you use LazyLibrarian, if the software encounters issues with a provider, it uses the list here to throttle that connection. If you've fixed something that is paused/throttled/blocked, just come here, open the list, and turn it off. It automatically turns back on if needed.
Install booksonic (optional. Recommended for audiobooks)Booksonic is a fork of airsonic and runs under java. It serves audiobooks. If not interested, skip it. There are a couple of dependencies, a java runtime and ffmpeg. If installing from scratch, the following command will install them: 'apt install openjdk-8-jre ffmpeg'. There have been a few changes to the development of booksonic since inception. At the time of this writing, download links can be found at: https://booksonic.org/download.
Switch to /srv or wherever you want your installation executables and configs to go. Create a directory named 'booksonic'. Set ownership of the directory with "chown -R librarian:librarian /srv/booksonic". Change into that directory. Download the .war file from the link above. Do not get the 'legacy' link. At the time of this writing, the command to do that is "wget https://github.com/popeen/Booksonic-Aireleases/download/v2009.1.0/booksonic.war" You can quickly test your install by running " java -jar booksonic.war -Dserver.port=4040" and visiting "http://192.168.1.100:4040". If it crashes or provides errors, you probably are missing some required libraries. Double check the list above. If everything looks ok, cancel the program with control-c. delete everything in the /srv/booksonic direct except the .war file. If you accidentally deleted everything, just download a new copy.
Next we will need a service file to get calibre-web running at every boot. Using your favorite text editor, edit /etc/systemd/system/booksonic.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=Booksonic service [Service] WorkingDirectory=/srv/booksonic ExecStart=/usbin/java -jar /srv/booksonic/booksonic.war #There are a multitude of options here for setting memory usage, ports, etc. Using #this, the url you will visit is http://192.168.1.100:8080. User=librarian Group=librarian Type=simple Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.targetReload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start booksonic"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status booksonic" or "ps ax | grep booksonic" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like "Active: active (running)".
Stop the service with "systemctl stop booksonic". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart booksonic" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable booksonic". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
ConclusionNow you should have a working install of calibre, calibre-web, lazylibrarian, and booksonic. Go into booksonic, add an author, and add a book. I've found searching for a book using ISBN is the fastest. When you add that book, if the net gods are smiling on you, your system will locate them, download them, and transfer them to calibre. If you chose an audiobook, the same thing should happen except that your book will be available in booksonic.
You will have to determine the legalities moralities of any of this for yourself and your country.
One problem you will encounter is horrible file naming and metadata. Everyone has their own idea about what cataloguing is best, and the files you download may not work well with the programs we've installed. Honestly, their authors have done fantastic work dealing with a very tricky problem. If you find value in this guide and there is interest, I will try to write some shorter guides about how to deal with metadata and other common problem areas encountered with this tool stack.
[A Fractured Song] - Chapter 59 - Fantasy, Isekai (Portal Fantasy), Adventure
Teaser: The Battle of Freeburg is over and they've held the castle. It's time for a victory celebration, where Frances makes a terrible discovery.
Story Summary: After years of beatings and neglect from her parents, 13-year old Frances was summoned with her entire class to the fantastical world of Durannon to fight the monsters invading the human kingdoms and defeat the "Demon King." If she succeeds, she might have the home she never had. But if she can't overcome the trauma and self-loathing inflicted on her by her abusive parents, Frances will die, and be summoned back to the home she escaped, on the day that she left.
[The Beginning] [<=Chapter 58] [Chapter Index and Blurb] [Chapter 60=>]
[Map of Durannon]
This chapter was pre-read by u/totallyundescript.
Want to hang? Join the Discord Community!
With the Battle of Freeburg over, the Otherworlder heroes were invited to a feast by Martin’s mother, Countess Esther of Conthwaite. The orc prisoners that had been taken, were transferred to the custody of the Royal Army, and the Fortress of Freeburg was re-garrisoned by, hopefully, more loyal troops.
Apparently, as far as feasts went, this one was somewhat smaller than usual, but that seemed to be the case with the war being so fierce. Still, there was apparently going to be dancing and entertainment.
And that was why Martin was taking Frances and Elizabeth to the tailor’s shop. Elizabeth had no suitable clothes for the feast, which Martin saw as a travesty. Frances did, having brought with her one of her nicer dresses, a light-blue affair with a high collar. The moment she tried it on, however, she realized that it was much tighter in certain places.
She’d been downcast with embarrassment, until Elizabeth and Martin, examining her in her dress, reached a unanimous conclusion.
“You’re not getting fatter, Frances,” Martin had said in a very officious tone.
Elizabeth had nodded. “The dress is tighter at the arms, around the chest, and it’s too short, ill-fitting over your hips. You’re growing.”
“Really?” Frances had whispered.
“Yeah, it just needs some adjustment.” Elizabeth had giggled with glee. “We’re going on a shopping trip!”
The tailor had indeed agreed with her friends’ opinion. And so, after getting their measurements, the three friends bought sandwiches at a streetside hawker and started to walk through the town’s streets.
Martin’s home was the castle Macedin, the seat of all the Conthwaite lords and ladies, but he spent much of his childhood in its adjoining town of Macedin’s Rest. A bustling, busy town on a rise just under the castle, it had winding streets that zig-zagged up and down, with houses balancing on uneven slopes. The coming fall turned the leaves brown and scattered them onto the cobblestone roads, making the town incredibly picturesque.
The knight led them to what he claimed was the best spot in the town. A small patch of wild garden stuck between two warehouses, broken by huge boulders, with scraggly trees growing between them. It loomed over the valley of Conthwaite, allowing the three to just appreciate the view of the beautiful valley.
“So, are you heading off to Salpheron next?” Martin asked.
“Actually, Edana said that we’re going to travel to the city of Erlenberg. So she’s coming to Conthwaite to meet me first and stay a few days.” Frances bowed her head. “She said she’s arriving tomorrow, or really late tonight. But I… I’m sure we’ll see each other again, soon.”
“We can keep up by writing, and through mirror messages. When I get the opportunity, I’ll ask to visit you,” Elizabeth said.
Martin nodded. “It’ll be easier than you might think. With fall coming, and winter soon after, I’m pretty sure we will. It’s too late in the year for anybody to embark on a new campaign. It’ll be a good time for everybody to rest.”
Elizabeth chuckled. “I don’t think I will get much time to rest, though. Igraine said she’s been more than satisfied with my performance and said she’s ready to begin my training. I’m going to join her at Leipmont Forest. I… sense she’s going to go hard on me.”
“Yes, but she is a really kind person. She won’t ever let you get hurt,” said Frances, giving her friend a reassuring smile.
Elizabeth nodded slowly, with a bit of doubt, but also understanding. Mostly because she did sense that Igraine was a good person, but hadn’t seen much of the side that Frances was describing.
“What are you doing in Conthwaite, Martin?” Elizabeth asked.
“Administrative work. We need to bring in the last harvest before winter arrives and then there are supplies to be prepared for the next year’s campaigns. With my sister across the continent in Roranoak, fighting with the Erisdalian Expeditionary Force, it falls to me to help my mother ready Conthwaite for the winter.” He sighed. “I wish you could spend winter with us. There are evening dances, board games, and other activities to pass the time. At least you’ll both be here for tonight’s feast and dance.”
“We had those too in Salpheron. Not the dances, though.” Frances blinked and her eyes widened. “Oh no!”
“Frances? What’s wrong?” Martin asked, alarmed at the panic in the mage’s voice. Elizabeth sprang to her feet, ready to rush to Frances’s side.
“I don’t know how to dance!” Frances exclaimed.
Martin blinked owlishly and was blindsided by Elizabeth’s panicked scream. “Oh no! Martin, you’ll have to teach us!”
The knight pulled himself to his feet, confused. “Wait, hold up, you don’t know how to dance?”
“No, we weren’t taught. I mean, we were taught some dancing in our high school, but that was an experience everybody wanted to forget.” Elizabeth grimaced. “I sucked. Clomping around with my big feet and long legs. I nearly dragged my partners off their feet.”
She hesitated for a moment. Frances reached out and touched her friend’s shoulder. “I just remember you seemed to actually enjoy yourself, which was nice. I enjoyed dancing with you when we were paired.”
Elizabeth blinked. “We danced? Wait, why were we paired? They were pairing boys with girls.”
Frances swallowed. “We had more girls than boys for that class… and not a lot of people wanted to touch Foul Francey.”
Elizabeth’s jaw unhinged for a second and she growled. “Right, that’s it, we’re learning how to dance properly, even if we’ll be dancing between the three of us. Martin—” she raised her hands in as best of an imitation of a dance posture as she could think “—instruct us please.”
Martin snorted, but his lips were set in a determined smile, and he had drawn himself up straighter. Extending his hands, he reached out and took Elizabeth’s. “Right, watch closely, Frances. To start with, this is not how you hold someone. There are actually no male and female parts in Erisdalian dance. We just have a leader and a follower. For the moment, we’re going to learn a simple…”
It was so that when it finally came time for the feast, they felt far more comfortable. After all, they knew that when the dance portion came, they wouldn’t be embarrassing themselves too much.
The feast was glorious. Roast pork and chicken, sausages and mash, fresh vegetables, steamed pork and vegetable buns that seemed unique to Conthwaite, and lots of Conthwaite beer. Then there were the desserts. Cakes, pastries, tarts and pies that the Otherworlders and the Erisdalian Rangers stuffed themselves with.
All the while, they watched a play put on. A comedy that nobody really got the plot of, but it had most in stitches by the end, as it involved some amazing stunt work and pratfalls. France suspected that there was a mage assisting things behind the scenes because some of the falls the costumed actors took, looked rather painful, or downright impossible. There was one large performer who bounced across the floor like a ball, and yet somehow came out of the bounce to land perfectly on his feet.
Then the dancing came.
All the Rangers celebrating with them knew how to dance. The Otherworlders mostly simply tried to follow along as the musicians played a lively jig.
Sure enough, Frances and Elizabeth still were pretty bad at dancing, but they were much better than their classmates. Everybody laughed and giggled with each other, for nobody wanted to spoil the festive mood carried by the music.
Frances, for her part, stayed as far away from Jessica and Leila as possible. She was helped by her friends who lent their eyes to the task, whisking her aside if necessary.
Having danced their feet tired, the three retired to a small table where they were joined by Nicole and Jim.
“This is a fantastic party!” Nicole whooped, slamming herself down onto the bench.
Martin, grinning, offered a mug of beer. “More?”
“I think she shouldn’t,” stammered Jim, and Nicole, although grumbling, didn’t take the mug.
“It’s going to be very weird when we get back home and we can’t try any alcohol,” Nicole quipped.
“Mm-hmm! I wonder how our beer tastes in comparison to theirs?” Elizabeth mused as she caressed a mug. Everybody had decided that, given she was nearly fifteen anyway, she deserved a mug.
As the conversation continued and Frances listened, she felt a pang of sorrow. Because, aside from Martin, she knew that after they killed the Demon King her friends were going to go home, to Earth. She knew she was staying in Durannon and that when she died, she would die in Durannon. She’d never see Nicole, Jim, or Elizabeth ever again. And that was if all of them survived the war.
The emotions welled up so suddenly, so heavily in her chest that she sprang to her feet.
“I think I need a moment alone, everyone. I’m going to go for a bit of a walk.” Frances smiled when Martin and Elizabeth glanced at her with concern. “I’ll come back for the night games.”
“Alright. I will check up on you if you don’t show up, though.” Elizabeth waggled her finger at Frances as she said that, prompting both to chuckle.
“I’ll be right behind her,” said Martin with a grin. “I still need to introduce you both to my moms.”
Frances, still managing to smile, nodded and made her escape quick. She managed to just get out of the ballroom before her eyes moistened and her smile shattered. Staunching her eyes with her handkerchief, she made her way to a spot she noticed earlier.
Martin had given them a really long tour of Conthwaite Castle, a grand, yet, archaic-looking stone fortress that stood upon a hill of black granite. He’d also shown Frances a small greenhouse garden that was maintained in the castle.
In the night, lit only by some oil lamps, the leaves of the fronds and flowers cast broken shadows on the paved ground. Frances, still sniffling slightly, walked to where she recalled there was a sitting table and two chairs.
As she rounded a rather odd-looking frond that she made a note to ask Edana about later, she heard two people whispering. There was somebody here already. Disappointed, Frances turned to leave.
But then she heard something that made her blood freeze.
“I thought you gave Helias the plans! Told him every detail!”
“I did. But there was no possible way we could have known the Otherworlders would bypass every single trap and then drop a cliff on his army.”
Frances clamped her hands over her open mouth. She could not make a sound. Her head was screaming at her to run.
“Freeburg Castle fell to treachery two nights ago,” Edana’s voice echoed in her mind. The Great Tower had been trapped. They’d rigged the bridge to explode. They had an orc army ready to reinforce them. The whole plan was exposed. They had a traitor in their camp.
Or traitors, from the sound of it.
With small, light steps, Frances turned around and walked towards the exit. She didn’t have Alanna, her sword. She did have Ivy’s Sting, but she’d rather not fight. The important thing was to run, and get her news to someone.
But… she didn’t know who was talking. If she didn’t know that, she would have no idea how to identify the traitor. She needed to look at their faces.
Frances swallowed. That meant getting closer. Or… apprehending these traitors herself.
There was no time for further thought. Frances took a deep breath, steeled herself and drew Ivy’s Sting with her right hand, left one hitching up her dress.
“In any case, we need to get you all out of here. They know they have traitors in their midst. Hell, Edana Firehand is arriving tonight, if not tomorrow. If we wait any longer, we might not be able to extract.”
Frances thought the speaker sounded familiar, but there was no time to think. She had to act. She leapt out, her notes filling the greenhouse.
The two traitors were thrown backwards. One smashed into a bed of flowers, tulips she thought, and rolled head over heels.
Yet, somehow, the other yelled a word of power and landed on his feet with almost cat-like grace. He drew a wand himself.
Frances switched to a different set of chords, and mentally apologizing to Martin, directed the sunflowers that grew beside the stocky traitor to wrap around him. All the while, she began the process of casting her lightning spell.
But, as the sunflower stems wrapped themselves around the struggling traitor, human colored peach skin faded, giving way to a tan-coloured skin. A tail suddenly appeared, and the illusion, for that was what it was, shattered.
Frances found herself staring at an all too familiar trogre. His pointed ears alert, black eyes filled with anger.
“Timur?” she gasped, hesitating.
Timur blinked, but unlike Frances, he didn’t hesitate. He ripped his wand arm from his side and before Frances could react, he yelled a word of power. Frances felt the air in front of her expand and she was knocked backward. Her vision blurring, she hit the ground and slammed into what seemed like the trunk of a tree.
Tears filled her eyes as she scrabbled for balance. She felt surprise, fear and betrayal all at the same time, in a confused flux. Desperately she raised her wand and screamed a note, throwing all her power into it.
The keening noise that rang out shattered several panes of glass and everybody in the entire Conthwaite castle could hear it.
“Help! Traitors in the greenhouse— ”
Pain exploded across Frances’s cheek as something hard hit her and she knew nothing more.
But it was enough.
In a corner of the ballroom, Nicole and Jim were holding each other on a bench. Their lips were nearing for a kiss. The scream made them freeze and spring to their feet.
In the same ballroom. Elizabeth broke off from her dance with Martin and raced toward the direction of the noise. Martin bellowed orders for the guards to rally to him and to lock down the castle.
Igraine, at the top of a tower, quietly watching the half-moon with a tankard of wine in her hand, rolled off her borrowed couch and seized her sword.
In the stables, a white-robed figure with a green staff was just exiting her carriage. She was smiling eagerly, ready to meet with her dear student. Frances’s magically-magnified scream wiped the smile from Edana’s face. The pain in it sent cold horror straight into her chest and lent her speed as she ran towards the main castle building.
That was when he realized that the very pretty human mage, was actually a girl, of only fifteen. The cream-coloured silk dress had made her appear more mature. Timur’s eyes narrowed. The bruised face of the girl was known to him. He gently turned the girl’s face so he could examine it better.
Timur gasped and felt his heart sink as he realized who he’d just battered into unconsciousness. “Oh fuck. Oh fuck. Frances! Please be alive. Please be alive!” He slipped his finger underneath her chin to find her pulse and was relieved to feel that she was alive.
A human woman ran into the garden and cursed. “What the fuck happened—Russell!”
“I’m fine, Claudia!” muttered Russell, who was pulling himself up out of the flowerbed. “We were overheard. Prince Timur knocked her out.”
“Well she’s alerted the entire castle! Timur, slit her throat and let’s scatter!” Claudia hissed.
There was no way in hell he was going to slit Frances’s throat. Not after everything she’d done for him. Especially since he knew that if he killed her, he’d be sending her back to the monsters that were her parents.
It would be a fate worse than death. He could not imagine putting the kind, caring girl in front of him at their mercy. He would never forgive himself.
That, and he’d die shortly afterward because the magic she provided would stop keeping him alive.
But he couldn’t just leave her. It’d taken an Alavari agent weeks to cultivate the trust of Russell, Claudia and their traitor friends. Weeks of promising a life away from the war, land in Alavaria, and a way for them to escape their dreary lives as foot soldiers and servants. However, Timur didn’t have the same relationship that agent did. He was here only to help with the extraction. If he left Frances, he suspected they’d turn on him in an instant.
“No.” He forced a grin to his face, even if it brought a sour feeling to his lips. “This is Frances, beloved student of Edana Firehand. The only way we’re getting out of this alive is if we let her go, which I don’t think you want, or take her as a hostage.”
Claudia and Russell turned to each other, whispering briefly, before nodding.
“Yeah, good call. Take her to the safe room. They’ll be searching the castle for her, so you both need to lie low.” Claudia grimaced. “I hope you have that escape plan ready.”
“It is. Now let’s get out of here so we can actually use it,” said Timur evenly. Claudia helped Russell up and began to walk him out of the greenhouse. When she wasn’t looking, Timur gently picked up Frances in his arms, wincing as he realized she was still quite light.
“I’m sorry,” he whispered.
So on continuing notes on how I write A Fractured Song, let's talk about Frances and how I came up with this girl you all love so much. I'm also posting more notes here in a not-so-subtle nudge to get my patreons to ask me more questions for the upcoming Q&A.
I can't exactly pinpoint which came first, the plot of A Fractured Song or the character of Frances. I suspect they came together, which is usually what happens in my experience. However, I do know that Frances was inspired by a number of my favorite female fantasy characters. Actually I made a graph here: Link to graph. Tell me what you think of it.
But a TLDR: Lirael from Garth Nix's Old Kingdom Series, Alanna, Daine and Keladry from Tamora Pierce's Tortall Universe, Hermionie from JK Rowling's Harry Potter, and Twilight Sparkle from My Little Pony.
For the update question: What kind of heroines do you like to see in your fiction, or can you name your favorite heroine?