Shallow Thoughts : : Feb
Akkana's Musings on Open Source Computing and Technology, Science, and Nature.
Sat, 27 Feb 2016
I'm learning to weld metal junk into art!
I've wanted to learn to weld since I was a teen-ager at an LAAS star
party, lusting after somebody's beautiful homebuilt 10" telescope
on a compact metal fork mount.
But building something like that was utterly out of reach for a
high school kid.
(This was before
John Dobson
showed the world how to build excellent alt-azimuth mounts
out of wood and cheap materials ... or at least before Dobsonians
made it to my corner of LA.)
Later the welding bug cropped up again as I worked on modified
suspension designs for my X1/9 autocross car, or fiddled with bicycles,
or built telescopes. But it still seemed out of reach, too expensive
and I had no idea how to get started, so I always found some other way
of doing what I needed.
But recently I had the good fortune to hook up with Los
Alamos's two excellent metal sculptors,
David
Trujillo and Richard Swenson. Mr. Trujillo was kind enough to
offer to mentor me and let me use his equipment to learn to make
sculptures like his. (Richard has also given me some pointers.)
MIG welding is both easier and harder than I expected.
David Trujillo showed me the basics and got me going welding a little
face out of a gear and chain on my very first day. What a fun start!
In a lot of ways, MIG welding is actually easier than soldering. For
one thing, you don't need three or four hands to hold everything
together while also holding the iron and the solder. On the other
hand, the craft of getting a good weld is something that's going to
require a lot more practice.
Setting up a home workshop
I knew I wanted my own welder, so I could work at home on my own
schedule without needing to pester my long-suffering mentors. I bought
a MIG welder and a bottle of gas (and, of course, safety equipment
like a helmet, leather apron and gloves), plus a small welding table.
But then I found that was only the beginning.
Before you can weld a piece of steel you have to clean it. Rust, dirt,
paint, oil and anti-rust coatings all get in the way of making a good weld.
David and Richard use a sandblasting cabinet, but that requires a big
air compressor, making it as big an investment as the welder itself.
At first I thought I could make do with a wire brush wheel on a drill.
But it turned out to be remarkably difficult to hold the drill firmly
enough while brushing a piece of steel -- that works for small areas
but not for cleaning a large piece or for removing a thick coating
of rust or paint.
A bench grinder worked much better, with a wire brush wheel on one
side for easy cleaning jobs and a regular grinding stone on the other
side for grinding off thick coats of paint or rust. The first bench
grinder I bought at Harbor Freight had a crazy amount of vibration
that made it unusable, and their wire brush wheel didn't center
properly and added to the wobble problem. I returned both, and bought
a Ryobi from Home Depot and a better wire brush wheel from the local
Metzger's Hardware. The Ryobi has a lot of vibration too, but not so
much that I can't use it, and it does a great job of getting rust and
paint off.
Then I had to find a place to put the equipment. I tried a couple of
different spots before finally settling on the garage. Pro tip:
welding on a south-facing patio doesn't work: sunlight glints off the
metal and makes the auto-darkening helmet flash frenetically, and any
breeze from the south disrupts everything. And it's hard to get
motivated to out outside and weld when it's snowing. The garage is
working well, though it's a little cramped and I have to move the
Miata out whenever I want to weld if I don't want to risk my baby's
nice paint job to welding fumes. I can live with that for now.
All told, it was over a month after I bought the welder before I could
make any progress on welding. But I'm having fun now. Finding good
junk to use as raw materials is turning out to be challenging, but
with the junk I've collected so far I've made some pieces I'm pretty
happy with, I'm learning, and my welds are getting better all the time.
Earlier this week I made a goony bird out of a grease gun.
Yesterday I picked up some chairs, a lawnmower and an old
exercise bike from a friend, and just came in from disassembling them.
I think I see some roadrunner, cow, and triceratops parts in there.
Photos of everything I've made so far:
Metal art.
Tags: welding, art, maker
[
14:02 Feb 27, 2016
More art |
permalink to this entry |
]
Wed, 24 Feb 2016
I decided recently to clean up my Debian "Sid" system, using
apt-get autoclean
,
apt-get purge `deborphan`
,
aptitude purge ~c
, and
aptitude purge ~o
.
It gained me almost two gigabytes of space.
On the other hand, it deleted several packages I had long depended on.
One of them was xchat.
I installed hexchat, the fully open replacement for xchat.
Mostly, it's the same program ... but a few things didn't work right.
Script fixes
The two xchat scripts I use weren't loading. Turns out hexchat wants
to find its scripts in .config/hexchat/addons
, so I moved
them there. But xchat-inputcount.pl still didn't work;
it was looking for a widget called "xchat-inputbox".
That was fairly easy to patch: I added a line to print the name of
each widget it saw, determined the name had changed in the obvious way,
and changed
if( $child->get( "name" ) eq 'xchat-inputbox' ) {
to
if( $child->get( "name" ) eq 'xchat-inputbox' ||
$child->get( "name" ) eq 'hexchat-inputbox' ) {
That solved the problem.
Notifying me if someone calls me
The next problem: when someone mentioned my nick in a channel, the
channel tab highlighted; but when I switched to the channel,
there was no highlight on the actual line of conversation
so I could find out who was talking to me.
(It was turning the nick of the person addressing me to a
specific color, but since every nick is a different color anyway,
that doesn't make the line stand out when you're scanning for it.)
The highlighting for message lines is set in a dialog you can configure:
Settings→Text events...
Scroll down to Channel Msg Hilight and click on that
elaborate code on the right:
%C2<%C8%B$1%B%C2>%O$t$2%O
That's the code that controls how the line will be displayed.
Some of these codes are described in
Hexchat:
Appearance/Theming, and most of the rest are described in the
dialog itself. $t
is an exception: I'm not sure what it
means (maybe I just missed it in the list).
I wanted hexchat to show the nick of whoever called me name in inverse video.
(Xchat always made it bold, but sometimes that's subtle; inverse video
would be a lot easier to find when scrolling through a busy channel.)
%R
is reverse video, %B
is bold, and
%O
removes any decorations and sets the text back to
normal text, so I set the code to:
%R%B<$1>%O $t$2
That seemed to work, though after I exited hexchat and started it up
the next morning it had magically changed to
%R%B<$1>%O$t$2%O
.
Hacking hexchat source to remove hardwired keybindings
But the big problem was the hardwired keybindings. In particular,
Ctrl-F -- the longstanding key sequence that moves forward one
character -- in hexchat, it brings up a search window.
(Xchat had this problem for a little while, many years ago,
but they fixed it, or at least made it sensitive
to whether the GTK key theme is "Emacs".)
Ctrl-F doesn't appear in the list under Settings→Keyboard shortcuts,
so I couldn't fix it that way.
I guess they should rename that dialog to Some keyboard shortcuts.
Turns out Ctrl-F is compiled in. So the only solution is to rebuild from source.
I decided to use the Debian package source:
apt-get source hexchat
The search for the Ctrl-F binding turned out to be harder than it had
been back in the xchat days. I was confident the binding would be in
one of the files in src/fe-gtk, but grepping
for key, find and search all gave way too many hits.
Combining them was the key:
egrep -i 'find|search' *.c | grep -i key
That gave a bunch of spurious hits in fkeys.c -- I had already
examined that file and determined that it had to do with the
Settings→Keyboard shortcuts dialog, not the compiled-in
key bindings. But it also gave some lines from menu.c including
the one I needed:
{N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK, 0, 0, 1, GDK_KEY_f},
Inspection of nearby lines showed that the last GDK_KEY_
argument is optional -- there were quite a few lines that didn't
have a key binding specified. So all I needed to do was remove that
GDK_KEY_f. Here's my patch:
--- src/fe-gtk/menu.c.orig 2016-02-23 12:13:55.910549105 -0700
+++ src/fe-gtk/menu.c 2016-02-23 12:07:21.670540110 -0700
@@ -1829,7 +1829,7 @@
{N_("Save Text..."), menu_savebuffer, GTK_STOCK_SAVE, M_MENUSTOCK, 0, 0,
1},
#define SEARCH_OFFSET (70)
{N_("Search"), 0, GTK_STOCK_JUSTIFY_LEFT, M_MENUSUB, 0, 0, 1},
- {N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK,
0, 0, 1, GDK_KEY_f},
+ {N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK,
0, 0, 1},
{N_("Search Next" ), menu_search_next, GTK_STOCK_FIND, M_MENUS
TOCK, 0, 0, 1, GDK_KEY_g},
{N_("Search Previous" ), menu_search_prev, GTK_STOCK_FIND, M_M
ENUSTOCK, 0, 0, 1, GDK_KEY_G},
{0, 0, 0, M_END, 0, 0, 0},
After making that change, I rebuilt the hexchat package and installed it:
sudo apt-get build-dep hexchat
sudo apt-get install devscripts
cd hexchat-2.10.2/
debuild -b -uc -us
sudo dpkg -i ../hexchat_2.10.2-1_i386.deb
Update: I later wrote about how to automate this here:
Debian: Holding packages you build from source, and rebuilding them easily.
And the hardwired Ctrl-F key binding was gone, and the normal
forward-character binding from my GTK key theme took over.
I still have a couple of minor things I'd like to fix, like the too-large
font hexchat uses for its channel tabs, but those are minor.
At least I'm back to where I was before foolishly deciding to
clean up my system.
Tags: xchat, hexchat, irc
[
19:00 Feb 24, 2016
More linux |
permalink to this entry |
]
Fri, 19 Feb 2016
A silly little GIMP ditty:
I had a Google map page showing locations of lots of metal recycling
places in Albuquerque. The Google map shows stars for each location,
but to find out the name and location of each address, you have to
mouse over each star. I wanted a printable version to carry in the
car with me.
I made a screenshot in GIMP, then added text for the stars over
the places that looked most promising. But I was doing this quickly,
and as I added text for more locations, I realized that it was getting
crowded and I wished I'd used a smaller font. How do you change the
font size for ALL font layers in an image, all at once?
Of course GIMP has no built-in method for this -- it's not something
that comes up very often, and there's no reason it would have a filter
like that. But the GIMP PDB (Procedural DataBase, part of the GIMP API)
lets you change font size and face, so it's an easy script to write.
In the past I would have written something like this in script-fu,
but now that Python is available on all GIMP platforms, there's no
reason not to use it for everything.
Changing font face is just as easy as changing size, so I added that
as well.
I won't bother to break it down line by line, since it's so simple.
Here's the script:
changefont.py:
Mass change font face and size in all GIMP text layers.
Tags: gimp, programming, python
[
11:11 Feb 19, 2016
More gimp |
permalink to this entry |
]
Mon, 08 Feb 2016
For the last several days, when I go upstairs in mid-morning I often
hear a strange sound coming from the bedroom. It's a juniper titmouse
energetically attacking the east-facing window.
He calls, most often in threes, as he flutters around
the windowsill, sometimes scratching or pecking the window. He'll attack
the bottom for a while, moving from one side to the other, then fly up
to the top of the window to attack the top corners, then back to the bottom.
For several days I've run down to grab the camera as soon as I saw him,
but by the time I get back and get focused, he becomes camera-shy and
flies away, and I hear EEE EEE EEE from a nearby tree instead.
Later in the day I'll sometimes see him down at the office windows,
though never as persistently as upstairs in the morning.
I've suspected he's attacking his reflection (and also assumed he's a "he"),
partly because I see him at the east-facing bedroom window in the morning
and at the south-facing office window in the early afternoon.
But I'm not sure about it, and certainly I hear his call from trees
scattered around the yard.
Something I was never sure of, but am now: titmice definitely can
raise and lower their crests. I'd never seen one with its crest lowered,
but this one flattens his crest while he's in attack mode.
His EEE EEE EEE call isn't very similar to any of the calls
listed for juniper titmouse in the Stokes CD set or the Audubon
Android app. So when he briefly attacked the window next to my
computer yesterday afternoon while I was sitting there, I grabbed
a camera and shot a video, hoping to capture the sound. The titmouse didn't
exactly cooperate: he chirped a few times, not always in the group of
three he uses so persistently in the morning, and the sound in the
video came out terribly noisy; but after some processing in audacity
I managed to edit out some of the noise. And then this morning as I
was brushing my teeth, I heard him again and he was more obliging, giving
me a long video of him attacking and yelling at the bedroom window.
Here's the
Juniper
titmouse call as he attacks my window this morning,
and yesterday's
Juniper
titmouse call at the office window yesterday.
Today's video is on youtube:
Titmouse attacking the window
but that's without the sound edits, so it's tough to hear him.
(Incidentally, since Audacity has a super confusing user interface and
I'm sure I'll need this again, what seemed to work best was to
highlight sections that weren't titmouse and use
Edit→Delete; then use Effects→Amplify,
checking the box for Allow clipping and using Preview to
amplify it to the point where the bird is audible. Then find a section
that's just noise, no titmouse, select it, run Effects→Noise
Reduction and click Get Noise Profile. The window goes
away, so click somewhere to un-select, call up Effects→Noise
Reduction again and this time click OK.)
I feel a bit sorry for the little titmouse, attacking windows so frenetically.
Titmice are cute, excellent birds to have around, and I hope he's saving
some energy for attracting a mate who will build a nest here this spring.
Meanwhile, he's certainly providing entertainment for me.
Tags: nature, birds
[
11:10 Feb 08, 2016
More nature/birds |
permalink to this entry |
]
Fri, 05 Feb 2016
Debian's Unstable ("Sid") distribution has been terrible lately.
They're switching to a version of X that doesn't require root,
and apparently
the X
transition has broken all sorts of things in ways that are hard to fix
and there's no ETA for when things might get any better.
And, being Debian, there's no real bug system so you can't just CC
yourself on the bug to see when new fixes might be available to try.
You just have to wait, try every few days and see if the system
That's hard when the system doesn't work at all. Last week, I was
booting into a shell but X wouldn't run, so at least I could pull
updates. This week, X starts but the keyboard and mouse don't work at all,
making it hard to run an upgrade.
has been fixed.
Fortunately, I have an install of Debian stable ("Jessie") on this
system as well. When I partition a large disk I always reserve several
root partitions so I can try out other Linux distros, and when running
the more experimental versions, like Sid, sometimes that's a life saver.
So I've been running Jessie while I wait for Sid to get fixed.
The only trick is: how can I upgrade my Sid partition while running
Jessie, since Sid isn't usable at all?
I have an entry in /etc/fstab that lets me mount my Sid
partition easily:
/dev/sda6 /sid ext4 defaults,user,noauto,exec 0 0
So I can type
mount /sid
as myself, without even needing
to be root.
But Debian's apt upgrade tools assume everything will be on /,
not on /sid. So I'll need to use chroot /sid
(as root)
to change the root of the filesystem to /sid. That only affects
the shell where I type that command; the rest of my system will still be
happily running Jessie.
Mount the special filesystems
That mostly works, but not quite, because I get a lot of errors like
permission denied: /dev/null
.
/dev/null is a device: you can write to it and the bytes disappear,
as if into a black hole except without Hawking radiation.
Since /dev is implemented by the kernel and udev, in the chroot
it's just an empty directory. And if a program opens /dev/null in
the chroot, it might create a regular file there and actually write to it.
You wouldn't want that: it eats up disk space and can slow things down a lot.
The way to fix that is before you chroot:
mount --bind /dev /sid/dev
which will make /sid/dev a mirror of the real /dev.
It has to be done before the chroot because inside the chroot,
you no longer have access to the running system's /dev.
But there is a different syntax you can use after chrooting:
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
It's a good idea to do this for /proc and /sys as well,
and Debian recommends adding /dev/pts (which must be done after you've
mounted /dev), even though most of these probably won't come into play
during your upgrade.
Mount /boot
Finally, on my multi-boot system, I have one shared /boot
partition with kernels for Jessie, Sid and any other distros I have
installed on this system. (That's
somewhat
hard to do using grub2
but easy on Debian
though you may need to
turn
off auto-update and
Debian
is making it harder to use extlinux now.)
Anyway, if you have a separate /boot partition, you'll want it mounted
in the chroot, in case the update needs to add a new kernel.
Since you presumably already have the same /boot mounted on the
running system, use mount --bind
for that as well.
So here's the final set of commands to run, as root:
mount /sid
mount --bind /proc /sid/proc
mount --bind /sys /sid/sys
mount --bind /dev /sid/dev
mount --bind /dev/pts /sid/dev/pts
mount --bind /boot /sid/boot
chroot /sid
And then you can proceed with your apt-get update
,
apt-get dist-upgrade
etc.
When you're finished, you can unmount everything with one command:
umount --recursive /sid
Some helpful background reading:
Tags: linux, debian, chroot, install, boot
[
11:43 Feb 05, 2016
More linux/install |
permalink to this entry |
]