<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Picks and Pans</title>
      <link>http://blog.heeltoe.com/picksandpans/</link>
      <description>Brad&apos;s comments on the world of technology

brad at heeltoe dot com</description>
      <language>en</language>
      <copyright>Copyright 2011</copyright>
      <lastBuildDate>Mon, 03 Jan 2011 07:30:11 -0500</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.33</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>mindcrack (&quot;minecraft&quot; really)</title>
         <description><![CDATA[<p><a href="http://blog.heeltoe.com/picksandpans/images/im001159.jpg"><img alt="im001159.jpg" src="http://blog.heeltoe.com/picksandpans/images/im001159-thumb.jpg" width="200" height="133" /></a></p>

<p>I didn't really see this coming, but I've become a "mindcraft" server admin.</p>

<p>If you don't have a 12-14 year old boy, you might not know what this is. </p>

<p>Near as I can tell it goes directly to the pleasure center in their<br />
brain and chemically bonds to the receptors.</p>

<p>It's a rather interesting java based "3D world" which you can move<br />
around in and create things.  But that description does not do it<br />
justice.  It's quite an interesting wonderland were the object seems<br />
to be able to construct things - buildings, bridges, towns, etc...</p>

<p>There is a java based client which (I'm guessing) uses OpenGL, since<br />
it has nice real-time 3d graphics.  The graphics are a bit cheesy but<br />
pretty fun to look at.  The system creates a 3d virtual world with<br />
lots of interesting rules.  And it's multiplayer.</p>

<p>There is an associated server.  It has been hacked to include java<br />
"plugins".  So naturally I was strong-armed into creating one for my<br />
son.  And now, of course, he wants to make it "public".  Which<br />
presents some network security issues and opens the notion of using a<br />
cloud VM.</p>

<p>The note worthy thing here is that there is no "one server".  Anyone<br />
can create a server and house a world.  </p>

<p>The plugins are java code, and seem to be able to manipulate the world<br />
rules in interesting ways.  One will let you "fly".  Another creates a<br />
"magic carpet" which is transparent and allows you to walk anywhere,<br />
even through things.  Lots of other interesting ones.</p>

<p>Anyway, I was curious if anyone else had run into this.  The<br />
interesting thing to me is that it seems to have spread like wildfire<br />
in the "young boys" world and there are a ton of interesting "plugins"<br />
which are not written by the original author, and in fact, there is a<br />
"modded" server which enables the plug ins, also not written by the<br />
author.</p>

<p>People seem to disassemble the original java and then glue in their<br />
changes and re-release.  It's an interesting phenomena, IMHO.</p>

<p>I'm also impressed with the fact that it's all written in java.  It<br />
runs at a good clip.<br />
</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2011/01/mindcrack_minecraft_really.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2011/01/mindcrack_minecraft_really.html</guid>
         <category>Software</category>
         <pubDate>Mon, 03 Jan 2011 07:30:11 -0500</pubDate>
      </item>
            <item>
         <title>A quick way to boot linux on a windows pc</title>
         <description><![CDATA[<center>
<a href="http://blog.heeltoe.com/picksandpans/images/IM001124.JPG"><img alt="IM001124.JPG" src="http://blog.heeltoe.com/picksandpans/images/IM001124-thumb.JPG" width="240" height="160" /></a>
</center>

<p>This is handy if you need linux quickly on windows</p>

<p>This is probably old hat to most people, or uninteresting if you have vmware,<br />
but in a pinch, this is a quick way to boot up linux on a windows box,<br />
which can be very useful.</p>

<p>    <a href="http://www.pendrivelinux.com/use-qemu-to-boot-linux-from-windows/">http://www.pendrivelinux.com/use-qemu-to-boot-linux-from-windows/</a></p>

<p>With some small edits to the .bat file you can add local disk images.</p>

<p>Handy if you need to do some quick unix work, like building a kernel or testing<br />
an small application.</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2011/01/a_quick_way_to_boot_linux_on_a.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2011/01/a_quick_way_to_boot_linux_on_a.html</guid>
         <category>Software</category>
         <pubDate>Mon, 03 Jan 2011 07:00:29 -0500</pubDate>
      </item>
            <item>
         <title>WIFI Enabled Thermostats</title>
         <description><![CDATA[<p>On a whim I went out and bought two of the new WIFI enabled thermostats from 3M.</p>

<p>They are really from radiothermostat.com, but 3M seems to be subsidizing them with<br />
an OEM arrangement.</p>

<p>Oddly, 3M's sight has no mention of this product.  But you can <a href="http://www.homedepot.com/webapp/wcs/stores/servlet/ProductDisplay?jspStoreDir=hdus&catalogId=10053&productId=202352449&navFlow=3&keyword=202352449&langId=-1&searchRedirect=202352449&storeId=10051&ddkey=Search">buy it at Home Depot</a></p>

<p>Or you can try</p>

<p><a href="http://www.radiothermostat.com/wifi/">http://www.radiothermostat.com/wifi/</a></p>

<p>Worst case <a href="http://lmgtfy.com/?q=filtrete+wifi+thermostat">google "filtrete wifi"<br />
</a><br />
The bottom line is that for $99 you get a reasonable programmable thermostat which also does WIFI.  It supports WEP and WPA2 encryption.  It has a touch screen and a modern look. And it's simple to install.</p>

<p>I've wanted one of these for years but they were always $300-400 which was too much. When I saw one for $99 I had to jump.</p>

<p>I was skeptical it could work, or work well, but I was able to quickly install it and get it working on my WIFI network.  I actually followed the directions and they worked.  To get it on the network it starts out as something like an AP - it shows up with a name as a peer to peer<br />
net on your laptop (I didn't realize you could do that running peer-to-peer).  You select the thermostat's temporary AP and then connect to it's web server and tell it how to get on your private wifi.  It then talks (via ping) to "radiothermostat.com<br />
s" server and you can manage the thermostat remotely via the web or an iPhone app.</p>

<p>The iPhone app will connect directly (via WIFI) or let you manage the thermostats remotely<br />
via their server.  Handy in the summer...</p>

<p>It looks like you can also program it using a web protocol.  They claim they will publish an API shortly but lots of hackers seem to have figured the RESTful protocol.  It's not too complex and<br />
I'm sure 10 lines of perl will do everything I want to do.</p>

<p>I wonder if it runs linux :-)</p>

<p>-brad<br />
</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2010/12/wifi_enabled_thermostats.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2010/12/wifi_enabled_thermostats.html</guid>
         <category></category>
         <pubDate>Sat, 25 Dec 2010 08:52:19 -0500</pubDate>
      </item>
            <item>
         <title>PCI and PCIe performance</title>
         <description><![CDATA[After a short string of job interviews a few months ago I sat down and tried to quantified
some of my thinking about PCI, PCIe and how they interact with software.

<p>
 It's a work
in progress and needs more content, but it's a start.  I plan to add more graphics and empirical data over time

<p>
<a href="http://www.heeltoe.com/download/Software_PCI_Paper.pdf">Software and Performance Ramifications of PCI and PCIe Design Paradigms</a>

<p>
Feel free to email comments.


]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2010/12/pci_and_pcie_performance.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2010/12/pci_and_pcie_performance.html</guid>
         <category></category>
         <pubDate>Tue, 07 Dec 2010 07:07:23 -0500</pubDate>
      </item>
            <item>
         <title>Simulating the NIOS II w/mmu using Verilator</title>
         <description><![CDATA[<p>I've fallen in love with "verilator".</p>

<p>It's a verilog simulator which generates C++ code.  It's not fair to call it a verilog to<br />
C translator because it does much more than that.</p>

<p>I like it because it forces problems out of my designs, generates good lint output and runs very very fast.  For many of the designs I simulate using cver or iverilog takes many hours, sometimes a day.  With verilator I cycle time performance which is withing an order of magnitude of my behavioral models (well, ok, that might be an exaggeration but it seems that way).  My sims often shorten from overnight to 10 minutes.</p>

<p>So, I wanted to study the TLB accesses on the NIOS II running full linux so I could<br />
improve my behavioral model of the NIOS II.  To that end I grabbed a pre-baked<br />
NIOS II and stripped off everything but the cpu.  I then wrote my own "testbench" models for the memory - sdram and flash as well we the jtag uart and timers.  Just a simple hack to answer when the cpu calls.  Nothing as complex a full Avalon bus with arbitration, because I don't need that to sim the basic cpu.</p>

<p>I also had to write behavioral models for "altsyncram" and the "altmul_sum" multiplier.  That was fun.  The sync ram model is very very dense inside and pretty much inscrutable. But fortunately the NIOS uses the sync rams as basic dual port memories in a fairly constrained way.  It does make interesting use of the byte enables and clock enables - my guess is this helps them make timing.  When the pipe stalls the clock enables are de-asserted to stall the sync rams "internal pipe" as well.  It's fun to watch in green waves.</p>

<p>So, I have gotten the NIOS II to simulate using verilator.  I'm still having a problem with the JFFS2 reading of flash, but I'm very close to running something in userland.  The kernel comes up to the point where it mounts the JFFS2 file system, which is good.  It just has not used the TLB's yet.</p>

<p>I like the NIOS II architecture, especially with the MMU, if you can call it that.  It's a simple six stage pipeline with tightly coupled I and D caches.  The I cache is small but seems to work pretty well, as does the D cache.  The caches are 16 way set associative.</p>

<p>The "mmu" is really just a small set of TLB's which are used for various segments of the address space.  They function much like the i-cache near as I can tell, i.e. an n-way set associative memory.  I'm still working out the details.</p>

<p><br />
</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2010/07/simulating_the_nios_ii_wmmu_us.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2010/07/simulating_the_nios_ii_wmmu_us.html</guid>
         <category>Hardware</category>
         <pubDate>Fri, 16 Jul 2010 11:54:51 -0500</pubDate>
      </item>
            <item>
         <title>pxe booting, huge pages and running raw x86_64 code</title>
         <description><![CDATA[<p>Lately, for one of my customers, I've been using "pxeboot".</p>

<p>You know you're in trouble when you order a motherboard with 2 cpu slots and 16 ram slots...</p>

<p>It seems most high end server mother boards support "pxe", which is essentially dhcp + tftp lan booting.  Basically booting over the network.</p>

<p>The fun thing is it loads the code 0x7c00, just like the bios loads the boot sector. This means, you can write simple real mode code, just like in a boot sector.</p>

<p>I've been doing this and then jumping to protected mode and then writing C, but naturally the customer wants to use "long mode" since his machine has 320Gb of ram and he wants to use it all.  So, I crafted up some code to switch from real mode to long mode.  This requires turning on paging so I decided to use 1Gb pages to make the paging table smaller (since I am lazy and writing real mode code is painful).</p>

<p>Anyway, I have pxe loadable code which will flip into "long mode" and run a 64 bit mini-os, all loadable from the network.</p>

<p>Not that hard to do, but.  The interesting part is that QEMU was very helpful up through protected mode, but bochs has really shone as a good pc emulator. I modified "bfe" the bochs front end so I could single step through the boot code when loaded but the bios.  This is helpful.  But I used qemu since it's faster.</p>

<p>But qmeu does not support 1gb pages.  I was surprised to find bochs does, if you turn on x86_64 support.</p>

<p>It's a little frightening to build a page table for a 320gb machine, but hey, it only took 320 PDP entries and one PML4 entry.</p>

<p>The point of the story is that "PXE" booting seems like a useful thing for some applications, and being able to write raw code to use a PC and an embedded system in sometimes helpful.<br />
</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2010/07/pxe_booting_huge_pages_and_run.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2010/07/pxe_booting_huge_pages_and_run.html</guid>
         <category></category>
         <pubDate>Mon, 05 Jul 2010 10:32:01 -0500</pubDate>
      </item>
            <item>
         <title>machine level instructions are interesting</title>
         <description><![CDATA[<p>This will not be interesting unless you find machine level instructions interesting.<br />
Lately *all* I do is machine level instructions.</p>

<p>NOTICE how everyone mentioned in the presentation (last pages) uses their TWITTER addresses.  Am I lost in the haze?  Does everyone use twitter except me?</p>

<p><a href="http://www.scribd.com/doc/28264000/Descent-into-Darkness-Understanding-your-systems-binary-interface-is-the-only-way-out">http://www.scribd.com/doc/28264000/Descent-into-Darkness-Understanding-your-systems-binary-interface-is-the-only-way-out</a></p>

<p>Anyway, I like this presentation.  It's funny.  It has nice pictures.  It has great diagrams.  And it describes a cool idea.  And it talks about x86_64 machine level instructions.<br />
</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2010/07/machine_level_instructions_are.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2010/07/machine_level_instructions_are.html</guid>
         <category>Software</category>
         <pubDate>Mon, 05 Jul 2010 10:29:08 -0500</pubDate>
      </item>
            <item>
         <title>Re-creating old CPU designs</title>
         <description><![CDATA[<a href="http://blog.heeltoe.com/picksandpans/images/IMG_0036.jpg"><img alt="IMG_0036.jpg" src="http://blog.heeltoe.com/picksandpans/images/IMG_0036-thumb.jpg" width="240" height="320" /></a>
<p>Over the years I've done a number of experiments using Verilog, a hardware modeling language.  In several of these experiments I have attempted to recreate old CPU designs like the MIT CADR lisp machine and the DEC PDP-8/I.  My latest experiment is to recreate the PDP-11, in modern verlog, using modern simulation techniques.
<p>
Note that this has been done before.  I know of at least 2-3 old microcoded versions and more recently there are 3 other groups which have done this, but in all the cases the code is either not in verilog or is proprietary and closed.  Not very helpful.
<p>
I have not (yet) delved into SystemC, but I have done some fun work with co-simulation.  Most recently I wired my RTL simulation of the pdp-11 in almost-verilog to a "known good" pdp-11 instruction set simulator.  The idea is that both the RTL simulation and the instruction set simulator run the same code and at the end of each instruction cycle the results are compared.  The "results" are the internal register values, the processor status word and the list of bus operations which occurred (address, type, data).
<p>
In a perfect world the two simulations will run in lock step and any deviation is a bug.  And this is mostly true.  The comparison turns out to be extremely helpful and very valuable.
<p>
Again, however, this is not new.  I learned this technique from others who are smarter than I am.
<p>
While attempting to recreate the pdp-11 I ran into a number of interesting problems.
The instruction set is fairly simple but it is not RISC.  The effective address computations are complex and in many cases doubled.  Let me supply an example:.
Here is a list of the 8 addressing modes.  A complex instruction can have a 
source operand (with one of these addressing modes) and a destination operand
(with one of these addressing modes).  So, in the worst case you need to compute
the effective address and do one or more fetches for the source and destination.
<pre>
mode symbol  ea1     ea2             ea3             data          side-effect                                                                               
0    R       x       x               x               R               x       
1    (R)     R       x               x               M[R]            x       
2    (R)+    R       X               x               M[R]            R<-R+2  
3    @(R)+   R       M[R]            x               M[M[R]]         R<-R+2  
4    -(R)    R-2     x               x               M[R-2]          R<-R-2  
5    @-(R)   R-2     M[R-2]          x               M[M[R-2]]       R<-R-2  
6    X(R)    PC      M[PC]+R         x               M[M[PC]+R]      x       
7    @X(R)   PC      M[PC]+R         M[M[PC]+R]      M[M[M[PC]+R]]   x       
</pre>
Seems complex, yes?  Each M[] is a memory read.  The basic register indirect is simple.  But modes 6 & 7 add the side effect of reading addition operand data from the next instruction location.  This increments the pc as well as fetching an offset which gets added to the result of a previous EA calculation.
<p>
So, how to implement this?  My first thought was a complex state machine.  After a while I got frustrated and thought it might be easier  just to make a machine which recodes the old pdp-11 instruction into new "risc-like" instructions on the fly.  Sort of a just-in-time binary recompilation.  I think this is how modern day X86 machines work.  The fun idea would be to have several "machines" running ahead and converting the pdp-11 CISC instructions into simple RISC instructions, filling several FIFO's.  The then RISC engine could use modern ideas like a multi-stage pipeline, speculative execution and branch prediction.  While very cool, I quickly decided that was more complexity than I wanted at this stage.
<p>
I do think, however that it might make sense initially to do a simple "recoding engine" and a simple "risc pipeline".  I want to do it and compare the gate count to a state machine version.
<p>
So, I set out to do a simple state machine version.  I tried to compress the states as much as possible but current feel there has to be a decode state, four states for each operand, an execute state and a write-back state.  The four states for each operand can be reduced to a little as one, depending on how the instruction decodes.  I tried to eliminate the single EA state for each operand but instructions like:
<pre>
   mov   @(R5)+,@(R5)+
</pre>
<p>
causes problems.  Why?  because the value of R5 is incremented twice, once after
each EA calculation.  If I did the EA and post-increment in one state I needed to
special case the increment (to be 2x) if the both registers were equal.  And it got
to be a big mess.  I capitulated, added a state, and reduced the complexity.
<p>
I should note here that all pdp-11's, except one, are microcoded.  And I can see why.
<p>
At some point I do want to try an experiment by adding a pre-fetch unit, keeping at
least 3 words available and doing the EA calculations in parallel.  The EA calculation will stack up (i.e. stall) queuing up for memory reads, but it has the potential for being more efficient, especially if there is a cache which does burst reads and the line size is at least 8 bytes.
<p>
I know this might all sound crazy, but I've learned a lot in the process and almost everything I have learned has been useful in my day job.
<p>
]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2009/03/recreating_old_cpu_designs.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2009/03/recreating_old_cpu_designs.html</guid>
         <category>Hardware</category>
         <pubDate>Thu, 26 Mar 2009 08:24:09 -0500</pubDate>
      </item>
            <item>
         <title>a used 2g iphone is actually cool</title>
         <description><![CDATA[<p> I bought a used iphone 2G model for work.  I didn't intend to use
it as an actual phone.  But, as time wore on, I started playing with
it, and (mostly) prying it out of the hands of my 10 and 12 year olds
and I've grown to like it.

<p> Oddly, I've yet to <i>activate</i> it.  I suppose I will soon, but
the idea of spending $75/month is a little painful right now.  I guess
I'm paying $50/month for my current phone, so maybe it's not that much
of an increase.

<p> The most fun part for me has been the mp3 player.  I have a lot of
music on our home file server, all legally paid for and ripped from
CD's.  Except for the mp3's I downloaded directly from Amazon
(<b>THANK YOU</b> Amazon for selling MP3's!).  Anyway, all of the
music is legit.  And now I can load it onto the phone and listen to it
as I walk to and from work.  Heh - I've become one of those "young
people" who wear headphones.  But I swear it's great to listen to
music on the way to work.

<p>I may have to upgrade to the 3G version, however, if only for the
EDGE and GPS.  I think the GPS might come in pretty handy.

<p>I'm a little sad because my sleek little MP3 playing Sony Ericson
slide phone is still pretty cool.  I didn't intend to cheat.  It just
happened.

<p>One thing I will mention - using iTunes can be a real pain.  It's a
very pretty interface but for the first time user it can be pretty
confusing.  I spent 15 minutes trying to figure out how to get music
into it from a file on my hard disk.  It should not be that hard.

<p>I should also mention that the apps you can buy (or download for
free) from the Apple "app store" are pretty cool.  There's a lot of
things to browese through.  A few too many, to be honest.  I would be
nice to find some place the reviews the apps and recommends the best
ones.  Naturally my son (he's 10) immediately downloaded the Star Wars
"light saber" app.  Even I find it fun after a few coctails.  

<p>Even without activation the 802.11 connectivity make it a very
useful device.  I can browese, get weather, stock info, you tube, send
email, etc...

<p>All in all, I like it.  And I didn't think I would.

]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2009/01/a_used_2g_iphone_is_actually_c.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2009/01/a_used_2g_iphone_is_actually_c.html</guid>
         <category>Technology</category>
         <pubDate>Wed, 14 Jan 2009 21:31:25 -0500</pubDate>
      </item>
            <item>
         <title>pcc (portable c compiler) lives again!</title>
         <description><![CDATA[<p>Two interesting things happened this week</p>

<p>- the "R" programming language was talked about in the mainstream press.</p>

<p>- I discovered that the openbsd folks are working on using a non-gcc C<br />
compiler (pcc).  Turns out in the non-linux unix world there is not so<br />
much love for gcc.</p>

<p>This makes some sense. gcc is huge and hard to work with.  When it<br />
compiles it uses every available resource and eats the machine.  It's<br />
not that easy to port or maintain.  And it keeps getting bigger.</p>

<p>"pcc" on the other hand is 5-10 times faster, generates reasonable code<br />
and is easy to port and work on.  Someone is actually maintaining it.<br />
This is the same pcc some will remember from Bell Labs in the '70s, back<br />
when all the world was a pdp-11 (just before all the world became a<br />
vax).</p>

<p>And, as eco systems go, it's good to have more than one option.  Linux<br />
is competely dependant on gcc.  Netbsd on the other hand, is not.</p>

<p>(I've been working on getting netbsd to run on a my vax 11/730 again,<br />
so I've fallen back in love with netbsd.  Well, I think we're more like<br />
friends with benefits, but please don't tell linux I've been cheating.)</p>

<p>anyway, I thought that was interesting.  Apparently the pcc maintainer is<br />
planning to add PIC support to pcc this winter which is one of the<br />
missing features needed.  </p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2009/01/pcc_portable_c_compiler_lives_1.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2009/01/pcc_portable_c_compiler_lives_1.html</guid>
         <category></category>
         <pubDate>Thu, 08 Jan 2009 14:27:10 -0500</pubDate>
      </item>
            <item>
         <title>Ubuntu upgrades.  wow!</title>
         <description><![CDATA[<p>I have a couple of machines running Ubuntu.  More and more lately.</p>

<p>One machine at home was running Ubuntu 7.04 and mythtv.  I was loath to change it<br />
because it was working and I hate having to type "ssh" when I'm watching tv.</p>

<p>But, I finally did it over the holidays.  First I upgraded to 7.10, which was a pain.<br />
7.04 is not longer supported and I have to hack the apt config file to point to the <br />
archives.  But this broke the upgrade.  So I ended up starting with a archive pointing apt<br />
config and then switching it in the middle of the upgrade to point to the normal repository. <br />
A bit hair raising but it worked.</p>

<p>Once at 7.10 I could cleanly upgrade to 8.04 and then to 8.10.  I did it all via ssh and<br />
and it worked with very few problems.   My hat is off to the Ununtu guys.</p>

<p>Getting X to work consistantly with my Nvidia display card was no so easy.  With some<br />
releases there is support from Ubuntu.  But not 8.10.  For that I had to go back to using<br />
the linux install script from NVidia, which does all sorts of fun things under the covers.</p>

<p>But now I have mythtv back, and I'm running 8.10 and all is well with the world.</p>

<p>That went so well I upgrade a machine at work and it too did the right thing.  Very nice.</p>

<p>Sadly I'm about to wave goodbye to RedHat.  I with I didn't have to,but they don't seem<br />
to be providing the same level of coolness that Ubuntu us.  The "apt-get" system is<br />
just too nice.  I never want to see another rpm again.</p>

<p>Virtually everything I wanted was available from apt-get.  Amazing.  And easy!</p>]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2009/01/pcc_portable_c_compiler_lives.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2009/01/pcc_portable_c_compiler_lives.html</guid>
         <category>Software</category>
         <pubDate>Thu, 08 Jan 2009 14:26:06 -0500</pubDate>
      </item>
            <item>
         <title>My experiment with Mythtv</title>
         <description><![CDATA[<p>
I love my tivo.  I've added a big disk to it.  But I want to see more
of my "personal media" on the tv (pictures, movies, etc) so I decided
to make a Mythtv box.
<p>
I made a nice new pc in a "stereo cabinet like" box.  I used a
motherboard with built in HDMI output (very nice) and a 64 bit AMD
cpu.  I got all this from <a href="http://www.mwave.com">Mwave</a>.
<p>
<ul>
<li>Motherboard: BIOSTAR TF7050-M2 nVIDIA GeFORCE 7050PV CHIPSET MICRO ATX
<li>Box: ANTEC NSK2400 (BLACK / SILVER) MICRO ATX DESKTOP CASE
</ul>
<p>
And of course I stuffed a dvd cdrom drive and a huge SATA disk drive.
<p>
Using a motherboard with HDMI out was key, becauase I just bought a 
big lcd hdtv.
<p>
When it arrived installed Ubuntu using this page:
<p>
<a href="https://help.ubuntu.com/community/MythTV_Feisty_Backend_Frontend">MythTV_Feisty_Backend_Frontend</a>

<p>
I bought a Tivo remote control because everyone in my house knows how
to use one. I got it from <a href="http://www.weaknees.com">WeaKnees</a>.
I love the stuff they sell.

<p>
I then found I had an "IR problem".  I solved it with a <a href="http://www.usbuirt.com">USBUIRT</a> device, which I also love. Get the one with
the 56k detector.  It "just worked".

<p>
<b>Interesting bits:</b>
<p>
- I found a tivo control file which described the tivo remote.  And then
I had to hack the mapping file quite a bit to get it to be the way I
wanted.
<p>
- Support for the nvidia chipset was not in the kernel.  I used an
install package from Nvidia which was scary.  But it did provide a
nice X windows based config tool which turned out to be handy.
<p>
(X windows looks *really* nice on my hdtv.  It makes me thing my next
monitor for my office will be a 40" lcd hdtv.  why not? huge screen!)
<p>
- DVD's did not "just play" by default.  Instead I got odd /dev/hdc
i/o errors.  I asked a friend (thanks Bill!) and installed a few
missing DVD decode packages.  apt-get to the rescue.  It then 
worked fine.  I thought for a 1/2 day I had a bad cd-rom drive.

<p>
<b>Result:</b>
<p>
After many apt-gets and much twiddling I now have a nice Mythtv box which
responds to a tivo remote.  I can view my video and pictures and watch
Jim Lehrer on the big screen (my record list is only PBS and F1 on Speed :-)
<p>
I may still get a HD Tivo, but the MythTv is a very nice adjunct and
allows me to do things in a nice linuxy way with my home media.  I
plan to try firewire next and if that works ok I may skip the tivo
hd...



]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2007/10/my_experiment_with_mythtv.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2007/10/my_experiment_with_mythtv.html</guid>
         <category></category>
         <pubDate>Thu, 25 Oct 2007 10:52:01 -0500</pubDate>
      </item>
            <item>
         <title>Modifying read-only file systems in an embedded system</title>
         <description><![CDATA[<p> 
It's often a good idea to make the root file system in a embedded system
read-only.  If you do this and only make changes to files in a ram disk
(mounted under /tmp, for example) the device will always come back to
a known state when powered up.  This is a nice feature and often
a requirement.

<p>
But sometimes you need to make changes which persist.  Check out the <a
href="http://www.denx.de/wiki/bin/view/Know/MiniFOHome">"mini fan
out"</a> file system.  It allows you to layer changes on top of a
read-only file system.

<p>
I have not used this package directly, but I plan to shortly.

]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2007/03/modifying_a_readonly_file_syst.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2007/03/modifying_a_readonly_file_syst.html</guid>
         <category>Software</category>
         <pubDate>Sun, 18 Mar 2007 09:40:02 -0500</pubDate>
      </item>
            <item>
         <title>Firefox bookmarks</title>
         <description><![CDATA[<p>
Just a quick note on bookmarks.  I use several laptops, a common machine
at home and a workstation at work.  This can sometimes get confusing
when I save web bookmarks in various different places.

<p> I recently discovered <a
href="http://www.foxmarks.com/">"foxmarks"</a>.  I only used Firefox,
and foxmarks is an extension which syncs up my bookmarks everyplace I
install it.  It's very handy.

<p> I also discovered
<a href="https://addons.mozilla.org/firefox/2888/">"gmarks"</a>, which
places the bookmarks in a window on the left makes them easy to use.
I'm still on the fence with gmarks

<p>
Sometimes I wish there was a way to make cross platform "notebooks" with
firefox, which would combine a directory tree under SVN control, bookmarks,
pdf and an email folder all into one.  And make it easy to archive.

]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2007/03/firefox_bookmarks.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2007/03/firefox_bookmarks.html</guid>
         <category>Software</category>
         <pubDate>Sun, 18 Mar 2007 09:29:15 -0500</pubDate>
      </item>
            <item>
         <title>RCU in the linux kernel; an alternative to reader-writer locks</title>
         <description><![CDATA[<img src="/images/pile_small.jpg">
<p>
I ran into something in the announcement of the
<a href="http://linux.slashdot.org/linux/06/11/30/1723214.shtml">2.6.19 kernel</a>
 called "sleepable rcu".  I found this
<a href="http://en.wikipedia.org/wiki/RCU#What_is_a_Simple_Implementation_of_RCU.3F">wikipedia entry for rcu</a>.  It gives some nice background on rcu's.

<p>I don't normally place much credence in wikipedia pages but this
one seems reasonably good.  And it explains why RCU's are a better
alternative to multiple-reader-single-writer locks.

<p>You don't care about this unless you're doing low level work on
multiple CPU systems, which I do from time to time. I'm working on
several at them moment, each small.

<p>I'm new to rcu's but they look like a very low cost way to manage
updates to high(er) contention data items which are updated (note the
work "generations" in the wiki).  This concept looks a lot like
various academic techniques I've read about over they years to create
safe software locks.





]]></description>
         <link>http://blog.heeltoe.com/picksandpans/2006/12/rcu_in_the_linux_kerne_an_alte.html</link>
         <guid>http://blog.heeltoe.com/picksandpans/2006/12/rcu_in_the_linux_kerne_an_alte.html</guid>
         <category>Software</category>
         <pubDate>Sat, 02 Dec 2006 10:35:29 -0500</pubDate>
      </item>
      
   </channel>
</rss>

