<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6653558328125881331</id><updated>2026-03-05T03:13:12.055-05:00</updated><category term="ubuntu"/><category term="linux"/><category term="video"/><category term="powerpc"/><category term="v4l2"/><category term="alsa"/><category term="mpeg"/><category term="podium"/><category term="bluecherry"/><category term="debug"/><category term="php"/><category term="macosx"/><category term="poker"/><category term="uds"/><category term="facebook"/><category term="feedburner"/><category term="flattr"/><category term="free-software"/><category term="open-source"/><category term="politics"/><category term="servergy"/><category term="zero-to-10k"/><category term="apache"/><category term="bass"/><category term="booct"/><category term="bootpd"/><category term="business"/><category term="cloud"/><category term="debian"/><category term="deploy"/><category term="dhcp"/><category term="hdcp"/><category term="internet"/><category term="lugradio"/><category term="mame"/><category term="privacy"/><category term="ps3"/><category term="rails"/><category term="rake"/><category term="ror"/><category term="security"/><category term="services"/><title type='text'>Ben Collins</title><subtitle type='html'>Technical ramblings of a Linux developer...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/-/ubuntu'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/search/label/ubuntu'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/-/ubuntu/-/ubuntu?start-index=26&amp;max-results=25'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-1522713515461162115</id><published>2016-03-25T13:54:00.003-04:00</published><updated>2016-03-25T13:57:42.338-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="deploy"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="rake"/><category scheme="http://www.blogger.com/atom/ns#" term="ror"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Easy Rake-based Deployment for Git-hosted Rails Apps</title><content type='html'>I searched a lot of places for an easy way to automate my deployments for &lt;a href=&quot;https://openstrokes.com&quot;&gt;OpenStrokes&lt;/a&gt;, a website I&#39;ve been working on. Some things were just too complex (capistrano) and some were way too simple (StackOverflow answers that didn&#39;t do everything, or didn&#39;t check for errors).&lt;br /&gt;
&lt;br /&gt;
So, as most people do, I wrote my own. Hopefully this short rake task can help you as well. This assumes that your application server has your app checked out as a clone of some git repo you push changes to and that you are running under passenger. When I want to deploy, I log in to my production server, &lt;code&gt;cd&lt;/code&gt; to my app repo, and then run:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;rake myapp:deploy&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
For just strictly view updates, it completes in 3 seconds or less. There are several things it does, in addition to checking for errors:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Checks to make sure the app&#39;s git checkout isn&#39;t dirty from any local edits.&lt;/li&gt;
&lt;li&gt;Fetches the remote branch and checks if there are any new commits, exits if not.&lt;/li&gt;
&lt;li&gt;Tags the current production code base before pulling the changes.&lt;/li&gt;
&lt;li&gt;Does a git pull with fast-forward only (to avoid unexpected merging).&lt;/li&gt;
&lt;li&gt;Checks if there are any new gems to install via bundle (checks for changes in Gemfile and Gemfile.lock).&lt;/li&gt;
&lt;li&gt;Checks if there are any database migrations that need to be done (checks for changes to db/schema.db db/migrations/*).&lt;/li&gt;
&lt;li&gt;Checks for possible changes to assets and precompiles if needed (checks Gemfile.lock and app/assets/*).&lt;/li&gt;
&lt;li&gt;Restarts passenger to pick up the changes.&lt;/li&gt;
&lt;li&gt;Does a HEAD request on / to make sure it gets an expected 200 showing the server is running without errors.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The script can also take a few arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;:branch&lt;/code&gt; Git branch, defaults to master&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:remote&lt;/code&gt; Git remote, defaults to origin&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:server_url&lt;/code&gt; URL for HEAD request to check server after completion&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Note, if the task encounters an error, you have to manually complete the deploy. You should not rerun the task.&lt;br /&gt;
&lt;br /&gt;
Any finally, here is the task itself. You can save this to &lt;code&gt;lib/tasks/myapp.rb&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;# We can&#39;t use Rake::Task because it can fail when things are mid
# upgrade

require &quot;net/http&quot;

def do_at_exit(start_time)
  puts &quot;Time: #{(Time.now - start_time).round(3)} secs&quot;
end

def start_timer
  start_time = Time.now
  at_exit { do_at_exit(start_time) }
end

namespace :myapp do
  desc &#39;Deployment automation&#39;
  task :deploy, [:branch, :remote, :server_url] do |t, args|
    start_timer

    # Arg supercedes env, which supercedes default
    branch = args[:branch] || ENV[&#39;DEPLOY_BRANCH&#39;] || &#39;master&#39;
    remote = args[:remote] || ENV[&#39;DEPLOY_REMOTE&#39;] || &#39;origin&#39;
    server_url = args[:server_url] || ENV[&#39;DEPLOY_SERVER_URL&#39;] || &#39;http://localhost/&#39;

    puts &quot;II: Starting deployment...&quot;

    # Check for dirty repo
    unless system(&quot;git diff --quiet&quot;)
      puts &quot;WW: Refusing to deploy on a dirty repo, exiting.&quot;
      exit 1
    end

    # Update from remote so we can check for what to do
    system(&quot;git fetch -n #{remote}&quot;)

    # See if there&#39;s anything new at all
    if system(&quot;git diff --quiet HEAD..#{remote}/#{branch} --&quot;)
      puts &quot;II: Nothing new, exiting&quot;
      exit
    end

    # Tag this revision...
    tag = &quot;prev-#{DateTime.now.strftime(&quot;%Y%m%dT%H%M%S&quot;)}&quot;
    system(&quot;git tag -f #{tag}&quot;)

    # Pull in the changes
    if ! system(&quot;git pull --ff-only #{remote} #{branch}&quot;)
      puts &quot;EE: Failed to fast-forward to #{branch}&quot;
      exit 1
    end

    # Base command to check for differences
    cmd = &quot;git diff --quiet #{tag}..HEAD&quot;

    if system(&quot;#{cmd} Gemfile Gemfile.lock&quot;)
      puts &quot;II: No updates to bundled gems&quot;
    else
      puts &quot;II: Running bundler...&quot;
      Bundler.with_clean_env do
        if ! system(&quot;bundle install&quot;)
          puts &quot;EE: Error running bundle install&quot;
          exit 1
        end
      end
    end

    if system(&quot;#{cmd} db/schema.rb db/migrate/&quot;)
      puts &quot;II: No db changes&quot;
    else
      puts &quot;II: Running db migrations...&quot;
      # We run this as a sub process to avoid errors
      if ! system(&quot;rake db:migrate&quot;)
        puts &quot;EE: Error running db migrations&quot;
        exit 1
      end
    end

    if system(&quot;#{cmd} Gemfile.lock app/assets/&quot;)
      puts &quot;II: No changes to assets&quot;
    else
      puts &quot;II: Running asset updates...&quot;
      if ! system(&quot;rake assets:precompile&quot;)
        puts &quot;EE: Error precompiling assets&quot;
        exit 1
      end
      system(&quot;rake assets:clean&quot;)
    end

    puts &quot;II: Restarting Passenger...&quot;
    FileUtils.touch(&quot;tmp/restart.txt&quot;)

    puts &quot;II: Checking HTTP response code...&quot;

    uri = URI.parse(server_url)
    res = nil

    Net::HTTP.start(uri.host, uri.port, :use_ssl =&gt; uri.scheme == &#39;https&#39;) do |http|
      req = Net::HTTP::Head.new(uri, {&#39;User-Agent&#39; =&gt; &#39;deploy/net-check&#39;})
      res = http.request req
    end

    if res.code != &quot;200&quot;
      puts &quot;EE: Server returned #{res.code}!!!&quot;
      exit 1
    else
      puts &quot;II: Everything appears to be ok&quot;
    end
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Here&#39;s an example of the command output:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;$ rake myapp:deploy
II: Starting deployment...
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 6), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
From /home/user/myapp
   efee45c..e5468c1  master     -&gt; origin/master
From /home/user/myapp
 * branch            master     -&gt; FETCH_HEAD
Updating efee45c..e5468c1
Fast-forward
 app/views/users/_display.html.erb     | 7 +++++--
 public/svg/badges/caretakers-club.svg | 1 -
 2 files changed, 5 insertions(+), 3 deletions(-)
 delete mode 100644 public/svg/badges/caretakers-club.svg
II: No updates to bundled gems
II: No db changes
II: No changes to assets
II: Restarting Passenger...
II: Checking HTTP response code...
II: Everything appears to be ok
Time: 3.031 secs&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/1522713515461162115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2016/03/easy-rake-based-deployment-for-git.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/1522713515461162115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/1522713515461162115'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2016/03/easy-rake-based-deployment-for-git.html' title='Easy Rake-based Deployment for Git-hosted Rails Apps'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Williamsburg, VA, USA</georss:featurename><georss:point>37.2707022 -76.7074571</georss:point><georss:box>37.169625200000006 -76.8688186 37.3717792 -76.5460956</georss:box></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-2544061075387703004</id><published>2013-03-07T15:18:00.001-05:00</published><updated>2013-03-08T11:14:50.240-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="free-software"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="open-source"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="servergy"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Power Up</title><content type='html'>As a POWER architecture hardware vendor, we&#39;ve definitely run into quite a few wish-list items for software we want to have on our platform. Whether it&#39;s for customers or just to have a feature complete set of packages in everyday distributions, we want to see things build everywhere, and run just as well as the x86 counterparts.&lt;br /&gt;
&lt;br /&gt;
Starting soon, we are kicking off a PowerUp (my cool label) initiative in order to direct POWER developers toward software that needs a little love on our POWER platforms. Software targets range from the completely unsupported (e.g. Google&#39;s v8 Javascript engine, D Languages&#39;s phobos) to optimizing specifically for POWER (e.g. OpenJDK).&lt;br /&gt;
&lt;br /&gt;
To collect these initiatives together, we will be starting a new PowerUp portal. For now, we have begun a &lt;a href=&quot;https://github.com/PowerLinux&quot;&gt;GitHub Team&lt;/a&gt; where we have forked relevant repositories. Forums for discussion and participation will also follow. Feel free to clone and hack away. Email me if you have any questions (or wait until the forums and portal open).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTE:&lt;/b&gt; PowerUp is just my initial name. That may or may not change.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll update this blog post when more information is available.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/2544061075387703004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2013/03/power-up.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2544061075387703004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2544061075387703004'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2013/03/power-up.html' title='Power Up'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-4189774119113918889</id><published>2013-03-06T12:47:00.002-05:00</published><updated>2013-03-06T14:10:31.242-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="servergy"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Ubuntu Rolling Releases Vs. Hardware Companies</title><content type='html'>So I have to speak out on this whole issue. I work for &lt;a href=&quot;http://www.servergy.com/&quot;&gt;Servergy&lt;/a&gt;, and for almost two years I&#39;ve been working on Ubuntu&#39;s PowerPC port in order for our new hardware platform, the &lt;a href=&quot;http://www.servergy.com/portfolio/cts-1000/&quot;&gt;CTS-1000&lt;/a&gt;, to have an out-of-the-box solution for our customers. We&#39;ve been hedging on Ubuntu, since it was able to provide us a known quantity for release dates and an open community that we could participate in (especially being able to take advantage of my core-developer status).&lt;br /&gt;
&lt;br /&gt;
Now, after so much work, so much planning, we are worried about 13.04 never being properly released. This would leave us with no stable Linux distribution for our hardware, basically yanking the rug out from under all of our work. Having a stable release every two years also enlarges the support gap for our followup platforms. Now I realize most hardware vendors are x86-based, and their issues are likely limited to supporting peripherals, so this affects us more than most. The issue we face is supporting entirely new hardware platforms and SoCs with a completely new kernel (likely requiring lots of supporting patches). This is the type of thing that, historically, isn&#39;t allowed to be added to an LTS release.&lt;br /&gt;
&lt;br /&gt;
So I have to wonder, if Ubuntu does adopt this rolling release schedule, how viable is it for us? I would still be happy if Ubuntu had one release per year, with every other release becoming an LTS. However, the two year window is just entirely too large to depend on for quick moving hardware bring up and release.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/4189774119113918889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2013/03/ubuntu-rolling-releases-vs-hardware.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4189774119113918889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4189774119113918889'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2013/03/ubuntu-rolling-releases-vs-hardware.html' title='Ubuntu Rolling Releases Vs. Hardware Companies'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-1978956222324034085</id><published>2012-11-07T20:10:00.000-05:00</published><updated>2012-11-08T09:48:54.234-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="free-software"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="open-source"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Reflecting on 14 years of free software</title><content type='html'>14 years ago last month, I created my first PGP key to sign up to be a Debian developer. I recall what brought me to that place. I had been trying to improve my skill-set for my resume and wanted to learn to program.&lt;br /&gt;
&lt;br /&gt;
Considering Linux was free compared to development software on Windows (and it ran on my Pentium 90MHz CPU when BSD didn&#39;t), it was an easy choice. However, I had no idea what I was getting into.&lt;br /&gt;
&lt;br /&gt;
At the time, I was on a steep learning curve. This command line thing was nothing like the Apple //e BASIC prompt I was used to from my youth, and not even close to Mac/Windows. I was literally reinstalling my Linux OS 2-5 times a week because I would dig around into things that I had no business checking into. I tried several distributions of the time including RedHat, Slackware and Debian. I settled on Debian because it had the largest software repository, and I wanted no limitations to my journey into the realm of a software developer.&lt;br /&gt;
&lt;br /&gt;
Back then, configuring my network meant first configuring the serial port and modem and then PPP and related software, in addition to chat scripts (used to provide username/password). Luckily I worked as a web designer for a local ISP, so the *nix gurus there gave me plenty of help.&lt;br /&gt;
&lt;br /&gt;
As happens with free software, it isn&#39;t too long before you start finding &quot;bugs.&quot; These annoying little things that stand in the way of you and your Linux Adulthood. At first, you just kick it around, try to avoid irritating the little thing, but eventually, you find yourself on IRC or a bug tracking system trying to find help.&lt;br /&gt;
&lt;br /&gt;
I immersed myself into providing feedback to hackers and coders to test what could be wrong with my system. Surely, I thought, this was not just a problem I was having but sat amazed at how intuitive these programmers were and how steadfast in wanting to help me fix the issue. Their tireless efforts inspired me to return as much as I could.&lt;br /&gt;
&lt;br /&gt;
I decided to join this group of lively lads known as Debian Developers, and submitted my PGP key and new-maintainer request. I got a call from Ian Jackson, while at work, and verified information by FAXing a few identification-proving materials to him in London. This was an exhilarating experience. I had never talked to a Brit before, much less one that was in Britain (yes, I was a little sheltered and naive). Now I just needed a way to give back to this group of about 800 developers and it&#39;s thousands of users.&lt;br /&gt;
&lt;br /&gt;
As luck would have it, I got quite familiar with the inner workings of Debian&#39;s package system (DPKG/DEB) and how it worked on UltraSPARC computers. Working at NASA, I had access to all sorts of SPARC hardware, and, at the time, Debian&#39;s SPARC port was a fledgling of hope, without any guidance. I began automatic builds of Debian&#39;s vast software repository on my UltraSPARC II desktop system at work. I&#39;d come in in the morning, verify the builds, PGP sign them, and upload the lot to the repository. I was king of SPARC!&lt;br /&gt;
&lt;br /&gt;
Yes, this did get to my head. I was young, eager and worst of all, blinded by the slightest recognition. I thrived on acknowledgement and was empowered by the adulation of my peers. I dove into Debian work like Michael Phelps at a community pool; head first and with no purpose. I spent all of my spare time working on SPARC build failures, taking over things like glibc, PAM and OpenLDAP maintenance. I was hooked and my ego took me to the next logical step, running for Debian Project Leader. However, my arrogant and harsh online persona left me with few supporters, the first time around...and the second time around too.&lt;br /&gt;
&lt;br /&gt;
Two years later, wiser and tempered by humility, I ran for DPL again. This time with a clear vision of what I wanted to accomplish and a vague image of my future legacy. You can read the whole thing &lt;a href=&quot;http://www.debian.org/vote/1999/ben&quot;&gt;here&lt;/a&gt;. As I read it, after all these years, I&#39;m reminded of how little I knew of the real world, but I&#39;m aghast at my own confidence and ambitious attitude. Time has a way of dulling that drive. During this DPL election, I had a clear win, and so began my 15 minutes of fame.&lt;br /&gt;
&lt;br /&gt;
My new found leadership was longing for things to &quot;fix.&quot; I started with Debian&#39;s non-US archive. We wanted encryption to be mainline, but US export restrictions were a hassle. We took on a pro-bono lawyer to help us with the specifics and finally figured out how to abide by such restrictions without opening ourselves up to legal action. The cool part was that we had to email and snail-mail notifications for each and every upload of a package that fell under these restrictions. Each notification looked something &lt;a href=&quot;http://www.debian.org/legal/notificationfornewpackages&quot;&gt;like this&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you know anything about Debian, you know packages get uploaded by the dozens a day, if not more. We were basically flooding the bureau (with the remote hope that they would realize how ridiculous this all was). The original mailing was 2 reams of paper, double sided in a single package. This occurred about once a month. It was sheer insanity, but it got us one step closer to what we wanted...world domination!&lt;br /&gt;
&lt;br /&gt;
My next step was to build up our infrastructure. Debian is heavily reliant on donations -- equipment and money. We had a good chunk of money, but we never spent it. We had decent donated hardware and bandwidth, but the main donor at the time would whine and cry and make threats that left us wondering if he would yank it all away some day. Either way, we got new hardware with large disk space at my local ISP. Chucked down $5000 for a Sun RAID array with about 320Gigs of disk. Pretty damn expensive.&lt;br /&gt;
&lt;br /&gt;
How I loved this time of my life. I was well known and in the headlines of &lt;a href=&quot;http://linux.slashdot.org/story/01/03/29/1344259/new-debian-project-leader&quot;&gt;Slashdot&lt;/a&gt; and &lt;a href=&quot;http://linuxgazette.net/issue66/correa.html&quot;&gt;Linux Gazette&lt;/a&gt; on a regular basis. I remember being able to pick up a book or magazine or two at Barnes and Noble that had my name and/or picture in it. I would be lying if I said I didn&#39;t miss that.&lt;br /&gt;
&lt;br /&gt;
But deep down, I&#39;m a developer. It didn&#39;t take long before I had that yearning to &quot;do some real work&quot; and by that I mean staying up all night in front of a shell prompt trying to figure out why that oops disappears when I add in some debug printk&#39;s or reverse engineer the endianness of an OHCI-1394 packet on sparc64. Anyways, on to better things I went and many more adventures awaited me.&lt;br /&gt;
&lt;br /&gt;
As I moved through my career, I became more and more focused on Linux kernel work. From embedded to server, from network drivers to mpeg drivers, from MMUs to CPUs. I&#39;ve never regretted a single step of the journey. As I sit here now, working from home at my newest job, I reflect, not with a sense of accomplishment, but with a sense of humility, knowing that there were many greater, smarter and harder working folks that traversed those same years making it all happen and enabling the opportunities that I&#39;ve had.&lt;br /&gt;
&lt;br /&gt;
So for anyone who stumbles upon this lonely blog entry, wondering what this whole free software thing is; take a seat, pour a cup of tea, and relax for a few minutes. It&#39;s probably the last time you will have that brief illusion of a normal life, but you wont miss it one bit.&lt;br /&gt;
&lt;br /&gt;
Cheers</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/1978956222324034085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/11/reflecting-on-14-years-of-free-software.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/1978956222324034085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/1978956222324034085'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/11/reflecting-on-14-years-of-free-software.html' title='Reflecting on 14 years of free software'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-1978012797300303820</id><published>2012-11-04T10:49:00.000-05:00</published><updated>2012-11-04T11:35:57.309-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="uds"/><title type='text'>Follow-up: Power Architecture Related Tracks Proposed for UDS-r</title><content type='html'>A few weeks ago I &lt;a href=&quot;http://ben-collins.blogspot.com/2012/09/power-architecture-related-tracks.html&quot;&gt;posted&lt;/a&gt; about some tracks at UDS concerning PowerPC. Here are links to the session results.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://summit.ubuntu.com/uds-r/meeting/21138/servercloud-r-virt-powerpc/&quot;&gt;Virtualization support for Power architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://summit.ubuntu.com/uds-r/meeting/21130/hardware-r-powerpc-devel/&quot;&gt;Power Architecture Kernel Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://summit.ubuntu.com/uds-r/meeting/21075/foundations-r-powerpc-bootloaders/&quot;&gt;PowerPC Bootloader Options&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
I need to clean up the items. The main take away is that the PowerPC kernels will be maintained separately from the mainline kernels, which means we will be getting support for some new architectures. It will probably be a couple of weeks before I get this setup, but expect it nonetheless.&lt;br /&gt;
&lt;br /&gt;
The other side is the boot loader. This is a tricky and complex implementation point. Details are in the session notes, but this may have implications based on relevant work being done on ARM as well.&lt;br /&gt;
&lt;br /&gt;
That&#39;s the extent of it at this point. Looking forward to great things with &lt;i&gt;Raring&lt;/i&gt;.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/1978012797300303820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/11/follow-up-power-architecture-related.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/1978012797300303820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/1978012797300303820'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/11/follow-up-power-architecture-related.html' title='Follow-up: Power Architecture Related Tracks Proposed for UDS-r'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-2890478672281921056</id><published>2012-11-03T11:13:00.000-04:00</published><updated>2012-11-03T11:18:54.303-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="uds"/><title type='text'>Servergy Announces New PowerPC Developer Board</title><content type='html'>&lt;b&gt;DISCLAIMER:&lt;/b&gt; I work for Servergy, Inc.&lt;br /&gt;
&lt;br /&gt;
This week, at UDS, Servergy has announced that it will be designing and selling a PowerPC based developer board like no other currently on the market. Typical Power dev kits are using out-dated and feature-poor CPUs. As a follow up, they made &lt;a href=&quot;http://www.linux.com/news/enterprise/high-performance/147-high-performance/659106-servergy-announces-linux-on-power-enterprise-development-platform&quot;&gt;this formal announcement&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Servergy plans many needed features, including:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Multi-core processor&lt;/li&gt;
&lt;li&gt;Hardware virtualization (via Linux kernel KVM)&lt;/li&gt;
&lt;li&gt;Gigabit ethernet&lt;/li&gt;
&lt;li&gt;HDMI video output&lt;/li&gt;
&lt;li&gt;Network offloading engines&lt;/li&gt;
&lt;li&gt;SATA controller&lt;/li&gt;
&lt;li&gt;Audio output&lt;/li&gt;
&lt;li&gt;USB Ports&lt;/li&gt;
&lt;li&gt;SD Card slot&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Servergy has dubbed this board P-Cubed.&lt;br /&gt;
&lt;br /&gt;
They are planning a wide range of software support including firmware/boot-loader source code and pre-built images for creating bootable SD cards. Support for major Linux distributions will include Debian, Ubuntu, Fedora and openSUSE.&lt;br /&gt;
&lt;br /&gt;
The platform is geared toward making modern Power systems available to developers for a fraction of the cost of full fledged server systems (Servergy&#39;s primary market). While the board is aimed at increasing the ecosystem and community around Linux-on-Power, the pricing is sure to attract hobbyists and students as well.&lt;br /&gt;
&lt;br /&gt;
While Servergy did not say the exact price, they are aiming at a sub-$200 system. Keep an eye on &lt;a href=&quot;http://www.servergy.com/&quot;&gt;Servergy&#39;s website&lt;/a&gt; for news and pre-order form.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/2890478672281921056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/11/servergy-announces-new-powerpc.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2890478672281921056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2890478672281921056'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/11/servergy-announces-new-powerpc.html' title='Servergy Announces New PowerPC Developer Board'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-3261589691704265812</id><published>2012-10-25T10:00:00.000-04:00</published><updated>2012-10-25T10:00:04.849-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>How to Setup an Alternative Linux Distro Chroot Under Ubuntu - Part 2</title><content type='html'>&lt;b&gt;NOTE:&lt;/b&gt; This is part 2 of a 2 part series.&lt;br /&gt;
&lt;br /&gt;
In my last post, we setup a chroot environment for our RPM based distribution in &lt;code&gt;/srv/chroots/rhel6-ppc&lt;/code&gt;. Now we&#39;ll setup &lt;code&gt;schroot&lt;/code&gt; so we can access this environment as if it were the booted system, and using a union type scheme (an &lt;code&gt;schroot&lt;/code&gt; configuration setup) so that we will always have a pristine environment for builds and such.&lt;br /&gt;
&lt;br /&gt;
So let&#39;s look at &lt;code&gt;/etc/schroot/schroot.conf&lt;/code&gt; and add the following entry:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;[rhel6]
type=directory
union-type=overlayfs
description=RedHat Enterprise Linux 6
groups=adm,root
directory=/srv/chroots/rhel6-ppc
profile=default&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
This is the basic setup. The key here is that it uses &lt;code&gt;overlayfs&lt;/code&gt; for union mounting the original. This means that after you exit a newly created &lt;code&gt;schroot&lt;/code&gt; for this entry, it will be purged and the original chroot will not be changed.&lt;br /&gt;
&lt;br /&gt;
Also, the &lt;code&gt;profile=default&lt;/code&gt; means it will use configurations from &lt;code&gt;/etc/schroot/default/&lt;/code&gt;. Make sure to add yourself to the &lt;code&gt;adm&lt;/code&gt; group or run &lt;code&gt;schroot&lt;/code&gt; as root.&lt;br /&gt;
&lt;br /&gt;
In order to try it out, use the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;schroot -c rhel6&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
From here, you can do whatever it is you like to do in your new environment!</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/3261589691704265812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/10/how-to-setup-alternative-linux-distro_25.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/3261589691704265812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/3261589691704265812'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/10/how-to-setup-alternative-linux-distro_25.html' title='How to Setup an Alternative Linux Distro Chroot Under Ubuntu - Part 2'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-6661843782112397412</id><published>2012-10-24T09:38:00.000-04:00</published><updated>2012-10-24T20:58:09.609-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>How to Setup an Alternative Linux Distro Chroot Under Ubuntu - Part 1</title><content type='html'>&lt;b&gt;NOTE:&lt;/b&gt; This is part 1 of a 2 part series.&lt;br /&gt;
&lt;br /&gt;
Developing a new server product requires me to test all sorts of things, including multiple distributions. As an Ubuntu developer, my main platform is, of course, Ubuntu.&lt;br /&gt;
&lt;br /&gt;
It&#39;s a PITA to run multiple distributions from one system (and not very productive doing it from multiple machines), so I decided to setup chroots for each one. My production system has three environments outside of the main Ubuntu install: RHEL5, RHEL6 and SLES11.&lt;br /&gt;
&lt;br /&gt;
Fortunately, Ubuntu has a nice tool called &lt;code&gt;schroot&lt;/code&gt;. I like it because it&#39;s based off the original tool called &lt;a href=&quot;http://anonscm.debian.org/bzr/da-tools/da-tools/dchroot-dsa-common/dchroot.c&quot;&gt;&lt;code&gt;dchroot&lt;/code&gt;&lt;/a&gt;, which I wrote back in 1999 (wow). It was mainly to allow people to use the UltraSPARC developer systems with more than one release of Debian without me having to setup multiple machines.&lt;br /&gt;
&lt;br /&gt;
Fast forward 13 years, and now we have &lt;code&gt;schroot&lt;/code&gt;. This tool has come a long way, and even includes support for snap shot of file systems so you can always start with a pristine environment. This is useful to me because I want to make sure when I build a package, only the required dependencies are installed, and I don&#39;t want to worry about screwing up the original environment. Not to mention, I can start more than one session and they wont bother each other.&lt;br /&gt;
&lt;br /&gt;
In addition to &lt;code&gt;schroot&lt;/code&gt;, we will need the &lt;code&gt;rinse&lt;/code&gt; package. For anyone familiar with &lt;code&gt;debootstrap&lt;/code&gt;, it&#39;s basically the same thing, but for RPM based systems. It will download and bootstrap all the required RPMs needed for a particular distro, in a manner suitable for a chroot environment.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sudo apt-get install schroot rinse&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Now, if you look in &lt;code&gt;/etc/rinse/rinse.conf&lt;/code&gt;, you will see several already configured RPM distributions. If you are wanting to do one for RHEL, you will need to either use CentOS instead, or duplicate the matching CentOS entry and rename, being sure to change the mirror URL to match your location. For my RHEL distros, I have a local RPM repository, so I use this entry:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;[rhel-6]
mirror       = file:///srv/rhel6-ppc/RPMS/media/Packages&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
You will also need to copy the matching &lt;code&gt;.packages&lt;/code&gt; file in &lt;code&gt;/etc/rinse/&lt;/code&gt; naming it the same as your entry.&lt;br /&gt;
&lt;br /&gt;
Now decide where you want your chroot to be located. I&#39;ve decided to put mine in &lt;code&gt;/srv/chroots/rhel6-ppc&lt;/code&gt;. Create this directory, and then you can run the &lt;code&gt;rinse&lt;/code&gt; command as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sudo rinse --arch ppc --directory /srv/chroots/rhel6-ppc --distribution rhel-6&lt;/code&gt;&lt;/pre&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTE:&lt;/b&gt; I have my &lt;code&gt;rinse&lt;/code&gt; script hacked a little to allow &lt;code&gt;ppc&lt;/code&gt; as an arch. You will probably use &lt;code&gt;i386&lt;/code&gt; or &lt;code&gt;amd64&lt;/code&gt;. Also, the &lt;code&gt;--distribution&lt;/code&gt; argument is the same as the entry name.&lt;br /&gt;
&lt;br /&gt;
In my next post, we&#39;ll move on to configuring &lt;code&gt;schroot&lt;/code&gt; with a &lt;code&gt;union&lt;/code&gt; type backing.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/6661843782112397412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/10/how-to-setup-alternative-linux-distro.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/6661843782112397412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/6661843782112397412'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/10/how-to-setup-alternative-linux-distro.html' title='How to Setup an Alternative Linux Distro Chroot Under Ubuntu - Part 1'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-8260368305347579380</id><published>2012-10-22T11:32:00.000-04:00</published><updated>2012-10-22T11:32:51.813-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Where to Obtain PowerPC Dev Kits</title><content type='html'>I was asked this today on #ubuntu-kernel. It&#39;s a good question, and one which I hear often. Most people can go with old Mac hardware, but those things are kind of obsolete and largish for many people. Not to mention it doesn&#39;t do much justice for the modern CPUs you see today (multi-core, hardware virtualization, SATA, DDR2/3, etc.). Unfortunately, you aren&#39;t going to find many cheap modern Power kits like you would expect in the ARM world, but here some some quick links that I was able to put together. I would stick with Freescale, but IBM has some dev kits too.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.micetek.com/englishweb/company/news123/Customize%20service.htm&quot;&gt;Micetek&lt;/a&gt; - These are actually really nice&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.embeddedplanet.com/products/single-board-computers/freescale-powerpc&quot;&gt;Embedded Planet&lt;/a&gt; - Very low CPU speeds&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www-01.ibm.com/chips/techlib/techlib.nsf/products/PowerPC_750FX_Evaluation_Kit&quot;&gt;IBM 750FX&lt;/a&gt; - 64-bit but unsure about pricing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lynuxworks.com/board-support/emerson.php&quot;&gt;Emerson&lt;/a&gt; - Unsure of pricing, but very broad list of CPUs for IBM and Freescale&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
If you know of more, please comment and I&#39;ll add them to this post.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/8260368305347579380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/10/where-to-obtain-powerpc-dev-kits.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8260368305347579380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8260368305347579380'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/10/where-to-obtain-powerpc-dev-kits.html' title='Where to Obtain PowerPC Dev Kits'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-5092551920321387231</id><published>2012-10-19T21:45:00.000-04:00</published><updated>2012-10-20T01:00:35.154-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Can Canonical Make Skunkwork Work?</title><content type='html'>This post is in regards to Mark&#39;s recent &lt;a href=&quot;http://www.markshuttleworth.com/archives/1200&quot;&gt;announcement&lt;/a&gt; that Ubuntu 13.04 will be using a skunkworks approach to some of its more wow-factor features.&lt;br /&gt;
&lt;br /&gt;
I know some people are going to cry out from their basement, screaming &quot;community, community, community!&quot; Let&#39;s face it though, one thing Linux is missing is being able to release something and people say &quot;holy shitballs, batman!&quot;&lt;br /&gt;
&lt;br /&gt;
Anyway, I totally applaud Mark and Canonical for this decision. If it all goes well, here&#39;s my vote for naming 13.10 the &lt;b&gt;Snazzy Skunk&lt;/b&gt;.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/5092551920321387231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/10/can-canonical-make-skunkwork-work.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5092551920321387231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5092551920321387231'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/10/can-canonical-make-skunkwork-work.html' title='Can Canonical Make Skunkwork Work?'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total><georss:featurename>Williamsburg, VA</georss:featurename><georss:point>37.279747072426126 -76.744297742843628</georss:point><georss:box>37.278957572426123 -76.745531742843625 37.280536572426129 -76.743063742843631</georss:box></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-8644065137741267986</id><published>2012-09-28T16:35:00.001-04:00</published><updated>2012-10-21T12:48:17.880-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="uds"/><title type='text'>Power Architecture Related Tracks Proposed for UDS-r</title><content type='html'>On my ramp-up toward UDS-r, I&#39;ve created some blueprints and pinged some related folks to get them into the proper tracks.&lt;br /&gt;
&lt;br /&gt;
I&#39;m hoping to get a lot of interest and discussion around there, so here they are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://blueprints.launchpad.net/ubuntu/+spec/servercloud-r-virt-powerpc&quot;&gt;Virtualization support for Power architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueprints.launchpad.net/ubuntu/+spec/hardware-r-powerpc-devel&quot;&gt;Power Architecture Kernel Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueprints.launchpad.net/ubuntu/+spec/foundations-r-powerpc-bootloaders&quot;&gt;PowerPC Bootloader Options&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
So this covers a wide range of topics. The most in-depth one is the Virtualization blueprint. As of yet, I&#39;ve not seen a lot of broad support for non-x86 in OpenStack and related software. While it works (I&#39;ve set it up), it just doesn&#39;t do a lot to make me happy happy.&lt;br /&gt;
&lt;br /&gt;
The boot loaders blueprint is basically an RFC. The idea of Power architecture on a non-embedded system not having OpenFirmware is about on par with Dell selling an Intel system without a BIOS. The Power systems do have u-Boot (Das Boot), but that&#39;s not as robust as it needs to be. I&#39;m thinking something like grub2 being compiled agains the u-Boot API that u-Boot can load modularly or perhaps something like the kexec based loader that the ps3 used.&lt;br /&gt;
&lt;br /&gt;
Finally, the kernel development is a host discussion that needs to be hammered out with the Canonical Kernel Team so we can all be happy and not step on the primary architectures, but still being able to spread some support for newer Power equipment.&lt;br /&gt;
&lt;br /&gt;
Cheers and see you in Denmark!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EDIT:&lt;/b&gt; Updated link for boot loaders blueprint</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/8644065137741267986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/09/power-architecture-related-tracks.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8644065137741267986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8644065137741267986'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/09/power-architecture-related-tracks.html' title='Power Architecture Related Tracks Proposed for UDS-r'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-5092658908692372121</id><published>2012-09-26T15:27:00.002-04:00</published><updated>2012-09-26T15:27:38.019-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>The Rack Revolution</title><content type='html'>As I sit here in my cozy home on my comfy couch, I am bewildered and amazed at just how far things have come in the last decade.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s take a quick inventory of my immediate surroundings:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font color=&quot;green&quot;&gt;&amp;#10004;&lt;/font&gt; Laptop&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;green&quot;&gt;&amp;#10004;&lt;/font&gt; WiFi&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;green&quot;&gt;&amp;#10004;&lt;/font&gt; Smart Phone&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;green&quot;&gt;&amp;#10004;&lt;/font&gt; HD TV&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;green&quot;&gt;&amp;#10004;&lt;/font&gt; High Speed Internet&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;red&quot;&gt;&amp;#10006;&lt;/font&gt; Server Farm&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Hmm...that last one&#39;s a bit different from the old days. I used to have a nice collection of loudly humming, room-warming servers in my garage. As a telecommuter, I needed it. My blog was running on it, my email was running on it and my firewall was running on it.&lt;br /&gt;
&lt;br /&gt;
What happened? Well, we all know the answer to that question: things consolidated into the &quot;Cloud.&quot; Instead of under-the-table boxes running our local services, we now have providers doing the heavy (literally) lifting for us.&lt;br /&gt;
&lt;br /&gt;
So what do they run on? Practically the same loudly humming room-warmers that we used to keep under our desks. However, in recent years, the move is being made to lower the operating costs of these rack farms into quiet, low-powered, self-cooling, maintainable animals.&lt;br /&gt;
&lt;br /&gt;
As most places have tried to just tone down, or spread thin, some have been making the move to efficiency. Enter the reverse revolution of the CPU to something more applicable to today&#39;s computing needs. Instead of powering with high-wattage x86 chips, many are dipping their toes into the shallow end of the alternative-processor kiddy-pool.&lt;br /&gt;
&lt;br /&gt;
And with that I introduce an amazing NEW and WILD CPU: PowerPC!&lt;br /&gt;
&lt;br /&gt;
Oh, you&#39;ve heard of it? It&#39;s legacy and old-hat, you say? I must be thinking of a different PowerPC CPU then. The company I&#39;ve been gainfully employed with for the past 1.5 years seems to be using something quite different than your grandmother&#39;s Power chip. Not quite the behemoth of the IBM Power7 iron (in size nor noise), but not the wussy of your old PowerMac neither.&lt;br /&gt;
&lt;br /&gt;
We&#39;re talking multiway SoCs with full floating-point running at a fraction of the wattage of just about anything else on the market. Add with it full hardware virtualization (via KVM), and you begin to see where in the market this is headed.&lt;br /&gt;
&lt;br /&gt;
We&#39;ve already been engaging multiple Linux and software vendors to give a complete and first rate experience on this new class of hardware. You&#39;ll have multiple choices when it comes to supporting and administrating, whether it&#39;s one system or a room full of racks filled.&lt;br /&gt;
&lt;br /&gt;
So here&#39;s my not-so-humble way of introducing you to &lt;a href=&quot;http://www.servergy.com/&quot;&gt;Servergy, Inc.&lt;/a&gt;. They&#39;ve been around for 3 years, but expect to be hearing a lot more about us in the coming months. If you&#39;re going to be at a Linux or Cloud/Server related event in the near future, chances are you will run into one of us. I&#39;ll actually be at Ubuntu&#39;s &lt;a href=&quot;http://uds.ubuntu.com/&quot;&gt;UDS-r&lt;/a&gt; in Copenhagen at the end of October. I&#39;m hoping to have a live demonstration while I&#39;m there.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTE:&lt;/b&gt; In this article I am speaking solely on my behalf. None of what I&#39;ve said can be taken as a statement by the company I work for: Servergy, Inc.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/5092658908692372121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/09/the-rack-revolution.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5092658908692372121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5092658908692372121'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/09/the-rack-revolution.html' title='The Rack Revolution'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-4268051087413264016</id><published>2012-07-17T19:41:00.004-04:00</published><updated>2012-07-17T19:41:51.664-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="podium"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>The Community Conundrum: PowerPC</title><content type='html'>In my recent work, I&#39;ve been dealing a lot with PowerPC. As an old Mac user, I&#39;ve had a soft spot for PowerPC for ages. Like most people, until recently, I&#39;ve considered PowerPC an aging and dying architecture. Even with IBM selling PowerLinux systems, the lack of cheap hardware for developers has left a hole not easily filled, no matter how man old PowerMacs you buy in eBay.&lt;br /&gt;
&lt;br /&gt;
However, there are a lot of PowerPC platforms that do fill this gap left by PowerMac. Some are even 32-bit platforms that can compete in today&#39;s markets.&lt;br /&gt;
&lt;br /&gt;
So why have you never heard of them? Why can&#39;t you download Fedora or Ubuntu to install on your PowerPC of today? Several reason:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Distributions don&#39;t really support it.&lt;br /&gt;
&lt;li&gt;The &quot;community&quot; behind it is driven at the kernel and low-level, not at the distribution level (see last bullet item).&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
This circle of support appears to be the hold up. Convincing even community supported architectures like Ubuntu and Fedora to support these different kernel flavors is met with archaic skepticism, and is usually concluded with &quot;there is no community&quot; to which I usually respond &quot;because there is no support.&quot;&lt;br /&gt;
&lt;br /&gt;
Something has to give here. Linux and Open Source isn&#39;t where we want the chicken-and-egg scenario to happen. You can&#39;t walk up to a Linux distro with a community and say &quot;Here we are, let&#39;s do this&quot; in much the same way as you can&#39;t go to a community and say &quot;Come over here with us. We don&#39;t support you yet, but we&#39;d like you to prove that you&#39;re worth it.&quot;&lt;br /&gt;
&lt;br /&gt;
So where to begin...</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/4268051087413264016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2012/07/community-conundrum-powerpc.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4268051087413264016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4268051087413264016'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2012/07/community-conundrum-powerpc.html' title='The Community Conundrum: PowerPC'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-5066387818583877865</id><published>2011-12-09T22:31:00.001-05:00</published><updated>2011-12-09T23:37:10.970-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpc"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Reviving the Ubuntu PowerPC community effort</title><content type='html'>Just is just a heads up to some people who may be interested. I am trying to breath some life back into the Ubuntu PowerPC community. My interest extends from my current job and focus on the server market. That&#39;s not to say that I don&#39;t think PowerPC should have a desktop life (though most people would only like it for the legacy ppc Mac systems out there), just that my personal focus won&#39;t cover much of that beyond perhaps some CD creation and fixing fails-to-build-from-source problems.&lt;br /&gt;
&lt;br /&gt;
So, come one, come all. I&#39;ve sent a quick note out to the &lt;a href=&quot;https://launchpad.net/~ubuntu-powerpc&quot;&gt;Ubuntu PowerPC LaunchPad Team&lt;/a&gt;. There&#39;s also a mailing list now.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll be posting more of a road-map soonish.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/5066387818583877865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2011/12/reviving-ubuntu-powerpc-community.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5066387818583877865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5066387818583877865'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2011/12/reviving-ubuntu-powerpc-community.html' title='Reviving the Ubuntu PowerPC community effort'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total><georss:featurename>Williamsburg, VA</georss:featurename><georss:point>37.283126745294112 -76.739125509411778</georss:point><georss:box>11.823014245294111 -117.16881300941178 62.743239245294113 -36.309438009411778</georss:box></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-2959967576658962732</id><published>2011-06-30T12:44:00.000-04:00</published><updated>2011-06-30T12:44:39.879-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debug"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Setting up minicom and ckermit for u-boot serial file transfers</title><content type='html'>Took awhile to get this simple bit of legacy working. I&#39;m working over a USB serial console to a dev board and needed to update some parts of flash but I don&#39;t have working ethernet yet. U-Boot allows for kermit binary file transfers, but default ckermit settings don&#39;t appear to work well. So to speed others along, here&#39;s what I did. Quite simply, add this to (or create) ~/.kermrc:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set rec pack 1000
set send pack 1000
set window 5&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Otherwise, ckermit expects some modem line signals and CONNECT before it starts the transfer. Now you can use minicom&#39;s send command.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/2959967576658962732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2011/06/setting-up-minicom-and-ckermit-for-u.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2959967576658962732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2959967576658962732'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2011/06/setting-up-minicom-and-ckermit-for-u.html' title='Setting up minicom and ckermit for u-boot serial file transfers'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-4682920159307734716</id><published>2011-06-29T11:28:00.000-04:00</published><updated>2011-06-29T11:28:58.873-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="alsa"/><category scheme="http://www.blogger.com/atom/ns#" term="bluecherry"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mpeg"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="v4l2"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Bluecherry is hiring an Ubuntu developer!</title><content type='html'>My old employer, Bluecherry, is looking to hire an Ubuntu developer with the following experience:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Extensive knowledge of the Video4Linux2 and ALSA sound API&lt;br /&gt;
&lt;li&gt;Prior experience in Linux based software design / implementation&lt;br /&gt;
&lt;li&gt;Prior knowledge of Ubuntu, including building / maintaining Debian packages&lt;br /&gt;
&lt;li&gt;Prior experience with gstreamer and RTSP&lt;br /&gt;
&lt;li&gt;Prior experience with MYSQL.&lt;br /&gt;
&lt;li&gt;Prior experience with Matroska file containers and video encoding&lt;br /&gt;
&lt;li&gt;Excellent verbal and written communication skills&lt;br /&gt;
&lt;li&gt;Strong knowledge of C&lt;br /&gt;
&lt;li&gt;Previous work with and understanding of working with video / audio formatting / codecs including MPEG4 and H.264&lt;br /&gt;
&lt;li&gt;Internet and operating system security fundamentals&lt;br /&gt;
&lt;li&gt;Sharp analytical abilities and proven design skills&lt;br /&gt;
&lt;li&gt;Strong sense of ownership, urgency, and drive&lt;br /&gt;
&lt;li&gt;Demonstrated ability to achieve goals in a highly innovative and fast paced environment&lt;br /&gt;
&lt;/ul&gt;
Yes it&#39;s a long list, but you are replacing me, so get used to high expectations, but a highly rewarding job. You don&#39;t need to know all of this, but you should have a good enough foundation that you can embrace the current codebase and not shy away from a steep learning curve.

Visit &lt;a href=&quot;http://www.bluecherrydvr.com/2011/06/we-are-hiring-linux-software-engineer/&quot;&gt;Bluecherry&#39;s job posting&lt;/a&gt; for more information.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/4682920159307734716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2011/06/bluecherry-is-hiring-ubuntu-developer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4682920159307734716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4682920159307734716'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2011/06/bluecherry-is-hiring-ubuntu-developer.html' title='Bluecherry is hiring an Ubuntu developer!'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-2943592060076490187</id><published>2011-06-08T13:21:00.002-04:00</published><updated>2011-06-08T19:44:56.135-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Stripping an Ubuntu system to just the basics...</title><content type='html'>&lt;font color=&quot;red&quot;&gt;WARNING:&lt;/font&gt; I am not responsible for you trashing your system. Use this guide with care. No attempt was made to ensure your intelligence level (nor mine).&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;green&quot;&gt;UPDATE:&lt;/font&gt; Please read the comments about using apt-mark instead of the man-handler of a script that I have in the main post. Should lessen the chance of hosing your system.&lt;br /&gt;
&lt;br /&gt;
While working on a cross-build system inside an Ubuntu 10.10 virtual machine instance, I decided I didn&#39;t want all the fluff of the desktop version. However, instead of just going through the entire package list on the machine, I came up with a quick way to have APT automatically handle it for me.&lt;br /&gt;
&lt;br /&gt;
Ubuntu is nice in that it has meta-packages for the different levels of their system. The top-level meta-packages -- ubuntu-minimal, ubuntu-standard and ubuntu-desktop -- let APT know which package group to install (ubuntu-standard is generally used for server installs). APT also has the nice functionality of automatically being able to remove packages which were only installed because they were depended on by some other package. For example, if you install ffmpeg, you get a ton of libraries with it. If you then remove ffmpeg, you can run &quot;apt-get autoremove&quot; to also remove the libraries that are no longer needed because they were only installed to satisfy ffmpeg&#39;s dependencies.&lt;br /&gt;
&lt;br /&gt;
So now, how to abuse this functionality. First, we find out how APT tracks these implicit/explicit package states (packages we installed directly vs. packages that were only installed to satisfy dependencies). We find /var/lib/apt/extended_states. The format is similar to /var/lib/dpkg/status and has stanzas in the form of:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Package: foo
Architecture: i386
Auto-Installed: 1&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
So here&#39;s a quick script that will mark all of your currently installed packages as auto-installed:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;#!/bin/bash

arch=$(dpkg --print-architecture)
dpkg --get-selections | awk &#39;{print $1}&#39; | \
(while read pkg; do
        echo &quot;Package: $pkg&quot;
        echo &quot;Architecture: $arch&quot;
        echo &quot;Auto-Installed: 1&quot;
        echo
done)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Here&#39;s how we use it (ai-all.sh is the shell script from above):&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sudo cp /var/lib/apt/extended_states /var/lib/apt/extended_states.bak
bash ai-all.sh | sudo tee /var/lib/apt/extended_states &gt; /dev/null 2&gt;&amp;1&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Now, we have to tell APT that we want to keep some things. Personally, I went with the ubuntu-standard as a base line and added a few necessities for good measure. You could go with ubuntu-minimal, and also add packages here that you specifically want to keep (otherwise the commands later will remove them). Note, I specifically added grub-pc because a boot-loader is not a required package (think EC2, diskless installs, etc.). Be sure to add your boot-loader to this command if you require it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sudo apt-get install ubuntu-standard grub-pc vim build-essential git&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
This most likely wont do much, since these packages are already installed. However, APT will mark them as &quot;Auto-Installed: 0&quot; so that it knows we explicitly installed them. Next, time to ditch a few hundred megs:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sudo apt-get --purge autoremove&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
This will take some time and finally spew out a huge list of things to remove. You may want to give it a quick once-over to make sure you aren&#39;t tossing something important. If you see a package you need, ^C out and run the apt-get install command again with the new package(s).&lt;br /&gt;
&lt;br /&gt;
So now you should be clean and clear. Note that the above --purge option is meant to completely remove things like configuration files that were installed with the packages you are removing. If that scares you, then remove that option.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/2943592060076490187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2011/06/stripping-ubuntu-system-to-just-basics.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2943592060076490187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2943592060076490187'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2011/06/stripping-ubuntu-system-to-just-basics.html' title='Stripping an Ubuntu system to just the basics...'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-5027570619945505096</id><published>2010-11-12T12:41:00.002-05:00</published><updated>2010-11-12T14:28:02.807-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bluecherry"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mpeg"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="v4l2"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Bluecherry Releases beta1 of their new DVR product</title><content type='html'>After much delay, and much anticipation, we at Bluecherry have finally released our first public beta of version 2 of our DVR product.&lt;br /&gt;
&lt;br /&gt;
For extensive details, please see &lt;a href=&quot;http://www.bluecherrydvr.com/2010/11/12/version-2-public-beta-released/&quot;&gt;the announcement&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I&#39;m honored to have worked on this project. While I&#39;ve been dealing with the driver (solo6x10) and backend server for over a year, the final parts of the product have fallen into place in just the last 6 months. It was an overwhelming effort by just 4 developers on a project that spanned from hardware to UI.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/5027570619945505096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/11/bluecherry-releases-beta1-of-their-new.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5027570619945505096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5027570619945505096'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/11/bluecherry-releases-beta1-of-their-new.html' title='Bluecherry Releases beta1 of their new DVR product'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-8984158749527145277</id><published>2010-08-25T11:39:00.000-04:00</published><updated>2010-08-25T11:39:10.308-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bluecherry"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mpeg"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="v4l2"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Solo6x10: Recording from video</title><content type='html'>I&#39;ve finally gotten around to writing an example program for recording from Solo6x10 devices to a file. This program is very basic. It leaves the video device in it&#39;s default state (resolution, frame rate, etc). So you can modify those settings separately, and then use this program to record at those settings.&lt;br /&gt;
&lt;br /&gt;
I also did not put motion detection examples in this, mainly because I have not satisfied my desire to create a decent API in v4l2 yet for that that.&lt;br /&gt;
&lt;br /&gt;
Next step, I will add sound recording into this.&lt;br /&gt;
&lt;br /&gt;
You can find the example source &lt;a href=&quot;http://lizard.bluecherry.net/~bcollins/bc-record.c&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
To compile it, run:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;gcc -lavformat bc-record.c -o bc-record&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Execute it with a single command line option, the device for a solo6x10 encoder (e.g. /dev/video1). It will record until you hit ^C.&lt;br /&gt;
&lt;br /&gt;
Happy recording!</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/8984158749527145277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/08/solo6x10-recording-from-video.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8984158749527145277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8984158749527145277'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/08/solo6x10-recording-from-video.html' title='Solo6x10: Recording from video'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-2582080273344854042</id><published>2010-07-14T15:32:00.000-04:00</published><updated>2010-07-14T15:32:01.436-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="macosx"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Cross compiling the Linux kernel from Mac OS X</title><content type='html'>So I picked up a 13&quot; MacBook and have been fiddling around with it. I like it, sue me.&lt;br /&gt;
&lt;br /&gt;
One of the first things I did (as any Linux developer would) was to install darwin ports. I noticed some interesting things in there. A few that I needed (git) and a few that completely surprised me (dpkg and apt).&lt;br /&gt;
&lt;br /&gt;
One thing that was missing was a Linux cross-compiler. So I did what any self-respecting Linux developer on a Mac would do: I built one.&lt;br /&gt;
&lt;br /&gt;
Don&#39;t get too excited. I&#39;ve only built one worthy of compiling a kernel (which means no C library, no userspace, etc).&lt;br /&gt;
&lt;br /&gt;
The result of my work is here (built on 10.6.3):&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.swissdisk.com/~bcollins/macosx/gcc-4.3.3-x86_64-linux-gnu.tar.bz2&quot;&gt;http://www.swissdisk.com/~bcollins/macosx/gcc-4.3.3-x86_64-linux-gnu.tar.bz2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.swissdisk.com/~bcollins/macosx/binutils-2.20.1-x86_64-linux-gnu.tar.bz2&quot;&gt;http://www.swissdisk.com/~bcollins/macosx/binutils-2.20.1-x86_64-linux-gnu.tar.bz2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.swissdisk.com/~bcollins/macosx/elf.h&quot;&gt;http://www.swissdisk.com/~bcollins/macosx/elf.h&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
You may notice the extra elf.h file, which is needed in /usr/include/elf.h for some programs in the kernel to compile natively on the host (e.g. modpost). The gcc and binutils will unpack in /opt/local/.&lt;br /&gt;
&lt;br /&gt;
In order to cross-compile, you will need to add a few things to your kernel make command line:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- ...&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
You may notice, like I did, scripts/genksyms/parse.c has a #include for malloc.h which is not on Darwin. You may safely delete that line.&lt;br /&gt;
&lt;br /&gt;
Note that you must already have /opt/local/bin in your PATH. Using ARCH=i386 will also work and compile 32-bit kernels. One last point, the sources for gcc/binutils came from Ubuntu&#39;s Jaunty.&lt;br /&gt;
&lt;br /&gt;
Happy hacking...</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/2582080273344854042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/07/cross-compiling-linux-kernel-from-mac.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2582080273344854042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2582080273344854042'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/07/cross-compiling-linux-kernel-from-mac.html' title='Cross compiling the Linux kernel from Mac OS X'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-8651369332238661906</id><published>2010-07-01T13:14:00.001-04:00</published><updated>2010-07-01T13:39:49.230-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mame"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Oldies but goodies: libugci</title><content type='html'>So I went digging around my old software, and ran across some interesting stuff that doesn&#39;t get a lot of attention. I&#39;ve picked out one in particular that I haven&#39;t heard much about in a long time, but I consider it very useful for people who love &lt;a href=&quot;http://www.mamedev.org/&quot;&gt;MAME&lt;/a&gt;: libugci&lt;br /&gt;
&lt;br /&gt;
I had built an &lt;a href=&quot;http://www.swissdisk.com/~bcollins/ugci/&quot;&gt;arcade cabinet&lt;/a&gt; a long time ago that was making use of a USB control interface called &lt;a href=&quot;http://www.happcontrols.com/joysticks/950800xx.htm&quot;&gt;Happ UGCI&lt;/a&gt;. It allows you to directly interface real video game style controls (buttons, joysticks, trackball, coin door, etc) with a PC.&lt;br /&gt;
&lt;br /&gt;
It was perfect for that I was doing, except that it sucked on Linux. Back then, I actually had to write some patches for the kernel to get it all working correctly (firmware bugs in the UGCI). In addition, much of it was not accessible via USB input layer, and so I wrote a library called libugci that took advantage of the HID interface to the board.&lt;br /&gt;
&lt;br /&gt;
The board allows you to connect a real coin-door, and libugci+mame will convert that to coin-door events in the software. I always wanted to complete my MAME cabinet with a coin-door so I could make money off my friends :)&lt;br /&gt;
&lt;br /&gt;
The MAME code has support for libugci built-in (thanks to my patches submitted all those years ago). Installing libugci, and recompiling MAME with this support enabled will make use of it. There are also some programs for accessing the EEPROM on the board, as well as mapping events from UGCI to HID keyboard strokes (in cases where you would want that as opposed to real joy/mouse events).&lt;br /&gt;
&lt;br /&gt;
So if you&#39;re a MAME junky like I am, and need that extra bit of features that only the UGCI can offer, you can download the library from:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.swissdisk.com/~bcollins/www.phunnypharm.org/pub/libugci/libugci-0.3.0.tar.bz2&quot;&gt;Tarball&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;git://github.com/benmcollins/libugci.git&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Good luck and happy gaming!</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/8651369332238661906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/07/oldies-but-goodies-libugci.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8651369332238661906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8651369332238661906'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/07/oldies-but-goodies-libugci.html' title='Oldies but goodies: libugci'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-4432335009446877890</id><published>2010-06-27T10:33:00.000-04:00</published><updated>2010-06-27T10:33:57.638-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="podium"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Why Linux will (has?) hit a wall in popularity with normal users...</title><content type='html'>So this is one of the few times I decide to get political and/or rational. Most of my career has been spent on Linux. And while the gettin&#39;s good, I don&#39;t subscribe to the notion that Linux, as a desktop, will take over the World.&lt;br /&gt;
&lt;br /&gt;
Let me make one thing clear. I do believe Linux, as a core, will succeed in many forms. On the server, on mobile products (where it is the core and not exposed directly to the user, a la Android).&lt;br /&gt;
&lt;br /&gt;
So here&#39;s the problem as I see it. &lt;b&gt;Too many choices&lt;/b&gt;. Yes, this has been beaten to death, and to some extent, many Linux vendors have taken note. Debian used to be a free-for-all where all of the choices were exposed to the user. People who used Debian loved the choices, but the fact isn&#39;t that they loved the choices, they just loved that their choice was among them.&lt;br /&gt;
&lt;br /&gt;
If you didn&#39;t have a preference, for example with a Desktop environment, then choices are bad for a user. They didn&#39;t know how to pick one. So now, there is a default. That&#39;s great, but across many Linux distributions, even if the default is Gnome, the little nuances of each system will overwhelmingly differentiate the entire thing so that no Gnome desktop is truly the same as another distribution.&lt;br /&gt;
&lt;br /&gt;
So why are choices bad? I want to take an example from a book I was reading recently called &lt;a target=&quot;_blank&quot;  href=&quot;http://www.amazon.com/4-Hour-Workweek-Expanded-Updated-Cutting-Edge/dp/0307465357?ie=UTF8&amp;tag=swis0e-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969&quot;&gt;The 4-Hour Workweek&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=swis0e-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=0307465357&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important; padding: 0px !important&quot; /&gt;. It tells of a watch company that wanted to advertise in a magazine. The watch company had many different styles of watches and wanted to put a full page ad that showed off 6 of them. The advertising executive said they should pick one watch and show off that one. To settle the dispute, they had two full page ads: one with the 6 watch layout, and the other with a single watch. Don&#39;t you know that the single watch ad out-performed the 6-watch ad by a factor of 6? Interesting...&lt;br /&gt;
&lt;br /&gt;
So anyway, choices are bad for consumers. They would rather have one choice, even if it may limit them in some way. Apple figured this out when they almost went the way of the Commodore by making so many damn types of Macintoshes (when Jobs wasn&#39;t at the helm). Microsoft also learned this when they had an extensive list of Windows variants (Full/Pro/Home/Home-Pro/Server/etc/etc), but I don&#39;t think they&#39;ve recovered from that very well.&lt;br /&gt;
&lt;br /&gt;
Now on to the meat of the problem. Linux, too many choices...what can be done? Well, as a developer, not much. It&#39;s not our job to make these decisions. We are the ones that give all the choices. Drivers for every device, apps that do anything you want, themes, icons, documentation, hardware support. The real issue at stake is some company needs to break out of the &quot;We&#39;re a Linux distribution&quot; mold.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s take Dell&#39;s Ubuntu Linux offering as an example (I&#39;m not knocking this effort, I helped start it when I was working for Canonical, it&#39;s a great offering). If a normal user somehow gets to the Dell Linux page, and they say &quot;wow, what is this Linux thing?&quot;, they will surely go to Google.com and start checking. Bad? Hell yes. The huge amount of information, choices and decisions becomes quickly apparent to them. They start asking questions like &quot;Is Ubuntu the _right_ Linux for me?&quot; and &quot;Should I try other Linux&#39;s as well&quot; and &quot;Why does Dell only offer Ubuntu?&quot;.&lt;br /&gt;
&lt;br /&gt;
Indeed, these are good questions, but for which there is no answer that is going to take the average user from &quot;I&#39;ve always used Windows/MacOS and know how it works&quot; to &quot;I&#39;m going to try this thing called Linux.&quot;&lt;br /&gt;
&lt;br /&gt;
In my opinion, as unfortunate as it may sound, in the end, some company will deliver a product that makes no mention of Linux other than in the copyright attributions and source code, and will call it something completely different. Maybe they will call it &lt;a href=&quot;http://en.wikipedia.org/wiki/Google_Chrome_OS&quot;&gt;Chrome OS&lt;/a&gt;?</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/4432335009446877890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/06/why-linux-will-has-hit-wall-in.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4432335009446877890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/4432335009446877890'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/06/why-linux-will-has-hit-wall-in.html' title='Why Linux will (has?) hit a wall in popularity with normal users...'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-5786301829048537229</id><published>2010-06-19T11:34:00.000-04:00</published><updated>2010-06-19T11:34:06.801-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="alsa"/><category scheme="http://www.blogger.com/atom/ns#" term="bluecherry"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mpeg"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="v4l2"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Using your new Bluecherry MPEG-4 codec card and driver...</title><content type='html'>Now that the dust has settled and people are taking notice of the new driver for &lt;a href=&quot;http://www.bluecherrydvr.com/&quot;&gt;Bluecherry&#39;s&lt;/a&gt; MPEG-4 codec cards, here&#39;s a quick How-To for using it.&lt;br /&gt;
&lt;br /&gt;
You will notice that there are two types of v4l2 devices created for each card. One device for the display port that produces uncompressed YUV and one for each input that produces compressed video in either MPEG-4 or MJPEG.&lt;br /&gt;
&lt;br /&gt;
We&#39;ll start with the display port device. When loading the driver, a display port is created as the first device for that card. You can see in dmesg output something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;solo6010 0000:03:01.0: PCI INT A -&gt; GSI 22 (level, low) -&gt; IRQ 22
solo6010 0000:03:01.0: Enabled 2 i2c adapters
solo6010 0000:03:01.0: Initialized 4 tw28xx chips: tw2864[4]
solo6010 0000:03:01.0: Display as /dev/video0 with 16 inputs (5 extended)
solo6010 0000:03:01.0: Encoders as /dev/video1-16
solo6010 0000:03:01.0: Alsa sound card as Softlogic0&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
This is for a 16-port card. The output for a 4-port card would show &quot;Encoders as /dev/video1-4&quot; and similarly for 8-port show /dev/video1-8.&lt;br /&gt;
&lt;br /&gt;
The display port allows you to view and configure what is shown on the video out port of the card. The device has several inputs and depends on which card you have installed:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;4-port: 1 input per port and 1 virtual input for all 4 inputs in 4-up mode.&lt;/li&gt;
&lt;li&gt;8-port: 1 input per port and 2 virtual inputs for 4-up on inputs 1-4 and 5-8 respectively.&lt;/li&gt;
&lt;li&gt;16-port: 1 input per port and 5 virtual inputs for 4-up on inputs 1-5, 5-8, 9-12 and 13-16 and 1 virtual input for 16-up on all inputs.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
You do not have to open this device for the video output of the card to work. If you open the device and set the input to input 2, and close it (without viewing any of the video) it will continue to show that input on the video out of the card. So you can simply change inputs using v4l2&#39;s ioctl&#39;s.&lt;br /&gt;
&lt;br /&gt;
This is useful if you want to have live display to a CRT and use a simple program that rotates through the inputs (or multi-up virtual inputs) a few second intervals.&lt;br /&gt;
&lt;br /&gt;
You can still use vlc, mplayer or whatever to view this device (you can open it multiple times).&lt;br /&gt;
&lt;br /&gt;
Now for the encoder devices. There&#39;s obviously one device for each physical input on the card. The driver will allow you to record MPEG-4 and MJPEG from the same device (but you must open it twice, one for each feed). The video format cannot be configured once recording starts. So if you open the device for MPEG-4 and full D1 resultion at 30fps, that&#39;s what you&#39;re going to get if you also open a simultaneous record for MJPEG.&lt;br /&gt;
&lt;br /&gt;
However, it&#39;s good to note here that MJPEG will automatically skip frames when recording. This allows you to pipe the output to a network connection (e.g. MJPEG over HTTP) with no worry of the remote connection being overloaded on bandwidth.&lt;br /&gt;
&lt;br /&gt;
However, this isn&#39;t so for MPEG-4. It is possible if you are too slow at recording (not likely) to fall behind the card&#39;s internal buffer. I was not able to do this writing the full frames to disk on 44 records (4 cards of 16, 16, 8 and 4 ports).&lt;br /&gt;
&lt;br /&gt;
Unlike any card before this supported by v4l2, the Bluecherry cards produce containerless MPEG-4 frames. Most v4l2 applications expect some sort of MPEG-2 stream such as program or transport. Since these programs do not expect MPEG-4 raw frames, I don&#39;t know of any that are capable of playing the encoders directly (much less being able to record from them). You can do something simple like &#39;cat /dev/video1&#39; and somehow pipe it to vlc (I haven&#39;t tested this), or write a program that just writes the frames to disk (I have tested this, most programs can play the raw m4v files produced from the driver).&lt;br /&gt;
&lt;br /&gt;
However, since most people will record to disk, the easiest way is to write the video frames straight out to disk.&lt;br /&gt;
&lt;br /&gt;
Now on to the audio. The cards produce what is known as G.723, which is a voice codec typically found on phone systems (especially VoIP).&lt;br /&gt;
&lt;br /&gt;
Since Alsa currently doesn&#39;t have a format for G.723, the driver shows it as unsigned 8-bit PCM audio. However, I can assure you that it isn&#39;t. I have sent a patch that was included in alsa-kernel (hopefully getting synced to mainline soon). But this only defines the correct format, it doesn&#39;t change the way you handle it at all.&lt;br /&gt;
&lt;br /&gt;
You must convert G.723-24 (3-bit samples at 8khz) yourself. The example program I provide in my next post will show you how to do this, as well as how to convert it to MP2 audio, and record all of this to a container format on disk for later playback.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/5786301829048537229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/06/using-your-new-bluecherry-mpeg-4-codec.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5786301829048537229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/5786301829048537229'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/06/using-your-new-bluecherry-mpeg-4-codec.html' title='Using your new Bluecherry MPEG-4 codec card and driver...'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-8442605327216271198</id><published>2010-06-16T12:52:00.002-04:00</published><updated>2010-06-16T18:24:36.170-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="alsa"/><category scheme="http://www.blogger.com/atom/ns#" term="bluecherry"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mpeg"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="v4l2"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Softlogic 6010 4/8/16 Channel MPEG-4 Codec Card Driver Released</title><content type='html'>As I&#39;ve talked about before, the company I work for has been dedicated to producing stable video surveillance products based on Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.bluecherrydvr.com/&quot;&gt;Bluecherry&#39;s&lt;/a&gt; primary device for their video surveillance applications is the Softlogic based MPEG-4 codec card, which is available in 4, 8 and 16 channel models. The original driver for this card, although available as Open Source, was pretty pathetic to say the least. Most of it was just a kludge of the Windows driver, exposing all of the functionality, but with little effort to make it Linux savvy.&lt;br /&gt;
&lt;br /&gt;
That&#39;s where I came in. I&#39;ve since rewritten the driver so that it makes use of Linux&#39;s Video4Linux2 and Alsa driver API&#39;s. It&#39;s currently 90% functional, and many times more efficient than the original OEM driver.&lt;br /&gt;
&lt;br /&gt;
Here is a quick run-down of some of the features and plus-ones against the original driver:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Video4Linux2 interface allows easy use of existing capture software&lt;/li&gt;
&lt;li&gt;Alsa interface allows for easy audio capture (however, see G.723 caveats from my previous posts)&lt;/li&gt;
&lt;li&gt;Zero-copy in the driver. The original driver DMA&#39;d and then copied the MPEG frames to userspace. The new driver makes use of v4l2 buffers and can DMA directly to an MMAP buffer for userspace.&lt;/li&gt;
&lt;li&gt;Simultaneous MPEG/MJPEG feed per channel, selectable via v4l2 format&lt;/li&gt;
&lt;li&gt;Standard v4l2 uncompressed video YUV display with multi-channel display format (4-up)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Now that the driver is nearing completion, it&#39;s about time to release it. I&#39;ve done so via &lt;a href=&quot;http://www.launchpad.net/&quot;&gt;Launchpad&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.launchpad.net/~ben-collins/+archive/solo6x10&quot;&gt;PPA Archive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.launchpad.net/~ben-collins/+archive/solo6x10/+files/solo6010_2.0.0-1.2.tar.gz&quot;&gt;Tarball&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://git.kernel.org/ p=linux/kernel/git/bcollins/solo6x10.git&quot;&gt;git clone git://git.kernel.org/pub/scm/linux/kernel/git/bcollins/solo6x10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
If you are on an Ubuntu system, you can install the &lt;a href=&quot;http://linux.dell.com/dkms/&quot;&gt;DKMS&lt;/a&gt; package from the PPA archive using these commands:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sudo add-apt-repository ppa:ben-collins/solo6x10
sudo apt-get update
sudo apt-get install solo6010-dkms
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Note, I&#39;ve only supplied this for Lucid right now, but if you download the .deb or the .tar.gz you should be able to install it on any recent kernel.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/8442605327216271198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/06/softlogic-6010-4816-channel-mpeg-4.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8442605327216271198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/8442605327216271198'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/06/softlogic-6010-4816-channel-mpeg-4.html' title='Softlogic 6010 4/8/16 Channel MPEG-4 Codec Card Driver Released'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6653558328125881331.post-2726600730181979510</id><published>2010-06-11T16:04:00.000-04:00</published><updated>2010-06-11T16:04:26.764-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="feedburner"/><category scheme="http://www.blogger.com/atom/ns#" term="flattr"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Feedburner: Adding Flattr to your FeedFlare (Part: 2)</title><content type='html'>This is a follow up to my previous post: &lt;a href=&quot;http://ben-collins.blogspot.com/2010/06/feedburner-adding-flattr-to-your.html&quot;&gt;Feedburner: Adding Flattr to your FeedFlare&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been wrestling around with FeedBurner&#39;s FeedFlare API for a few nights now. Most notably I&#39;ve had trouble getting some of the documented xPath functions to work, and dealing with what appears to be delays in updating the flare after you add it.&lt;br /&gt;
&lt;br /&gt;
My goal was to add categories to the DynamicFlare href so you could pass those along to Flattr. The problem is that if you add something like ${a:category[1]/@term} to the href, and a:category[1] doesn&#39;t exist in your feed, it will not add the flare to your feed (sort of like a filter if the attribute proves false()).&lt;br /&gt;
&lt;br /&gt;
In a final decision of anger, I decided to drop any passing of information from the DynamicFlare href other than the feedUrl. This in itself proved difficult, since ${feedUrl} doesn&#39;t work as advertised. I instead opted to pass ${a:link[@rel=&quot;self&quot;]/@href} which appears to work on my feed. YMMV.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve gotten rid of the files I linked to in my last post so people don&#39;t use them. For the quick and dirty, here&#39;s the URL to use for Personal FeedFlare now:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;http://www.swissdisk.com/~bcollins/feedflare/flattr-me-dynamic-v2.php&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
There are two options you can pass to this script:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;uid&lt;/b&gt;: Your Flattr UID (required)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;lng&lt;/b&gt;: Your preferred language (defaults to en_GB, aka English)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
I used this for mine:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;http://www.swissdisk.com/~bcollins/feedflare/flattr-me-dynamic-v2.php?uid=17833&amp;lng=en_GB&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
That&#39;s it! The new script will parse the feed in the second script and pass up to 980 characters as the desc, up to 80 characters of the title and all of the categories as tags.&lt;br /&gt;
&lt;br /&gt;
You can also check &lt;a href=&quot;http://www.swissdisk.com/~bcollins/feedflare/&quot;&gt;here&lt;/a&gt; for all the PHP-Source files so you can modify to your liking.</content><link rel='replies' type='application/atom+xml' href='http://ben-collins.blogspot.com/feeds/2726600730181979510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ben-collins.blogspot.com/2010/06/feedburner-adding-flattr-to-your_11.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2726600730181979510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6653558328125881331/posts/default/2726600730181979510'/><link rel='alternate' type='text/html' href='http://ben-collins.blogspot.com/2010/06/feedburner-adding-flattr-to-your_11.html' title='Feedburner: Adding Flattr to your FeedFlare (Part: 2)'/><author><name>Ben Collins</name><uri>http://www.blogger.com/profile/16641016264284463086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>