道.
Tag Archives: programming
Programming as Theory Building
I’m in the middle of reading Programming as Theory Building (which was referenced from here) but I’m weary so off to bed. Will finish reading tomorrow. Hopefully.
Technical Writing Courses
Today I discovered: Technical Writing Courses via Docs for Developers.
Are We Really Engineers?
I probably should be doing other things (engineering..?) but I spent my evening reading this one: Are We Really Engineers?.
programming is terrible
There’s some fun stuff over here: programming is terrible.
Devil’s Dictionary of Programming
Today I discovered the Devil’s Dictionary of Programming, which was a bit of fun.
Alda for music programming
Alda is a text-based programming language for music composition. Interesting!
I love being a programmer
My ZFS RAID array is resilvering. It’s a long recovery process. A report on progress looks like this:
Every 10.0s: zpool status love: Tue May 4 22:32:27 2021 pool: data state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sun May 2 20:26:52 2021 1.89T scanned out of 5.03T at 11.0M/s, 83h19m to go 967G resilvered, 37.54% done config: NAME STATE READ WRITE CKSUM data DEGRADED 0 0 0 mirror-0 ONLINE 0 0 0 sda ONLINE 0 0 0 sdb ONLINE 0 0 0 mirror-1 DEGRADED 0 0 0 replacing-0 DEGRADED 0 0 0 4616223910663615641 UNAVAIL 0 0 0 was /dev/sdc1/old sdc ONLINE 0 0 0 (resilvering) sdd ONLINE 0 0 0 cache nvme0n1p4 ONLINE 0 0 0 errors: No known data errors
So that 83h19m to go wasn’t in units I could easily grok, what I wanted to know was how many days. Lucky for me, I’m a computer programmer!
First I wrote watch-zpool-status.php:
#!/usr/bin/env php <?php main( $argv ); function main( $argv ) { $status = fread( STDIN, 999999 ); if ( ! preg_match( '/, (\d+)h(\d+)m to go/', $status, $matches ) ) { die( "could not read zpool status.\n" ); } $hours = intval( $matches[ 1 ] ); $minutes = intval( $matches[ 2 ] ); $minutes += $hours * 60; $days = $minutes / 60.0 / 24.0; $report = number_format( $days, 2 ); echo "days remaining: $report\n"; }
And then I wrote watch-zpool-status.sh to run it:
#!/bin/bash watch -n 10 'zpool status | ./watch-zpool-status.php'
So now it reports that there are 3.47 days remaining, good to know!
A great MySQL session
I found this great MySQL session over here. It has a clever approach for creating a big table, and shows how to invoke shell commands from the `mysql` client.
USE test; SET GLOBAL innodb_file_per_table=1; SET GLOBAL autocommit=0; -- Create an uncompressed table with a million or two rows. CREATE TABLE big_table AS SELECT * FROM information_schema.columns; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; INSERT INTO big_table SELECT * FROM big_table; COMMIT; ALTER TABLE big_table ADD id int unsigned NOT NULL PRIMARY KEY auto_increment; SHOW CREATE TABLE big_table\G select count(id) from big_table; -- Check how much space is needed for the uncompressed table. \! ls -l data/test/big_table.ibd CREATE TABLE key_block_size_4 LIKE big_table; ALTER TABLE key_block_size_4 key_block_size=4 row_format=compressed; INSERT INTO key_block_size_4 SELECT * FROM big_table; commit; -- Check how much space is needed for a compressed table -- with particular compression settings. \! ls -l data/test/key_block_size_4.ibd
Programming principles from id software
These are great: John Romero on Programming principles from id software
- Just do it (and do it well)
- Keep your code always runnable
- Keep it simple
- Invest time in building great tools
- Test your code thoroughly
- Fix bugs as soon as possible
- Use a superior development system
- Write code for this version of the product
- Use good component abstractions
- Seek feedback from peers while coding
- Give coders creative freedom