• Content count

  • Joined

  • Last visited

  • Days Won


BINREV SPYD3R last won the day on June 7 2014

BINREV SPYD3R had the most liked content!

Community Reputation

-41 Troll


  • Rank
    I make newbies cry!

Profile Information

  • Gender
  • Country
  1. NEW 'Off The Wall' ONLINE Posted 24 Apr, 2019 1:10:50 UTC The new edition of Off The Wall from 23/04/2019 has been archived and is now available online. "Off The Wall" - 23/04/2019 Download the torrent here!!!! View the full article
  2. In a car rant I think back to the early days of podcasting and how the ambience and vision of podcasting was far from the mainstream media approach from today. Have we all sold out ? View the full article
  3. We just uncovered an old tape that was lying around which contains a bit of a treasure. (Thanks to listener Brandon from Cincinnati who sent this to us over ten years ago.) Back in 2008, our weekly radio show was also broadcast on shortwave station WBCQ in Monticello, Maine. Now you can hear what our January 9, 2008 show sounded like on shortwave. This will likely only appeal to people who appreciate the history of shortwave, but we wanted to give everyone the opportunity to hear this. Click on this link to stream or download this show. View the full article
  4. So far we have been concentrating on separate pieces of the game. Now it’s time to put some of them together as a simulation. Overview of simulation Simulation is done in discrete steps. Each step is roughly 1 earth month (completely arbitrary decision). Shorter than that and there might not be enough happening during turns to keep things interesting. Much longer than that and player might not have enough control on how to react things. In any case, current time is stored in database in table time. There should be only one row in that table at any given time. And that row has only one value, current time. Time is stored as integer as I didn’t want to deal with problems that you get when adding fractions to a float time after time. So current time (March 2019) would be 2019.3 in game terms and stored as 20193 in database. Main processing is done in function called processTurn that is shown below. It advances time for one decimal month, removes all expired statuses as explained in episode 2768 and then loads all factions. After that, various steps of the simulation are carried out for all loaded factions. These include handling special events as explained in episode 2748 and doing observations and report writing in manner described episode 2703. processTurn :: (BaseBackend backend ~ SqlBackend, BackendCompatible SqlBackend backend, PersistUniqueRead backend, PersistQueryWrite backend, PersistQueryRead backend, PersistStoreWrite backend, MonadIO m) => ReaderT backend m Time processTurn = do newTime <- advanceTime _ <- removeExpiredStatuses newTime factions <- selectList [] [ Asc FactionId ] _ <- mapM (handleFactionEvents newTime) factions mapM_ handleFactionFood factions mapM_ (handleFactionConstruction newTime) factions _ <- mapM (addSpecialEvents newTime) factions -- Doing observations should always be done last to ensure players have -- recent reports of property they have full control, ie. planets. -- Otherwise it's possible that they'll receive reports that are one -- turn out of sync. mapM_ (handleFactionObservations newTime) factions return newTime More mapping Remember map and fmap that are used to run a function to each element in a list or general structure? mapM works in a similar way, but is used in monadic context. In processTurn function, we’re dealing with input and output and have IO monad present to allow us to do that (MonadIO m part of the type signature). If you step back a bit and squint a bit, then map :: (a -> b) -> [a] -> and fmap :: (a -> b) -> f a -> f b and mapM :: Monad m => (a -> m b) -> t a -> m (t b) look pretty similar. Each take a function, structure and produce a new structure which values were created by running the given function for each element of the original structure. The difference is that map works only for lists, fmap works for functors (that were covered in episode 2778) and mapM works for structures in monadic context. Best way to contact me nowadays is either by email or through fediverse where I’m View the full article
  5. Links DROP HOE! View the full article
  6. Full shownotes are on You can download Klaatu's update revision of the game materials here: View the full article
  7. NEW 'Off The Hook' ONLINE Posted 18 Apr, 2019 3:57:34 UTC The new edition of Off The Hook from 17/04/2019 has been archived and is now available online. "Off The Hook" - 17/04/2019 Download the torrent here!!!! View the full article
  8. Ubuntu, MATE. Two words which, taken separately, refer to great products. On one side, Ubuntu, one of the most popular, if not the most popular, linux distribution. On the other side, the MATE desktop environment, also very popular. One person took those two elements and combined them together to make Ubuntu MATE. That person is Martin Wimpress, and he joined me on the 21st of March to talk about the past, present, and future of the project. View the full article
  9. NEW 'Off The Wall' ONLINE Posted 17 Apr, 2019 0:43:06 UTC The new edition of Off The Wall from 16/04/2019 has been archived and is now available online. "Off The Wall" - 16/04/2019 Download the torrent here!!!! View the full article
  10. If you want the full manuscript, that’s at gitlab: hpr2793_bash_coproc_manuscript.adoc. It’s almost a transcript, but I added spontaneous commentary while reading the examples, so that’s not in the manuscript. Episode errata: Command substitution with $() is perfectly valid according to POSIX, and is accepted both by dash and by bash --posix. It’s not to be considered a bashism. I fumbled the pronunciation of the printf format string in one place and said "parenthesis" instead of "percentage sign". I tried to say "space" every time there’s a space, but I know I forgot it in a few places. But you probably need to look at the show notes to really make sense of the commands anyway. Example #1: $ echo $(echo hacker public radio) hacker public radio $ $(echo echo hacker public radio) # It can even supply the command itself, not just parameters. Note the word splitting. hacker public radio $ "$(echo echo hacker public radio)" # Counteract word splitting by putting the command substitution in quotes. bash: echo hacker public radio: command not found $ `echo echo hacker public radio` # Old-style command substitution hacker public radio More on command substitution in Dave’s hpr1903: Some further Bash tips. Example #2: $ echo <(echo hacker public radio) /dev/fd/63 $ cat <(echo hacker public radio) hacker public radio You can also combine process substitution with redirection. Example #3: $ echo hacker public radio > >(sed -e 's/$/!/') # You need the space between the greater-thans here! hacker public radio! More on process substitution in Dave’s hpr2045: Some other Bash tips. For a description of a hack for creating bidirectional anonymous pipes in bash, see my Fediverse post on this, and I owe you a show. A coprocess in bash is a subshell to which you have access to two file descriptors: Its stdin and its stdout. The two file descriptors will be put in a bash array. To learn more about arrays, check out Dave’s series within the bash series, a whopping five-part quadrology including hpr2709, hpr2719, hpr2729, hpr2739 and hpr2756. You create a coprocess using the coproc keyword, brand spanking new since bash 4 from 2009. I am filing issues to pygments and GNU src-highlite to support it. There are two ways to call coproc. The first way is to give coproc a simple command. Example #4: $ coproc :; declare -p COPROC [1] 25155 declare -a COPROC=([0]="63" [1]="60") [1]+ Done coproc COPROC : The other way is to give coproc an explicit name and a Command Grouping. Example #5: $ coproc HPR (:); declare -p HPR [1] 25469 declare -a HPR=([0]="63" [1]="60") [1]+ Done coproc HPR ( : ) Slightly less contrived example #6: $ coproc GREP (grep --line-buffered pub); printf '%s\n' hacker public radio >&${GREP[1]}; cat <&${GREP[0]} [1] 25627 public ^C $ kill %1 [1]+ Terminated coproc GREP ( grep --color=auto --line-buffered pub ) Here grep and cat wait forever for more input, so we have to kill them to continue our lesson. But we know that GREP will only return one line, so we can just read that one line. And when we are done feeding it lines, we can close our side of its stdin, and it will notice this and exit gracefully. I’m glad I stumbled over that {YOURVARIABLE}>&- syntax for having a dereferenced variable as the left FD of a redirection. Originally I used an ugly eval. Example #7: $ coproc GREP (grep --line-buffered pub); printf '%s\n' hacker public radio >&${GREP[1]}; head -n1 <&${GREP[0]}; exec {GREP[1]}>&- [1] 25706 public [1]+ Done coproc GREP ( grep --color=auto --line-buffered pub ) There we go! Not the most brilliant example, but it shows all the relevant moving parts, and we covered a couple of caveats. Now go out and play with this and come back with an example on how this is actually useful in the real world, and submit a show! View the full article
  11. Below the script I used to generate a bunch of wav files with different text to speech applications. #!/bin/bash string="This is HPR episode 2792 entitled \"Playing around with text to speech synthesis on Linux\" and is part of the series \"Sound Scapes\". It is hosted by Yeroon Bahten and is about 20 minutes long and carries a clean flag." echo "${string}" > text.txt espeak -w espeak.wav "${string}" espeak -w espeak-ng-v-mb-us1.wav -v mb-us1 "${string}" espeak -w espeak-ng-v-mb-us2.wav -v mb-us2 "${string}" espeak -w espeak-ng-v-mb-us3.wav -v mb-us3 "${string}" espeak-ng "${string}" espeak-ng -v en-gb "${string}" espeak-ng -w espeak-ng-en-gb-scotland.wav -v en-gb-scotland "${string}" espeak-ng -w espeak-ng-en-us.wav -v en-us "${string}" flite -o flite-voice-cmu_us_slt.wav -voice cmu_us_slt "${string}" echo "${string}"| festival --language english --tts # same as next line echo "${string}"| text2wave --language british_english --tts -o festival_british_english.wav text2wave -o festival_british_english.wav text.txt for voice in don_diphone kal_diphone ked_diphone rab_diphone do text2wave -o festival_voice_${voice}.wav -eval "(voice_${voice} )" text.txt done # Gnustep say, recorded with audio recorder. say "${string}" text2wave -o festival_voice_cmu_us_slt_arctic_hts.wav -eval "(voice_cmu_us_slt_arctic_hts )" text.txt # merlin # marytts: View the full article
  12. Create an empty file of a predetermined size: $ fallocate --length 512M foo.img Create a LUKS container on it: $ cryptsetup --verify-passphrase luksFormat foo.img Set it up: $ sudo cryptsetup luksOpen foo.img foo $ ls /dev/mapper foo $ Make a file system on it: $ sudo mkfs.ext2 /dev/mapper/foo If you don't need it for anything now, you can close it: $ sudo cryptsetup luksClose foo $ ls /dev/mapper $ Mount it as a usable filesystem: $ sudo mkdir /crypt $ sudo mount /dev/mapper/foo /crypt Depending on your system configuration, you may need to set up reasonable permissions: $ sudo mkdir /crypt/mystuff $ sudo chown klaatu:users /crypt/mystuff $ sudo chmod 770 /crypt/mystuff $ echo "hello world" >> /crypt/mystuff/file.txt When you're finished using your encrypted vault, unmount and close it: $ sudo umount /crypt $ sudo cryptsetup luksClose foo View the full article
  13. I am subscribed to a number of YouTube channels, and I am sharing them with you Mental Floss - Minute Earth - Minute Physics - Mona Lisa Twins - Monty Python - Objectivity - OfficialGoRVing - PBS Eons - PBS SpaceTime - Periodic Videos - Physics Girl - Rollin’ On TV - RV Education 101 - RV to Freedom - Sciencium - SciFri - SciShow Psych - View the full article
  14. NEW 'Off The Hook' ONLINE Posted 11 Apr, 2019 4:15:19 UTC The new edition of Off The Hook from 10/04/2019 has been archived and is now available online. "Off The Hook" - 10/04/2019 Download the torrent here!!!! View the full article
  15. Some stories, that are otherwise cookie-cutter in form, possessing familiar situations and clichéd characters, seem to nonetheless stand out. Other tales that might have great ideas, intriguing plots, and vivid characters, seem to hit the ground with a thud. The determining value here may lie with the pacing of the story. How does pacing (that is, timing) affect your story? Why does it matter? Can you make improvements in the pace by moving things around? What’s the best approach for creating it to begin with? Lostnbronx meanders for a while, often losing his way, and rarely making a coherent point regarding this complicated topic. View the full article