commit 70bb5d5a801428b0fb390abf79f19ffcf5e29c67 parent 0f9a31348079c0a061bcc194912e75cc1c07bc1f Author: breadcat <peter@minskio.co.uk> Date: Fri, 19 Jun 2020 12:23:15 +0100 Simple migration of existing posts to hugo format Diffstat:
A | content/posts/2019-new-years-resolutions.md | | | 43 | +++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/2020-new-years-resolutions.md | | | 43 | +++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/archived-movies.md | | | 599 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/archived-television.md | | | 173 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/archlinux-retroarch-guide.md | | | 64 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/automating-paperwork-payslips.md | | | 84 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/blotter-art-album-list.md | | | 73 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/borderlands-weapons.md | | | 300 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/brief-archlinux-installation-guide.md | | | 99 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/compacting-vdi-image.md | | | 25 | +++++++++++++++++++++++++ |
A | content/posts/compiling-bsd-tar-on-linux.md | | | 23 | +++++++++++++++++++++++ |
A | content/posts/compiling-snapraid.md | | | 34 | ++++++++++++++++++++++++++++++++++ |
A | content/posts/concatenating-pdf-files.md | | | 21 | +++++++++++++++++++++ |
A | content/posts/concatenating-videos-on-windows.md | | | 25 | +++++++++++++++++++++++++ |
A | content/posts/dumping-subtitles-using-ffmpeg.md | | | 23 | +++++++++++++++++++++++ |
A | content/posts/duolingo-streak-preservation.md | | | 37 | +++++++++++++++++++++++++++++++++++++ |
A | content/posts/ecrm1000.tfm-latex-issues.md | | | 35 | +++++++++++++++++++++++++++++++++++ |
A | content/posts/ffmpeg-pbx-conversions.md | | | 30 | ++++++++++++++++++++++++++++++ |
A | content/posts/flashing-skulls-bios-thinkpad-x230t.md | | | 46 | ++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/formatting-dumped-subtitles.md | | | 23 | +++++++++++++++++++++++ |
A | content/posts/gpt-formatting-drives-under-linux.md | | | 42 | ++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/kodi-watched-list-export.md | | | 29 | +++++++++++++++++++++++++++++ |
A | content/posts/libreelec-dowgrade-compatibility.md | | | 39 | +++++++++++++++++++++++++++++++++++++++ |
A | content/posts/manually-fixing-malformed-aac-bitstreams.md | | | 17 | +++++++++++++++++ |
A | content/posts/manually-formatting-mounting-and-using-hetzner-volumes.md | | | 60 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/notes-on-sorting-photos.md | | | 57 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/personal-vim-cheatsheet.md | | | 118 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/phone-link-speed-dials-to horizon-integrator.md | | | 84 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/ps1-iso-formats-conversion.md | | | 75 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/ps2-iso-compression-with-maxcso.md | | | 21 | +++++++++++++++++++++ |
A | content/posts/removing-acms-drm-epub.md | | | 16 | ++++++++++++++++ |
A | content/posts/resetting-passwords-chntpw.md | | | 31 | +++++++++++++++++++++++++++++++ |
A | content/posts/samsung-officeserv-serial-upgrade.md | | | 87 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/scraping-now-albums.md | | | 38 | ++++++++++++++++++++++++++++++++++++++ |
A | content/posts/selfhosted-password-manager.md | | | 45 | +++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/suitecrm-sql-csv-dump.md | | | 30 | ++++++++++++++++++++++++++++++ |
A | content/posts/swap-file-linux.md | | | 39 | +++++++++++++++++++++++++++++++++++++++ |
A | content/posts/unattended-installation-of-webp-codec.md | | | 45 | +++++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/upgrading-ubiquiti-routers-over-ssh.md | | | 43 | +++++++++++++++++++++++++++++++++++++++++++ |
A | content/posts/windows-10-network-share-guest-access.md | | | 18 | ++++++++++++++++++ |
A | content/posts/windows-diskpart-formatting.md | | | 20 | ++++++++++++++++++++ |
41 files changed, 2754 insertions(+), 0 deletions(-)
diff --git a/content/posts/2019-new-years-resolutions.md b/content/posts/2019-new-years-resolutions.md @@ -0,0 +1,42 @@ +--- +title: "2019 New Year's Resolutions" +date: 2019-01-07T09:19:00 +tags: ["health", "lifestyle", "lists"] +--- + +So long as I remember, I'll try to update this list at the end of the year, with what's been done and what hasn't. + +* ~~Bed by midnight~~ +* Cure Eczema +* Drink less alcohol +* ~~Finish Danish and update Norwegian Duolingo Courses~~ +* Idle steam cards +* ~~Paperwork sorted promptly~~ +* ~~Reach then maintain 71kg weight~~ Ruined by a December binge +* Store config files on GitHub +* Sunrise/Wake up lamp/bedside table +* ~~Laptop Linux~~ + +Hypothetical/2020 ones include: +* Cold(er/ish) showers + +* Desktop Linux +* Polyphasic sleep +* Start Crypto Daytrading +* Start to meditate +* Switch jobs +* Upgrade broadband connection/reduce price +* Use a VPN +* Workout Regimen: Weights, Walks, Push-ups, Pull-ups and Planks +* Finish Spanish Duolingo Course +* Finish Discworld Book Series + +Previous years completed resolutions are: +* ~~[Media directory logger](https://git.minskio.co.uk/cgit.cgi/logger/.git/)~~ +* ~~[One book a week](https://minskio.co.uk/reading-list/)~~ +* ~~Erase *stash*~~ +* ~~Export/Import chromium search engines~~ Negated via firefox bookmarks +* ~~Ketogenic diet~~ +* ~~Shave Head~~ + +** Updated 2020-01-02 ** +\ No newline at end of file diff --git a/content/posts/2020-new-years-resolutions.md b/content/posts/2020-new-years-resolutions.md @@ -0,0 +1,43 @@ +--- +title: "2020 New Year's Resolutions" +date: 2020-01-02T14:40:00 +tags: ["health", "lifestyle", "lists"] +--- + +Another year, another list. Here goes nothing. + +Continue to do: +* Bed by midnight <!-- weighted blanket, latex foam pillow --> +* Ketogenic diet +* [Media directory logger](https://git.minskio.co.uk/cgit.cgi/logger/.git/) +* [One book a week](/reading-list/) +* Paperwork sorted promptly + +New additions: +* 65kg weight +* Brush teeth twice daily <!-- Sonicare electric toothbrush --> +* Config files to git repo +* Cure eczema +* Desktop Linux +* Document server processes more +* ~~Dry January~~ +* Finish started works (Discworld, Culture, Mortal Engines, etc) +* Idle steam cards +* Improve food journal and weight scripts +* Revert seedbox back to Hetzner using VPN +* Robust (and documented) backup process +* ~~Run 5K at the gym in under 40 minutes~~ +* Workout Regimen <!-- Weights, Walks, Push-ups, Pull-ups and Planks --> + +Potentials additions: +* Colder/ish showers +* Configure router to use a VPN +* ~~Coreboot Thinkpads~~ +* OpenWRT Wireless AP <!-- https://openwrt.org/toh/hwdata/tp-link/tp-link_tl-wa801nd_v5 / openwrt-18.06.5-ar71xx-tiny-tl-wa801nd-v3-squashfs-factory --> +* Crypto Daytrading/penny stocks +* Erase *stash* +* Finish Spanish duolingo course +* House improvements +* Investigate shrooms +* Polyphasic sleep +* Switch jobs diff --git a/content/posts/archived-movies.md b/content/posts/archived-movies.md @@ -0,0 +1,599 @@ +--- +title: Archived Movies +tags: ["media", archive"] +date: 2018-01-01T01:00:00 +lastmod: 2020-06-14T02:24:00 +--- + +Last updated on {{ .Param.lastmod }}. + +* [REC] (2007) +* [REC]² (2009) +* ¡Three Amigos! (1986) +* 10 Cloverfield Lane (2016) +* 2 Fast 2 Furious (2003) +* 21 Bridges (2019) +* 21 Jump Street (2012) +* 22 Jump Street (2014) +* 28 Days Later (2002) +* 30 Minutes or Less (2011) +* 48 Hrs. (1982) +* A Cure for Wellness (2017) +* A Monster Calls (2016) +* A Quiet Place (2018) +* A Scanner Darkly (2006) +* A Simple Favor (2018) +* A Tale of Two Sisters (2003) +* Abbott and Costello Meet Frankenstein (1948) +* Abduction (2011) +* Abominable (2019) +* Ad Astra (2019) +* Addams Family Values (1993) +* Æon Flux (2005) +* Air (2015) +* Airplane! (1980) +* Aladdin (2019) +* All Dogs Go to Heaven (1989) +* All the Money in the World (2017) +* Allegiant (2016) +* American Beauty (1999) +* An American Werewolf in London (1981) +* An Honest Liar (2014) +* Angel Has Fallen (2019) +* Annabelle (2014) +* Annihilation (2018) +* Anon (2018) +* Ant-Man (2015) +* Ant-Man and the Wasp (2018) +* Apollo 18 (2011) +* Aquaman (2018) +* Armour of God (1986) +* Arrival (2016) +* Assassin's Creed (2016) +* Atlantis: The Lost Empire (2001) +* Atomic Blonde (2017) +* Avengers: Age of Ultron (2015) +* Avengers: Infinity War (2018) +* Await Further Instructions (2018) +* Baby Driver (2017) +* Bad Boys for Life (2020) +* Bad Times at the El Royale (2018) +* Battle Royale (2000) +* Battleship (2012) +* Baywatch (2017) +* Before I Wake (2016) +* Behind the Curve (2018) +* Beyond the Gates (2016) +* Bird Box (2018) +* Birds of Prey (and the Fantabulous Emancipation of One Harley Quinn) (2020) +* Black Dynamite (2009) +* Black Magic M-66 (1987) +* Black Mirror: Bandersnatch (2018) +* Black Panther (2018) +* Black Swan (2010) +* Blackfish (2013) +* Blade of the Immortal (2017) +* Blade Runner (1982) +* Blade Runner 2049 (2017) +* Blazing Saddles (1974) +* Bliss (2019) +* Bob Lazar: Area 51 and Flying Saucers (2018) +* Boy (2010) +* Bright (2017) +* Brightburn (2019) +* Bugsy Malone (1976) +* Bumblebee (2018) +* Captain America: Civil War (2016) +* Captain America: The First Avenger (2011) +* Captain America: The Winter Soldier (2014) +* Captain Phillips (2013) +* Captive State (2019) +* Carnival of Souls (1962) +* Cars 3 (2017) +* Cartel Land (2015) +* Cashback (2006) +* Castle in the Sky (1986) +* Cats (2019) +* Catwoman (2004) +* Cell (2016) +* Changeling (2008) +* Charlie's Angels (2019) +* CHiPS (2017) +* Christine (1983) +* Chronicle (2012) +* Clue (1985) +* Coco (2017) +* Code 8 (2019) +* Contact (1997) +* Contagion (2011) +* Countdown (2019) +* Cowboys & Aliens (2011) +* Crawl (2019) +* Creed (2015) +* Creepshow (1982) +* Creepshow 2 (1987) +* Cujo (1983) +* DamNation (2014) +* Dark Phoenix (2019) +* Dark Shadows (2012) +* Dark Water (2002) +* Deadpool (2016) +* Deadpool 2 (2018) +* Deep Dark (2015) +* Demolition Man (1993) +* Derren Brown: Pushed to the Edge (2016) +* Divergent (2014) +* Divine Access (2015) +* Doctor Strange (2016) +* DodgeBall: A True Underdog Story (2004) +* Dolittle (2020) +* Don Jon (2013) +* Don't Breathe (2016) +* Don't Look Now (1973) +* Doom: Annihilation (2019) +* Dora and the Lost City of Gold (2019) +* Dredd (2012) +* Drive (2011) +* Drunken Master (1978) +* Duck Soup (1933) +* Dunkirk (2017) +* Elf (2003) +* Encounters at the End of the World (2007) +* Ender's Game (2013) +* Equilibrium (2002) +* Escape Plan (2013) +* Escape Room (2019) +* Escape Velocity (1999) +* Event Horizon (1997) +* Ex Machina (2015) +* eXistenZ (1999) +* Extinction (2018) +* Fantastic Mr. Fox (2009) +* Fantasy Island (2020) +* Fast & Furious (2009) +* Fast & Furious 6 (2013) +* Fast & Furious Presents: Hobbs & Shaw (2019) +* Fast Five (2011) +* Ferdinand (2017) +* Final Score (2018) +* Finding Dory (2016) +* Finding Nemo (2003) +* Flatliners (1990) +* Flatliners (2017) +* Flightplan (2005) +* Force Majeure (2014) +* Frailty (2001) +* Frank (2014) +* Frequency (2000) +* Friday the 13th (1980) +* Frozen (2013) +* Frozen II (2019) +* Furious 7 (2015) +* Futurama: Bender's Big Score (2007) +* Futurama: Bender's Game (2008) +* Futurama: Into the Wild Green Yonder (2009) +* Futurama: The Beast with a Billion Backs (2008) +* Fyre (2019) +* Fyre Fraud (2019) +* Game Night (2018) +* Genesis (2018) +* Geostorm (2017) +* Gerald's Game (2017) +* Get Out (2017) +* Ghost in the Shell (2017) +* Godzilla (1998) +* Godzilla (2014) +* Gone Girl (2014) +* Good Morning, Vietnam (1987) +* Goodnight Mommy (2014) +* Goosebumps 2: Haunted Halloween (2018) +* Gravity (2013) +* Greed (2020) +* Greta (2019) +* Guardians of the Galaxy(2014) +* Guardians of the Galaxy, Vol. 2 (2017) +* Hacksaw Ridge (2016) +* Halloween (1978) +* Happy Death Day (2017) +* Happy Death Day 2U (2019) +* Hard Boiled (1992) +* Hardcore Henry (1978) +* Harry Potter and the Chamber of Secrets (2002) +* Harry Potter and the Deathly Hallows: Part 1 (2010) +* Harry Potter and the Deathly Hallows: Part 2 (2011) +* Harry Potter and the Goblet of Fire (2005) +* Harry Potter and the Half-Blood Prince (2009) +* Harry Potter and the Order of the Phoenix (2007) +* Harry Potter and the Philosopher's Stone (2001) +* Harry Potter and the Prisoner of Azkaban (2004) +* Have a Good Trip: Adventures in Psychedelics (2020) +* Heathers (1988) +* Hellboy (2019) +* Her (2013) +* Hereditary (2018) +* Hex (2019) +* Hidden (2015) +* Highlander (1986) +* Highlander 2: The Quickening (1991) +* Home Alone (1990) +* Home Alone 2: Lost in New York (1992) +* Hot Fuzz (2007) +* Hot Rod (2007) +* Hotel Artemis (2018) +* House of Flying Daggers (2004) +* House on Haunted Hill (1959) +* How to Train Your Dragon: The Hidden World (2019) +* Howl's Moving Castle (2004) +* Hunt for the Wilderpeople (2016) +* I Don't Feel at Home in This World Anymore (2017) +* I Kill Giants (2018) +* Imperium (2016) +* In the Mouth of Madness (1994) +* In the Shadow of the Moon (2019) +* In the Tall Grass (2019) +* In Time (2011) +* Independence Day(1996) +* Independence Day: Resurgence (2016) +* Inside Man (2006) +* Inside Out (2015) +* Insurgent (2015) +* Into the Abyss (2011) +* Invader ZIM: Enter the Florpus (2019) +* Iron Man (2008) +* Iron Man 2 (2010) +* Iron Man 3 (2013) +* Isle of Dogs (2018) +* It (2017) +* It Follows (2015) +* Italian Spiderman (2007) +* Jaws (1975) +* Jigsaw (2017) +* John Wick (2014) +* John Wick: Chapter 2 (2017) +* John Wick: Chapter 3 - Parabellum (2019) +* Johnny English Reborn (2011) +* Johnny English Strikes Again (2018) +* Johnny English(2003) +* Jojo Rabbit (2019) +* Joker (2019) +* Jumanji: The Next Level (2019) +* Jumanji: Welcome to the Jungle (2017) +* Jumper (2008) +* Ju-on: The Grudge (2002) +* Jupiter Ascending (2015) +* Justice League (2017) +* Kiki's Delivery Service (1989) +* Kill Bill: Vol. 1 (2003) +* Kill Bill: Vol. 2 (2004) +* Kingsman: The Golden Circle (2017) +* Kingsman: The Secret Service(2015) +* Klown (2010) +* Knowing (2009) +* Kong: Skull Island (2017) +* Krampus (2015) +* Krampus: The Reckoning (2015) +* KSI: Can't Lose (2018) +* Land of Mine (2015) +* Landlock (1995) +* Legend (2015) +* Lessons of Darkness (1995) +* Let's Be Cops (2014) +* Life (2017) +* Lifeforce (1985) +* Lilo & Stitch (2002) +* Limitless (2011) +* Little Monsters (2019) +* Lockout (2012) +* Logan (2017) +* Logan Lucky (2017) +* Looper (2012) +* Lost in Space (1998) +* Lucy (2014) +* Ma (2019) +* Maleficent (2014) +* Maleficent: Mistress of Evil (2019) +* Mary and the Witch's Flower (2017) +* Maze Runner: The Scorch Trials (2015) +* Mechanic: Resurrection (2016) +* Memento (2000) +* Memories of Murder (2003) +* Men in Black: International (2019) +* Midsommar (2019) +* Mighty Morphin Power Rangers: The Movie (1995) +* Mindscape (2013) +* Misery (1990) +* Missing Link (2019) +* Mission: Impossible - Fallout (2018) +* Moana (2016) +* Modern Times (1936) +* Molly's Game (2017) +* Mom and Dad (2017) +* Money Monster (2016) +* Monster Trucks (2016) +* Monsters University (2013) +* Moonwalkers (2015) +* Morgan (2016) +* Mortal Engines (2018) +* mother! (2017) +* Murder on the Orient Express (2017) +* My Neighbor Totoro (1988) +* My Scientology Movie (2016) +* Mysterious Skin (2004) +* Mystery Men (1999) +* Nerve (2016) +* New Police Story (2004) +* Next Gen (2018) +* Night of the Living Dead (1968) +* Nine Miles Down (2009) +* Now You See Me (2013) +* Now You See Me 2 (2016) +* Oculus (2013) +* Once Upon a Time… in Hollywood (2019) +* One Hundred and One Dalmatians (1961) +* Onward (2020) +* Ouija (2014) +* Ouija: Origin of Evil (2016) +* Overlord (2018) +* Pacific Rim: Uprising (2018) +* Pan's Labyrinth (2006) +* Paprika (2006) +* Passengers (2016) +* Perfect Blue (1997) +* Pet Sematary (1989) +* Pete's Dragon (1977) +* Phantasm (1979) +* Pineapple Express (2008) +* Piranha (1978) +* Pirates of the Caribbean: At World's End (2007) +* Pirates of the Caribbean: Dead Man's Chest (2006) +* Pirates of the Caribbean: Dead Men Tell No Tales (2017) +* Pirates of the Caribbean: On Stranger Tides (2011) +* Pirates of the Caribbean: The Curse of the Black Pearl (2003) +* Pokémon Detective Pikachu (2019) +* Polar (2019) +* Police Story (1985) +* Power Rangers (2017) +* Predator (1987) +* Pretty Woman (1990) +* Princess Mononoke (1997) +* Prisoners (2013) +* Prometheus (2012) +* Pulse (2001) +* Ralph Breaks the Internet (2018) +* Rampage (2018) +* Ready or Not (2019) +* Red Sparrow (2018) +* Redline (2009) +* Replicas (2018) +* Repo! The Genetic Opera (2008) +* Resolution (2012) +* Rings (2017) +* RoboCop (2014) +* Robot & Frank (2012) +* RockNRolla (2008) +* Rogue One: A Star Wars Story (2016) +* Rosy (2018) +* Rumble in the Bronx (1995) +* Sausage Party (2016) +* Saw (2004) +* Saw II (2005) +* Saw III (2006) +* Saw IV (2007) +* Saw V (2008) +* Saw VI (2009) +* Saw: The Final Chapter (2010) +* Scary Stories to Tell in the Dark (2019) +* Science Fiction Volume One: The Osiris Child (2016) +* Scoob! (2020) +* Scott Pilgrim vs. the World (2010) +* Serenity (2019) +* Shazam! (2019) +* Sicario (2015) +* Sin City (2005) +* Sin City: A Dame to Kill For (2014) +* Skinwalker Ranch (2013) +* Skyscraper (2018) +* Sleepaway Camp (1983) +* Slender Man (2018) +* Solo: A Star Wars Story (2018) +* Sorry to Bother You (2018) +* Sound of My Voice (2011) +* South Park: Bigger, Longer & Uncut (1999) +* Spectral (2016) +* Spectre (2015) +* Spider-Man: Far from Home (2019) +* Spider-Man: Homecoming (2017) +* Spider-Man: Into the Spider-Verse (2018) +* Spies in Disguise (2019) +* Spirited Away (2001) +* Split (2017) +* Stalker (1979) +* Star Trek (2009) +* Star Trek Into Darkness (2013) +* Star Wars: The Force Awakens (2015) +* Star Wars: The Last Jedi (2017) +* Stephen King's It (1990) +* Stir of Echoes (1999) +* Street Fighter (1994) +* Streets of Fire (1984) +* Strong Island (2017) +* Sucker Punch (2011) +* Suicide Squad (2016) +* Super 8 (2011) +* Super Mario Bros. (1993) +* Super Troopers (2001) +* Superman: Red Son (2020) +* Supernova (2000) +* Swiss Army Man (2016) +* Tag (2018) +* The 15:17 to Paris (2018) +* The 5th Wave (2016) +* The Addams Family (2019) +* The Avengers (2012) +* The Book of Life (2014) +* The Boy (2016) +* The Broken (2008) +* The Changeling (1980) +* The Circle (2017) +* The Cloverfield Paradox (2018) +* The Conjuring (2013) +* The Conjuring 2 (2016) +* The Cottage (2008) +* The Dark Knight Rises (2012) +* The Dark Tower (2017) +* The Dead Don't Die (2019) +* The Dead Room (2015) +* The Death of Stalin (2017) +* The Divine Move (2014) +* The Emperor's New Groove (2000) +* The Endless (2018) +* The Exorcist (1973) +* The Faculty (1998) +* The Fast and the Furious (2001) +* The Fast and the Furious: Tokyo Drift (2006) +* The Fate of the Furious (2017) +* The Final Girls (2015) +* The First Purge (2018) +* The Florida Project (2017) +* The Fly (1986) +* The Fog (1980) +* The Fog (2005) +* The Foreigner (2017) +* The Girl on the Train (2016) +* The Girl Who Leapt Through Time (2006) +* The Girl with All the Gifts (2016) +* The Godfather (1972) +* The Good Dinosaur (2015) +* The Grand Budapest Hotel (2014) +* The Great Escape (1963) +* The Grudge (2004) +* The Grudge (2020) +* The Harmony Game (2011) +* The Haunting (1963) +* The Hobbit: An Unexpected Journey (2012) +* The House with a Clock in Its Walls (2018) +* The Hunger Games (2012) +* The Hunger Games: Catching Fire (2013) +* The Hunger Games: Mockingjay - Part 1 (2014) +* The Hunger Games: Mockingjay - Part 2 (2015) +* The Hunt (2020) +* The Imitation Game (2014) +* The Incredible Hulk (2008) +* The Incredibles (2004) +* The Innocents (1961) +* The Invisible Man (2020) +* The Invitation (2015) +* The Italian Job (1969) +* The Jacket (2005) +* The Jungle Book (2016) +* The Killer (1989) +* The Killing Zone (1999) +* The Lazarus Effect (2015) +* The Lego Movie (2014) +* The Lego Movie 2: The Second Part (2019) +* The LEGO Ninjago Movie (2017) +* The Lighthouse (2019) +* The Linguists (2008) +* The Lobster (2015) +* The Lost Boys (1987) +* The Lost City of Z (2017) +* The Man from Earth (2007) +* The Man from Earth: Holocene (2017) +* The Man from U.N.C.L.E. (2015) +* The Martian (2015) +* The Mechanic (2011) +* The Medallion (2003) +* The Meg (2018) +* The Mummy (2017) +* The Naked Gun 2½: The Smell of Fear (1991) +* The Naked Gun: From the Files of Police Squad! (1988) +* The Neon Demon (2016) +* The Nice Guys (2016) +* The Nightmare (2015) +* The One (2001) +* The Predator (2018) +* The Producers (1967) +* The Purge: Election Year (2016) +* The Raid (2011) +* The Raid 2 (2014) +* The Revenant (2015) +* The Ritual (2017) +* The Road to El Dorado (2000) +* The Rocketeer (1991) +* The Rocky Horror Picture Show (1975) +* The Room (2003) +* The Sacrament (2013) +* The Secret Life of Pets (2016) +* The Shining (1980) +* The Signal (2014) +* The Simpsons Movie (2007) +* The Snowman (2017) +* The Sonata (2018) +* The Spy Who Dumped Me (2018) +* The Strangers (2008) +* The Strangers: Prey at Night (2018) +* The Taking of Pelham 1 2 3 (2009) +* The Terminator (1984) +* The Transfiguration (2017) +* The Transporter (2002) +* The Truman Show (1998) +* The Untamed (2016) +* The Villainess (2017) +* The Voorman Problem (2013) +* The Wandering Earth (2019) +* The Witch (2016) +* The Wolf of Wall Street (2013) +* The World's End (2013) +* The Wraith (1986) +* Thinner (1996) +* Thir13en Ghosts (2001) +* This Is the End (2013) +* Thor: Ragnarok (2017) +* Thor: The Dark World (2013) +* Thoroughbreds (2018) +* Three Billboards Outside Ebbing, Missouri (2017) +* Tim's Vermeer (2013) +* Tokyo Gore Police (2008) +* Tomb Raider (2018) +* Tomorrowland (2015) +* Top Secret! (1984) +* Total Recall (2012) +* Toy Story 4 (2019) +* Transporter 2 (2005) +* Transporter 3 (2008) +* Treasure Planet (2002) +* Triangle (2009) +* Truth or Dare (2018) +* Ultraviolet (2006) +* Unbreakable (2000) +* Under the Skin (2014) +* Underworld (2003) +* Unsane (2018) +* Unstoppable (2010) +* Upgrade (2018) +* Urge (2016) +* Uzumaki (2000) +* V/H/S (2012) +* Valerian and the City of a Thousand Planets (2017) +* Venom (2018) +* Wake in Fright (1971) +* Wanted (2008) +* War Dogs (2016) +* Warcraft (2016) +* Watchmen (2009) +* Welcome to Leith (2015) +* We're the Millers (2013) +* What We Do in the Shadows (2014) +* Whiplash (2014) +* Who Framed Roger Rabbit (1988) +* Who Killed Captain Alex? (2010) +* Widows (2018) +* Winchester (2018) +* Wind River (2017) +* Wonder Woman (2017) +* Wreck-It Ralph (2012) +* X-Men: Apocalypse (2016) +* X-Men: Days of Future Past (2014) +* XX (2017) +* Zombieland (2009) +* Zombieland: Double Tap (2019) diff --git a/content/posts/archived-television.md b/content/posts/archived-television.md @@ -0,0 +1,173 @@ +--- +title: Archived TV Shows +tags: ["media", archive"] +date: 2018-01-01T01:00:00 +lastmod: 2020-06-14T02:24:00 + +--- + +Last updated on {{ printf "%s" $.Params.lastmod }}. + +### Work in Progress +* Better Call Saul +* Bob's Burgers +* Brooklyn Nine-Nine +* Psycho-Pass +* Rick and Morty +* South Park +* Star Trek Deep Space Nine +* The Amazing World of Gumball +* The Sinner +* Westworld + +### Rewatch +* Farscape +* Lexx +* Police Squad! +* Swiss Toni +* Terry Pratchett's Going Postal +* The Boondocks +* The Inbetweeners +* True Detective + +### Completed +* 11.22.63 +* A Certain Scientific Railgun +* A Touch of Cloth +* Adventure Time +* Almost Human +* Altered Carbon +* American Gods +* Archer +* Ash vs. Evil Dead +* Avenue 5 +* Battle Angel Alita +* Berry & Fulcher's Snuff Box +* Big Mouth +* Black Books +* Black Lagoon +* Black Mirror +* Bob's Burgers +* BoJack Horseman +* Bosch +* Breaking Bad +* Burnistoun +* Chernobyl +* Childhood's End +* Cleopatra 2525 +* Conquering Northern China +* Cowboy Bebop +* Creepshow +* Dark Angel +* Dark Tourist +* Death Note +* Defying Gravity +* Dirk Gently's Holistic Detective Agency +* Dorohedoro +* Dr. Stone +* Drugs, Inc. +* Evil Genius +* Fargo +* Farscape +* Final Space +* Firefly +* Freedom +* Fullmetal Alchemist +* Fullmetal Alchemist Brotherhood +* Futurama +* Game of Thrones +* Garth Marenghi's Darkplace +* Gravity Falls +* Gunpowder +* Gurren Lagann +* Hannibal +* Heroes +* How to Get Away With Murder +* Hyperdrive +* Ideal +* Inferno Cop +* Inside No. 9 +* Jonathan Creek +* KonoSuba - God’s Blessing on This Wonderful World!! +* Last Chance Lawyer NYC +* Lifeline +* Line of Duty +* Love, Death & Robots +* Luther +* Mind Field +* Mr. Mercedes +* Mr. Pickles +* Nailed It! +* Nathan Barley +* Nightflyers +* One-Punch Man +* Over the Garden Wall +* Paradise PD +* Peaky Blinders +* Penn & Teller Bullshit! +* Philip K. Dick's Electric Dreams +* Phoenix Nights +* Pretty Little Liars +* Psychoville +* Rick and Morty +* Savage Builds +* Sherlock +* Sons of Anarchy +* Space Dandy +* SS-GB +* Star Trek: Discovery +* Star Trek: Enterprise +* Star Trek: Picard +* Star Trek: Voyager +* Stargate Atlantis +* Stargate SG-1 +* Steins;Gate +* Stranger Things +* Swamp Thing +* Taken +* Taskmaster +* Terror in Resonance +* Testees +* The Andromeda Strain (2008) +* The Boys +* The Crossing +* The End of the F***ing World +* The Event +* The Exorcist +* The Expanse +* The Grand Tour +* The Haunting of Hill House +* The IT Crowd +* The Mandalorian +* The Men Who Made Us Fat +* The Men Who Made Us Thin +* The Midnight Gospel +* The Mist +* The OA +* The Sinner +* The Strain +* The Twilight Zone (2019) +* The Wire +* Tidying Up with Marie Kondo +* Tiger King: Murder, Mayhem and Madness +* Tin Star +* Titan Maximum +* TRIGUN +* True Blood +* V (2009) +* Watchmen +* Wayward Pines +* Westworld +* X-Men Evolution + +### Abandoned +* DARK +* Designated Survivor +* Doctor Who (2005) +* Fear the Walking Dead +* How to Get Away with Murder +* Making a Murderer +* Sharp Objects +* The Simpsons +* The Walking Dead +* Twin Peaks diff --git a/content/posts/archlinux-retroarch-guide.md b/content/posts/archlinux-retroarch-guide.md @@ -0,0 +1,64 @@ +--- +title: "ArchLinux Retroarch Guide" +date: 2019-02-19T09:46:00 +tags: ["emulation", "games", "linux", "media", "snippets", "software"] +--- + +### Installation +The latest retroarch can be installed on ArchLinux simply with the following command: +``` +pacman -S retroarch +``` +No need to install any other packages, the online updater (below) can take care of everything. + +Launch `retroarch` to generate all your directories and config files. Exit by pressing the Esc key, and make the alterations below. + +### Configuration Changes +Edit `$HOME/.config/retroarch/retroarch.cfg` with your text editor of choice. Below are the values I've altered. +``` +assets_directory = "~/.config/retroarch/assets" +libretro_directory = "~/.config/retroarch/cores" +libretro_info_path = "~/.config/retroarch/cores" +menu_show_core_updater = "true" +rgui_browser_directory = "~/media/games" +savefile_directory = "~/media/games/.saves" +savestate_directory = "~/media/games/.saves" +system_directory = "~/media/games/.firmware" +systemfiles_in_content_dir = "false" +video_fullscreen = "true" +``` +Save the file and move on to the next step. + +### Assets +Now assets can be saved to a writeable directory, so start retroarch again and update the following: +* Retroarch > Online Updater > Update Assets +* Retroarch > Online Updater > Update Joypad Profiles +* Retroarch > Online Updater > Update Core Info Files + +### Cores +Lastly, you want to select the cores you want to use, I have the following (usually *best-in-slot*) cores installed: +* MAME +* Stella +* Hatari +* Beetle PCE +* Citra +* melonDS +* SameBoy +* mGBA +* Dolphin +* Mesen +* ParaLLEl N64 +* Snes9x +* Flycast +* Genesis Plus GX +* Beetle Saturn +* Beetle PSX HW +* Play! +* PPSSPP + +### Updates + +* **Edit 2020-01-27:** Changed a couple of core recommendations, removed section on updating cores using [lrcm](https://github.com/meleu/lrcm) +* **Edit 2020-02-04:** Altered some paths +* **Edit 2020-05-19:** Updated core selections + diff --git a/content/posts/automating-paperwork-payslips.md b/content/posts/automating-paperwork-payslips.md @@ -0,0 +1,84 @@ +--- +title: "Automating Grabbing Payslips For Use With Paperless" +date: 2019-02-04T11:47:00 +tags: ["formats", "guides", "linux", "servers", "software"] +--- + +My workplace has recently started sending out Payslips as email attachments instead of the usual physical sheet which I'm a big fan of, [Paperless](https://github.com/the-paperless-project/paperless) is always on hand to sort and process any paperwork I have which keeps things organised and under control. + +To tie all these processes together, we're going to use `getmail`, `mpack` and `qpdf`. + +Please note that this will download your **entire inbox** every time so it helps if you don't run the script too often, and keep your inbox size to manageable levels. + +Firstly, we'll need to specify a number of variables for use later in the script: +``` +email_sender="payslipsender@address" +email_username="youremailaddress" +email_password="youremailpassword" +payslip_password="yourpdfpassword" +payslip_pattern=Payslip +payslip_filetype=pdf +import_directory="$HOME/import" +temp_directory="$(mktemp -d)" +``` + +We'll change to the temporary directory and make the directories that `getmail` expects to be there: +``` +cd "$temp_directory" || exit +mkdir {cur,new,tmp} +``` + +As I don't really want to keep an copy of my whole inbox around for no good reason, I dump my email to a temporary directory and write my `getmail` config file into this directory with a heredoc. +Here I'm using IMAP with SSL but getmail supports [a number of different methods of grabbing mail](http://pyropus.ca/software/getmail/configuration.html#conf-retriever): + +``` +cat << EOF > getmailrc +[retriever] +type = SimpleIMAPSSLRetriever +server = your.imap.server +username = $email_username +port = 993 +password = $email_password + +[destination] +type = Maildir +path = $temp_directory/ +EOF +``` + +Then run `getmail` using the temporary directory as your working directory: +``` +getmail --getmaildir "$temp_directory" +``` + +Change directory to our newly saved items, then extract all attachments that match our search pattern in the variable above. Lastly, move these attachments to the Paperless import directory. +``` +cd new || exit +grep "$email_sender" ./* | cut -f1 -d: | uniq | xargs munpack -f +mv "$payslip_pattern"*"$payslip_filetype" "$import_directory" +``` + +Now Paperless won't work on these files unless they're decrypted, which we can do as follows: +``` +cd "$import_directory" || exit +for i in $payslip_pattern*$payslip_filetype; do + fileProtected=0 + qpdf "$i" --check || fileProtected=1 + if [ $fileProtected == 1 ]; then + qpdf --password="$payslip_password" --decrypt "$i" "decrypt-$i" && rm "$i" + fi +done +``` + +Now we have a directory full of unencrypted files to let Paperless work with. Last but not least, we'll need to delete the old temporary directory we used: +``` +rm -r "$temp_directory" +``` + +Lastly all you need to do is set up the above script as a cron job to run after pay day! The cron line I'm using is as follows: +``` +0 0 2 * * $HOME/path/to/script/payslip.sh & +``` + +* **Edit 2019-02-27:** `pdftk` replaced with `qpdf` as it required java which pulls down ~200MB dependencies. +* **Edit 2019-08-09:** Added cron section. diff --git a/content/posts/blotter-art-album-list.md b/content/posts/blotter-art-album-list.md @@ -0,0 +1,72 @@ +--- +title: "Blotter art album list" +date: 2020-05-06T12:51:00 +tags: ["drugs", "lists", "media", "music", "snippets"] +--- + +Some time ago, I came across a piece of <a href="https://pub.minskio.co.uk/avatars/blotter-albums.jpg">LSD blotter art</a> containing some 49 classic psychedelic album covers. I recognised quite a few immediately, but a few stumped me and as a fan of the genres I had to don my deerstalker and have a go at hunting them down. I've had this list for quite a while, but thought it would be interesting to share. + +Without further ado, I present you the full list: + +# Row 1 +* The Moody Blues - Days of Future Passed +* The Jimi Hendrix Experience - Axis: Bold as Love +* Big Brother and the Holding Company - Cheap Thrills +* The 13th Floor Elevators - The Psychedelic Sounds of the 13th Floor Elevators +* The Beatles - Magical Mystery Tour +* The Rolling Stones - Flowers +* Strawberry Alarm Clock - The World in a Sea Shell + +# Row 2 +* Steppenwolf - The Second +* The Beatles - Magical Mystery Tour +* The Yardbirds - Little Games +* Yes - Yes +* The Byrds - Sweetheart of the Rodeo +* Iron Butterfly - In-A-Gadda-Da-Vida +* Bee Gees - Bee Gees' 1st + +# Row 3 +* The Beach Boys - Wild Honey +* The Beach Boys - Smiley Smile +* The Zombies - Odessey and Oracle +* Genesis - Trespass +* Buffalo Springfield - Last Time Around +* MC5 - Kick Out the Jams +* The Grateful Dead - Anthem of the Sun + +# Row 4 +* The Moody Blues - In Search of the Lost Chord +* Traffic - Mr. Fantasy +* Jethro Tull - Stand Up +* Yes - Fragile +* Santana - Santana +* Blind Faith - Blind Faith +* Cream - Disraeli Gears + +# Row 5 +* The Grateful Dead - Aoxomoxoa +* The Mothers of Invention - Freak Out! +* Pink Floyd - Atom Heart Mother +* King Crimson - In the Court of the Crimson King +* The Jimi Hendrix Experience - Axis: Bold as Love +* Led Zeppelin - Led Zeppelin +* Love - Forever Changes + +# Row 6 +* The Doors - The Doors +* The Rolling Stones - Their Satanic Majesties Request +* The Beatles - Revolver +* The Who - Tommy +* Led Zeppelin - Led Zeppelin II +* The Beatles - Sgt. Pepper's Lonely Hearts Club Band +* The Jimi Hendrix Experience - Are You Experienced + +# Row 7 +* The Grateful dead - Wake of the Flood +* Pink Floyd - Animals +* The Who - A Quick One +* Cream - Wheels of Fire +* The Beatles - Yellow Submarine +* The Zombies - Odessey and Oracle +* Strawberry Alarm Clock - Wake Up...It's Tomorrow +\ No newline at end of file diff --git a/content/posts/borderlands-weapons.md b/content/posts/borderlands-weapons.md @@ -0,0 +1,299 @@ +--- +title: "Borderlands Weapon Parts Breakdown" +date: 2018-10-01T11:22:00 +tags: ["games", "guides", "lists", "software"] +--- + +Codes are intended for use with [WillowTree#](https://sourceforge.net/projects/willowtree/). Generally speaking, I tend to favour high accuracy and usability over pure damage output. +Most of these items are tweaked and adapted from actual finds, and you'll find **all** are well within the bounds of what can be found in-game. + +The class of choice is predictably the **Siren**. + +### Weapons + +**Hellfire** +``` +gd_itemgrades.Weapons.ItemGrade_Weapon_PatrolSMG +gd_manufacturers.Manufacturers.Maliwan +gd_weap_patrol_smg.A_Weapon.WeaponType_patrol_smg +gd_weap_patrol_smg.Body.body5 +gd_weap_patrol_smg.Grip.grip3 +gd_weap_patrol_smg.mag.mag3 +gd_weap_patrol_smg.Barrel.barrel5 +gd_weap_patrol_smg.Sight.sight3 +gd_weap_patrol_smg.Stock.stock5 +None +gd_weap_patrol_smg.acc.acc5_Maliwan_HellFire +gd_weap_shared_materialparts.ManufacturerMaterials.Material_Maliwan_3 +gd_weap_names_shared.Prefix_Tech.Prefix_DTIncendiary4_Combustion +gd_weap_patrol_smg.Title.TitleM_Maliwan1_HellFire +``` + +**Anarchy** +``` +gd_itemgrades.Weapons.ItemGrade_Weapon_PatrolSMG +gd_manufacturers.Manufacturers.Torgue +gd_weap_patrol_smg.A_Weapon.WeaponType_patrol_smg +gd_weap_patrol_smg.Body.body5 +gd_weap_patrol_smg.Grip.grip4 +gd_weap_patrol_smg.mag.mag3 +gd_weap_patrol_smg.Barrel.barrel2 +gd_weap_patrol_smg.Sight.sight1 +gd_weap_patrol_smg.Stock.stock_none +None +gd_weap_patrol_smg.acc.acc4_Double +gd_weap_shared_materialparts.ManufacturerMaterials.Material_Torgue_3 +gd_weap_shared_materialparts.Prefix.Prefix_Torque2_Steel +gd_weap_patrol_smg.Title.Title_LowAccuracy1_Anarchy +``` + +**(Corrosive) Bitch** +``` +gd_itemgrades.Weapons.ItemGrade_Weapon_PatrolSMG +gd_manufacturers.Manufacturers.Hyperion +gd_weap_patrol_smg.A_Weapon.WeaponType_patrol_smg +gd_weap_patrol_smg.Body.body5 +gd_weap_patrol_smg.Grip.grip5 +gd_weap_patrol_smg.mag.mag3 +gd_weap_patrol_smg.Barrel.barrel5_Hyperion_Bitch +gd_weap_patrol_smg.Sight.sight5 +gd_weap_patrol_smg.Stock.stock5 +None +gd_weap_patrol_smg.acc.acc3_Corrosive +gd_weap_shared_materialparts.ManufacturerMaterials.Material_Hyperion_3 +gd_weap_names_shared.Prefix_Tech.Prefix_DTCorrosive4_Pestilent +gd_weap_patrol_smg.Title.TitleM_Hyperion1_Bitch +``` + +**Lance** +``` +gd_itemgrades.Weapons.ItemGrade_Weapon_SemiAutoSniperRifle +gd_manufacturers.Manufacturers.Hyperion +gd_weap_sniper_rifle_semiauto.A_Weapon.WeaponType_sniper_rifle_semiauto +gd_weap_sniper_rifle_semiauto.Body.body5 +gd_weap_sniper_rifle.Grip.grip5 +gd_weap_sniper_rifle_semiauto.mag.mag5 +gd_weap_sniper_rifle.Barrel.barrel5 +gd_weap_sniper_rifle.Sight.sight4 +gd_weap_sniper_rifle.Stock.stock5 +None +gd_weap_sniper_rifle_semiauto.acc.acc1_Brisk +gd_weap_shared_materialparts.ManufacturerMaterials.Material_Hyperion_3 +gd_weap_shared_materialparts.Prefix.Prefix_Hyperion2_Crimson +gd_weap_sniper_rifle_semiauto.Title.Title_Accuracy1_Lance +``` + +**Defiler** +``` +gd_itemgrades.Weapons.ItemGrade_Weapon_RevolverPistol +gd_manufacturers.Manufacturers.Maliwan +gd_weap_revolver_pistol.A_Weapon.WeaponType_revolver_pistol +gd_weap_revolver_pistol.Body.body5 +gd_weap_revolver_pistol.Grip.grip3 +gd_weap_revolver_pistol.mag.mag4 +gd_weap_revolver_pistol.Barrel.barrel5 +gd_weap_revolver_pistol.Sight.sight2 +gd_weap_revolver_pistol.Stock.stock3 +None +gd_weap_revolver_pistol.acc.acc3_Maliwan_Defiler_Corrosive +gd_weap_shared_materialparts.ManufacturerMaterials.Material_Maliwan_3 +gd_weap_names_shared.Prefix_Tech.Prefix_DTCorrosive4_Pestilent +gd_weap_revolver_pistol.Title.TitleM_Maliwan1_Defiler +``` + +**Orion** +``` +gd_itemgrades.Weapons.ItemGrade_Weapon_SemiAutoSniperRifle +gd_manufacturers.Manufacturers.SandSMunitions +gd_weap_sniper_rifle_semiauto.A_Weapon.WeaponType_sniper_rifle_semiauto +gd_weap_sniper_rifle_semiauto.Body.body5 +gd_weap_sniper_rifle.Grip.grip2 +gd_weap_sniper_rifle_semiauto.mag.mag5 +gd_weap_sniper_rifle.Barrel.barrel5 +gd_weap_sniper_rifle.Sight.sight4 +gd_weap_sniper_rifle.Stock.stock3 +None +gd_weap_sniper_rifle_semiauto.acc.acc3_SandS_Orion_Shock +gd_weap_shared_materialparts.ManufacturerMaterials.Material_SandS_3 +gd_weap_sniper_rifle.Prefix.Title_FireRate1_Liquid +gd_weap_sniper_rifle_semiauto.Title.TitleM_SandS1_Orion +``` + +**Bessie** +``` +dlc3_gd_customweapons.Pearlescent_Weapons.CustomWeap_SniperRifle_JakobsBessie +gd_manufacturers.Manufacturers.Jakobs +gd_weap_sniper_rifle.A_Weapon.WeaponType_sniper_rifle +gd_weap_sniper_rifle.Body.body3 +gd_weap_sniper_rifle.Grip.grip4 +gd_weap_sniper_rifle.mag.mag4 +gd_weap_sniper_rifle.Barrel.barrel4 +dlc3_gd_weap_UniqueParts.SniperRifle.sight4_Jakobs_Bessie +gd_weap_sniper_rifle.Stock.stock3 +None +gd_weap_sniper_rifle.acc.acc1_Rolling +dlc3_gd_weap_UniqueParts.SniperRifle.JakobsBessie_Material +gd_weap_sniper_rifle.Prefix.Prefix_Acc1_Rolling +dlc3_gd_weap_UniqueParts.Title.TitleP_Jakobs_Bessie +``` + +For every day use, I usually use a Hellfire, Anarchy, (Corrosive) Bitch and a Lance. +For Crawmerax runs specifically I'll take a Hellfire, Anarchy, Defiler and Orion. + +### Shields + +**Health Regen** +``` +gd_itemgrades.Gear.ItemGrade_Gear_Shield +gd_shields.A_Item.Item_Shield +gd_shields.Body.body4 +gd_shields.LeftSide.leftside4 +gd_shields.RightSide.rightside4 +gd_shields.ManufacturerMaterials.Material_Tediore_3 +gd_manufacturers.Manufacturers.tediore +gd_shields.Prefix.Prefix_Speed4_Alacritous +gd_shields.Title.Title_Tediore3_PanaceaShield +``` + +**Health Boost** +``` +dlc3_gd_customitems.Items.CustomItem_Shield_Pangolin_Ironclad +gd_shields.A_Item.Item_Shield +dlc3_gd_item_UniqueParts.Shield.body3_Pangolin_Ironclad +gd_shields.LeftSide.leftside4 +gd_shields.RightSide.rightside4 +gd_shields.ManufacturerMaterials.Material_Pangolin_3 +gd_manufacturers.Manufacturers.Pangolin +gd_shields.Prefix.Prefix_Max2_Hardened +dlc3_gd_item_UniqueParts.Title.Title_P_Pangolin_Ironclad +``` + +**High Capacity** +``` +dlc3_gd_customitems.Items.CustomItem_Shield_Anshin_Rose +gd_shields.A_Item.Item_Shield +dlc3_gd_item_UniqueParts.Shield.body4_Anshin_Rose +gd_shields.LeftSide.leftside4 +gd_shields.RightSide.rightside4 +gd_shields.ManufacturerMaterials.Material_Anshin_3 +gd_manufacturers.Manufacturers.Anshin +gd_shields.Prefix.Prefix_Speed4_Alacritous +dlc3_gd_item_UniqueParts.Title.Title_P_Anshin_Rose +``` + +### Class Mods + +**Mercenary** +``` +gd_itemgrades.Gear.ItemGrade_Gear_ComDeck_Lilith +gd_CommandDecks.A_Item.Item_CommandDeck_Lilith +gd_CommandDecks.Body_Lilith.Lilith_Mercenary +gd_CommandDecks.LeftSide.leftside6 +gd_CommandDecks.RightSide.rightside6 +gd_CommandDecks.ManufacturerMaterials.Material_Dahl_3 +gd_manufacturers.Manufacturers.Dahl +gd_CommandDecks.Prefix.Prefix_Lilith_Mercenary +gd_CommandDecks.Title.Title_ComDeckLilith +``` + +**Firefly** +``` +gd_itemgrades.Gear.ItemGrade_Gear_ComDeck_Lilith +gd_CommandDecks.A_Item.Item_CommandDeck_Lilith +gd_CommandDecks.Body_Lilith.Lilith_Firefly +gd_CommandDecks.LeftSide.leftside6 +gd_CommandDecks.RightSide.rightside6 +gd_CommandDecks.ManufacturerMaterials.Material_Maliwan_3 +gd_manufacturers.Manufacturers.Maliwan +gd_CommandDecks.Prefix.Prefix_Lilith_Firefly +gd_CommandDecks.Title.Title_ComDeckLilith +``` +### Grenade Mod + +**Transfusion** +``` +gd_itemgrades.Gear.ItemGrade_Gear_GrenadeMODs +gd_tunercuffs.A_Item.Item_GrenadeModulator +gd_tunercuffs.Body.body5_notech +gd_tunercuffs.LeftSide.leftsidenone +gd_tunercuffs.RightSide.rightsidenone +gd_tunercuffs.ManufacturerMaterials.Material_Anshin_1 +gd_manufacturers.Manufacturers.Anshin +None +gd_tunercuffs.Title.Title_Transfusion +``` + +**Corrosive Rain** +``` +gd_itemgrades.Gear.ItemGrade_Gear_GrenadeMODs +gd_tunercuffs.A_Item.Item_GrenadeModulator +gd_tunercuffs.Body.body7_incendiary_rain +gd_tunercuffs.LeftSide.leftsidenone +gd_tunercuffs.RightSide.rightsidenone +gd_tunercuffs.ManufacturerMaterials.Material_Atlas_1 +gd_manufacturers.Manufacturers.Atlas +gd_tunercuffs.Prefix.Prefix_Incendiary +gd_tunercuffs.Title.Title_Rain +``` + +### Optional Extras +**Elemental Artifacts** +``` +gd_customitems.Items.CustomItem_Elemental_Lilith_Incendiary +gd_ElementalUpgrade.A_Item.ElementalArtifact_Lilith +gd_ElementalUpgrade.Body.Body_RequiredShared +gd_ElementalUpgrade.LeftSide.LeftSide_Level1 +gd_ElementalUpgrade.RightSide.RightSide_Incendiary +None +gd_manufacturers.Manufacturers.Eridian +gd_ElementalUpgrade.Prefix.Prefix_Incendiary +gd_ElementalUpgrade.Title.Title_Artifact +``` +``` +gd_customitems.Items.CustomItem_Elemental_Lilith_Shock +gd_ElementalUpgrade.A_Item.ElementalArtifact_Lilith +gd_ElementalUpgrade.Body.Body_RequiredShared +gd_ElementalUpgrade.LeftSide.LeftSide_Level1 +gd_ElementalUpgrade.RightSide.RightSide_Shock +None +gd_manufacturers.Manufacturers.Eridian +gd_ElementalUpgrade.Prefix.Prefix_Shock +gd_ElementalUpgrade.Title.Title_Artifact +``` +``` +gd_customitems.Items.CustomItem_Elemental_Lilith_Explosive +gd_ElementalUpgrade.A_Item.ElementalArtifact_Lilith +gd_ElementalUpgrade.Body.Body_RequiredShared +gd_ElementalUpgrade.LeftSide.LeftSide_Level2 +gd_ElementalUpgrade.RightSide.RightSide_Explosive +None +gd_manufacturers.Manufacturers.Eridian +gd_ElementalUpgrade.Prefix.Prefix_Explosive +gd_ElementalUpgrade.Title.Title_Artifact +``` +``` +gd_customitems.Items.CustomItem_Elemental_Lilith_Corrosive +gd_ElementalUpgrade.A_Item.ElementalArtifact_Lilith +gd_ElementalUpgrade.Body.Body_RequiredShared +gd_ElementalUpgrade.LeftSide.LeftSide_Level2 +gd_ElementalUpgrade.RightSide.RightSide_Corrosive +None +gd_manufacturers.Manufacturers.Eridian +gd_ElementalUpgrade.Prefix.Prefix_Corrosive +gd_ElementalUpgrade.Title.Title_Artifact +``` + +**Backpack SDUs** +``` +gd_itemgrades.StorageDeckUpgrades.ItemGrade_SDU_InventorySlots +gd_StorageDeckUpgrade.INV_InventorySpace.INV_InventorySpace +None +None +None +None +gd_manufacturers.Manufacturers.Dahl +None +None +``` + +<!-- http://talent.87bazillion.com/siren.php?505055055050555305550 --> +\ No newline at end of file diff --git a/content/posts/brief-archlinux-installation-guide.md b/content/posts/brief-archlinux-installation-guide.md @@ -0,0 +1,98 @@ +--- +title: "The briefest Arch Linux installation guide" +date: 2019-10-15T14:33:00 +tags: ["guides", "linux", "snippets", "software"] +--- + +Are you wanting an incredibly quick (to the point of being useless, or painfully truncated) guide for how to install Arch Linux on your computer? + +Do you want to throw caution to the wind, booting from UEFI using systemd-boot instead of the more usual GRUB? Are you interested in Wayland/Sway instead of a more traditional Xorg/i3? Do you want to use a swap file instead of a partition? Do you desire UK specific keyboard layouts and timezone, even if you don't want them? + +Well why didn't you say? Step aboard traveller..! Welcome to my personal guide (primarily for reference usage) on installing the venerable Arch Linux. + +* Boot your installation medium + +* Check for network connectivity `ping archlinux.org`. + +* Update your package manager repository `pacman -Syy`. + +* Set the keymap to UK `loadkeys uk`. + +* Make sure the time and date are vaguely correct `timedatectl set-ntp true`. + +* Identify the drives you're working with (in my case, sda) using `lsblk`. + +* Now make an EFI boot partition, and root partition `gdisk /dev/sda > o y n 1 {enter} 512M EF00 n 2 {enter} {enter} {enter} w y`. + +* Check everything's okay with the above via `gdisk -l /dev/sda`. + +* Format those new partitions `mkfs.vfat /dev/sda1 && mkfs.ext4 /dev/sda2`. + +* Now mount those partitions `mount /dev/sda2 /mnt && mkdir /mnt/boot && mount /dev/sda1 /mnt/boot`. + +* Install the base operating system `pacstrap /mnt/`. + +* Create your `fstab` file using `genfstab -U /mnt > /mnt/etc/fstab`. + +* Chroot into it `arch-chroot /mnt/`. + +* Install some necessary core applications `pacman -Syu base dhcpcd linux linux-firmware neovim sudo`. + +* Enable DHCP `systemctl enable dhcpcd`. + +* Now install and configure your (UEFI) bootloader `bootctl install`. + +* Configure said bootloader default `printf "default arch\ntimeout 2">/boot/loader/loader.conf`. + +* Now add your Arch entry `printf "title ArchLinux\nlinux /vmlinuz-linux\ninitrd /initramfs-linux.img\noptions root=/dev/sda2 rw">/boot/loader/entries/arch.conf`. + +* Set your hostname `printf "minerva">/etc/hostname`. + +* Set your console keymap `printf "KEYMAP=uk">/etc/vconsole.conf`. + +* Set the locale language `printf "LANG=en_GB.UTF-8">/etc/locale.conf`. + +* Another locale step, I guess `nvim /etc/locale.gen` you want to uncomment `en_GB.UTF-8`. + +* Set up a symlink for the timezone `ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime`. + +* Finally we can generate the locale `locale-gen`. + +* Add your non-root user `useradd -m -G wheel,users -s /bin/bash peter`. + +* Set your new accounts' password `passwd peter`. + +* Set up sudo `EDITOR=nvim visudo`, you'll need to uncomment the `%wheel` group line. + +* Set your root password `passwd`. + +* Exit the chroot environment `exit`. + +* Lastly, reboot from to your new OS `reboot`. + +Now we're logged in, we can [set up the swap file](/blog/2019/06/10/swap-file-linux/) as an alternative to a swap partition (mentioned earlier). + +Lastly, I'd like to autologin my user, without using a display manager: +``` +sudo mkdir -p /etc/systemd/system/getty@tty1.service.d +printf "[Service]\nExecStart=\nExecStart=-/usr/bin/agetty --autologin username --noclear %%I $TERM" | sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf +``` +Replacing *username* with whatever the use you want to login as. + +* **Edit 2019-10-21:** Add update package manager repo step, may resolve some problems + +* **Edit 2019-10-24:** Add [base package](https://www.archlinux.org/news/base-group-replaced-by-mandatory-base-package-manual-intervention-required/), swap file link and autologin instructions + +* **Edit 2020-01-20:** Using ext4 over btrfs, the less said about it the better. + +* **Edit 2020-01-21:** Alternate instructions for using BIOS/Grub are below: +``` +fdisk /dev/sda > a {enter} w {enter} +sudo pacman -S grub +grub-install /dev/sda +grub-mkconfig -o /boot/grub/grub.cfg +``` + +* **Edit 2020-06-03:** Added fstab instruction, seemingly missed. + +* **Edit 2020-06-17:** Replaced nano references with neovim. +\ No newline at end of file diff --git a/content/posts/compacting-vdi-image.md b/content/posts/compacting-vdi-image.md @@ -0,0 +1,24 @@ +--- +title: "Compacting a VirtualBox VDI Image" +date: 2018-09-06T12:26:00 +tags: ["formats", "guides", "linux", "snippets", "software", "windows"] +--- + +Firstly, you'll need to install `zerofree` on your Linux image, then mount the root partition as a read only volume. This can be done via: + +``` +sudo apt-get install zerofree +sudo apt-get clean +sudo reboot +# interrupt grub boot and boot into recovery mode +mount -n -o remount,ro -t ext4 /dev/sda1 / +zerofree /dev/sda1 +shutdown -h now +``` + +And now on the Windows Host: +``` +"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvdi "VirtualBox VMs\server\server.vdi" compact +``` + +This should make the VirtualBox image more in line with the calculated size it should be. +\ No newline at end of file diff --git a/content/posts/compiling-bsd-tar-on-linux.md b/content/posts/compiling-bsd-tar-on-linux.md @@ -0,0 +1,23 @@ +--- +title: "Compiling BSD Tar on Linux" +date: 2018-11-09T12:09:00 +tags: ["guides", "linux", "snippets", "software"] +--- + +While researching Arch Linux ARM for the ODroid HTPC project, I came across an issue with unpacking the image. + +It turns out that Arch Linux ARM requires `bsdtar` version 3.3 or above, and only versions 3.2.x are available in the [Debian and Ubuntu repositories](https://packages.debian.org/search?keywords=bsdtar). + +To resolve this, simply run the following: +``` +sudo apt-get install build-essential +wget https://www.libarchive.org/downloads/libarchive-3.3.3.tar.gz +tar -xzf libarchive-3.3.3.tar.gz +cd libarchive-3.3.3/ +./configure +make +sudo make install +bsdtar --version +``` + +Now you'll have the latest (at time of writing) version of <code>bsdtar</code> all working, all ready to proceed with the rest of the already convoluted installation guide. diff --git a/content/posts/compiling-snapraid.md b/content/posts/compiling-snapraid.md @@ -0,0 +1,34 @@ +--- +title: "Compiling SnapRAID on Debian" +date: 2019-01-10T09:43:00 +tags: ["guides", "linux", "servers", "snippets", "software"] +--- + +Recently I discovered [SnapRAID](http://www.snapraid.it/) as a parity based backup tool and found it to be extremely flexible and powerful, and is currently the backup solution I'm using on my own home server. While not suited to every use case, my current setup (rarely changing, incremental additions) fills the whole perfectly. + +Debian doesn't include snapraid in it's repositories so we'll download and compile it from source, naturally! + +Usually, I'd run this type of software through docker, however I generally prefer all underlying *core* services (samba/mergerfs/etc) to run on the host instead of inside a container. This may change in the future however! + +First, we'll need to install some a couple of common dependencies + +``` +sudo apt-get update +sudo apt-get upgrade +sudo apt-get install gcc make wget +``` + +Then grab the [latest release](https://github.com/amadvance/snapraid/releases), at the time of writing is 11.3 +``` +wget https://github.com/amadvance/snapraid/releases/download/v11.3/snapraid-11.3.tar.gz +tar -xzf snapraid-11.3.tar.gz +cd snapraid-11.3 +./configure +make +make check +sudo make install +``` + +Now, running `snapraid -V` should display the correct version number. + +Once compiled and installed, you can go about [configuring and using](http://www.snapraid.it/manual) the program. diff --git a/content/posts/concatenating-pdf-files.md b/content/posts/concatenating-pdf-files.md @@ -0,0 +1,20 @@ +--- +title: "Concatenating PDF files on Linux" +date: 2018-11-26 13:29:00 +tags: ["snippets", "software", "formats", "linux"] +--- + +A simple request, with an equally simple solution. Firstly I tried using my old favourite `pandoc` which will apparently only output PDF files, not input them. + +Some quick searching around lead me to `pdfunite` which did the job perfectly. + +Simple issue the following command to merge 3 files into one final output file: +``` +pdfunite page-1.pdf page-2.pdf page-3.pdf pages-out.pdf +``` +Be careful when specifying your files here as the last file will be overwritten if it already exists. + +If you don't have `pdfunite` installed, it's available via: +``` +sudo apt-get install poppler-utils +``` +\ No newline at end of file diff --git a/content/posts/concatenating-videos-on-windows.md b/content/posts/concatenating-videos-on-windows.md @@ -0,0 +1,24 @@ +--- +title: "Concatenating Videos on Windows with FFmpeg" +date: 2019-05-09T09:21:00 +tags: ["formats", "guides", "media", "snippets", "software", "windows"] +--- + +I recently had a bit of a binge on the Japanese comedy show Gaki No Tsukai. This show is basically impossible to find officially so we're heading to streaming sites (as linked on their [subreddit](https://www.reddit.com/r/GakiNoTsukai/)) to get copies of the show. As these shows are usually multiple hours in length they're going to be split into multiple parts. + +As expected, these files can be grabbed via `youtube-dl`, and then manually renamed into an easy to work with format (01.mp4, 02.mp4, etc.) as files with spaces can be problematic in my experience. + +Naturally, you'll need ffmpeg installed and ready to use. Windows builds can be grabbed from [this site](https://ffmpeg.zeranoe.com). + +Once you have these video files, cd into the working directory and run the following to make a list of files that ffmpeg can interpret. +``` +(for %i in (*.mp4) do @echo file '%i') > concat.txt +``` +Ensure the order is correct as you definitely don't want these out of order. + +Now you can run the following: +``` +ffmpeg -f concat -i concat.txt -c copy concat.mp4 +``` + +Now you should have a single `concat.mp4` file that plays through as you'd expect it to be. +\ No newline at end of file diff --git a/content/posts/dumping-subtitles-using-ffmpeg.md b/content/posts/dumping-subtitles-using-ffmpeg.md @@ -0,0 +1,22 @@ +--- +title: "Dumping subtitles using FFmpeg" +date: 2020-05-17T14:00:00 +tags: ["formats", "languages", "linux", "media", "snippets", "software"] +--- + +As part of my ongoing [language learning](/languages/) attempts, I tend to enable subtitles in the language I'm wanting to learn, and when I see a word I don't recognise in the context I do I'll make a note of it. + +This manual approach though can get a bit tiresome, so if you want a quick way to dump an entire subtitle file from a video, you can do the following: +``` +ffmpeg -i video.mkv +``` + +This will list the streams available, video, audio and subtitles if available. If labels are available it will show them here too. Make a note of the stream you want. In the above example, we're seeing `Stream #0:5(nor)` in our original command output which would be Norwegian. To dump this stream to a subrip `srt` file you'll run the following: +``` +ffmpeg -i video.mkv -c copy -map 0:5 subtitles.srt +``` + +You should now have a single `srt` file with your subtitles as expected in them. + +I'll write another post for how to format these files to a usable list type format later. +**Edit:** [Follow up article posted here](/blog/2020/05/28/formatting-dumped-subtitles/). +\ No newline at end of file diff --git a/content/posts/duolingo-streak-preservation.md b/content/posts/duolingo-streak-preservation.md @@ -0,0 +1,36 @@ +--- +title: "Duolingo Streak Preservation" +date: 2019-01-16T09:51:00 +lastmod: 2020-06-19T00:33 +tags: ["languages", "linux", "servers", "snippets", "software"] +--- + +I'm a great fan of Duolingo, and while I have a number of issues with it I still consider it a generally useful platform for scratching the itch of learning a language. +One incentive they employ is to have a daily streak, indicating that you've maintained your practice for a certain number of days without slipping up once. + +Now, for better or for worse, this streak is now something I take a humble amount of pride in. Some may consider it unsporting whereas others may consider it out and out cheating, but once you've amassed a certain number of lingots the streak can be maintained near indefinitely. + +The project we're using to achieve this is the comprehensive [Unofficial Duolingo API](https://github.com/KartikTalwar/Duolingo). + +Firstly, you want to clone this project into a folder, and then start a new text file in the same directory with the following contents: +``` +#!/usr/bin/env python3 + +import duolingo +lingo = duolingo.Duolingo('username', password='password') +lingo.buy_item('streak_freeze', 'nb') +``` +The only values here than need altering are the username, password and language abbreviation code (nb for Norwegian Bokmål) + +### Cron +Then you'll want to run the script regularly via cron which can be done by adding the below to your crontab with `crontab -e`, I run the above script a few times a day via cron just to make sure it runs. My line is as follows: +``` +5 */8 * * * $HOME/bin/duolingo/auto.py +``` +Where `auto.py` is the script you saved above. This will run the script every 8 hours (00:01, 08:01 and 16:01). + +### Docker +In the past, I've [created a docker file](https://github.com/breadcat/Dockerfiles/commit/7ee24ece87d6604a5af373d334cfddf5713a11d5#diff-97f0aec7ad82d5d15585c03bdbd65392) for this, but I wouldn't recommend using it via docker as failures are generally more silent via docker. + + +* **Edit 2020-06-19:** Personally, I've [recently moved this](https://github.com/breadcat/Dockerfiles/commit/d56a650fd02d33061af4e7b1c4e85ce0812b4a5b) into a function in a larger project, however this is currently broken due to [an upstream bug](https://github.com/KartikTalwar/Duolingo/issues/79) +\ No newline at end of file diff --git a/content/posts/ecrm1000.tfm-latex-issues.md b/content/posts/ecrm1000.tfm-latex-issues.md @@ -0,0 +1,34 @@ +--- +title: "Pandoc TXT to PDF exporting ecrm1000.tfm issues" +date: 2018-11-26T10:41:00 +tags: ["formats", "linux", "snippets", "software"] +--- + +Recently I was experimenting with [paperless](https://github.com/danielquinn/paperless) and importing a number of files to see how the software handled things. Over the course of this experiment the only files that didn't seem to be accepted were plain txt files. + +A simple solution (or so I thought) would be to convert these to PDF, and just run the import again. Pandoc is my goto choice for all types of textual documentation management, so I threw the files through the following command: + +``` +for i in *.txt; do pandoc "$i" -o "${i%txt}pdf"; done +``` + +Which helpfully gave me: +``` +pdflatex not found. Please select a different --pdf-engine or install pdflatex +``` +This can be remedied via: +``` +sudo apt-get install texlive-latex-recommended +``` +Which then nets you: +``` +Error producing PDF. +! Font T1/cmr/m/n/10=ecrm1000 at 10.0pt not loadable: Metric (TFM) file not found. +``` + +This incredibly helpful message can be resolved via: +``` +sudo apt-get install texlive-fonts-recommended texlive-latex-recommended +``` + +Which finally produces acceptable PDF files using the very first command. Phew. +\ No newline at end of file diff --git a/content/posts/ffmpeg-pbx-conversions.md b/content/posts/ffmpeg-pbx-conversions.md @@ -0,0 +1,29 @@ +--- +title: "FFmpeg audio conversions for PBX" +date: 2019-01-14T16:08:00 +tags: ["formats", "guides", "linux", "pbx", "snippets", "windows"] +--- + +Firstly, grab a copy of `ffmpeg` from the [official website](https://www.ffmpeg.org/download.html#build-windows) if you're running Windows, or your package manager if you're running Linux. + +## Samsung OfficeServ +``` +ffmpeg -i "input.ext" -codec pcm_s16le -ar 8000 -ac 1 -ab 128k "output.wav" +``` + +### LG/Ericsson eMG80 +``` +ffmpeg -i "input.ext" -codec:a pcm_mulaw -ar 8000 -ac 1 -ab 64k "output.wav" +``` + +### LG/Ericsson Hosted Platform +``` +ffmpeg -i "input.ext" -codec:a pcm_s16le -ar 8000 -ac 1 -ab 64k "output.wav" +``` + +### Gamma Horizon Hosted Platform +``` +ffmpeg -i "input.ext" -codec:a pcm_mulaw -ar 8000 -ac 1 -ab 64k "output.wav" +``` + +Sometimes, the files can be a little loud when played. You can simply knock this down during conversion via `-af volume=0.8` which predictably equates to 80% of the original volume +\ No newline at end of file diff --git a/content/posts/flashing-skulls-bios-thinkpad-x230t.md b/content/posts/flashing-skulls-bios-thinkpad-x230t.md @@ -0,0 +1,46 @@ +--- +title: "Flashing Skulls to a Thinkpad x230t" +date: 2020-01-21T11:22:00 +tags: ["guides", "hardware", "linux", "software"] +--- + +I've always been quite interested in the [Coreboot project](https://www.coreboot.org/), and my laptop of choice (the [Lenovo Thinkpad x230t](/hardware/)) semeed to *almost* be supported. When I learned about the [Skulls project](https://github.com/merge/skulls) it seemed like a perfect match. + +After a bit of research and on the advice of a few people who had gone through the process previously I picked up a CH341A USB programmer instead of the usual Raspberry Pi to do the actual flashing. It turns out however you don't need any specialised hardware at all and the entire process can now be done in software using an exploit and the excellent [1vyrain](https://github.com/n4ru/1vyrain). + +# Preparing your laptop +Like an idiot, many months ago I'd upgraded my BIOS version to the absolutely latest version offered by Lenovo which at the time of writing is 2.75. The exploit 1vyrain uses is only compatible with versions 2.58 and below. +The official word from Lenovo is that you're unable to downgrade your BIOS after specific versions however this is false as stated in [this helpful guide](https://github.com/gch1p/thinkpad-bios-software-flashing-guide#downgrading-bios). + +The long winded way I got my BIOS downgraded was to write a bootable FreeDOS installation to my USB stick, using [Rufus](https://rufus.ie/) on Windows. The only files required on top of this is a compatible version of `dosflash.exe` and your BIOS image. + +You can grab a compatible `dosflash.exe` by extracting the binary from the [BIOS upgrade iso](https://pcsupport.lenovo.com/gb/en/products/laptops-and-netbooks/thinkpad-x-series-tablet-laptops/thinkpad-x230-tablet/downloads/ds029683) file using +``` +geteltorito -o out.img g2uj15us.iso +mount -t vfat bios.img bios/ -o loop +``` +Inside this mounted image you can grab dosflash and copy it to the root of your FreeDOS USB stick. Lastly you want a compatible BIOS image. Initially there was no support for the x230t model, but this has been added with [this pull request](https://github.com/n4ru/IVprep/pull/3) so you can grab the file directly [from here](https://github.com/n4ru/IVprep/raw/master/BIOS/X230t.FL1). + +Now boot up FreeDOS and flash the old BIOS image using: +``` +dosflash.exe /sd /file X230t.FL1 +``` + +Confirm you're running a compatible BIOS version and move on to the next step. + +# Preparing Skulls +I'm not going to compile Skulls myself, it's an additional step that I would rather not deal with. I downloaded [the latest version](https://github.com/merge/skulls/releases/latest) and extracted the **non-free** `top.rom` file to an accessible directory on my webserver. More on this later. + +# Flashing Skulls +1vyrain offers a [live USB image](https://n4ru.it/1vyrain/) for doing all required leg work and applying the exploit. +Now boot your img file in UEFI mode and follow the onscreen instructions. Eventually you'll be able to specify your own image to flash which is where the file we prepared above comes in. Enter the path for this and flash the image and reboot when prompted. + +# First Boot +Your laptop was likely previously booting in UEFI mode, but the included SeaBIOS image will only boot in BIOS mode so you're going to need to chroot into your install and install a compatible bootloader. I was in the mood for a clean install anyway so just installed `grub` on my Linux install. + +I did plan to look into preparing a [TianoCore](https://www.tianocore.org/) or [YaBits](https://yabits.github.io/) payload to support UEFI, but BIOS works well enough and I don't care enough to compile my own Skulls images. + + +And with that, an entry from the [New Years Resolution list](/blog/2020/01/02/2020-new-years-resolutions/) is complete. +<!-- # Cleaning ME --> + diff --git a/content/posts/formatting-dumped-subtitles.md b/content/posts/formatting-dumped-subtitles.md @@ -0,0 +1,22 @@ +--- +title: "Formatting dumped subtitles into a vocabulary list" +date: 2020-05-28T16:52:00 +tags : [ "formats", "languages", "linux", "media", "snippets", "software", ] +--- + +As per my previous post, you should now have a single `srt` subtitle file, to convert this into a single word list that you can begin translating away at, you can run the below verbose script. + +``` +tr ' ' '\n' < subs.srt \ + sed -e 's/<[^>]*>//g' \ + tr '[:upper:]' '[:lower:]' \ + tr -d '\>\/!-.:?,.\",[:digit:]' \ + sed -e '/^[[:space:]]*$/d' -re 's/\s+$//' \ + sort -u > subs-sort.srt +``` + +In short, this will break all spaces into new lines, remove HTML tags, make everything lowercase, remove some strange characters and empty lines then finally sort the list while removing duplicates. + +One issue I've noticed is some _special_ characters won't be converted to lowercase Å to å for example. I don't have an automated workaround for you aside from specifying the letters individually for example using: + +<pre><code>tr 'ÆØÅÄÖÐÞÁÉÍÓÚÝ' 'æøåäöðþáéíóúý'</pre></code> +\ No newline at end of file diff --git a/content/posts/gpt-formatting-drives-under-linux.md b/content/posts/gpt-formatting-drives-under-linux.md @@ -0,0 +1,42 @@ +--- +title: "GPT formatting new drives under Linux" +date: 2018-11-14T10:42:00 +tags: ["guides", "linux", "servers", "snippets"] +--- + +So, you've bought a shiny new hard drive and would like to format it and use it on your headless Linux server. +For this guide, we'll be partitioning it as a GPT partition to support sizes over 2TB, and formatting it as ext4. + +Find device id (/dev/sdc, etc): +``` +lsblk +``` + +Edit the drive, using fdisk in GPT mode with: +``` +sudo gdisk /dev/sdc +d +n +[enter] x5 +w +``` + +Make a partition: +``` +sudo mkfs.ext4 /dev/sdc1 +``` + +Verify everything formatted correctly: +``` +lsblk --fs /dev/sdc1 +``` + +Find the drives new UUID: +``` +blkid /dev/sdc1 +``` + +Lastly, add a mountpoint to `/etc/fstab`: +``` +UUID=00000000-0000-0000-0000-000000000000 /mnt/mount-point ext4 defaults 0 0 +``` diff --git a/content/posts/kodi-watched-list-export.md b/content/posts/kodi-watched-list-export.md @@ -0,0 +1,28 @@ +--- +title: "Exporting Kodi Watched Status to Markdown" +date: 2019-01-31T10:25:00 +tags: [ "guides", "kodi", "linux", "media", "movies", "servers", "snippets", "software" ] +--- + +As I've outlined in [this page](/archive/movies/) I'd prefer to save space on my server and delete movies once I've seen them but also keep a log so I don't need to remember everything. + +Step in the Kodi plugin [WatchedList](https://kodi.wiki/view/Add-on:WatchedList) which will happily export your status to a SQLite database that can be worked with as follows: +``` +if [ -f "movies.csv" ]; then rm movies.csv; fi +sqlite3 -noheader -csv watchedlist.db "select title from movie_watched;" > movies.csv +sed -i -e 's|\"||g' -e 's|^|* |g' movies.csv +sort -k 2 < movies.csv > movies.md +rm movies.csv +``` + +One thing you may notice, is movies being released in year '65535'. This is caused by your Kodi library itself and can be sorted by refreshing the title to grab new (and hopefully correct) metadata. + +You can also run the below to get a list of TV shows that have watched episodes. I'm unable to find an efficient way of getting completely watched TV shows, but the below will get you halfway there: +``` +sqlite3 -noheader -csv watchedlist.db "select * from tvshows;" > tv_shows_index.csv +watched_id=$(sqlite3 -noheader watchedlist.db "select idShow from episode_watched;" | uniq) +for i in $watched_id; do grep $i tv_shows_index.csv | cut -f2 -d, >> tv_shows.csv; done +sed -i -e 's|\"||g' -e 's|^|* |g' tv_shows.csv +sort -k 2 < tv_shows.csv > tv_shows.md +rm tv_shows.csv tv_shows_index.csv +``` +\ No newline at end of file diff --git a/content/posts/libreelec-dowgrade-compatibility.md b/content/posts/libreelec-dowgrade-compatibility.md @@ -0,0 +1,38 @@ +--- +title: "Downgrading LibreElec, skipping compatibility checks" +date: 2018-12-19T09:35:00 +tags: ["htpc", "kodi", "linux", "snippets", "software"] +--- + +I run Libreelec on my ODROID-C2 SBC as a HTPC. The combination work surprisingly well and I rarely have any issues. Perhaps stupidly however, I updated from the stable 8.2.5 to the latest beta build to try out the RetroPlayer functionality. Long story short, this didn't pan out so well and I ended up in *SAFE MODE* with not a whole lot working. + +I tried downgrading using addons but this also gave me some grief with compatibility checks. The error I was receiving was because I was using an `arm` compile of the software, but I was trying to install `aarch64` which is perfectly compatible with the C2 board but not according to the compatibility check. + +So, to manually downgrade, ssh into your board while in safe mode. + +``` +ssh root@libreelec +``` +Your default root password will intuitevely be `libreelec`. + +Then navigate to your upgrade directory: +``` +cd /storage/.update/ +``` + +Grab the latest stable version of the software: +``` +wget http://releases.libreelec.tv/LibreELEC-Odroid_C2.aarch64-8.2.5.img.gz +``` + +And disable the compatibility check on upgrade via: +``` +touch .nocompat +``` + +Lastly, reboot, and enjoy your hopefully stable LibreElec installation. +``` +reboot +``` + +I noticed watched status and a few of my settings had defaulted but aside from this everything worked perfectly. Rejoice! +\ No newline at end of file diff --git a/content/posts/manually-fixing-malformed-aac-bitstreams.md b/content/posts/manually-fixing-malformed-aac-bitstreams.md @@ -0,0 +1,16 @@ +--- +title: "Manually fixing malformed AAC bitstreams" +date: 2019-10-22T09:21:00 +tags: ["formats", "guides", "media", "snippets", "software", "windows"] +--- + +Recently while running `youtube-dl` on Windows, `ffmpeg` wasn't found in `%PATH%`, so it was unable to automatically fix the AAC bitstream. The file will play fine, but in the interest of completeness I still wanted this to be applied to my new files. + +Not wanting to alter my path variable for a one-off fix, I investigated the source code a little and found the `FFmpegFixupM3u8PP` [function here](https://github.com/ytdl-org/youtube-dl/blob/3089bc748c0fe72a0361bce3f5e2fbab25175236/youtube_dl/postprocessor/ffmpeg.py#L577). + +With that, you can now run: +``` +ffmpeg -i "input_file.mp4" -c copy -f mp4 -bsf:a aac_adtstoasc "output_file.mp4" +``` + +And you're done. +\ No newline at end of file diff --git a/content/posts/manually-formatting-mounting-and-using-hetzner-volumes.md b/content/posts/manually-formatting-mounting-and-using-hetzner-volumes.md @@ -0,0 +1,60 @@ +--- +title: "Manually formatting, mounting and using Hetzner volumes" +date: 2019-07-04T15:40:00 +tags: ["formats", "linux", "servers", "snippets", "software"] +--- + +I've recently moved all my server infrastructure over to Hetzner, and to date everything's been going swimmingly. + +The default partition options though aren't ideal, so I'm scrapping my existing volume and recreating it manually, properly. + +Firstly, login to your Hetzner account and create your volume: + +``` +Volumes > Create Volume > Size in GB +Name whatever +Mount options Manual +Create & Buy Now +``` + +Now find the partition after logging into your server via issuing `lsblk`. In my case, this was `/dev/sdb` + +You can now partition this new drive as a GPT volume by doing the following: +``` +gdisk /dev/sdb +o +n +enter +enter +enter +w +enter +``` + +One partitioned, you can format this new partition as ext4, via the following: +``` +sudo mkfs.ext4 /dev/sdb1 +``` +Seeing as though I'm going to be using this partition as extra storage for downloaded files I don't really need the reserved blocks it offers, which can be disabled via: +``` +sudo tune2fs -m0 /dev/sdb1 +``` + +Now, we'll make a mount point for the newly formatted volume: +``` +mkdir $HOME/mountpoint +``` + +It's also worthwhile grabbing the disk's UUID via `sudo blkid /dev/sdb1 -s UUID -o value`. + +Now we're going to add an entry in `/etc/fstab` so the partition will be mounted automatically. You'll need to edit this file as root and add the following line: +``` +UUID=your-uuid-from-above /home/youruser/mountpoint ext4 discard,nofail,defaults 0 0 +``` + +Now that your `fstab` file is ammended, you can remount all your partitions via: `sudo mount -a` + +Last but not least, change the owner of the directory to prevent file permission issues: +``` +sudo chown youruser:youruser /home/user/mountpoint -R +``` diff --git a/content/posts/notes-on-sorting-photos.md b/content/posts/notes-on-sorting-photos.md @@ -0,0 +1,57 @@ +--- +title: "Notes on Sorting Photos" +date: 2019-12-23T11:50:00 +tags: ["android", "formats", "guides", "linux", "media", "minimalism", "snippets", "software"] +--- + +My smart phone is an android device, it connects to my computer via MTP over USB and I store my photographs on cloud storage. Subsequently I want these pictures to be sorted, and I don't want any duplicates. + +This entire process is structured around using ArchLinux. Below is how I complete this: + +# Mount your phone's storage +I use `simple-mtpfs` to access my phone, this is installed from the AUR using `yay`: +``` +yay -S simple-mtpfs +simple-mtpfs -l +mkdir phone +simple-mtpfs --device 1 phone +ls phone +``` +This should now print out the file and folder structure of your phone. + +# Install Phockup +Now we're going to install `phockup` to sort the files into a coherent folder structure: +``` +sudo pacman -S perl-image-exiftool python3 +curl -L https://github.com/ivandokov/phockup/archive/latest.tar.gz -o phockup.tar.gz +tar -zxf phockup.tar.gz +sudo mv phockup-* /opt/phockup +sudo ln -s /opt/phockup/phockup.py /usr/local/bin/phockup +``` + +# Mount your storage +Now we're going to mount our cloud storage destination, using the ever useful `rclone`: +``` +mkdir pictures +rclone mount drive-pictures: pictures --daemon +``` + +# Sort your images +Now we can invoke `phockup` to sort and move the source files to the destination folder: +``` +phockup phone/DCIM/Camera/ pictures/personal/photos/ -m +mv phone/Pictures/Screenshots/* pictures/personal/screenshots/ -v +rm -rf phone/DCIM/.thumbnails +find phone -maxdepth 2 -empty -delete +``` +I also move my screenshots, as I like these being backed up but I don't care about how they're sorted. +I also delete unused thumbnails and empty folders, just to keep things tidy. + +# Dedupe your images +Lastly, I deduplicate the images using `jdupes`. This will prompt you for every match it finds which copy you want: +``` +yay -S jdupes +jdupes pictures/personal -rd +``` + +And you're done. diff --git a/content/posts/personal-vim-cheatsheet.md b/content/posts/personal-vim-cheatsheet.md @@ -0,0 +1,118 @@ +--- +title: "Personal VIM cheatsheet" +date: 2020-06-14T12:58:00 +tags : [ "guides", "learning", "linux", "servers", "snippets", "software", ] +--- + +When editing files on Linux, I've always used `nano`, it was always installed and `vi` just seemed incredibly awkward to use, with all the memes about never being able to exit, and weird things happening being right up my street. I'd tried `vimtutor` but was left in pretty much the same place as I started. + +So, when the venerable [Luke Smith](https://lukesmith.xyz/) posted an [hour long walkthrough](https://www.youtube.com/watch?v=d8XtNXutVto) of his methods for completing vimtutor, I was hooked. + +I've now moved all my Linux machines over to neovim and haven't looked back. Without further ado I present the notes cheatsheet that I made while watching the video, for future reference: + +``` +ZZ quit with saving +ZQ quit, without saving +zt makes current line the topmost +zz centre window around current line + +A enters insert mode at the end of the line +I enters insert mode at the start of the line +a enters insert mode after current character +i enters insert mode before current character + +Ctrl + r redo changes +Ctrl + g shows location status bar +gg go to the top line +G go to last line +25% move to 25% of the way through the file +'' move back to previous location before % movement +u undoes changes + +v start visual selection/highlighting +Ctrl + v start visual selection as a block +v start visual selection/highlighting, using complete lines + +gf open written filename in text, in vim + +y yank/copy +yy yank whole line + +. redo last command run + +w move forwards word by word +b move backwards word by word + +/ search for text going forwards +/ enter n next search result +/ enter N previous search result +? search for text going backwards +:set ic toggles case insensitivty +:set hlsearch highlights search results +:nohlsearch disables highlighted search results + +r replace current letter with next letter you type +R replace mode, more than one character, but exact length matching + +{ move cursor up 4 lines at a time +} move cursor down 4 lines at a time + +v enters visual mode +V enters visual mode, whole lines + +$ move to the end of the line +^ move to the start of the line +% jump to matching parenthesis + +:s/old/new/ replace old with new once on a line +:s/old/new/g replace old with new every time on a line +:%s/old/new/g replace old with new every time in the whole file +:%s/old/new/gc replace old with new every time in the whole file, but prompting beforehand + +:! run shell command + +:norm run command on highlighted lines + +:setlocal spell! spelllang=en_gb start spellcheck +:setlocal spell! stop spellcheck +z= correct misspelled word when highlighted +]s jumps to next misspelled word + +p put/paste previously deleted lines +5p paste, 5 times + +x delete character under cursor +dw delete word (at the start of the word) +daw delete whole word including whitespace +diw delete whole word, excluding whitespace +di( delete everything inside parentheis +da( delete everything inside, and including parenthesis +dw delete word (current word, anywhere) +d$ delete the remainder of the line +D delete the remainder of the line +db delete one word backwards +d5w deletes 5 words forwards +dd deletes the whole line +3dd deletes the next 3 lines + +c change mode, same as d, but goes to insert mode after +cw delete word, then enter insert mode +o insert new line and enter insert mode +O insert new line above current and enter insert mode + +0 move to start of line +2w move 2 words to the left + +:earlier 5m undo 5 minutes worth of changes +:later 5m redo 5 minutes worth of changes after undoing +``` + +One nice bonus that I picked up on from Lukes dotfiles was fixing line endings to the Linux format on every save which is just great. + +Add the below to your `init.vim` file (if using neovim): + +``` +" Automatically deletes all trailing whitespace and newlines at end of file on save. + autocmd BufWritePre * %s/\s\+$//e + autocmd BufWritepre * %s/\n\+\%$//e +``` diff --git a/content/posts/phone-link-speed-dials-to horizon-integrator.md b/content/posts/phone-link-speed-dials-to horizon-integrator.md @@ -0,0 +1,83 @@ +--- +title: "Migrating LG Phone-Link Contacts to Horizon Integrator" +date: 2019-07-23T12:48:00 +tags: ["databases", "formats", "guides", "linux", "pbx", "servers", "windows", "work"] +--- + +If you've used LG's Phone-Link software for any reasonable period of time, you should have a large XML file in your `%appdata%\PHONE-LiNK` directory named `Recent.xml`. + +Make a copy of this and get it on a computer with a Linux environment. For this process, we're going to need `xmllint` from the `libxml2-utils` package and `xmlstarlet` from the `xmlstarlet` package. + +Once these are installed, verify your `Recent.xml` file is the expected unholy mess we've come to know and love via `less Recent.xml`. Once you've been sufficiently disheartened, close `less` by pressing `q`. + +From this, make a backup as that's always a good idea: +``` +cp "Recent.xml" "backup-Recent.xml" +``` + +Now we're going to lint the file, merge the incoming and outgoing blocks, and build a CSV file: +``` +xmllint "Recent.xml" --format --output "Recent.xml" +sed -i 's/CalledContact/CallerContact/g' "Recent.xml" +xmlstarlet sel -T -t -m /Recent/CallerContact -v "concat(Name,';',Contact,';',Tel,';;',Email,';',Company)" -n "Recent.xml" > "Recent.csv" +``` + +Now we have a messy CSV file with the information in it we wanted. + +We're going to sort this, remove unecessary entries (from places with no names) and fix up the delimiters (as Phone-Link will save Names as Contact, Company which breaks CSV files): +``` +sort -b -u -o "Recent.csv" "Recent.csv" +sed -i '/^(/d' "Recent.csv" +sed -i 's/, / - /g' "Recent.csv" +sed -i 's/;/,/g' "Recent.csv" +``` + +Last but not least, we're going to add our header row, again using `sed`: +``` +sed -i '1 i\First Name,Last Name,Number,Extension,Email,Company' "Recent.csv" +``` + +Now you can start working your way through the inane and sometimes arcane Horizon Company Directory requirements, as detailed below: +* No brackets +* No @ symbols (except for email addresses) +* No apostrophes +* No ampersands +* No slashes +* No hashes +* No periods +* No hyphens +* No spaces +* 15 characters max +* No empty fields (except for extension, and email) + +The way I go about this is to split the columns into separate files, apply the filters and then rebuild the file afterwards. + +So, let's get splitting: +``` +for i in {1..6}; do cut -f"$i" -d\, "Recent.csv" > "column-$i.txt"; done +``` + +Here is where I manually split the *Name* field into *First Name* and *Last Name*. I did this manually as some names didn't nicely fit into the *A B* format. + +Now we've got our columns split, lets get processing those invalid characters. You'll need to process each file individually, as certain files need certain filters. +``` +sed -i -e "s/#//g" file.txt # hash symbols +sed -i -e "s/'//g" file.txt # apostrophes +sed -i -e "s/@//g" file.txt # at symbols +sed -i -e "s/\///g" file.txt # slashes +sed -i -e "s/&//g" file.txt # ampersands +sed -i -e "s/(//g" file.txt # open brackets +sed -i -e "s/)//g" file.txt # close brackets +sed -i -e "s/-//g" file.txt # hyphens +sed -i -e "s/ //g" file.txt # spaces +sed -i -e 's/\.//g' file.txt # periods +sed -i -e 's/^$/x/' file.txt # replace blank lines +sed -i -e "s/^\(.\{15\}\).*/\1/g" file.txt # snip columns to length +``` + +Once done, merge the files back together using paste, removing duplicates with uniq: +``` +paste -d, column-{1..6}.txt | uniq > Recent-processed.csv +``` + +Now try to upload the resulting file, and manually fix any inevitable errors that will have cropped up like duplicate entries and trailing invalid characters. Above is the process I used for my dataset. +\ No newline at end of file diff --git a/content/posts/ps1-iso-formats-conversion.md b/content/posts/ps1-iso-formats-conversion.md @@ -0,0 +1,74 @@ +--- +title: "Sony PS1 Image Conversion Guide" +date: 2020-05-03T16:52:00 +tags: ["formats", "guides", "linux", "snippets", "software"] +--- + + +Every now and then, when acquiring a PlayStation game from nefarious sources you'll be presented with a folder full of mysterious files instead of a single expected single iso image or friendly bin/cue pair or chd. + +There are plenty of guides out there for Windows but none really covering the Linux side of things. This guide assumes you're running Debian, or at least have access to the Debian repository of software. + +### .7z +``` +apt-get install p7zip +for i in *.7z; do p7zip -d "$i"; done +``` + +### .rar +``` +apt-get install unrar +for i in *.rar; do unrar x "$i"; done +``` + +### .zip +``` +apt-get install unzip +for i in *.zip; do unzip "$i"; done +``` + +### .ape +``` +apt-get install ffmpeg +for i in *.ape; do ffmpeg -i "$i" -f s16le "${i%ape}bin" && rm "$i"; done +``` + +### .ecm +``` +apt-get install ecm +for i in *.ecm; do ecm-uncompress "$i" && rm "$i"; done +``` + +### Missing .cue +Sometimes (and annoyingly) these game packages won't include their associated cue sheet, the majority can be found in [this collection](https://github.com/opsxcq/psx-cue-sbi-collection/). +Alternatively, you can [create one](https://github.com/opsxcq/psx-cue-sbi-collection/#generating-a-generic-cue-file) if there is only a single track in the disc image. + +### Conversion to .chd +One last step that I quite like to perform is to convert this bin/cue pair into a single .chd file. +Support for this file format is quite good albeit lacking from mednafen (as is the less-supported and documented pbp format) however is present in the Retroarch port, [beetle-psx](https://github.com/libretro/beetle-psx-libretro). +``` +apt-get install mame-tools +for i in *.cue; do chdman createcd -i "$i" -o "${i%cue}chd"; done +``` + +### Playlist .m3u files +Playlist support is one thing lacking in the chd format currently. +If you have a multi-disc games, such as Metal Gear Solid and you'd like to take advantage of disc swapping facilities provided by your emulator you can create a playlist file containing your image files. +For the Metal Gear Solid example, your m3u file will simply be called Metal Gear Solid.m3u and it's contents will be: +``` +Metal Gear Solid.cd1.chd +Metal Gear Solid.cd2.chd +``` + +### SquashFS alternative +Alternatively, if you'd still like to run your games via vanilla `mednafen` or just want to compress your game images into a single archive, you can do the following: +``` +apt-get install squashfs-tools +mksquashfs sony_playstation_games_directory sony_playstation.squashfs -b 1048576 -comp xz -Xdict-size 100% +``` + +And then, to mount the archive: +``` +mkdir sony_playstation +mount sony_playstation.squashfs sony_playstation -t squashfs -o loop +``` +\ No newline at end of file diff --git a/content/posts/ps2-iso-compression-with-maxcso.md b/content/posts/ps2-iso-compression-with-maxcso.md @@ -0,0 +1,21 @@ +--- +title: "PS2 Image CSO Compression on Linux with MaxCSO" +date: 2018-11-27T10:23:00 +tags: ["formats", "guides", "linux", "snippets", "software"] +--- + +CSO was originally only intended for smaller PS1/PSP disc images, so a different version can be compiled to support the larger DVD based images that PS2 games are usually distributed on. + +``` +sudo apt-get install git-core build-essential liblz4-dev libuv1-dev zlib1g-dev +git clone https://github.com/unknownbrackets/maxcso.git +cd maxcso +make +sudo make install +``` + +Now that maxcso has been compiled and installed, simply compress all iso images in a directory via: + +``` +for i in *.iso; do maxcso "$i"; done +``` diff --git a/content/posts/removing-acms-drm-epub.md b/content/posts/removing-acms-drm-epub.md @@ -0,0 +1,15 @@ +--- +title: "Removing ACSM DRM from E-Books" +date: 2018-11-24T10:22:00 +tags: ["books", "guides", "software", "windows"] +--- +Recently I found a rare-ish e-book available via the Internet Archive's [Open Library](https://openlibrary.org/) project, there was a waiting list and I wanted to read this on my Kindle without needlessly tying it up for other people wanting to read it. +The combination of these two circumstances leads me to stripping the DRM from this file so I could work with it how I wanted. + +Firstly, you'll need to install [version 2.0.1 of Adobe Digital Editions](https://www.adobe.com/support/digitaleditions/downloads.html) as newer versions use a newer encryption scheme. With this installed, authorise your computer and open your `acsm` file to verify everything's correct with the book. + +Next, you'll need to install [Calibre](https://calibre-ebook.com/) which you should probably already have installed if you're working with Kindles in any real manner. + +Next, you should grab the latest release of the excellent [De-DRM Tools](https://github.com/apprenticeharper/DeDRM_tools/releases) by Apprentice Harper. With this downloaded, extract the contents of the file, open Calibre and add the plugin via Preferences > Plug-ins > Load plug-in from file. The file you want is `DeDRM_plugin.zip`. Restart Calibre and the plugin should be installed. + +Lastly, grab the plain `epub` file from your `%userprofile%\documents\My Digital Editions` directory. Import this into Calibre by dragging it into the main window and you're done. A file you can work with at long last. Now return that book so other people can read it. +\ No newline at end of file diff --git a/content/posts/resetting-passwords-chntpw.md b/content/posts/resetting-passwords-chntpw.md @@ -0,0 +1,30 @@ +--- +title: "Resetting Windows Passwords from Linux with chntpw" +date: 2018-12-13T09:58:00 +tags: ["guides", "linux", "snippets", "software", "windows"] +--- + +I came across a strange issue recently, where I needed to reset a users password however the computer was unable to boot from USB so my usual [ntpasswd](https://pogostick.net/~pnh/ntpasswd/) option was out of the question. + +Step in the ever userful `chntpw` which is available in the Debian repositories and can be installed via: +``` +sudo apt-get install chntpw ntfs-3g +``` + +`ntfs-3g` is also thrown into the mix so you can mount the inevitable Windows NTFS partition with write permissions + +From here on, we'll be executing everything as root to avoid strange permission issues, so elevate yourself via `su`. + +Find your disks Windows partition via `blkid` and mount it via: +``` +mkdir /mnt/win && ntfs-3g /dev/sdb2 /mnt/win +``` +Where `sdb2` is your Windows Partition. + +Then `cd` to your System32's config directory with: +``` +cd /mnt/win/Windows/System32/config +``` +and ensure the `SAM` registry hive is located there with `ls`. + +Now start the software on the SAM file with `chntpw -i SAM`. Follow the instructions onscreen to blank the password and unlock the account if need be. When quitting ensure you save your changes then boot the Windows drive and enjoy your new unlocked Administrator (or other) account. +\ No newline at end of file diff --git a/content/posts/samsung-officeserv-serial-upgrade.md b/content/posts/samsung-officeserv-serial-upgrade.md @@ -0,0 +1,87 @@ +--- +title: "Upgrading a Samsung OfficeServ PBX using the serial interface" +date: 2019-08-27T13:55:00 +tags: ["guides", "hardware", "linux", "pbx", "projects", "software", "work"] +--- + +# Requirements: + +* COM Serial port +* Serial to CD Audio cable +* [Putty](https://www.putty.org/) +* Firmware package `ap30v501.pkm cs30v493.pkm dr30v501.pkm ms30v125.pkm rd30v501.pkm rt30v501.pkm ws30v501.pkm` +* BootROM `bt30v493.bin` file +* Voicemail Package `VM_L_UK.tgz` +* [TFTPD server](http://tftpd32.jounin.net/tftpd32_download.html) +* OfficeServ Device Manager `osdm.exe` + +# System Setup + +## Cards +The only cards you'll need is something to connect up a digital phone to, so either a 4DM or a 2DM card in the middle slot to connect up a phone. + +## DIP Switches +To set the system into UK mode, your DIP switches must be set to `01000000`. For other country codes, look into the documentation. + +## Cable Setup +I'm using an old IDE CD-ROM drive audio cable to serial that I've created for this purpose. As there aren't 3 contiguous pins, I used both ends of the cable to give me 2 + 1 for the 3 pins. + +The serial port on the PBX is the 3 pins behind the line card slot at the bottom of the system. I'm using a StarTech USB Serial adapter on Windows 10 and it's functions perfectly. + +# Computer Setup + +## Putty Setup +* Serial Line > COM1 +* Speed > 38400 +* Connection Type > Serial +* Connection > Serial > Flow control > None + +## Tftpd32 Setup +All you want to alter in this is the Current Directory so that it offers all your firmware and bootrom files. The Server interface should be your computers local IP address and TFTP security should be set to None. + +# Upgrade Process + +Fire up the system with your serial cable connected and you should see the system booting up. You'll need to press the Q key to interrupt the boot process. + +## MAC Address +If you're replacing en existing cabinet, you can change the current system's MAC address to match the old system ensuring you can use the same licences. For example: +``` +setenv eth1addr 00:16:32:82:9c:8b ; setenv ethaddr 00:16:32:82:9c:8b ; saveenv +``` + +## Boot ROM + +Once you've booted up, enter `printenv` to check current boot variables. If your `bootfile` variable is lower than `v493` you will need to upgrade this via: +``` +setenv bootfile bt30v493.bin ; setenv ipaddr 10.0.0.247 ; setenv gatewayip 10.0.0.1 ; setenv serverip 10.0.0.66 ; setenv netmask 255.255.255.0 ; saveenv ; run updateboot; run clearenv ; reset +``` + +The important values to look at here are `ipaddr` which is your OfficeServ system's IP address, and `serverip` which is your TFTPD server address. By default, the system's IP address is 10.0.2.10 and the gateway address is 10.0.2.1, but you'll likely want to change these. + +## System Firmware + +Once you're on bootrom v4.93 you can upgrade the rest of the system using: +``` +setenv ipaddr 10.0.0.247 ; setenv gatewayip 10.0.0.1 ; setenv serverip 10.0.0.66 ; setenv netmask 255.0.0.0 ; setenv mspname ms30v125.pkm ; setenv cspname cs30v493.pkm ; setenv rfsname rd30v501.pkm ; saveenv ; run nanderaseall ; run install +``` +This process will take a long time to complete, but you'll be given the status of the upgrade via your serial connection. + + +# First boot +Once booted up, verify your firmware version via: `Trans 800 4321 1 Speaker 727`, this should be 5.01. Log out with `Trans 800 0 Trans` and connect up using OSDM. + +## Login +The address will be whatever you set the `ipaddr` variable to in the preceeding steps. The default password for firmware v5.01 is `#PBX1357sec.com`. It will ask you to change this when you first login. + +## Licences +Once logged in, if you have existing licences, add them via MMC860. +<!-- * Resource: `GYNGHELH-PLJSOOWP-THUVZIU9-F1A0FRCM-7UDVFS3O-7Z5CHYEQ`--> +<!-- * SIP Stack: `GSWVEHM2-2MZLLNBC-SUGBLGM7-2U9FBL6X-ORS3O2AW-7QOXALMT`--> +<!-- * Service: `NMWPHHM2-2MZLLNBC-SUUXQGM7-UU97BMIX-OJS3O2AW-7QOXALMT`--> + +## Voicemail +Lastly, as we've entirely wiped this system during the upgrade process you'll need to upload your voicemail prompt package, usually called `VM_L_UK.tgz`. This can be done via: +``` +File Control > Program > File > VM_L_UK.tgz > Upload +``` +After the file has been uploaded, reboot the system in MMC811. Once the system is back up and working, dial the VM group (usually 509) to ensure your prompts are all working. Enjoy your new system. diff --git a/content/posts/scraping-now-albums.md b/content/posts/scraping-now-albums.md @@ -0,0 +1,37 @@ +--- +title: "Scraping and Grabbing Now! albums" +date: 2018-12-04T16:28:00 +tags: ["guides", "linux", "lists", "music", "servers", "snippets", "software"] +--- + +Recently a collegue at work came to me to download them an album from online, unfortunately as it was a compilation album and the individual tracks had been released a million times already this wasn't to be released through the usual channels. + +No matter though, vague scripting to the rescue! The tracklist that I was after was available on the [now website](https://www.nowmusic.com/album/now-rock-n-roll/) which had no issues being scraped. + +``` +source=$(wget https://www.nowmusic.com/album/now-rock-n-roll/ -qO-) +artists=$(printf "$source" | grep artist | sed 's/^.*>\([^<]*\)<.*$/\1/') +titles=$(printf "$source" | grep \"title\" | sed 's/^.*>\([^<]*\)<.*$/\1/') +paste <(printf "$artists") <(printf "$titles") | sed -e 's/\t/ - /g' > parse_list.txt +``` + +Now we have all 73 tracks in a single text file, no fuss, no muss. + +All of these tracks are incredibly likely to be uploaded to youtube, so we can grab them using the ever-excellent `youtube-dl` + +To manage this, we'll run a youtube search on every entry, and grab the resulting output, converting it to `mp3` along the way. + +``` +while read line; do youtube-dl -x --audio-format=mp3 ytsearch:"$line lyrics"; done < parse_list.txt +``` + +Please note, I append a " lyrics" in the search string to avoid too obvious music videos that sometimes have + +With this, we have 73 `mp3` files dumped into our working directory with messy filenames. I usually throw these into `beets` in singleton mode via docker to improve the quality of the filenames/tags. + +``` +docker run -it -v $(pwd):/music linuxserver/beets bash +beet im -s /music +``` + +This will take some time, and will need a lot of nannying as there are no existing tags to work with initially. After the process however you'll be rewarded with tagged files ready to (rock 'n) roll. +\ No newline at end of file diff --git a/content/posts/selfhosted-password-manager.md b/content/posts/selfhosted-password-manager.md @@ -0,0 +1,44 @@ +--- +title: "Selfhosted Password Manager" +date: 2018-09-26T11:30:00 +tags: ["guides", "linux", "software"] +--- + +Passwords in my experience are a fickle thing, on one hand you absolutely need long and complex passwords, different for every site you use, but remembering these unique and complex passwords is nigh impossible. +This issue is only made worse by brute forcing passwords being made easier every day as more and more datasets from large websites are leaked, showing patterns, schemes and weaknesses in unlikely places. +Password Managers bridge part of this gap, but then you're either relying on a third party to host these for you, or you're using a locally installed application which both come with their own collections of baggage and issues. + +This would be where [Keeweb](https://github.com/keeweb/keeweb) comes in, as a single file, web based password manager that uses the standard KeePass format it seems like a nice fit for our requirements. As an added bonus, it can also be run as a [cross-platform application](https://github.com/keeweb/keeweb/releases/) which offers a nice offline alternative as well. + +Helpfully, there are docker images available already which cover most of the leg work associated with grabbing the application and setting up a working webdav share. Assuming you have a working `docker` installation, simply run: + +``` +docker run -d -p 80:80 -e WEBDAV_USERNAME=username -e WEBDAV_PASSWORD=password -v $HOME/keeweb:/var/www/html/webdav viossat/keeweb-webdav +``` + +Or alternatively, in `docker-compose` notation: +``` +keeweb: + image: viossat/keeweb-webdav + ports: + - 80:80 + volumes: + - $HOME/keeweb:/var/www/html/webdav + environment: + - WEBDAV_USERNAME=username + - WEBDAV_PASSWORD=password +``` + +One point worth noting is that keeweb cannot create a database, so you'll need to create a blank database using [KeepassX](https://www.keepassx.org/downloads) or something similar. + +When accessing your server on port 80 (First 80 in definitions is your *local access* port), you should now see the login screen. + +You can select your webdav share under the *More...* menu item, and WebDAV as a sub option. +Your URL will be `server_address/webdav/database_name.xdbx`, and your username and password will be the values specified above. + +One thing I had to change to get everything working perfectly was Settings > General > Storage > Save Method. This needed to be 'Overwrite kdbx file with PUT' otherwise you'll end up with a load of temporary filesthat make versioning interesting to say the least. + +Lastly, if you're even considering accessing this application remotely you'll want to do this using HTTPS via a reverse proxy such as Caddy or Nginx. + +**Update 2019-07-16** +I've recently moved this entire fragile stack over to Bitwarden, which in my experience works a lot better. You can see the docker-compose entry at [my dockerfiles repo](https://github.com/breadcat/Dockerfiles/blob/master/docker-compose.yml). +\ No newline at end of file diff --git a/content/posts/suitecrm-sql-csv-dump.md b/content/posts/suitecrm-sql-csv-dump.md @@ -0,0 +1,30 @@ +--- +title: "SuiteCRM SQL database dump to CSV files" +date: 2019-01-17T10:18:00 +tags: ["formats", "guides", "linux", "servers", "snippets", "software"] +--- + +Recently I needed to dump our workplaces existing CRM database to a format that was easy to work with, namely CSV instead of the more likely SQL format. + +To do this easily and quickly I developed a small script that would automatically grab the SQL servers credentials from your config file and then dump the files all from a single file. Your `config.php` usually resides in the `htdocs` folder on your server. + +``` +#!/bin/sh + +# sqlHost=$(grep db_host_name config.php | cut -f4 -d\' | cut -f1 -d\:) +confFile=/opt/crm/apps/suitecrm/htdocs/config.php +sqlHost=127.0.0.1 +sqlUser=$(grep db_user_name "$confFile" | cut -f4 -d\') +sqlPass=$(grep db_password "$confFile" | cut -f4 -d\') +sqlTable=$(grep db_name "$confFile" | cut -f4 -d\') +dumpDirectory=db_dump_$(date +%Y-%m-%d) + +echo $sqlHost $sqlUser $sqlPass $sqlTable $dumpDirectory + +mkdir "$dumpDirectory" +for table in $(mysql -h $sqlHost -u$sqlUser -p$sqlPass $sqlTable -sN -e "SHOW TABLES;"); do mysql -B -u$sqlUser -p$sqlPass $sqlTable -h $sqlHost -e "SELECT * FROM $table;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > $dumpDirectory/$table.csv; done +find $dumpDirectory -type f -empty -delete +``` +Make the script executable, run it and all being well you should have a folder containing all your csv files. + +One point worth noting is the manual setting of `$sqlHost` as localhost doesn't seem to work with the `mysql` command so this may require changing if you're not running SQL and the script on the same machine. diff --git a/content/posts/swap-file-linux.md b/content/posts/swap-file-linux.md @@ -0,0 +1,39 @@ +--- +title: "Creating a Swap File on Linux" +date: 2019-06-10T10:03:00 +tags: ["formats", "guides", "linux", "servers", "snippets", "software"] +--- + +I've recently moved from a server with more than enough RAM, to a lower spec (and significantly cheaper!) VPS that still does 99% of what I want it to. + +The issue however is that with the reduced RAM there's a very real possibility of running out and locking up the system. The easy (and cheap) solution is to add a swap file instead of repartitioning my disk space. + +The notes here work with a 1GB swap file, but feel free to change these if need be. + +Firstly we're going to create the file, set permissions and enable the swap file: +``` +sudo fallocate -l 1G /swap +sudo chmod 600 /swap +sudo mkswap /swap +sudo swapon /swap +``` + +This can then be mounted on boot by editing your `/etc/fstab` file and adding the following line: +``` +/swap swap swap defaults 0 0 +``` + +Now you can check this swap space is working by: +``` +sudo swapon --show +``` + +Now the swap file is up and running, you can decide if you want to alter the *[swappiness](https://en.wikipedia.org/wiki/Paging#Swappiness)* value on your system which dictates how the file should be used. The default value on my system was `60`, but I've altered it to `10` using the below commands: +``` +cat /proc/sys/vm/swappiness +sudo sysctl vm.swappiness=10 +``` +To make this change permanent, you'll need to write the value to your `sysctl.conf` file via: +``` +echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf +``` diff --git a/content/posts/unattended-installation-of-webp-codec.md b/content/posts/unattended-installation-of-webp-codec.md @@ -0,0 +1,44 @@ +--- +title: "Unattended installation of WebP codec" +date: 2020-05-26T16:48:00 +tags: ["snippets", "software", "windows"] +--- + +I wrote this up many, many moons ago. I wanted a way to install Google's WebP codec on Windows in an unattended fashion to complement my [just-install](https://just-install.github.io/) script. + +What I eventually came up with was the following: + +``` +rem cd to temp +cd %temp% + +rem clean up old folders +del %temp%\WebpCodecSetup.exe %temp%\7z1701.msi %temp%\.data %temp%\.rdata %temp%\.reloc %temp%\.text +rd /s /q %temp%\7z1701 %temp%\.rsrc + +rem download installer +bitsadmin /transfer installerDownload /download /priority normal https://storage.googleapis.com/downloads.webmproject.org/releases/webp/WebpCodecSetup.exe %temp%\WebpCodecSetup.exe + +rem download 7zip +bitsadmin /transfer unpackDownload /download /priority normal http://www.7-zip.org/a/7z1701.msi %temp%\7z1701.msi + +rem unpack 7zip +msiexec /a %temp%\7z1701.msi /qb TARGETDIR=%temp%\7z1701\ + +rem unpack installer +%temp%\7z1701\Files\7-Zip\7z.exe x %temp%\WebpCodecSetup.exe + +rem rename sources msis +ren %temp%\.rsrc\0\MSIFILE\1 1.msi +ren %temp%\.rsrc\0\MSIFILE\10 10.msi + +rem install msis +msiexec /i %temp%\.rsrc\0\MSIFILE\1.msi /quiet /qn /norestart +msiexec /i %temp%\.rsrc\0\MSIFILE\10.msi /quiet /qn /norestart + +rem clean up used folders +del %temp%\WebpCodecSetup.exe %temp%\7z1701.msi %temp%\.data %temp%\.rdata %temp%\.reloc %temp%\.text +rd /s /q %temp%\7z1701 %temp%\.rsrc +``` + +The script will download the installer, and 7zip to do the unpacking, then delete everything afterwards. +\ No newline at end of file diff --git a/content/posts/upgrading-ubiquiti-routers-over-ssh.md b/content/posts/upgrading-ubiquiti-routers-over-ssh.md @@ -0,0 +1,42 @@ +--- +title: "Upgrading Ubiquiti Routers Over SSH" +date: 2019-03-27T14:55:00 +tags: ["guides", "hardware", "linux", "networks", "servers", "software"] +--- + +In the past, I usually check for ubiquiti router firmware updates via [RSS feed](https://community.ubnt.com/ubnt/rss/board?board.id=Blog_EdgeMAX), and to apply them I open a reverse SSH tunnel to the web interface and upload the file over this tunnel. +This is somewhat inefficient however as you're uploading firmware over a few additional links in a chain that aren't really required. + + +This guide is a simple repurposing of the [following help article](https://help.ubnt.com/hc/en-us/articles/205146110-EdgeRouter-How-to-Upgrade-the-EdgeOS-Firmware#3), albeit somewhat abridged. + +To solve this (and speed up the process in general) you can do the full upgrde via SSH. + +Firstly, you'll want to SSH into your router: +``` +ssh username@routerip +``` +The default username and password are both `ubnt`, but it's highly recommended you change this. + +Then check the currently running firmware version via: +``` +show version +``` + +Then upload the image +``` +add system image https://dl.ubnt.com/firmwares/edgemax/v2.0.x/ER-e100.v2.0.1.5174691.tar +``` +Verify the firmware is the correct version for the model of router you're using. + +Then check the image is installed and will be booted from: +``` +show system image +``` + +Lastly, reboot the router to apply the image: +``` +reboot +``` + +And you're done. +\ No newline at end of file diff --git a/content/posts/windows-10-network-share-guest-access.md b/content/posts/windows-10-network-share-guest-access.md @@ -0,0 +1,17 @@ +--- +title: "Windows 10 Network Share Guest Access" +date: 2019-02-15T11:47:00 +tags: ["servers", "snippets", "software", "windows"] +--- + +I recently re-installed Windows 10, my edition of choice was the new 2019 edition of LTSC-N and as such I updated the [prep script](https://github.com/breadcat/win10-prep) I use to *provision* a new installation. + +One thing worth noting however was that I couldn't access this script stored on a remote Linux Samba share. After checking the server everything looked correct until I looked at the group policies enabled by default in this new LTSB/LTSC version. + +The following registry key needs altering to allow *insecure* guest access to these shares. + +``` +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d "1" /f +``` + +With the change made, everything will work as expected. Nicely done. +\ No newline at end of file diff --git a/content/posts/windows-diskpart-formatting.md b/content/posts/windows-diskpart-formatting.md @@ -0,0 +1,20 @@ +--- +title: "Windows Diskpart Formatting" +date: 2018-11-13T15:02:00 +tags: ["guides", "snippets", "software", "windows"] +--- +If you've flashed any live-bootable Linux ISO files or similar to a USB drive you may notice that when trying to format again to the full size it seems capped to the original size of the ISO file. + +A rough guide for resolve this how to do so is below: + +``` +win + r +diskpart +list disk +select disk 1 +clean +create partition primary +format fs=ntfs quick label=Keyring +assign letter=Z +exit +```