Recent blog entries for Hobart

"Front-end development work" or "Oh HTML-chan!"

panel from Girl Genius by Phil and Kaja Foglio - see girlgeniusonline dot com

ProTips:
If you're making a pure CSS front-end, and need things to be conditionally interacted with - you likely want to use radio-button type <input> controls set to display:none, associated <label> controls wrapping click-able areas, and the [type:radio] , ~ , and :checked CSS selector tools to make things do things. Gurpreet Singh's answer to this StackOverflow question makes a good starting point.

Also the flexible box layout has been around 6 years and is generally supported ... if only there were more outreach.

The HTML Living Standard is free (though extensive), most of it is readable by mortals, and has examples, and should be at least skimmed through and a copy kept on hand. If you're skimming, look for the grey "example" areas especially.

Syndicated 2017-01-30 19:54:05 from jon's blog

mount option 'norelatime' being ignored

Red Hat bug 756670 also reflects the behavior of Ubuntu 16.10, and likely others.

tl;dr: If you really want atime - you need to use the 'strictatime' option, not 'norelatime'.

"Status: Closed NOTABUG" - ha ha ha

Syndicated 2017-01-17 15:33:04 from jon's blog

Cgroups example - limiting memory to control disk writes (Debian)

I ran into a problem with an overactive process that left the rest of the system running slow. nice(1) did nothing to solve it, neither did ionice(1) rescheduling it to "Idle". If you run into something similar, cgroups may help

cgroups ("Control groups") were developed at Google around 2006 and showed up in Linux around 2.6.24. Searching for cgroups examples largely leads one to the RHEL Resource Management Guide. (Link goes to the latest version, most Google searches point to older copies.)

In my case, I had a long running (>1hr) process that wrote several hundred GB of output.

I looked at the processes' speed by piping it through pv(1), and also looked at top(1), iotop(1), and

$ watch cat /proc/meminfo  (watching the Dirty: line)

The process was doing buffered writes to disk, which was good (keeping the disk continuously fed for best throughput) but was filling up huge amounts of cache (1~2 dozen GB of Dirty pages.) When I paused it, sync(1) took over 5min to complete.

Debian 8.0 (Jessie) has cgroups by default but, the memory type are disabled by default.

# apt-get install cgroup-tools
# vi /etc/default/grub

(Add  cgroup_enable=memory  to kernel boot parameters, run  update-grub2  and reboot.)

# cgcreate -g memory:/foo
# echo 64M > /sys/fs/cgroup/memory/foo/memory.limit_in_bytes
# cgexec -g memory:/foo bash
#
(your task here)

The cgcreate(1) command is a fancy equivalent to doing a mkdir in the cgroup partition, which automatically is populated with the appropriate control files. Debian 8's kernel has both cgroup and cgroup2 support, but as systemd(8) is using version 1 and it appears the two cannot be used concurrently, that's what I used.

Pros:

  • Fast throughput - better than piping through dd oflag=direct or dd oflag=dsync
  • Solved the system-wide performance hit
  • Everything ran nicely and the watching meminfo (as above) showed dirty pages were being regularly flushed

Cons:

  • Your task might be hit by the OOM killer.
  • Your task can have malloc(3) calls fail, which makes most tools bail out.

This feels like a hack solution, but since cgroups can't limit just write buffered memory yet, and using cgroups actual disk-write limiter (blkio.throttle.write_bps_device) would require the above-mentioned slow dd(1) (which ran at 30% of the speed, at best) and none of the other tools actually worked, I'm sharing it. YMMV - and I'd love to hear of other solutions that actually work for people. A good test program to run is:

$ pv -S -s 80g < /dev/zero > zeroes.dat
(write 80GB to a file, with progress bar and live throughput details)

Syndicated 2016-07-25 07:29:17 from jon's blog

Microsoft Outlook hangs at "Loading profile..." (solved)

Problem:

  • Outlook hangs at blue splash screen with "Loading profile..." and never opens.
Software involved:
  • Win 10 64-bit 10.0.10240
  • Office 2016 64-bit 16.0.4229.1029
  • IMAP account hosted with GoDaddy (imap.secureserver.net) - only item in profile (.OST backed, default settings)
Solutions that did not work:
  • Creating a new Outlook profile
  • Clearing out all MAPI config from the registry (renaming HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem )+reboot
  • Deleting all Outlook folders under %USERPROFILE% dir
  • Renaming out all Outlook registry settings under HKCU
  • Doing a full repair of Office 2016
  • Setting up under a fresh user account
  • Starting Outlook with /SAFE parameter
  • Disabling IPv6 (create DWORD HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents set to 0xffffffff)+reboot
  • Clearing out Windows Search (ControlPanel->IndexingOptions, unchecking Outlook, 'Delete+rebuild' on advanced tab)
Solution that did work:
  • Disconnecting the network, then reconnecting when Outlook was open.
  • Launch Outlook, wait for blue splash screen stuck at "Loading profile..."
  • Launch an Administrator command prompt. (Start, type CMD, press Ctrl+Shift+Enter, say Yes.)
  • IPCONFIG /release at command prompt.
  • Outlook opened up
  • IPCONFIG /renew at command prompt.
  • Clicked "Send/Receive All Folders" - sync completed normally.

Syndicated 2015-10-15 23:44:50 from jon's blog

4-disk raidz vs 3-disk raidz vs 2-disk mirror

Benchmarked three different volumes (ZFS on Linux) from a Windows client.

Conclusion: At the mere speed of Gigabit Ethernet, there's no appreciable speed difference.

Syndicated 2015-10-01 21:28:52 from jon's blog

"Stupid, STUPID Unix creatures!"

tl;dr: Wrap your shell script loops in (subshells)

ProTip: A task running in a shell script's 'for' loop that are paused by signal TSTP (that is, hitting ^Z) and restarted (with 'fg' or '%') will keep going, but the loop will have been broken and not continue (bash behavior) or the command sequence will continue as though it had completed ('dash' and probably other Bourne shells behavior). I've tested in bash and dash.

This doesn't work when interrupted by ^Z:

$ for X in 1 2 3; echo Iteration $X; sleep 5; echo Iteration $X complete; done

This does:

$ (for X in 1 2 3; echo Iteration $X; sleep 5; echo Iteration $X complete; done)

This sort of thing doesn't happen often but when you're looping through commands that take ~6h to complete and find you've lost the output, it's frustrating. :)

Syndicated 2015-10-01 13:38:13 from jon's blog

Atari 8-bit "Archimedes Spiral" demo - Found again!

Sometimes you stumble upon what you were looking for by accident ...

When I was 9 or 10 years old, I didn't have a modem, much less access to the Internet. The few computer magazines I had, I read over and over - and would have to type in games from program listings. I remembered typing in a BASIC program full of complicated math I didn't understand. The resulting program would take hours to run, but produced an impressive 3-D wireframe image. (With hidden line removal!)

7 years ago (mid-2008) I decided to poke around the Internet and ask in various places if anyone had seen it ... with no luck.

I had a bit of luck a year later, and posted my findings here on LiveJournal.

Today I was reading through some .PDFs of old Atari magazines, not even thinking of this, when lo-and-behold, there was the article. Hazzoo-huzzah! It turned out not to be MACE Journal or Compute, but a 1982 issue of ANALOG Computing - #7, the one with the awesome Blade-Runner inspired cover art. Many thanks to Charles Bachand, and editor Lee Pappas for the article!

I wonder if Charles is reachable... and if he remembers where he got the code for the demo... The image I found before (in a Commodore ad) appears in Compute! issue 12 from May 1981 ... the ad is from Micro Technology Unlimited ... and that same issue has a screen-dump utility by that company's employee, Martin J. Cohen, Ph.D. who is the author of their Keyword Graphics Package. Hmm! (Neat: in that issue he thanks Gregory Yob for help in part of his code!)

Those with too much time on their hands are encouraged to look at the issue on Internet Archive - A.N.A.L.O.G. Computing magazine, issue 7 (1982) pp60-61. (Thanks to Brewster Kahle, Jason Scott, and others for their work there!)

Analog_Computing_07_1982-p60 Analog_Computing_07_1982-p61
A.N.A.L.O.G. Computing magazine, issue 7 (1982) pp60-61
NON-TUTORIAL VI
by Charles Bachand
HATS OFF TO ATARI!!

This article contains a graphics program called "Archimedes Spiral". The program, although quite short, takes nearly three hours to run! This is definitely not a quick demo. (To produce the transparent version of the spiral, delete line 240.)(It still looks like a hat to me. Ed.)

100 REM ARCHIMEDES SPIRAL
110 REM 
120 REM ANALOG MAGAZINE
130 REM 
140 GRAPHICS 8+16:SETCOLOR 2,0,0
150 XP=144:XR=4.71238905:XF=XR/XP
160 FOR ZI=-64 TO 64
170 ZT=ZI*2.25:ZS=ZT*ZT
180 XL=INT(SQR(20736-ZS)+0.5)
190 FOR XI=0-XL TO XL
200 XT=SQR(XI*XI+ZS)*XF
210 YY=(SIN(XT)+SIN(XT*3)*0.4)*56
220 X1=XI+ZI+160:Y1=90-YY+ZI
230 TRAP 250:COLOR 1:PLOT X1,Y1
240 COLOR 0:PLOT X1,Y1+1:DRAWTO X1,191
250 NEXT XI:NEXT ZI
260 GOTO 260

It would be so much simpler if you could hand out a hardcopy of the graphics to demonstrate your prowess with the computer. Your friends will be doing cartwheels and going hazoo-huzzah over your printing expertise. (Hazoo-huzzah?! Ed.)

(Ed. Note: No one here at A.N.A.L.O.G is responsihle for Charlie's state of mind when he writes these non-tutorials. Just thought you people would like to know.)


Syndicated 2015-02-22 05:02:56 from jon's blog

Rosetta / Philae comet landing livestream

http://new.livestream.com/esa/cometlanding

Fingers crossed for the #forth powered lander :)

Syndicated 2014-11-12 15:03:34 from jon's blog

GMail locked down IMAP access at some point.

Wheee.

  • If you don't have IMAP + OAuth 2 you're locked out. Unless:
  • You change a Big Scary Setting "Allow less secure apps". The activation of which also generates a Big Scary Email to let you know you've done it. But then:
  • Your failed attempts triggered another lock on your account, which you need to inspect the IMAP negotiation to see. The first claims "Web login required! go to http://blahblah/100char-long-url", but, surprise! visiting the URL doesn't unlock you.
  • The second directs you to https://support.google.com/mail/answer/78754 where you learn about https://www.google.com/accounts/DisplayUnlockCaptcha which, when visited, does NOT display a CAPTCHA, but does unlock your account.
  • OAuth 2 is so ridiculously overdesigned the main editor of the spec loudly quit.
  • All of this could have been handled using client side certificates, without requiring any changes to the @#$% mail clients.
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1
owGbwMvMwCSYyMCz7/ket1DG0+JJDCGBPvHuqSUK+WlpCrmVCjmJ5Xl6XB1uLAyC
TAxsrEwgaQYuTgGYHmsehgV/ekp/rlgx7dujh3trJkrvClXyWv+AYcGRNO89b/xt
xVd7q/u4lR2pjozkUwMA
=rXE4
-----END PGP MESSAGE-----
Some relevant URLs:

Syndicated 2014-10-29 20:36:11 from jon's blog

Windows technique to print timestamps before & after from the command line

On Unix, a quick way to output timestamps is:

$ date ; slowcommand ; date
Tue Sep  2 12:12:18 MDT 2014
Tue Sep  2 12:12:34 MDT 2014
$ 
But if you try a similar approach at the Windows command prompt, there's a few problems.
  • The command TIME /T outputs the time, but only in HH:MM format.
     
  • The command prompt's builtin magic variable %TIME% outputs HH:MM:SS.ss, but if you try it, the results are unexpected:
    C:\>echo %TIME% && SLOWCOMMAND && echo %TIME%
    13:42:05.10
    13:42:05.10

    C:\>
    The timestamps come out the same, because the command prompt does all variable substitution in a line at once, before executing the first command.

    In batch files, this can be mitigated with the setting ENABLEDELAYEDEXPANSION and referring to variables !LIKETHIS! instead of %LIKETHIS%. But that won't work at the command prompt.
The solution I used was to run the command explicitly afterwards with CMD /C , using the ^ to escape out the % character:
C:\>echo %TIME% && SLOWCOMMAND && cmd /c echo %TIME^%
13:51:27.58
13:51:46.66

C:\>
Other solutions welcome.

Syndicated 2014-09-02 20:18:46 from jon's blog

407 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!