<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>inportb &#187; Computing</title>
	<atom:link href="http://inportb.com/category/computing/feed/" rel="self" type="application/rss+xml" />
	<link>http://inportb.com</link>
	<description>salty nothings are yummier</description>
	<lastBuildDate>Sun, 08 Jan 2012 06:31:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>agcc.bash: Make Native Android C Programs Using the NDK</title>
		<link>http://inportb.com/2012/01/08/agcc-bash-make-native-android-c-programs-using-the-ndk/</link>
		<comments>http://inportb.com/2012/01/08/agcc-bash-make-native-android-c-programs-using-the-ndk/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 06:28:50 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=893</guid>
		<description><![CDATA[I return to school at noon, but before then, I&#8217;d like to share my evening project: agcc.bash, a rewrite of agcc and agcc2.pl that works with revisions 6 and 7 of the Android NDK. The NDK is a GCC-based cross-compiler that lets you embed object code in a traditional Android app. It also works as...<a href="http://inportb.com/2012/01/08/agcc-bash-make-native-android-c-programs-using-the-ndk/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I return to school at noon, but before then, I&#8217;d like to share my evening project: <a href="http://dl.dropbox.com/u/1213413/htdocs/agcc/agcc.bash">agcc.bash</a>, a rewrite of <a href="http://plausible.org/andy/agcc">agcc</a> and <a href="http://credentiality2.blogspot.com/2011/07/native-android-c-program-using-ndk.html">agcc2.pl</a> that works with revisions 6 and 7 of the Android NDK.</p>
<p>The NDK is a GCC-based cross-compiler that lets you embed object code in a traditional Android app. It also works as a standalone cross-compiler, though it is not advertised as such. It is quite rough when used by itself, and agcc wraps the complexity in a little script. While agcc and agcc2.pl are written in Perl, agcc.bash is a Bash script. It also supports the latest revisions of the NDK, though r7 is slightly buggy.</p>
<p>With agcc.bash, building native Android software feels almost like working with GCC. As a quick example, let&#8217;s try the classic <a href="http://dl.dropbox.com/u/1213413/htdocs/agcc/hello.c">hello world</a>:</p>
<blockquote><p>AGCC_NDK=~/android-ndk-r6 ./agcc.bash hello.c -o hello</p></blockquote>
<p>That wasn&#8217;t too exciting&#8230; but what happened there? I have the NDK installed at ~/android-ndk-r6 and I told agcc.bash where to look for it, using the AGCC_NDK environment variable. I then invoked agcc.bash as if it were GCC. Let&#8217;s see what agcc.bash did behind the scenes:</p>
<blockquote><p>AGCC_NDK=~/android-ndk-r6 AGCC_ECHO=yes ./agcc.bash hello.c -o hello</p>
<p>=&gt; ./agcc.bash hello.c -o hello<br />
&lt;= /home/jyio/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc -o hello -I/home/jyio/android-ndk-r6/platforms/android-8/arch-arm/usr/include -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DSK_RELEASE -DNDEBUG -UDEBUG -march=armv5te -mtune=xscale -msoft-float -mthumb-interwork -fpic -fno-exceptions -ffunction-sections -funwind-tables -fmessage-length=0 -march=armv5te -mtune=xscale -msoft-float -mthumb-interwork -fpic -fno-exceptions -ffunction-sections -funwind-tables -fmessage-length=0 hello.c -Bdynamic -Wl,-T,/home/jyio/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-dynamic-linker,/system/bin/linker -Wl,&#8211;gc-sections -Wl,-z,nocopyreloc -Wl,&#8211;no-undefined -Wl,-rpath-link=/home/jyio/android-ndk-r6/platforms/android-8/arch-arm -L/home/jyio/android-ndk-r6/platforms/android-8/arch-arm/usr/lib -nostdlib /home/jyio/android-ndk-r6/platforms/android-8/arch-arm/usr/lib/crtend_android.o /home/jyio/android-ndk-r6/platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o -lc /home/jyio/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a -lm -ldl</p></blockquote>
<p>See how it transformed our innocent little command into a monster! This might be overkill for a hello world program, but it provides pretty good support for more complex software such as OpenSSL, cURL, and Python. It would be a good idea to add the NDK toolchain and agcc.bash to $PATH before trying to build a big program. In my case, the toolchain resides in <em>~/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin</em>. If you want to build some software that come with configure scripts, you might start with:</p>
<blockquote><p><strong>CC=agcc.bash</strong> ./configure</p></blockquote>
<p>Do try this at home! Relevant links:</p>
<ul>
<li><a href="http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2">Android NDK r6</a> (or, <a href="http://developer.android.com/sdk/ndk/">the latest version</a>)</li>
<li><a href="http://dl.dropbox.com/u/1213413/htdocs/agcc/agcc.bash">agcc.bash</a></li>
<li><a href="http://dl.dropbox.com/u/1213413/htdocs/agcc/hello.c">hello.c</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2012/01/08/agcc-bash-make-native-android-c-programs-using-the-ndk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thoughts on Plasma Netbook, Plasma Mobile, Unity, GNOME Shell, and Xfwm</title>
		<link>http://inportb.com/2011/04/29/thoughts-on-plasma-netbook-plasma-mobile-unity-gnome-shell-and-xfwm/</link>
		<comments>http://inportb.com/2011/04/29/thoughts-on-plasma-netbook-plasma-mobile-unity-gnome-shell-and-xfwm/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 14:38:48 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=820</guid>
		<description><![CDATA[For months, I&#8217;ve been using a Kubuntu 11.04 pre-release on my Lenovo IdeaPad S10-3t, a convertible tablet netbook. In general, the Plasma Netbook interface is reasonably touch-friendly with large buttons that I could easily access with my fingers. It tries to save space by hiding the global application menu behind a button, but I would...<a href="http://inportb.com/2011/04/29/thoughts-on-plasma-netbook-plasma-mobile-unity-gnome-shell-and-xfwm/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>For months, I&#8217;ve been using a Kubuntu 11.04 pre-release on my Lenovo IdeaPad S10-3t, a convertible tablet netbook. In general, the Plasma Netbook interface is reasonably touch-friendly with large buttons that I could easily access with my fingers. It tries to save space by hiding the global application menu behind a button, but I would have liked easier access to the menu. Application support for touch input is rather spotty, as expected, but some software come with plugins to make the touch experience a bit more compelling. For example, Firefox has the Grab and Drag extension and Chromium has chromeTouch. The virtual keyboard (kvkbd) is somewhat awkward, however, so I usually have the keyboard out.</p>
<p><span id="more-820"></span>Ubuntu 11.04 dropped yesterday, and I&#8217;ve taken the opportunity to install some other user interfaces marketed for touch-centric devices. The GTK-based virtual keyboard (onboard) is also inadequate.</p>
<p>Unity has just replaced GNOME on Ubuntu, and Canonical is putting all its support behind it as a mobile platform.</p>
<ul>
<li>It&#8217;s lightweight, and it starts up quickly.</li>
<li>The dock/launcher on the left side supports the &#8220;grab&amp;drag&#8221; gesture for scrolling.</li>
<li>The full application menu can be accessed by a quick tap on the upper-left corner, and has large, finger-friendly buttons.</li>
<li>The dock hides as soon as an application opens, and displays when the user pushes the mouse cursor against the left edge of the screen (or upper-left corner); this is somewhat awkward for touchscreen users.</li>
<li>In fact, there are a number of hover-dependent events that are difficult or impossible to trigger using a touchscreen.</li>
</ul>
<p>GNOME Shell was kicked out in favor of Unity, but it&#8217;s also supposed to be finger-friendly. I had to add a PPA, and the installation completely broke the theming across all GTK applications, but this was expected and understandable.</p>
<ul>
<li>It&#8217;s very accessible without a mouse, and nothing becomes unusable because of specific mouse requirements.</li>
<li>The &#8220;grab&amp;drag&#8221; gesture is well-supported, including for window management; windows could be dragged between virtual desktops.</li>
<li>There&#8217;s also a long-press gesture for accessing context menus.</li>
<li>Virtual desktops are added and removed dynamically; there is always an &#8220;empty&#8221; desktop on the bottom of the list, which creates a new desktop when a window is dropped on it.</li>
<li>The dock on the left scales in size as icons are added and removed from it, so there may be problems with a long list.</li>
</ul>
<p>Plasma Mobile is only a technology preview at this point. It doesn&#8217;t even come with an Xsession script, so I had to run plasma-mobile to start it. The interaction is very smartphone-like, with &#8220;grab&amp;drag&#8221; supported everywhere (including widgets). However, &#8220;everywhere&#8221; is relative because Plasma Mobile does not have an application launcher at all.</p>
<p>Xfwm is my touch-agnostic baseline. I keep XFCE around on a separate partition so I could use Ubuntu+1 on my main partition and have recovery tools if/when it breaks. The touch screen works mostly like a mouse, in this case. Docks are all the rage these days, and XFCE is no exception; it auto-hides under the bottom of the screen, so it&#8217;s also somewhat difficult to reach.</p>
<p>In my opinion, a compelling touchscreen experience must provide, in no particular order:</p>
<ul>
<li>&#8220;grab&amp;drag&#8221; and long-press gestures</li>
<li> a virtual keyboard on par with those of Android and iOS, or a graffiti-like text input mechanism <em>à la</em> PalmOS</li>
<li> multitouch, if possible</li>
<li> differential treatment of screen and mouse inputs, so that the mouse doesn&#8217;t trigger gestures or virtual keyboards and can be used for precision manipulation</li>
</ul>
<p>What do you think is important in a touch interface?</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2011/04/29/thoughts-on-plasma-netbook-plasma-mobile-unity-gnome-shell-and-xfwm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twisted and gevent, Sitting in a Tree</title>
		<link>http://inportb.com/2011/02/27/twisted-and-gevent-sitting-in-a-tree/</link>
		<comments>http://inportb.com/2011/02/27/twisted-and-gevent-sitting-in-a-tree/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 04:25:38 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=790</guid>
		<description><![CDATA[I got a bit closer to integrating Twisted with gevent. So far, I’m liking gevent’s speed and blocking style, but it does lack Twisted’s extensive library. Well, this new Twisted reactor runs on gevent and makes it a bit painful to use both frameworks together. Here is where the magic happens. Note that this code...<a href="http://inportb.com/2011/02/27/twisted-and-gevent-sitting-in-a-tree/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I got a bit closer to integrating Twisted with gevent. So far, I’m liking gevent’s speed and blocking style, but it does lack Twisted’s extensive library. Well, this new Twisted reactor runs on gevent and makes it a bit painful to use both frameworks  together.</p>
<p><a href="http://wiki.inportb.com/wiki/Projects:Python:Geventreactor">Here is where the magic happens.</a></p>
<p>Note that this code is for using Twisted with gevent (i.e. libevent  and greenlet). For using Twisted with greenlet alone, there is  corotwine. Twisted can also be used with Eventlet.</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2011/02/27/twisted-and-gevent-sitting-in-a-tree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Twisted Play With gevent and greenlet</title>
		<link>http://inportb.com/2011/02/20/making-twisted-play-with-gevent-and-greenlet/</link>
		<comments>http://inportb.com/2011/02/20/making-twisted-play-with-gevent-and-greenlet/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 04:22:12 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=786</guid>
		<description><![CDATA[Now, Twisted is a pretty awesome framework. It’s not only a networking library, but it’s a framework that provides all sorts of functionality. There’s also plenty of example code, and many things are already implemented. It is somewhat slow, however, and it likes to take control of the whole program. Keeping track of all the...<a href="http://inportb.com/2011/02/20/making-twisted-play-with-gevent-and-greenlet/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Now, Twisted is a pretty awesome framework.  It’s not only a networking library, but it’s a framework that provides  all sorts of functionality. There’s also plenty of example code, and  many things are already implemented. It is somewhat slow, however, and  it likes to take control of the whole program. Keeping track of all the  deferreds is not really a problem for me, but greenlet’s blocking syntax  is quite nice.</p>
<p>If you haven’t seen corotwine yet, I’d urge you to have a look. It  lets you use Twisted with a blocking syntax. It’s not quite what I  wanted, but it does what it says on the tin. I wanted to use Twisted with Twisted syntax, greenlet with greenlet syntax, and maybe even let  the Twisted bits talk with the greenlet bits. It is apparently quite  easy with gevent.</p>
<p>The first thing you want to do is monkey-patch select.select. This is  the method that Twisted uses to wait for file descriptors, and we can  let gevent handle that with libevent and greenlet. Next, you run  reactor.run either in the main greenlet or in a new greenlet.</p>
<p>As long as Twisted and greenlet code stay separate, everything is  peachy. There are some problems when they start mixing. Because the  Twisted reactor runs in a single greenlet, calling gevent.sleep (or  doing anything else that involves a greenlet switch) actually blocks all  of Twisted. Long-running jobs could be done in new greenlets, though.  And if another greenlet wants to work with a Twisted transport (i.e. to  send or receive data), it’s not going to happen until gevent sees some  network activity destined for Twisted and switches to its reactor. These  are the same problems you’d see with corotwine, and I suspect they might be alleviated with a greenlet-aware reactor.</p>
<p><strong>Update:</strong> gTwist, the original code for gevent-Twisted integration, has been replaced with a more robust system called <a href="http://wiki.inportb.com/wiki/Projects:Python:Geventreactor">geventreactor</a>. As its name implies, geventreactor is a gevent-powered Twisted reactor.</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2011/02/20/making-twisted-play-with-gevent-and-greenlet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sign Up For Your Google Chrome OS Cr-48 Laptop</title>
		<link>http://inportb.com/2010/12/13/sign-up-for-your-google-chrome-os-cr-48-laptop/</link>
		<comments>http://inportb.com/2010/12/13/sign-up-for-your-google-chrome-os-cr-48-laptop/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 04:52:56 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=764</guid>
		<description><![CDATA[Google is currently starting a Chrome OS evaluation program, which involves distributing some 60000 computers for free to guinea pigs in the United States. The device, codenamed Cr-48, is an unbranded notebook with a black rubberized exterior. Here are the technical specifications: Dimensions: 0.9&#8243;h × 11.8&#8243;w × 8.6&#8243;d @ 3.8 lb (1.72 kg) Motherboard: Tripod...<a href="http://inportb.com/2010/12/13/sign-up-for-your-google-chrome-os-cr-48-laptop/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Google is currently starting a Chrome OS evaluation program, which involves distributing some 60000 computers for free to guinea pigs in the United States. The device, codenamed Cr-48, is an unbranded notebook with a black rubberized exterior. Here are the <a href="http://gdgt.com/google/cr-48/specs/">technical</a> <a href="http://www.tomshardware.com/news/chrome-os-laptop-cr-48-netbook,11786.html">specifications</a>:</p>
<blockquote><p><strong>Dimensions:</strong> 0.9&#8243;h × 11.8&#8243;w × 8.6&#8243;d @ 3.8 lb (1.72 kg)<br />
<strong>Motherboard:</strong> Tripod Motherboard MARIO-6050A240910-MB-A03<br />
<strong>Chipset:</strong> Intel CG82NM10 PCH<br />
<strong>Processor:</strong> Intel Atom N455 (Pine Trail) @ 1.66 GHz single-core with hyperthreading<br />
<strong>Graphics:</strong> integrated Intel GMA (Pineview) @ 200 MHz with VGA port<br />
<strong>Audio:</strong> integrated Intel 82801G HDA with stereo speakers and 3.5 mm stereo output plug<br />
<strong>Memory:</strong> 2GB Hynix DDR3 1Rx8 PC3-10600S RAM<br />
<strong>Flash:</strong> ITE IT8500E Flash ROM<br />
<strong>Storage:</strong> 16 GB SanDisk SDSA4DH-016G SSD on 1.5 Gbps SATA interface<br />
<strong>Display:</strong> 12.1&#8243; 1280×800 active-matrix color CCFL-backlit LCD with matte surface<br />
<strong>Keyboard:</strong> full-sized 74-key keyboard<br />
<strong>Touchpad:</strong> oversized multitouch clickpad<br />
<strong>WiFi:</strong> AzureWave Atheros 9280 802.11 a/b/g/n supporting WEP, WPA, and WPA2<br />
<strong>Bluetooth:</strong> Atheros AR5BBU12 with V2.1 EDR<br />
<strong>Mobile:</strong> Qualcomm Novatel Gobi2000 PCI Express Mini Card<br />
<strong>Battery:</strong> 63 Wh removable Li-po battery for up to 8 hours use or 8 days standby<br />
<strong>Cooling:</strong> fan<br />
<strong>Other:</strong> integrated USB 2.0 port, webcam, and SD card reader</p></blockquote>
<p><span id="more-764"></span>Bill Detwiler did an <a href=" http://content.techrepublic.com.com/2346-13625_11-490945.html">excellent photo tour</a> of the Cr-48&#8242;s innards, since he promptly cracked his device open when he received it. It is interesting to note that the keyboard has media keys instead of function keys, and a search key instead of caps-lock (the latter can be configured to act as a caps-lock key). The mobile broadband chipset supports pretty much <a href="http://www.gobianywhere.com/files/gobi2000_overview.pdf">every extant mobile data standard</a>, such as HSPA/UMTS (800/850/900/1900/2100 MHz), quad-band EDGE/GPRS/GSM (850/900/1800/1900 MHz), and dual-band EV-DO/CDMA (800/1900 MHz). The chipset also supports GPS, AGPS, and another AGPS standard called gpsOneXTRA™. It comes with 100 Mb/month of free data service from Verizon for two years.</p>
<p><a href="http://www.reddit.com/r/CR48/comments/elmgc/technical_specifications/c1914qe">jtdgrz managed to obtain</a> the `lspci` output on the device, which revealed some more information about the hardware:</p>
<ul>
<li>00:00.0 Host bridge: Intel Corporation Pineview DMI Bridge</li>
<li>00:02.0 VGA compatible controller: Intel Corporation Pineview Integrated Graphics Controller</li>
<li>00:02.1 Display controller: Intel Corporation Pineview Integrated Graphics Controller</li>
<li>00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)</li>
<li>00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)</li>
<li>00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 02)</li>
<li>00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02)</li>
<li>00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 02)</li>
<li>00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 02)</li>
<li>00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)</li>
<li>00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)<br />
00:1f.0 ISA bridge: Intel Corporation Tigerpoint LPC Controller (rev 02)</li>
<li>00:1f.2 SATA controller: Intel Corporation 82801GR/GH (ICH7 Family) SATA AHCI Controller (rev 02)</li>
<li>00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)</li>
<li>01:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01)</li>
</ul>
<p>This unit is not for sale, but you can <a href="http://www.google.com/chromeos/pilot-program.html">sign up for one</a> until December 21st if you live in the USA. And if you&#8217;ve already applied, you can use the <a href="http://addicted-gamer.com/cr48-tracker/">Cr-48 Shipping Tracker</a> to guess if/when you&#8217;d receive it. Good luck!</p>
<p>Oh, and since this device has been called the CR-48 with a capital R, I&#8217;d like to mention that Cr-48 is a codename, not a model number&#8230; and Cr-48 is an unstable isotope of chromium <img src='http://inportb.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://media.bestofmicro.com/7/T/272441/original/Screen%20shot%202010-12-07%20at%205.21.56%20PM.png"><img title="Cr-48 render" src="http://media.bestofmicro.com/7/T/272441/original/Screen%20shot%202010-12-07%20at%205.21.56%20PM.png" alt="" width="300" /></a><p class="wp-caption-text">Outside the Cr-48</p></div>
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://content.techrepublic.com.com/2347-13625_11-490945-491060.html?seq=1"><img title="Cr-48 photo" src="http://i.techrepublic.com.com/gallery/491060-500-297.png" alt="" width="300" /></a><p class="wp-caption-text">Inside the Cr-48</p></div>
<div id="attachment_765" class="wp-caption aligncenter" style="width: 310px"><a href="http://inportb.com/wp-content/uploads/2010/12/screenshot.png"><img class="size-medium wp-image-765" title="Cr-48 eBay" src="http://inportb.com/wp-content/uploads/2010/12/screenshot-300x147.png" alt="" width="300" height="147" /></a><p class="wp-caption-text">The Cr-48 goes for cheap on eBay... but don&#39;t be fooled! http://cgi.ebay.com/320630449778</p></div>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2010/12/13/sign-up-for-your-google-chrome-os-cr-48-laptop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Popular Topics on Omegle</title>
		<link>http://inportb.com/2010/11/08/popular-topics-on-omegle/</link>
		<comments>http://inportb.com/2010/11/08/popular-topics-on-omegle/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 05:31:21 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=757</guid>
		<description><![CDATA[Since it&#8217;s early in the morning, I&#8217;m going to make this short and let the pictures do the talking. Having collected almost 700000 Omegle logs, I decided to run through them all and see if there might be any patterns to be noticed. The following is a general view of some specific topics discussed on...<a href="http://inportb.com/2010/11/08/popular-topics-on-omegle/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Since it&#8217;s early in the morning, I&#8217;m going to make this short and let the pictures do the talking. Having collected almost 700000 Omegle logs, I decided to run through them all and see if there might be any patterns to be noticed. The following is a general view of some specific topics discussed on Omegle, in bulk. I chose these keywords because &#8220;ASL&#8221; is, by far, the most popular theme.</p>
<p><span id="more-757"></span></p>
<div id="attachment_758" class="wp-caption aligncenter" style="width: 310px"><a href="http://inportb.com/wp-content/uploads/2010/11/omegle.png"><img class="size-medium wp-image-758" title="omegle" src="http://inportb.com/wp-content/uploads/2010/11/omegle-300x300.png" alt="" width="300" height="300" /></a><p class="wp-caption-text">Topics of Discussion on Omegle</p></div>
<p>What did we learn today? Well, although females are in general more interesting than males, people prefer talking about men (specifically) to talking about women. The sexual orientation chart may not tell us exactly what we think it tells us, because lesbians may be considered gay in some cases. The countries chart shows the top twenty countries mentioned on Omegle, with India in the lead, and California and New York are two of the most popular states in the United States.</p>
<p>At any rate, this is just for fun, so don&#8217;t lose any sleep over it. If you&#8217;d like to read some of the conversations yourself, just <a href="http://omegle.inportb.com/">hit up the repository</a>. You can also have freshly-tagged conversations delivered to your feed reader or mobile device by <a href="http://omegle.inportb.com/atom.xml">subscribing to the Atom feed</a>. Remember, this is the raw and unfiltered stuff; viewer discretion is advised.</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2010/11/08/popular-topics-on-omegle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Package Management with Opkg</title>
		<link>http://inportb.com/2010/10/19/package-management-with-opkg/</link>
		<comments>http://inportb.com/2010/10/19/package-management-with-opkg/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 15:57:58 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=751</guid>
		<description><![CDATA[Opkg is not limited to using packages from files; it is also capable of using apt-get style repositories, vastly simplifying the job of fetching dependencies and updating packages. I already have a repository set up, and it could be added as such echo "src/gz inportb-android-froyo http://repo.inportb.com/android/froyo" &#62; /cache/etc/opkg/inportb.conf After doing that, we could refresh the...<a href="http://inportb.com/2010/10/19/package-management-with-opkg/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Opkg is not limited to using packages from files; it is also capable of using apt-get style repositories, vastly simplifying the job of fetching dependencies and updating packages. I already have a repository set up, and it could be added as such</p>
<blockquote><p><code>echo "src/gz inportb-android-froyo http://repo.inportb.com/android/froyo" &gt; /cache/etc/opkg/inportb.conf</code></p></blockquote>
<p>After doing that, we could refresh the package list</p>
<blockquote><p><code>opkg update</code></p></blockquote>
<p>Installing a package then becomes as easy as</p>
<blockquote><p><code>opkg install name-of-package</code></p></blockquote>
<p>And we could keep all our packages up-to-date using</p>
<blockquote><p><code>opkg update; opkg upgrade</code></p></blockquote>
<p>It&#8217;s also quite simple to set up a repository for distributing packages.</p>
<p><span id="more-751"></span>First, we fetch the latest <em>opkg-utils</em> off SVN at &lt;<a href="http://svn.openmoko.org/trunk/src/host/opkg-utils/">http://svn.openmoko.org/trunk/src/host/opkg-utils/</a>&gt; and <em>make</em> it. Then, we designate a directory (the repository) to dump all our packages in. Finally, every time we update the repository, we generate a new package feed</p>
<blockquote><p><code>cd path/to/repository; opkg-make-index . &gt; Packages</code></p></blockquote>
<p>Now all we have to do is make sure the directory is visible on the Web, and share its URL. The end user would add a line to a file within <em>/cache/etc/opkg</em></p>
<blockquote><p><code>src name-of-repository http://host/path/to/repository</code></p></blockquote>
<p>We could also gzip the feed to reduce bandwidth usage</p>
<blockquote><p><code>gzip -c9 Packages &gt; Packages.gz</code></p></blockquote>
<p>The repository line would be changed accordingly to</p>
<blockquote><p><code>src/gz name-of-repository http://host/path/to/repository</code></p></blockquote>
<p>We could have multiple files in <em>/cache/etc/opkg</em>, and each one of those could have multiple lines. The idea is that each vendor could have multiple repositories, and keep them in the same file for ease of management.</p>
<p>&lt;ShamelessAdvertisement&gt; Incidentally, it is almost trivial for Dropbox users to set up a repository. If you need 2.25GB of premium Web-accessible storage to host your repository or anything else for free, simply <a href="http://www.dropbox.com/referrals/NTEyMTM0MTM5">sign up through my referral link</a>. You could also <a href="http://www.dropbox.com/">skip the referral</a> and get 2GB.&lt;/ShamelessAdvertisement&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2010/10/19/package-management-with-opkg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making an Opkg Package</title>
		<link>http://inportb.com/2010/10/19/making-an-opkg-package/</link>
		<comments>http://inportb.com/2010/10/19/making-an-opkg-package/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 15:30:29 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=744</guid>
		<description><![CDATA[Now that we have Opkg for Android, we could use it to install packages from local files or off Web servers. Installing a package is as simple as opkg install path/to/package.opk or, if it&#8217;s on the Web opkg install http://host/path/to/package.opk And to remove the package, we would go opkg remove name-of-package But what if we...<a href="http://inportb.com/2010/10/19/making-an-opkg-package/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Now that we have Opkg for Android, we could use it to install packages from local files or off Web servers. Installing a package is as simple as</p>
<blockquote><p><code>opkg install path/to/package.opk</code></p></blockquote>
<p>or, if it&#8217;s on the Web</p>
<blockquote><p><code>opkg install http://host/path/to/package.opk</code></p></blockquote>
<p>And to remove the package, we would go</p>
<blockquote><p><code>opkg remove name-of-package</code></p></blockquote>
<p>But what if we wanted to share our own software with others? In this case, we would create our own packages. An Opkg package is essentially a Debian package with fewer control fields. If you know how to make a Debian package, you should be well on your way. In general, a package is an <em>ar</em> archive containing a control tarball, a data tarball, and a debian-binary file. For example let&#8217;s have a look at the opkg-hello package:</p>
<p><span id="more-744"></span><br />
<blockquote><code>package.opk	(ar)<br />
+- debian-binary	(text)<br />
+- control.tar.gz	(tarball)<br />
...+- control	(text)<br />
...+- preinst	(script)<br />
...+- postinst	(script)<br />
...+- prerm		(script)<br />
...+- postrm	(script)<br />
+- data.tar.gz	(tarball)<br />
...+- system<br />
......+- bin<br />
.........+- opkg-hello	(example program)</code></p></blockquote>
<p>Now, <em>debian-binary</em> simply contains the string <em>2.0</em>; it signifies that the archive is indeed a Debian[esque] package. The files within <em>control.tar.gz</em> are cached when the package is installed, and contain information about the package itself, how the package is to be installed, and how the package is to be removed. The contents of <em>control</em> describe the package and are used to build the repository feed, which we will cover later. There are also scripts that govern the installation and removal processes and require execution permission: <em>preinst</em> runs before the package is extracted, <em>postinst</em> performs any configuration after the main files are in place, <em>prerm</em> prepares the system before the package is removed, and <em>postrm</em> cleans up after the main files are gone. Let&#8217;s have a look inside these files:</p>
<blockquote><p><em>control</em><br />
<code>Package: opkg-hello<br />
Version: 0.0.1<br />
Description: Sample OPKG package<br />
Section: cyanogenmod/applications<br />
Priority: optional<br />
Maintainer: Jiang Yio<br />
Architecture: all<br />
Homepage: http://inportb.com/<br />
Source:<br />
Depends:</code></p></blockquote>
<blockquote><p><em>preinst</em><br />
<code>#!/system/bin/sh<br />
echo "preinst: preparing to install package"<br />
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system</code></p></blockquote>
<blockquote><p><em>postinst</em><br />
<code>#!/system/bin/sh<br />
mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system<br />
echo "postinst: installed package"</code></p></blockquote>
<blockquote><p><em>prerm</em><br />
<code>#!/system/bin/sh<br />
echo "prerm: preparing to remove package"<br />
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system</code></p></blockquote>
<blockquote><p><em>postrm</em><br />
<code>#!/system/bin/sh<br />
mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system<br />
echo "postrm: removed package"</code></p></blockquote>
<p>Other than emitting some debugging information, the scripts also make the <em>/system</em> tree writable while the package is installed or removed.</p>
<p>Now that we have the anatomy of an Opkg package, we could create more like it with ease. Here are a couple of helpful commands:</p>
<blockquote><p><em>make a tarball</em><br />
<code>tar zcvf name-of-tarball.tar.gz list of files and directories</code></p></blockquote>
<blockquote><p><em>make an archive</em><br />
<code>ar -r name-of-archive.opk list of files and directories</code></p></blockquote>
<p>Other than that, just be sure all the files have the right owner, group, and permission. It would also help to know something about the Android directory tree &#8212; for example, we dropped the example program in <em>/system/bin</em>, which we know is part of the search path.</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2010/10/19/making-an-opkg-package/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Debian Packages on Android Phones</title>
		<link>http://inportb.com/2010/10/17/debian-packages-on-android-phones/</link>
		<comments>http://inportb.com/2010/10/17/debian-packages-on-android-phones/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 00:26:21 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=737</guid>
		<description><![CDATA[Well, almost. While one could theoretically install Debian packages on Android phones, it is generally a bad idea to install software designed for one system onto a different system. However, the Debian package manager is excellent for keeping track of software, and it would be nice if it could be used on Android as well....<a href="http://inportb.com/2010/10/17/debian-packages-on-android-phones/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Well, almost. While one could theoretically install Debian packages on Android phones, it is generally a bad idea to install software designed for one system onto a different system. However, the Debian package manager is excellent for keeping track of software, and it would be nice if it could be used on Android as well. iPhone users already have access to this mechanism in the form of Cydia, so why not put it on Android too?</p>
<p><strong><span id="more-737"></span>For user applications, we already have APK&#8217;s.</strong></p>
<p>These are self-contained blocks that may be easily installed and removed. The APK system is great for running untrusted software that needs to be sandboxed, but it is not flexible or efficient enough to manage the operating system itself. Android users typically do not update their systems very often, and when they do so, they update the whole setup at once. This presents two problems: firstly, users don&#8217;t receive updated software as it becomes available and secondly, each update is a resource-intensive and time-consuming task. It would be great if system software could be updated piecemeal, just like a <em>real</em> Linux setup.</p>
<p>The Debian packaging system solves this problem very well, but its size makes it unsuitable for mobile devices. Nevermind that Cydia users use Debian packages &#8212; it&#8217;s still good to be frugal. Since we&#8217;re not going to install Debian software onto our phones (which would probably break many things), we don&#8217;t have to stick strictly to the Debian format; on the other hand, Debian provides a very nice model for us to emulate.</p>
<p><strong>Enter Opkg.</strong></p>
<p>Here is a package manager and format that very closely resemble the Debian package manager and format. In fact, <a href="http://code.google.com/p/opkg/">Opkg</a> is capable of working with Debian packages. The difference is that it&#8217;s tiny and it&#8217;s designed for mobile devices.</p>
<p>For starters, I have compiled a statically-linked build of Opkg. It is able to install local (and http-hosted) packages as dpkg does. It can also maintain a list of software sources <em>a la</em> apt-get. Its small size (745KB) makes it easily-integrable into almost any Android system.</p>
<p>If you&#8217;re feeling adventurous and would like to try this on your rooted Android phone, the files are currently hosted <a href="http://dl.dropbox.com/u/1213413/android-opkg/index.htm">on my Dropbox account</a>. You do need root access, so if you use a cooked ROM such as CyanogenMod, you should be good to go. Please keep in mind that there is only one package at the moment (the example), but it&#8217;s not difficult to make more.</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2010/10/17/debian-packages-on-android-phones/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Install Windows 7 from USB Pen Drive Using Grub2 and Grub4Dos</title>
		<link>http://inportb.com/2010/07/19/install-windows-7-from-usb-pen-drive-using-grub2-and-grub4dos/</link>
		<comments>http://inportb.com/2010/07/19/install-windows-7-from-usb-pen-drive-using-grub2-and-grub4dos/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 07:48:02 +0000</pubDate>
		<dc:creator>Jiang Yio</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://inportb.com/?p=709</guid>
		<description><![CDATA[I wanted to install Windows 7 on my netbook, but I didn&#8217;t have access to a Windows environment from which I could run bootsect.exe or install Grub4Dos; so I figured I&#8217;d install Grub2 on my USB disk using Ubuntu, have Grub2 chainload Grub4Dos, and finally let Grub4Dos chainload the Windows installer. This worked for me:...<a href="http://inportb.com/2010/07/19/install-windows-7-from-usb-pen-drive-using-grub2-and-grub4dos/">&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I wanted to install Windows 7 on my netbook, but I didn&#8217;t have access to a Windows environment from which I could <a href="http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/">run bootsect.exe</a> or <a href="http://www.sevenforums.com/tutorials/91798-install-windows-7-usb-pen-drive-using-grub4dos.html">install Grub4Dos</a>; so I figured I&#8217;d install Grub2 on my USB disk using Ubuntu, have Grub2 chainload Grub4Dos, and finally let Grub4Dos chainload the Windows installer. This worked for me:</p>
<ol>
<li>Prepare a fresh NTFS partition on the USB disk <strong>/dev/sdX</strong> and mount it at <strong>/mntX1</strong>, then copy all files from the Windows installer disc or image into <strong>/mntX1</strong></li>
<li>Install Grub2:<br />
cd <strong>/mntX1</strong>; sudo grub-install -<em></em>-no-floppy -<em></em>-root-directory=<strong>/mntX1</strong> <strong>/dev/sdX</strong>; sync</li>
<li>Download the latest <a href="http://download.gna.org/grub4dos/">Grub4Dos</a>, and unpack grub.exe into /mntX1</li>
<li>Create <strong>/mntX1</strong>/boot/grub/grub.cfg:<br />
set timeout=0<br />
set default=0<br />
menuentry &#8220;Install Windows&#8221; {<br />
&nbsp; &nbsp; &nbsp;linux16 /grub.exe -<em></em>-config-file=&#8221;root (hd0,<strong>0</strong>); chainloader (hd0,<strong>0</strong>)/bootmgr&#8221;<br />
}</li>
</ol>
<p>I was surprised that such a complicated setup actually worked. Be sure to substitute your own values for <strong>/mntX1</strong> and <strong>/dev/sdX</strong>. In the Grub4Dos config, (hd0,<strong>0</strong>) refers to the first partition on the boot disk; you&#8217;d need to change that if you want to boot the installer from a different partition.</p>
]]></content:encoded>
			<wfw:commentRss>http://inportb.com/2010/07/19/install-windows-7-from-usb-pen-drive-using-grub2-and-grub4dos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

