[Most Recent Entries]
Below are the 20 most recent journal entries recorded in
[ << Previous 20 ]
[ << Previous 20 ]
|Sunday, January 18th, 2037|
|Comment for add
Since people seem to be migrating around the Internet, anyone who's dropped LJ for FB, Twitter, or a private blog w/ OpenID:
My OpenID is j-b.livejournal.com
Feel free to comment here (FAQ
) if you've added me to read your non-public entries, and you're welcome to see mine.
-j Current Mood: indescribable
|Monday, January 30th, 2017|
|"Front-end development work" or "Oh HTML-chan!"
Current Mood: situational dissidence
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.
|Tuesday, January 17th, 2017|
|Monday, July 25th, 2016|
|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
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
cgroup_enable=memory to kernel boot parameters, run
update-grub2 and reboot.)
# cgcreate -g memory:/foo
(your task here)
# echo 64M > /sys/fs/cgroup/memory/foo/memory.limit_in_bytes
# cgexec -g memory:/foo bash
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.
- Fast throughput - better than piping through
dd oflag=direct or
- Solved the system-wide performance hit
- Everything ran nicely and the watching
meminfo (as above) showed dirty pages were being regularly flushed
- 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:
Current Mood: tuned
$ pv -S -s 80g < /dev/zero > zeroes.dat
(write 80GB to a file, with progress bar and live throughput details)
|Thursday, October 15th, 2015|
|Microsoft Outlook hangs at "Loading profile..." (solved)
- Outlook hangs at blue splash screen with "Loading profile..." and never opens.
- 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
- 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)
Current Mood: drained
Solution that did
- 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.
|Thursday, October 1st, 2015|
|"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. :)
|Saturday, February 21st, 2015|
|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 PET accessory ad) appears in Compute! issue
12 (May 1981)10 (Mar 1981) ... the ad is from Micro Technology Unlimited ... and the May 1981 issue has a screen-dump utility by MTU employee Martin Cohen, author of their Keyword Graphics Package. Hmm! (Neat aside: he thanks Gregory Yob for help in his code!). Other snippets of code floating around the 'net include a "HAT.BAS" claiming "Originally programmed August 1982 by Bourn & Fruhwald", but the Compute! ad invalidates this claim.
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!)
( Read more...Collapse ) Current Mood: happy
|Wednesday, November 12th, 2014|
|Wednesday, October 29th, 2014|
|GMail locked down IMAP access at some point.
- 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
-----END PGP MESSAGE-----
Some relevant URLs:
- Google's user-facing documentation
- Google's developer-facing documentation
- Mailing list discussion I was able to find
|Tuesday, September 2nd, 2014|
|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%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 %
C:\>echo %TIME% && SLOWCOMMAND && cmd /c echo %TIME^%
Other solutions welcome.
|Wednesday, June 11th, 2014|
|Differences in 100-pin printer memory DIMMs
My HP Color LaserJet CM1017 (CB395A) claims, according to all online documentation I can find, to take 100-pin non-DDR SDRAM. Upon ordering and trying to install the RAM, I found the notches don't line up. Here's the differences, with photo evidence. Phooey.http://imgur.com/a/mTvFr
SDRAM pin/notch spacing: 6 pins, right notch, 16 pins, centered notch, 28 pins
DDR pin/notch spacing: 6 pins, right notch, 16 pins, right notch, 28 pins
|Thursday, November 21st, 2013|
I know that when someone has the temerity to say "Gosh, I wish Emacs could do X
", they're generally met instantaneously with howls of derision by a teeming horde of "Ask me about my Aspergers!"-shirt-wearing neckbeards who let them know:
- Anyone who would want to do such a thing is an idiot.
- Doing $INSANELY_COMPLICATED_ALTERNATIVE is much better as any idiot knows.
... it's a million times funnier when that person saying "Gosh, I wish...
" is Richard M. Stallman.https://lists.gnu.org/archive/html/emacs-devel/2013-11/msg00515.html
(Relevant: "if you ... think that my kids ... need to have the root password to access some wireless network, or to be able to print out a paper ... please just kill yourself now.
—Linus Benedict Torvalds
|Monday, July 9th, 2012|
|Saturday, July 7th, 2012|
|Saturday, May 26th, 2012|
|Remote Desktop cannot verify identity because time/date difference between your/remote computer.
Remote Desktop cannot verify the identity of the remote computer because there is a time or date difference between your computer and the remote computer. Make sure your computer's clock is set to the correct time and then try connecting again. If the problem occurs again, contact your network administrator or the owner of the remote computer.
Workaround: Connect via IP address instead of name.
|Thursday, January 19th, 2012|
|Saturday, December 17th, 2011|
|Monday, November 14th, 2011|
|Saturday, November 12th, 2011|