CH

October 21, 2017

FUCKGOATS testing

Filed under: Uncategorized — Benjamin Vulpes @ 11:15 p.m.

I got my FUCKGOATS some time ago; it is a hardware "true random number generator" that Stanislav (aka asciilifeform) designed and built to be as auditable and user-moddable as is sensibly possible; a marvelous achievement in the era of unmoddable and unfixable boxes.

Because I don't know much about how Linux works, I compiled my primary workstation kernel with as few additional options as I could figure out how to, mostly so that when I did need a thing, I could explicitly rebuild my system with the new stuff included, and learn a little more about how Linux works in the process. When I (finally) sat down to test my new TRNG before putting it to use (there was a move, and then a family catastrophe took up a fair amount of my spare cycles), I discovered that I'd built my system without the USB/serial drivers; trinque told me which to install (and now I realize that dmesg needs a place on the conveyor belt of dark Linux corners to study in more detail).

For posterity, search in the kernel's ncurses menuconfig for 2303. Nota benne: don't use the 2303x driver, you'll get shit results.

The unit behaved as follows:

With both hardware RNG modules plugged in, the unit puts out a steady 7.13-7.16 KiB/s of data. The SAD lamp flickers in this mode.

After removing a single hardware RNG module, the SAD lamp flickers at what appears to the eye a stable frequency (what I assume to be the "approximately half duty cycle" Stan mentions in the bundled documentation), and the data output rate drops to the 3.2-3.92 KiB/s range.

After removing the second hardware RNG module, the SAD lamp goes full-red, and the data output rate drops to zero B/s.

Reconnection of each hardware RNG module results in a return to the single- and then double- RNG regimes described above.

I collected a 1.2 Gb sample, at an overall speed of 7.3 kB/s.

Test:

$ ent fg.bin
Entropy = 8.000000 bits per byte.

Optimum compression would reduce the size
of this 1279772160 byte file by 0 percent.

Chi square distribution for 1279772160 samples is 235.13, and randomly
would exceed this value 80.89 percent of the times.

Arithmetic mean value of data bytes is 127.4982 (127.5 = random).
Monte Carlo value for Pi is 3.141814562 (error 0.01 percent).
Serial correlation coefficient is 0.000026 (totally uncorrelated = 0.0).

 $ dieharder -a -g 201 -f fg.bin
#=============================================================================#
#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #
#=============================================================================#
   rng_name    |           filename             |rands/second|
 file_input_raw|                          fg.bin|  5.40e+07  |

#=============================================================================#
        test_name   |ntup| tsamples |psamples|  p-value |Assessment
#=============================================================================#
   diehard_birthdays|   0|       100|     100|0.98666530|  PASSED
      diehard_operm5|   0|   1000000|     100|0.67035484|  PASSED
  diehard_rank_32x32|   0|     40000|     100|0.88020420|  PASSED
    diehard_rank_6x8|   0|    100000|     100|0.76763346|  PASSED
# The file file_input_raw was rewound 1 times
   diehard_bitstream|   0|   2097152|     100|0.96300050|  PASSED
# The file file_input_raw was rewound 1 times
        diehard_opso|   0|   2097152|     100|0.53955310|  PASSED
# The file file_input_raw was rewound 2 times
        diehard_oqso|   0|   2097152|     100|0.88715354|  PASSED
# The file file_input_raw was rewound 2 times
         diehard_dna|   0|   2097152|     100|0.33133522|  PASSED
# The file file_input_raw was rewound 2 times
diehard_count_1s_str|   0|    256000|     100|0.56016452|  PASSED
# The file file_input_raw was rewound 2 times
diehard_count_1s_byt|   0|    256000|     100|0.96678021|  PASSED
# The file file_input_raw was rewound 2 times
 diehard_parking_lot|   0|     12000|     100|0.43795973|  PASSED
# The file file_input_raw was rewound 2 times
    diehard_2dsphere|   2|      8000|     100|0.85593867|  PASSED
# The file file_input_raw was rewound 2 times
    diehard_3dsphere|   3|      4000|     100|0.66806207|  PASSED
# The file file_input_raw was rewound 3 times
     diehard_squeeze|   0|    100000|     100|0.05050380|  PASSED
# The file file_input_raw was rewound 3 times
        diehard_sums|   0|       100|     100|0.65876356|  PASSED
# The file file_input_raw was rewound 3 times
        diehard_runs|   0|    100000|     100|0.43188959|  PASSED
        diehard_runs|   0|    100000|     100|0.24250750|  PASSED
# The file file_input_raw was rewound 3 times
       diehard_craps|   0|    200000|     100|0.03410948|  PASSED
       diehard_craps|   0|    200000|     100|0.94420710|  PASSED
# The file file_input_raw was rewound 10 times
 marsaglia_tsang_gcd|   0|  10000000|     100|0.00002160|   WEAK
 marsaglia_tsang_gcd|   0|  10000000|     100|0.00045187|   WEAK
# The file file_input_raw was rewound 10 times
         sts_monobit|   1|    100000|     100|0.96121113|  PASSED
# The file file_input_raw was rewound 10 times
            sts_runs|   2|    100000|     100|0.74150968|  PASSED
# The file file_input_raw was rewound 10 times
          sts_serial|   1|    100000|     100|0.67751940|  PASSED
          sts_serial|   2|    100000|     100|0.56026407|  PASSED
          sts_serial|   3|    100000|     100|0.94752018|  PASSED
          sts_serial|   3|    100000|     100|0.90140764|  PASSED
          sts_serial|   4|    100000|     100|0.99571612|   WEAK
          sts_serial|   4|    100000|     100|0.94527467|  PASSED
          sts_serial|   5|    100000|     100|0.54417586|  PASSED
          sts_serial|   5|    100000|     100|0.10405825|  PASSED
          sts_serial|   6|    100000|     100|0.23627142|  PASSED
          sts_serial|   6|    100000|     100|0.42339753|  PASSED
          sts_serial|   7|    100000|     100|0.62474027|  PASSED
          sts_serial|   7|    100000|     100|0.57962617|  PASSED
          sts_serial|   8|    100000|     100|0.84411400|  PASSED
          sts_serial|   8|    100000|     100|0.93098818|  PASSED
          sts_serial|   9|    100000|     100|0.71146585|  PASSED
          sts_serial|   9|    100000|     100|0.67605330|  PASSED
          sts_serial|  10|    100000|     100|0.40270963|  PASSED
          sts_serial|  10|    100000|     100|0.14170328|  PASSED
          sts_serial|  11|    100000|     100|0.11972194|  PASSED
          sts_serial|  11|    100000|     100|0.74530096|  PASSED
          sts_serial|  12|    100000|     100|0.03178283|  PASSED
          sts_serial|  12|    100000|     100|0.05210058|  PASSED
          sts_serial|  13|    100000|     100|0.20574640|  PASSED
          sts_serial|  13|    100000|     100|0.55628358|  PASSED
          sts_serial|  14|    100000|     100|0.30391287|  PASSED
          sts_serial|  14|    100000|     100|0.89964884|  PASSED
          sts_serial|  15|    100000|     100|0.85923599|  PASSED
          sts_serial|  15|    100000|     100|0.88102197|  PASSED
          sts_serial|  16|    100000|     100|0.18312975|  PASSED
          sts_serial|  16|    100000|     100|0.14455349|  PASSED
# The file file_input_raw was rewound 10 times
         rgb_bitdist|   1|    100000|     100|0.68703029|  PASSED
# The file file_input_raw was rewound 10 times
         rgb_bitdist|   2|    100000|     100|0.91462553|  PASSED
# The file file_input_raw was rewound 10 times
         rgb_bitdist|   3|    100000|     100|0.35857758|  PASSED
# The file file_input_raw was rewound 10 times
         rgb_bitdist|   4|    100000|     100|0.93276585|  PASSED
# The file file_input_raw was rewound 11 times
         rgb_bitdist|   5|    100000|     100|0.65204925|  PASSED
# The file file_input_raw was rewound 11 times
         rgb_bitdist|   6|    100000|     100|0.93582682|  PASSED
# The file file_input_raw was rewound 12 times
         rgb_bitdist|   7|    100000|     100|0.98695371|  PASSED
# The file file_input_raw was rewound 12 times
         rgb_bitdist|   8|    100000|     100|0.89775049|  PASSED
# The file file_input_raw was rewound 13 times
         rgb_bitdist|   9|    100000|     100|0.62752096|  PASSED
# The file file_input_raw was rewound 13 times
         rgb_bitdist|  10|    100000|     100|0.16794657|  PASSED
# The file file_input_raw was rewound 14 times
         rgb_bitdist|  11|    100000|     100|0.96934025|  PASSED
# The file file_input_raw was rewound 15 times
         rgb_bitdist|  12|    100000|     100|0.68765937|  PASSED
# The file file_input_raw was rewound 15 times
rgb_minimum_distance|   2|     10000|    1000|0.23177467|  PASSED
# The file file_input_raw was rewound 15 times
rgb_minimum_distance|   3|     10000|    1000|0.28749566|  PASSED
# The file file_input_raw was rewound 15 times
rgb_minimum_distance|   4|     10000|    1000|0.08484850|  PASSED
# The file file_input_raw was rewound 15 times
rgb_minimum_distance|   5|     10000|    1000|0.33804203|  PASSED
# The file file_input_raw was rewound 15 times
    rgb_permutations|   2|    100000|     100|0.52644697|  PASSED
# The file file_input_raw was rewound 15 times
    rgb_permutations|   3|    100000|     100|0.23480976|  PASSED
# The file file_input_raw was rewound 15 times
    rgb_permutations|   4|    100000|     100|0.77301813|  PASSED
# The file file_input_raw was rewound 16 times
    rgb_permutations|   5|    100000|     100|0.14308387|  PASSED
# The file file_input_raw was rewound 16 times
      rgb_lagged_sum|   0|   1000000|     100|0.95865965|  PASSED
# The file file_input_raw was rewound 16 times
      rgb_lagged_sum|   1|   1000000|     100|0.78736179|  PASSED
# The file file_input_raw was rewound 17 times
      rgb_lagged_sum|   2|   1000000|     100|0.73485016|  PASSED
# The file file_input_raw was rewound 19 times
      rgb_lagged_sum|   3|   1000000|     100|0.88323233|  PASSED
# The file file_input_raw was rewound 20 times
      rgb_lagged_sum|   4|   1000000|     100|0.30712699|  PASSED
# The file file_input_raw was rewound 22 times
      rgb_lagged_sum|   5|   1000000|     100|0.73801023|  PASSED
# The file file_input_raw was rewound 24 times
      rgb_lagged_sum|   6|   1000000|     100|0.49668545|  PASSED
# The file file_input_raw was rewound 27 times
      rgb_lagged_sum|   7|   1000000|     100|0.15066070|  PASSED
# The file file_input_raw was rewound 30 times
      rgb_lagged_sum|   8|   1000000|     100|0.51924357|  PASSED
# The file file_input_raw was rewound 33 times
      rgb_lagged_sum|   9|   1000000|     100|0.09273091|  PASSED
# The file file_input_raw was rewound 36 times
      rgb_lagged_sum|  10|   1000000|     100|0.47972387|  PASSED
# The file file_input_raw was rewound 40 times
      rgb_lagged_sum|  11|   1000000|     100|0.00161297|   WEAK
# The file file_input_raw was rewound 44 times
      rgb_lagged_sum|  12|   1000000|     100|0.31070382|  PASSED
# The file file_input_raw was rewound 48 times
      rgb_lagged_sum|  13|   1000000|     100|0.35468814|  PASSED
# The file file_input_raw was rewound 53 times
      rgb_lagged_sum|  14|   1000000|     100|0.10687236|  PASSED
# The file file_input_raw was rewound 58 times
      rgb_lagged_sum|  15|   1000000|     100|0.00016418|   WEAK
# The file file_input_raw was rewound 63 times
      rgb_lagged_sum|  16|   1000000|     100|0.98918038|  PASSED
# The file file_input_raw was rewound 69 times
      rgb_lagged_sum|  17|   1000000|     100|0.05383104|  PASSED
# The file file_input_raw was rewound 75 times
      rgb_lagged_sum|  18|   1000000|     100|0.24155324|  PASSED
# The file file_input_raw was rewound 81 times
      rgb_lagged_sum|  19|   1000000|     100|0.01044452|  PASSED
# The file file_input_raw was rewound 88 times
      rgb_lagged_sum|  20|   1000000|     100|0.38143360|  PASSED
# The file file_input_raw was rewound 95 times
      rgb_lagged_sum|  21|   1000000|     100|0.96866648|  PASSED
# The file file_input_raw was rewound 102 times
      rgb_lagged_sum|  22|   1000000|     100|0.99681586|   WEAK
# The file file_input_raw was rewound 109 times
      rgb_lagged_sum|  23|   1000000|     100|0.00164146|   WEAK
# The file file_input_raw was rewound 117 times
      rgb_lagged_sum|  24|   1000000|     100|0.38844251|  PASSED
# The file file_input_raw was rewound 125 times
      rgb_lagged_sum|  25|   1000000|     100|0.82034726|  PASSED
# The file file_input_raw was rewound 134 times
      rgb_lagged_sum|  26|   1000000|     100|0.76768179|  PASSED
# The file file_input_raw was rewound 142 times
      rgb_lagged_sum|  27|   1000000|     100|0.69530908|  PASSED
# The file file_input_raw was rewound 151 times
      rgb_lagged_sum|  28|   1000000|     100|0.76985542|  PASSED
# The file file_input_raw was rewound 161 times
      rgb_lagged_sum|  29|   1000000|     100|0.00411003|   WEAK
# The file file_input_raw was rewound 171 times
      rgb_lagged_sum|  30|   1000000|     100|0.43948397|  PASSED
# The file file_input_raw was rewound 181 times
      rgb_lagged_sum|  31|   1000000|     100|0.01413940|  PASSED
# The file file_input_raw was rewound 191 times
      rgb_lagged_sum|  32|   1000000|     100|0.75094742|  PASSED
# The file file_input_raw was rewound 191 times
     rgb_kstest_test|   0|     10000|    1000|0.09692339|  PASSED
# The file file_input_raw was rewound 191 times
     dab_bytedistrib|   0|  51200000|       1|0.08678343|  PASSED
# The file file_input_raw was rewound 191 times
             dab_dct| 256|     50000|       1|0.92268099|  PASSED
Preparing to run test 207.  ntuple = 0
# The file file_input_raw was rewound 192 times
        dab_filltree|  32|  15000000|       1|0.58337872|  PASSED
        dab_filltree|  32|  15000000|       1|0.89777257|  PASSED
Preparing to run test 208.  ntuple = 0
# The file file_input_raw was rewound 192 times
       dab_filltree2|   0|   5000000|       1|0.10809719|  PASSED
       dab_filltree2|   1|   5000000|       1|0.30363556|  PASSED
Preparing to run test 209.  ntuple = 0
# The file file_input_raw was rewound 192 times
        dab_monobit2|  12|  65000000|       1|0.20144483|  PASSED

Kudos to Stan on shipping a building block of the future. With a few of these in your arsenal, you can start building serious walls between you and the megastates who endeavour to break cryptography with snake-oil software-based random number generators.

August 18, 2017

primorial zoop!

Filed under: Uncategorized — Benjamin Vulpes @ 6:54 a.m.

Mircea Popescu asked for computations of the largest primorial to fit within first 515 bytes, and then 4096 later for reasonable reasons having to do with RSA padding and machine word widths. And so my adventures in remedial mathematics continue, with an implementation of the Sieve of Eratosthenes (which, no, I also had never heard about until Popescu mentioned it.

The sieve implementation is reasonable, although it struck me while writing this that the loop macro has quite clearly infected me to the point where Everything Must be Implemented in Terms of It. Also worth noting is the hilaribad hack of summing lists of primes sieved out from below 4096 and then re-sieving until a resulting list sums that is less than 2^4096.

Code:


(defun sieve (max)
  (let ((candidates (make-array (+ 1 max) :element-type 'bit :initial-element 1)))
    (setf (aref candidates 0) 0)
    (setf (aref candidates 1) 0)
    (loop for p from 2 below max
       do
         (if (= 1 (aref candidates p))
             (loop
                for multiple = (* p 2) then (+ multiple p)
                until
                  (>= multiple (+ 1 max))
                do
                  (setf (aref candidates multiple) 0))))
    (loop
       for c across candidates
       for i = 0 then (+ 1 i)
       when (= c 1)
       collect i)))

(defun primorial (bits)
  (loop
     for maxprime downfrom 4096
     and candidate = (apply #'* (sieve maxprime))
     when (< candidate (expt 2 bits))
     return candidate))

Runs handily in under a second on this computer:


Evaluation took:
  0.817 seconds of real time
  0.822183 seconds of total run time (0.800534 user, 0.021649 system)
  [ Run times consist of 0.053 seconds GC time, and 0.770 seconds non-GC time. ]
  100.61% CPU
  1,961,326,656 processor cycles
  191,607,056 bytes consed

76558065161304251460282055114108589258221172582778212897660717846236903644990337520644670635312274859358138194434424317353505197245841157023986591722929932769973839671344222659789484422389074929063428293359537890882352682080861666155856701907385016181234445501433485834355581608538613949727587779017785931260260914626833639125368582215957878131988744703627349494773630779893153944409332636543777256924688085994030412710490900818402513392514739096990707529801878922479452150366783115306806122953223681368887605169300935213053938361309417317043898395311172948859629735927090134805846868192283007483996959304908910108226729064589294656936714614166784010991216658976345808461171870505690571171978805123096417820213497926956045657612245751388557335587860629959153168802552603694003223199218992695468853266169445025000246364540137060717383649439362850511332616189438331864141257120887414392865895058690613856748502474649872890413430462675521160914666877619827907082224516198516371525941063258265811140191052136612858758172838162168739793712634892483833748520153818159361011542386867749973012327109013046262704823931996678577068234775283556117639727321779655106182561236936733490468113837255296884870490823282493283179240742667438880502010

Matching Diana Coman's and PeterL's. I recall mod6 confirming this number as well, but cannot find the log line. Do write in if you find it, listeners.

This excursion into the fascinating worlds of primes now complete, I'm going to return to my studies in remedial binary arithmetic (which are going fine, albeit slowly due to the annoying handicap of having my workstation not proximate to my sleep station; and a poverty of compute and space for compute away from the prying hands of toddlers in my current domicile; all of which are scheduled for remediation this fall, the orchestration of which is all very much under steam), which I'd left off in disgust recently having realized I was trying to write overgeneralized solutions the problem of reading a random n-byte integer from a byte stream.

There really is no better training ground for the intelligent, curious, and hardworking than The Republic of Bitcoin.

June 30, 2017

The End of Emissions Control

Filed under: Uncategorized — Benjamin Vulpes @ 4:01 p.m.

"Diesels: reliable startup and operation, high power, and low emissions: pick two".

Every single step along the road to the software-controlled car made perfect sense in its own context, and nobody could have predicted that baking what were once called "general purpose computers" into the automobile would result in the megastate's complete and humiliatinng defeat on the battleground of emissions control. The cascading failure started very small, with (for example) replacing the mechanical fuel injection systems with electro-mechanical ones; moved through a phase where every electromechanical subsystem (such as the motor controllers for the window actuators) was designed and emplaced separately; into the current phase where more or less every system in the vehicle is driven by its own tiny computer, and both dumps data to and reads instructions from the CAN bus.

Automotive computerization is actually a subinitiative of the USG fiefdoms commonly known as "corporations" push to replace real things in the market with erzatz imitations; a race-to-the-bottom that harmonizes gloriously with the symphony of fiat-currency issuing organizations: as exchange rates fluctuate not strictly as a function of how much currency a given country is issuing on an ongoing basis but more accurately as a function of how much more or less currency they issue relative to everyone else playing the same tune, so too do the reputations of once-glorious automotive brands fluctuate not as a function of the quality of goods they produce but as a function of how much more quickly or slowly their product lines' useful lifespan and quality shortens and degrades relative to their competitors; a vastly more difficult analysis for the consumer to make.

Simple products, for example carbonated and fermented corn syrups, achieved uniformity under the hood decades and decades ago in the States. With nothing material to differentiate the product lines, the marketers differentiated on brand: am I a Coke guy or Pepsi guy? Coors Light or Hamms? Trick question; once you incorporate corporate brands into your identity you're just another transmission vector for the mind-rape. Cars, while rapidly approaching the limit of uniformity between brands, are of markedly greater complexity under the hood than sodas and (what passes for) beer, and so demanded rather a lot more work on many more axes in order to give the marketers the hooks they needed to properly differentiate products for the American identity-politics market without costing undue piles to the actual engineering and fabrication processes.

Take engine noise as an example: the relentless market demand for constant improvement in both fuel economy and power output put such constraints on the design of power plants that the once-characteristic engine noise has been flattened out into the same low-waste white noise no matter the manufacturer brand. American marketers didn't mind this in the slightest, as where the drink manufacturers differentiated with various dyes, the car manufacturers differentiated by building speakers into the car so that they could tune both the noise broadcast to the world and that experienced inside the cockpit of the cars to more precisely curate "the brand experience of a Chevy".

German diesel marketers took a mildly divergent approach: instead of trading engine noise for power completely, and fabricating the "driving experience" wholesale with speakers, they worked with engine control unit manufacturers to tune the actual noise produced by the engine on startup. Why not? The startup routine takes no more than thirty seconds at the beginning of every petrol-burning run, has epsilon impact on emissions in the steady state, and so does not affect test-stand behavior sensibly.

With the innocuous ECU-profile-for-emotionally-tuning-the-consumer in hand, is it any surprise someone else in the organization repurposed the underlying routines to bypass witless regulators? Steering wheel position is constantly recorded to the CAN bus, as is that of every other system on the vehicle, all effectors read from the same rail, so why is it so implausible and disturbing that someone should have evaded the States' testing regime by applying a modicum of intelligence?

The notion that one can evade the state bothers millenial Pantsuit acolytes by demonstrating how blind and stupid the US megastate has grown. The laughs don't stop there, though, as the enforcement team only actually managed to track down the test-stand evasion systems by going to the ECU-modifying enthusiasts and asking nicely for dumps of the original software! Enthusiasts who'd already reverse-engineered, modified, and installed the modified control systems back onto their cars for performance reasons and to bypass the selfsame emissions compliance systems.

And so we find a sharp blade each for the jugular and femoral arteries of statal intervention in automotive emissions: a) the individuals and organizations responsible for writing and enforcing the regulations are utterly incapable of doing their jobs without volunteer labor from people who bypass emissions control in their spare time; and b) with the advent of flashable automotive ECU systems there is absolutely nothing preventing manufacturers from dropping cars on lots crippled by easily-removed software in a sarcastic bow to the regulatory apparatus, and nothing the state can do about their "leaking" high-performance engine maps in tandem. In regards to the first shiv, for as long as it is fashionable to be seen talking to cops, and right up until the moment Americans wake up to the notion that the entire control apparatus hinders self-determination and benefits only the criminal organization the once-modest United States Government has metastasized into, the bureaucracy may continue to find support among the people most well-equipped to castrate it and not a day past that point. In regards to the second, absolutely anyone can kick their engine controller into high-performance, high-emission mode as soon as they drive the vehicle off the lot, and with zero damage to the system replace the original software in the blink of an eye for inspections, switching back as soon as the inspector passes out of sight.

Expect to see a mandate that all cars with computers run Windows on chips with "trusted computing modules". Expect it also to never work.

May 20, 2017

Guardians of the Galaxy, Volume 2

Filed under: Uncategorized — Benjamin Vulpes @ 9:17 p.m.

The second issue in the Guardians of the Galaxy series is the most thickly dad-tastic flick I've ever seen come out of the modern American movie-making machine. Where the first movie makes light and gentle references to the bastard's feelings about his own illegitimacy (but only enough to satisfy the fandom's expectations in re: hewing to the canon), some wise producer somewhere let the writing team entirely off-leash and bought himself a movie about fatherhood, sacrifice, family, love and redemption that somehow doesn't actually suck1.

GotGv2 is the only kind of modern American movie to even consider seeing in a theater; it contains orgies of explosions and space-vehicle shoosting engagements, entirely-competent stunt-doubles, and (let's be real, the only reason to go see a show like this) an endless cornucopic phantasmagoria of the most syrupy and over-the-top special effects ranging from whatever that canon's equivalent of the hyperspace jump is, to epic battle scenes played out in the background as of a rotoscoped Vin Diesel dances around as an animate baby tree2. It's great! If you're into dad shit.

Returning to the topic of narrative design, the writers lay down thick beads of dad theme thick and fast from jump street: the overarching story moralizes on the evil of the man (hilariously ham-handedly named Ego) who'd drain the life force of his own children to further his own goals, while smaller arcs cover the damage done to sons whose fathers abandon them, the bond of sisterhood forged under abusive tyrants, the father who returns years too late to develop an actual relationship with his son, the value of any kind of fathering to the budding child, and the exaltations due the father who overrides his own rev-limiter and burns his tanks past empty stoking the fires of the worthy heir (which, hey, maybe "Star Lord" isn't that worthy outside of the movie's framework but within the narrative it's his second time very nearly dying to save the universe for a bounty of basically epsilon).

The writers want you to know that ignoring your kids until they can hold a conversation with you is terrible parenting3; spend a few delightful frames on the two sisters working through the vicious shit their father put them through and then hugging it out before setting out to kill him4; and that the family that lets its own members be their shitty selves provided they recognize how shitty they are and actively work to not be quite so much that all of the time can save the universe. Love is the greatest force in the world, etceteras etceteras.

Surprisingly for The Times In Which We Live, there are a few scenes that verge on being downright dark: Diesel's tree-baby catching the new-cabin-boy treatment from the mutinied pirate crew is sure to pluck the heartstrings of tender-hearted babes in your life, and might even bring the mothers to tears; and while the spacing of the temporarily-ex-captain's loyal lieutenants one by one could have been significantly more morbid and morose, we're going for a PG-13 rating here. To the writing team's credit, and one of the things that makes the movie in my opinion, when the pirate captain retakes his chair he hunts down and kills each and every single remaining mutineer aboard with palpable glee, demonstrable cruelty, and just the appropriate dash of theatrical flair.

For all the film's narrative upside, the Department of Rainbow Sparkles and Sparkly Rainbows would have benefitted from just a hint of discipline. In particular, the funereal fireworks display was unjustifiably bad, except as a throwaway callback to the redemption theme. There's absolutely no sense in following fifteen minutes of well-produced and -executed knock-down-drag-out god-vs-plucky heroes battle with a limp-wristed fireworks display.

GotGv2 is a fine piece of dad entertainment, and I'm endlessly amused that I saw it with my father, both of us entirely naive to its narrative makeup. It's got space battles, good versus evil, loss of honor and the quest for redemption, fruitless years of labor in the mines, love, and plenty of the classic "good ol' American family values". Not much by way of tits though, and the single whoring scene was so bad as to insult the profession.

  1. The "mother" figures attempt to guarantee the best possible progeny, while the fathers are first and foremost men making their tiny best of a shitty life in a hostile universe, discovering that hey maybe some of the kids aren't entirely a waste of everyone's time after all, and ensuring that at least they're not releasing children into the world who've never been punched. []
  2. Everyone parents the tree-baby. It's adorable, and an excellent example of dovetailing the comic relief character into the overarching themes of the movie. []
  3. Which, duh. Teach your kids at least two languages like a cultured human, s'il vous plaît []
  4. Doubly funny because a) deliberate middle-finger to Bechtel whiners, b) even the storyline about sisterly love and redemption by excuse of women doing whatever it takes to survive ends up being about a shitty dad. []

January 27, 2017

Gaze upon their works, ye mighty, and tremble

Filed under: Uncategorized — Benjamin Vulpes @ 10:17 p.m.

Chock full of fear, they stand at the barricades ready to resist...but precisely what is unclear, and as far as "how" goes, no more than a hissy-fit has emerged so far (archived).

Astonishingly uneducated, barely literate in most cases, accustomed to compassion and handouts from all and sundry, the body politic's weathervaning frightens them deeply. "Tax cuts mean service cuts", except for how there is no connection between tax receipts and United States Government expenditures (the deficit may increase or decrease from time to time, relative to the previous period but the absolute indebtedness of the US relentlessly and monotonically simply increases).

Everything must be free, except speech.

Older Posts »

---