Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://nulldot.net/index.rss

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  3.         xmlns="http://purl.org/rss/1.0/"
  4.         xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  5.         xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
  6.         xmlns:dc="http://purl.org/dc/elements/1.1/"
  7.         xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
  8.         xmlns:admin="http://webns.net/mvcb/"
  9.         xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  10.  
  11.  <channel rdf:about="http://nulldot.net/">
  12.    <title>Nulldot</title>
  13.    <link>http://nulldot.net/</link>
  14.    <description>Nulldot, News for geeks, stuff that does not matter</description>
  15.    <dc:language>en-us</dc:language>
  16.    <dc:rights>Copyright ©1996-2023 Kyle W T Sherman</dc:rights>
  17.    <dc:date>2023-05-21T17:38:06Z</dc:date>
  18.    <dc:publisher>Kyle W T Sherman</dc:publisher>
  19.    <dc:creator>Kyle W T Sherman</dc:creator>
  20.    <dc:subject>Software Engineering</dc:subject>
  21.    <syn:updatePeriod>daily</syn:updatePeriod>
  22.    <syn:updateFrequency>1</syn:updateFrequency>
  23.    <syn:updateBase>2007-06-04T00:00:00Z</syn:updateBase>
  24.    <items>
  25.      <rdf:Seq>
  26.        <rdf:li rdf:resource="http://nulldot.net/2019/12/2019.12.22.1043-cloudready-chrome-os.html" />
  27.        <rdf:li rdf:resource="http://nulldot.net/2017/06/2017.06.10.1129-acer-aspire-one-cloudbook.html" />
  28.        <rdf:li rdf:resource="http://nulldot.net/2017/02/2017.02.05.0934-a-history-of-the-amiga.html" />
  29.        <rdf:li rdf:resource="http://nulldot.net/2010/12/2010.12.19.1336-rooting-a-samsung-fascinate-with-ubuntu-linux.html" />
  30.        <rdf:li rdf:resource="http://nulldot.net/2010/10/2010.10.16.1101-android-on-ubuntu-linux.html" />
  31.        <rdf:li rdf:resource="http://nulldot.net/2010/09/2010.09.23.1430-effective-emacs.html" />
  32.        <rdf:li rdf:resource="http://nulldot.net/2009/09/2009.09.03.0906-how-to-write-cross-platform-code.html" />
  33.        <rdf:li rdf:resource="http://nulldot.net/2009/08/2009.08.21.2142-apache-2-configuration.html" />
  34.        <rdf:li rdf:resource="http://nulldot.net/2008/06/2008.06.27.1753-olpc-laptop-e-book.html" />
  35.        <rdf:li rdf:resource="http://nulldot.net/2008/06/2008.06.23.1527-purity.html" />
  36.      </rdf:Seq>
  37.    </items>
  38.    <image rdf:resource="http://nulldot.net/img/image.jpg" />
  39.  </channel>
  40.  
  41.  <image rdf:about="http://nulldot.net/img/image.jpg">
  42.    <title>Nulldot</title>
  43.    <url>http://nulldot.net/img/image.jpg</url>
  44.    <link>http://nulldot.net</link>
  45.  </image>
  46.  
  47.  <item rdf:about="http://nulldot.net/2019/12/2019.12.22.1043-cloudready-chrome-os">
  48.    <title>CloudReady Runs Chrome OS on Regular Computers</title>
  49.    <link>http://nulldot.net/2019/12/2019.12.22.1043-cloudready-chrome-os.html</link>
  50.    <description>
  51.      <![CDATA[
  52. <div class="content-item">
  53. <div class="timestamp">2019.12.22</div>
  54.  
  55. <div id="org901bae5" class="figure">
  56. <p><a href="https://www.neverware.com/freedownload" class="blog-img" title="CloudReady Chrome OS"><img src="http://nulldot.net/2019/12/img/chromeos.jpg" alt="chromeos.jpg" class="blog-img" title="CloudReady Chrome OS" /></a>
  57. </p>
  58. </div>
  59.  
  60. <p>
  61. My wife's Acer Aspire One Cloudbook 14 Laptop is now over two years old. While
  62. it is still functional, the hardware is struggling to run Ubuntu 16, and I
  63. don't have much hope that Ubuntu 18 will be any faster. We considered buying a
  64. new laptop, however, she didn't think the expense was worth it as she doesn't
  65. use her laptop very often these days. She tends to favor her tablet, which
  66. handles most of her computing needs, however, she still uses her laptop when a
  67. keyboard or bigger screen is nice to have.
  68. </p>
  69.  
  70. <p>
  71. With the decision made to keep using her existing laptop, I was planning to
  72. just install <a href="https://manjaro.org/">Manjaro</a> over her current <a href="https://ubuntu.com/">Ubuntu</a> install, as Manjaro is currently
  73. my preferred OS. I was thinking that I could make it feel snappier by using a
  74. faster Window Manager / Desktop Environment like <a href="https://www.xfce.org/">Xfce</a>.
  75. </p>
  76.  
  77. <p>
  78. After thinking on this for a bit and knowing her minimal use cases for the
  79. device (mainly just Google Docs), I thought <a href="http://en.wikipedia.org/wiki/Special:Search?search=Chrome_OS">Chrome OS</a> might be a nice solution
  80. for her. Some benefits that make is desirable are:
  81. </p>
  82.  
  83. <ul class="org-ul">
  84. <li>It automatically stays updated with the latest updates and security patches.
  85. (This is a good one as I was always falling behind with keeping her Ubuntu
  86. install updated.)</li>
  87. <li>It is pretty snappy to use on minimal hardware.</li>
  88. <li>It gives her the functionality she needs and nothing she doesn't need.</li>
  89. </ul>
  90.  
  91. <p>
  92. Wondering if I even could install Chrome OS on her laptop led me to <a href="https://www.howtogeek.com/217659/how-to-get-a-chrome-os-like-operating-system-on-any-pc/">this
  93. article by Chris Hoffman</a> which describes how to do this very thing using
  94. <a href="https://www.neverware.com/freedownload">Neverware's CloudReady</a> software. So I followed the instructions, created a
  95. bootable USB installer and (after backing up her files) installed CloudReady
  96. on her laptop. Even though that specific laptop model is not listed on their
  97. <a href="https://guide.neverware.com/supported-devices/">supported devices</a> page, it worked!
  98. </p>
  99.  
  100. <p>
  101. She has been using it for over a month now with no issues. She was able to get
  102. used to the new interface very quickly, and after updating a couple settings,
  103. like setting up the printer, she hasn't needed any more help with using it.
  104. She also finds it more responsive to use than the former Ubuntu 16 setup.
  105. </p>
  106.  
  107. <p>
  108. I'm really happy with this outcome and glad that Neverware provides this OS
  109. free for personal use. While I will always recommend Linux for most tech savvy
  110. users, in the case of someone like my wife who doesn't want to do very much
  111. with their computer and really just "wants it to work" and stay updated, I
  112. think Chrome OS is a fine solution.
  113. </p>
  114.  
  115. <blockquote>
  116. <p>
  117. While this isn’t the official version of Chrome OS produced by Google, it’s
  118. better and more well-supported than previous solutions created by enthusiasts.
  119. </p>
  120.  
  121. <p>
  122. &#x2013; Chris Hoffman
  123. </p>
  124. </blockquote>
  125. </div>
  126. <hr />
  127.      ]]>
  128.    </description>
  129.    <dc:creator>Kyle W T Sherman</dc:creator>
  130.    <dc:date>2019-12-22T10:43:00Z</dc:date>
  131.  </item>
  132.  
  133.  <item rdf:about="http://nulldot.net/2017/06/2017.06.10.1129-acer-aspire-one-cloudbook">
  134.    <title>Acer Aspire One Cloudbook 14 Laptop</title>
  135.    <link>http://nulldot.net/2017/06/2017.06.10.1129-acer-aspire-one-cloudbook.html</link>
  136.    <description>
  137.      <![CDATA[
  138. <div class="content-item">
  139. <div class="timestamp">2017.06.10</div>
  140.  
  141. <div id="org8d0274c" class="figure">
  142. <p><a href="https://www.acer.com/ac/en/US/content/models/laptops/aspireonecloudbook11" class="blog-img" title="Acer Aspire One Cloudbook"><img src="http://nulldot.net/2017/06/img/acer-aspire-one-cloudbook.jpg" alt="acer-aspire-one-cloudbook.jpg" class="blog-img" title="Acer Aspire One Cloudbook" /></a>
  143. </p>
  144. </div>
  145.  
  146. <p>
  147. My wife's old Dell XPS 15 was dying a slow death, and making a lot of fan
  148. noise while it did so. After taking the laptop apart and cleaning the fan with
  149. no change, I finally decided it was time for a new laptop.
  150. </p>
  151.  
  152. <p>
  153. It seems that over time all laptops eventually start making noise &#x2013; either
  154. from a fan or the hard drive. With the advent of SSD's (solid sate drives),
  155. the hard drive is no longer a concern, but fan noise is still a ticking
  156. time-bomb in my experience. So this time I decided to get her one with no
  157. moving parts.
  158. </p>
  159.  
  160. <p>
  161. The other common issue I've had with laptops, is having the battery life go to
  162. hell pretty quickly. I think this is exasperated due to the practice of
  163. leaving most laptops in my house (I have a few) plugged in for long periods of
  164. time so the battery does not go through frequent drain/charge cycles. Having a
  165. longer batter life will help this as my wife will be more likely to leave it
  166. unplugged more frequently.
  167. </p>
  168.  
  169. <p>
  170. And my final criteria is that the laptop must run well with <a href="http://www.ubuntu.com/">Ubuntu</a>. I've had
  171. my wife using Ubuntu for many years now and have no reason or desire to move
  172. her back to Windows.
  173. </p>
  174.  
  175. <p>
  176. After doing some internet searches and reading <a href="https://www.laptopmag.com/reviews/laptops/acer-aspire-one-cloudbook-14">some reviews</a> I found the <a href="https://www.acer.com/ac/en/US/content/models/laptops/aspireonecloudbook11">Acer
  177. Aspire One Cloudbook 14 Laptop</a>. And while it was a minimal laptop to be sure
  178. (only 2GB RAM and 32GB eMMC drive), it was good enough for my wife's needs.
  179. The main selling points of having no moving parts, a 12 hour battery life
  180. (that really is about 12 hours), and a price tag of about $120 on sale, made
  181. it an easy choice for me.
  182. </p>
  183.  
  184. <p>
  185. I liked it so much that I bought one for myself to use for long flights and
  186. any time I need to go long periods w/o a power supply. It really just has
  187. barely enough RAM to run one or two apps at once, but it's good enough for
  188. running Emacs and a browser which is what I spend most of my time using.
  189. </p>
  190.  
  191. <p>
  192. To install Ubuntu I followed <a href="http://bernaerts.dyndns.org/linux/74-ubuntu/340-ubuntu-install-acer-aspire-cloudbook-431">Nicolas Bernaerts'</a> excellent instructions. And
  193. while a 32GB drive is enough for my wife, I wanted a larger drive, so I bought
  194. a 128GB USB drive and followed <a href="https://help.ubuntu.com/community/Partitioning/Home/Moving">these instructions</a> on mounting it as my home
  195. drive. It just stays plugged in all the time. I probably could have just put
  196. the entire installation on it and booted from the USB. Maybe I'll try that at
  197. a later date as then my setup becomes a lot more portable if my laptop should
  198. die on me.
  199. </p>
  200.  
  201. <p>
  202. My only complaint about the laptop is with its keyboard. It is very stiff and
  203. I find it difficult to consistently have key presses register. I'm hoping this
  204. will ease up over time. Also, I would be happier with 4GB of RAM as the swap
  205. partition gets used a lot.
  206. </p>
  207.  
  208. <blockquote>
  209. <p>
  210. People think computers will keep them from making mistakes. They're wrong.
  211. With computers you make mistakes faster.
  212. </p>
  213.  
  214. <p>
  215. &#x2013; Adam Osborne
  216. </p>
  217. </blockquote>
  218. </div>
  219. <hr />
  220.      ]]>
  221.    </description>
  222.    <dc:creator>Kyle W T Sherman</dc:creator>
  223.    <dc:date>2017-06-10T11:29:00Z</dc:date>
  224.  </item>
  225.  
  226.  <item rdf:about="http://nulldot.net/2017/02/2017.02.05.0934-a-history-of-the-amiga">
  227.    <title>Jeremy Reimer's "A History of the Amiga" Series</title>
  228.    <link>http://nulldot.net/2017/02/2017.02.05.0934-a-history-of-the-amiga.html</link>
  229.    <description>
  230.      <![CDATA[
  231. <div class="content-item">
  232. <div class="timestamp">2017.02.05</div>
  233.  
  234. <div id="org0f88e8b" class="figure">
  235. <p><a href="https://arstechnica.com/series/history-of-the-amiga/" class="blog-img" title="A History of the Amiga"><img src="http://nulldot.net/2017/02/img/amiga.jpg" alt="amiga.jpg" class="blog-img" title="A History of the Amiga" /></a>
  236. </p>
  237. </div>
  238.  
  239. <p>
  240. I've been reading <a href="https://arstechnica.com/series/history-of-the-amiga/">Jeremy Reimer's series on the history of the Amiga</a>,
  241. published on <a href="https://arstechnica.com/">Ars Technica</a>. I highly recommend it to anyone that owned an Amiga
  242. or was into computers during the <a href="http://en.wikipedia.org/wiki/Special:Search?search=Amiga">Amiga</a>, <a href="http://en.wikipedia.org/wiki/Special:Search?search=Macintosh">Mac</a>, <a href="http://en.wikipedia.org/wiki/Special:Search?search=DOS">DOS</a>/<a href="http://en.wikipedia.org/wiki/Special:Search?search=Microsoft_Windows">Windows</a> days. It's the
  243. computer that should have taken over the world as its technology was five, or
  244. even ten, years more advanced than the competition &#x2013; no joke. With all of
  245. that potential, many like me probably wondered how Commodore could have messed
  246. it up so badly. Jeremy goes into all of the details of the historical
  247. time-line.
  248. </p>
  249.  
  250. <p>
  251. Although I got my start on the <a href="http://en.wikipedia.org/wiki/Special:Search?search=Commodore_64">Commodore 64</a>, my <a href="http://en.wikipedia.org/wiki/Special:Search?search=Amiga_1000">Amiga 1000</a> (followed by the
  252. <a href="http://en.wikipedia.org/wiki/Special:Search?search=Amiga_3000">3000</a>) was the computer I used during my college years while I was majoring in
  253. Computer Science. I was probably the only one in my class using an Amiga too.
  254. Their loss!
  255. </p>
  256.  
  257. <blockquote>
  258. <p>
  259. We worked with a great passion&#x2026; my most cherished memory is how much we
  260. cared about what we were doing. We had something to prove&#x2026; a real love for
  261. it. We created our own sense of family out there.
  262. </p>
  263.  
  264. <p>
  265. -— RJ Mical [while engineering the Amiga 1000]
  266. </p>
  267. </blockquote>
  268. </div>
  269. <hr />
  270.      ]]>
  271.    </description>
  272.    <dc:creator>Kyle W T Sherman</dc:creator>
  273.    <dc:date>2017-02-05T09:34:00Z</dc:date>
  274.  </item>
  275.  
  276.  <item rdf:about="http://nulldot.net/2010/12/2010.12.19.1336-rooting-a-samsung-fascinate-with-ubuntu-linux">
  277.    <title>How to Root a Samsung Fascinate Android Phone with Ubuntu Linux</title>
  278.    <link>http://nulldot.net/2010/12/2010.12.19.1336-rooting-a-samsung-fascinate-with-ubuntu-linux.html</link>
  279.    <description>
  280.      <![CDATA[
  281. <div class="content-item">
  282. <div class="timestamp">2010.12.19</div>
  283.  
  284. <div id="orgcc00e55" class="figure">
  285. <p><a href="http://www.android.com/" class="blog-img" title="Android"><img src="http://nulldot.net/2010/12/img/android.png" alt="android.png" class="blog-img" title="Android" /></a>
  286. </p>
  287. </div>
  288.  
  289. <p>
  290. These are the steps I took to root my Samsung Fascinate. Rooting gives the
  291. following abilities and more:
  292. </p>
  293.  
  294. <ul class="org-ul">
  295. <li>Install custom ROMs with <a href="http://www.appbrain.com/app/rom-manager/com.koushikdutta.rommanager">ROM Manager</a> (I have not tried this yet)</li>
  296. <li>Backup your phone with <a href="http://www.appbrain.com/app/titanium-backup-%E2%98%85-root/com.keramidas.TitaniumBackup">Titanium Backup</a></li>
  297. <li>Block unwanted calls and messages with <a href="http://www.appbrain.com/app/mr-number-call-block/com.mrnumber.blocker">Mr. Number Call Block</a></li>
  298. <li>Give other applications root access if needed</li>
  299. <li>Have total control of your phone</li>
  300. <li>Remove Bing and replace it with Google</li>
  301. </ul>
  302.  
  303. <p>
  304. This article assumes you have already installed the <a href="http://nulldot.net///2010/10/2010.10.16.1101-android-on-ubuntu-linux.html">Android SDK</a>. I also assume
  305. that you have the <b>platform-tools</b> directory as part of your path. If not, you
  306. will need to specify the full path whenever you see the <b>adb</b> command used,
  307. like <b>~/android-sdk/platform-tools/adb</b>.
  308. </p>
  309.  
  310. <p>
  311. The first step is to get your computer to recognize the phone. I followed the
  312. instructions on the <a href="http://developer.android.com/guide/developing/device.html">Android developer site</a> that explain how to do it. I'll
  313. summarize the steps for Ubuntu.
  314. </p>
  315.  
  316. <p>
  317. First make sure your phone is setup for development by performing the
  318. following steps:
  319. </p>
  320.  
  321. <ul class="org-ul">
  322. <li>From the Home screen, press the Menu button, then Settings</li>
  323. <li>Select Applications</li>
  324. <li>Make sure 'Unknown sources' is checked</li>
  325. <li>Select Development</li>
  326. <li>Make sure 'USB debugging' and 'Allow mock locations' are checked</li>
  327. </ul>
  328.  
  329. <p>
  330. Connect your phone to the computer using the USB cable that came with the
  331. phone. Now your phone should appear in the list of usb devices:
  332. </p>
  333.  
  334. <div class="org-src-container">
  335. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">lsusb</span>
  336. </pre>
  337. </div>
  338.  
  339. <pre class="example" id="org242d054">
  340. ...
  341. Bus 002 Device 006: ID 04e8:681c Samsung Electronics Co., Ltd Galaxy Portal/Spica Android Phone
  342. ...
  343. </pre>
  344.  
  345. <p>
  346. As root, edit <b>/etc/udev/rules.d/51-android.rules</b> so it looks like:
  347. </p>
  348.  
  349. <pre class="example" id="org969de64">
  350. SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
  351. </pre>
  352.  
  353. <p>
  354. Replace "04e8" with the vendor id found in your <b>lsusb</b> output from the
  355. previous step (it's the first four characters after <b>ID</b>).
  356. </p>
  357.  
  358. <p>
  359. Now set the permissions on the file and restart <b>udev</b> to enable it.
  360. </p>
  361.  
  362. <div class="org-src-container">
  363. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> chmod a+r /etc/udev/rules.d/51-android.rules
  364. <span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> /etc/init.d/udev restart
  365. </pre>
  366. </div>
  367.  
  368. <p>
  369. Now run the <b>adb</b> command and check for devices:
  370. </p>
  371.  
  372. <div class="org-src-container">
  373. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> devices
  374. </pre>
  375. </div>
  376.  
  377. <pre class="example" id="orgf6b9104">
  378. List of devices attached
  379. I500cf846986    device
  380. </pre>
  381.  
  382. <p>
  383. You should see your device listed. If you do not try restarting <b>adb</b> with:
  384. </p>
  385.  
  386. <div class="org-src-container">
  387. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> adb kill-server
  388. <span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> adb start-server
  389. </pre>
  390. </div>
  391.  
  392. <p>
  393. Assuming you have made it this far and <b>adb</b> can see your device, we can
  394. continue with the rooting process. The following instructions were taken from
  395. this <a href="http://www.droidforums.net/forum/samsung-fascinate-development/79811-newbie-guide-rooting-fascinate.html">Newbie Guide to Rooting the Fascinate</a>.
  396. </p>
  397.  
  398. <p>
  399. Download and unzip <a href="http://www.mediafire.com/?etcli3rd9l3gld3">root.zip</a> into a new directory. You should have the
  400. following files:
  401. </p>
  402.  
  403. <pre class="example" id="org1ecb1fe">
  404. busybox
  405. rageagainstthecage-arm5.bin
  406. su
  407. Superuser.apk
  408. </pre>
  409.  
  410. <p>
  411. Push the <b>rageagainstthecage-arm5.bin</b> file over to the phone:
  412. </p>
  413.  
  414. <div class="org-src-container">
  415. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> push rageagainstthecage-arm5.bin /data/local/tmp/rageagainstthecage-arm5.bin
  416. </pre>
  417. </div>
  418.  
  419. <p>
  420. Shell into the phone and setup the next step:
  421. </p>
  422.  
  423. <div class="org-src-container">
  424. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> shell
  425. <span class="org-tree-sitter-hl-faceXfunctionXcall"><span class="org-tree-sitter-hl-faceXfunctionXbuiltin">cd</span></span> /data/local/tmp
  426. <span class="org-tree-sitter-hl-faceXfunctionXcall">chmod</span> 0755 rageagainstthecage-arm5.bin
  427. </pre>
  428. </div>
  429.  
  430. <p>
  431. After the next step there will be a pause (for a few seconds) then you will be
  432. returned to the shell prompt. Then wait another 20 seconds or longer and you
  433. should be kicked out of the <b>adb shell</b>. If your phone locks up, nothing bad
  434. <b>should</b> happen, just try forcing a reboot by pressing and holding the power
  435. button, or removing the battery for a few seconds.
  436. </p>
  437.  
  438. <div class="org-src-container">
  439. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">./rageagainstthecage-arm5.bin</span>
  440. </pre>
  441. </div>
  442.  
  443. <p>
  444. You should see the following then the command prompt again.
  445. </p>
  446.  
  447. <pre class="example" id="org5029705">
  448. [*] CVE-2010-EASY Android local root exploit (C) 2010 by 743C
  449.  
  450. [*] checking NPROC limit ...
  451. [+] RLIMIT_NPROC={3712, 3712}
  452. [*] Searching for adb ...
  453. [+] Found adb as PID 2200
  454. [*] Spawning children. Dont type anything and wait for reset!
  455. [*]
  456. [*] If you like what we are doing you can send us PayPal money to
  457. [*] 7-4-3-C@web.de so we can compensate time, effort and HW costs.
  458. [*] If you are a company and feel like you profit from our work,
  459. [*] we also accept donations &gt; 1000 USD!
  460. [*]
  461. [*] adb connection will be reset. restart adb server on desktop and re-login.
  462. </pre>
  463.  
  464. <p>
  465. After waiting until you are kicked out of the shell, restart the <b>adb server</b>
  466. and re-login:
  467. </p>
  468.  
  469. <div class="org-src-container">
  470. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> adb kill-server
  471. <span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> adb start-server
  472. <span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> shell
  473. </pre>
  474. </div>
  475.  
  476. <p>
  477. You should now be at a root (pound symbol) prompt.  Exit the shell:
  478. </p>
  479.  
  480. <div class="org-src-container">
  481. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">exit</span>
  482. </pre>
  483. </div>
  484.  
  485. <p>
  486. Now to make the root permanent do the following:
  487. </p>
  488.  
  489. <div class="org-src-container">
  490. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> push su /data/local/tmp/su
  491. <span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> push busybox /data/local/tmp/busybox
  492. <span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> shell
  493. <span class="org-tree-sitter-hl-faceXfunctionXcall">mount</span> <span class="org-tree-sitter-hl-faceXconstant">-t</span> rfs <span class="org-tree-sitter-hl-faceXconstant">-o</span> remount,rw /dev/block/stl9 /system
  494. <span class="org-tree-sitter-hl-faceXfunctionXcall">cat</span> /data/local/tmp/su <span class="org-tree-sitter-hl-faceXoperator">&gt;</span> /system/xbin/su
  495. <span class="org-tree-sitter-hl-faceXfunctionXcall">cat</span> /data/local/tmp/busybox <span class="org-tree-sitter-hl-faceXoperator">&gt;</span> /system/xbin/busybox
  496. <span class="org-tree-sitter-hl-faceXfunctionXcall">chmod</span> 4755 /system/xbin/su
  497. <span class="org-tree-sitter-hl-faceXfunctionXcall">chmod</span> 4755 /system/xbin/busybox
  498. <span class="org-tree-sitter-hl-faceXfunctionXcall">exit</span>
  499. </pre>
  500. </div>
  501.  
  502. <p>
  503. Install the Android application that controls root access:
  504. </p>
  505.  
  506. <div class="org-src-container">
  507. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">adb</span> install Superuser.apk
  508. </pre>
  509. </div>
  510.  
  511. <p>
  512. After it installs you will see <b>Success</b> on your screen and the connection
  513. will hang. Press <b>Ctrl-C</b> and reboot your phone. You should now have permanent
  514. root.
  515. </p>
  516.  
  517. <blockquote>
  518. <p>
  519. The Library of Congress has specifically exempted rooting from the DMCA
  520. (Digital Millennium Copyright Act)&#x2026; This means that it is now 100 percent
  521. legal to root your Android phone (or jailbreak your iPhone) whenever you want
  522. without fear of legal action taken against you.
  523. </p>
  524.  
  525. <p>
  526. &#x2013; <a href="http://www.androidphonegeek.com/2010/07/rooting-your-phone-now-100-legal">David Wasserman, Android Phone Geek, "Rooting Your Phone Now 100% Legal", 2010-07-26</a>
  527. </p>
  528. </blockquote>
  529. </div>
  530. <hr />
  531.      ]]>
  532.    </description>
  533.    <dc:creator>Kyle W T Sherman</dc:creator>
  534.    <dc:date>2010-12-19T13:36:00Z</dc:date>
  535.  </item>
  536.  
  537.  <item rdf:about="http://nulldot.net/2010/10/2010.10.16.1101-android-on-ubuntu-linux">
  538.    <title>How to Install Android on Ubuntu Linux</title>
  539.    <link>http://nulldot.net/2010/10/2010.10.16.1101-android-on-ubuntu-linux.html</link>
  540.    <description>
  541.      <![CDATA[
  542. <div class="content-item">
  543. <div class="timestamp">2010.10.16</div>
  544.  
  545. <div id="orgdc7b290" class="figure">
  546. <p><a href="http://www.android.com/" class="blog-img" title="Android"><img src="http://nulldot.net/2010/10/img/android.png" alt="android.png" class="blog-img" title="Android" /></a>
  547. </p>
  548. </div>
  549.  
  550. <p>
  551. Once again I've decided that I want to take a look at programming for the
  552. <a href="http://en.wikipedia.org/wiki/Special:Search?search=Android_(operating_system)">Android</a> platform. One of the first things to do is to get an Android emulator
  553. and a programming environment setup. After searching around a few different
  554. sites to get the instructions I've compiled the steps to get an emulator
  555. working under <a href="http://en.wikipedia.org/wiki/Special:Search?search=Ubuntu_(operating_system)">Ubuntu Linux</a> here.
  556. </p>
  557.  
  558. <div id="outline-container-org839270c" class="outline-1">
  559. <h1 id="org839270c">Android SDK Manager</h1>
  560. <div class="outline-text-1" id="text-org839270c">
  561. <p>
  562. I followed the steps on <a href="http://developer.android.com/sdk/installing.html">the android site</a>. Using the command line in Ubuntu,
  563. here are the steps to follow:
  564. </p>
  565.  
  566. <p>
  567. Install <a href="http://openjdk.java.net/">OpenJDK</a>:
  568. </p>
  569.  
  570. <div class="org-src-container">
  571. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> apt-get install openjdk-6-jre
  572. </pre>
  573. </div>
  574.  
  575. <p>
  576. If you are running a 64-bit OS, then install the needed 32-bit libs:
  577. </p>
  578.  
  579. <div class="org-src-container">
  580. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> apt-get install ia32-libs
  581. </pre>
  582. </div>
  583.  
  584. <p>
  585. <a href="http://developer.android.com/sdk/index.html">Download the latest SDK from the Android site</a> (which, as I write this, is
  586. <a href="http://dl.google.com/android/android-sdk_r07-linux_x86.tgz">android-sdk_r07-linux_x86.tgz</a>).
  587. </p>
  588.  
  589. <p>
  590. Uncompress the tarball into your home directory and rename it:
  591. </p>
  592.  
  593. <div class="org-src-container">
  594. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">tar</span> xfvz android-sdk_r07-linux_x86.tgz
  595. <span class="org-tree-sitter-hl-faceXfunctionXcall">mv</span> android-sdk-linux_x86 android-sdk
  596. </pre>
  597. </div>
  598.  
  599. <p>
  600. Here are all of the above steps combined:
  601. </p>
  602.  
  603. <div class="org-src-container">
  604. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> apt-get <span class="org-tree-sitter-hl-faceXconstant">-y</span> install openjdk-6-jre
  605. <span class="org-tree-sitter-hl-faceXfunctionXcall">uname</span> <span class="org-tree-sitter-hl-faceXconstant">-m</span> <span class="org-tree-sitter-hl-faceXoperator">|</span> <span class="org-tree-sitter-hl-faceXfunctionXcall">grep</span> <span class="org-tree-sitter-hl-faceXconstant">-q</span> <span class="org-tree-sitter-hl-faceXstring">"\(x86_64\|ia64\)"</span> <span class="org-tree-sitter-hl-faceXoperator">&amp;&amp;</span> <span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> apt-get <span class="org-tree-sitter-hl-faceXconstant">-y</span> install ia32-libs
  606. <span class="org-tree-sitter-hl-faceXfunctionXcall"><span class="org-tree-sitter-hl-faceXfunctionXbuiltin">cd</span></span>
  607. <span class="org-tree-sitter-hl-faceXfunctionXcall">wget</span> http://dl.google.com/android/android-sdk_r07-linux_x86.tgz
  608. <span class="org-tree-sitter-hl-faceXfunctionXcall">tar</span> xfvz android-sdk_r07-linux_x86.tgz
  609. [ -e android-sdk ] <span class="org-tree-sitter-hl-faceXoperator">&amp;&amp;</span> <span class="org-tree-sitter-hl-faceXfunctionXcall">mv</span> android-sdk android-sdk.<span class="org-tree-sitter-hl-faceXpunctuationXspecial">$(</span><span class="org-sh-quoted-exec">date +%y%m%d</span><span class="org-tree-sitter-hl-faceXpunctuationXspecial">)</span>
  610. <span class="org-tree-sitter-hl-faceXfunctionXcall">mv</span> android-sdk-linux_x86 android-sdk
  611. </pre>
  612. </div>
  613.  
  614. <p>
  615. Optionally you may add the Android tools directories to your <b>PATH</b> by adding
  616. the following to your <b>.bashrc</b> file:
  617. </p>
  618.  
  619. <div class="org-src-container">
  620. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXkeyword">export</span> <span class="org-tree-sitter-hl-faceXproperty"><span class="org-tree-sitter-hl-faceXvariable"><span class="org-tree-sitter-hl-faceXvariableXspecial">PATH</span></span></span>=<span class="org-tree-sitter-hl-faceXpunctuationXspecial">${</span><span class="org-tree-sitter-hl-faceXembedded"><span class="org-tree-sitter-hl-faceXproperty"><span class="org-tree-sitter-hl-faceXvariableXspecial">PATH</span></span></span><span class="org-tree-sitter-hl-faceXpunctuationXspecial">}</span>:<span class="org-tree-sitter-hl-faceXpunctuationXspecial">${</span><span class="org-tree-sitter-hl-faceXembedded"><span class="org-tree-sitter-hl-faceXproperty">HOME</span></span><span class="org-tree-sitter-hl-faceXpunctuationXspecial">}</span>/android-sdk/tools:<span class="org-tree-sitter-hl-faceXpunctuationXspecial">${</span><span class="org-tree-sitter-hl-faceXembedded"><span class="org-tree-sitter-hl-faceXproperty">HOME</span></span><span class="org-tree-sitter-hl-faceXpunctuationXspecial">}</span>/android-sdk/platform-tools
  621. </pre>
  622. </div>
  623.  
  624. <p>
  625. Now run the <b>Android SDK and AVD Manager</b> via:
  626. </p>
  627.  
  628. <div class="org-src-container">
  629. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">~/android-sdk/tools/android</span>
  630. </pre>
  631. </div>
  632.  
  633. <p>
  634. Or, if you are running <a href="http://en.wikipedia.org/wiki/Special:Search?search=GNOME">GNOME</a>, make a custom application launcher, by either
  635. right-clicking a panel and selecting <b>Add to panel&#x2026;</b> then adding a <b>Custom
  636. Application Launcher</b>, or by right-clicking the Main Menu and selecting <b>Edit
  637. Menus</b> then select <b>Programming</b> then <b>New Item</b>. The custom application
  638. launcher should have the following properties (substitute your $HOME directory
  639. for <b>/home/USERNAME</b>):
  640. </p>
  641.  
  642. <ul class="org-ul">
  643. <li>Type: Application</li>
  644. <li>Name: Android SDK Manager</li>
  645. <li>Command: /home/USERNAME/android-sdk/tools/android</li>
  646. <li>Icon: gnome-robots.png</li>
  647. </ul>
  648.  
  649. <p>
  650. Now configure the Android Manager:
  651. </p>
  652.  
  653. <ul class="org-ul">
  654. <li>Click on <b>Settings</b>, then check <b>Force <code>https://</code>&#x2026; sources to be fetched
  655. using <code>http://</code>&#x2026;</b></li>
  656. <li>Click on <b>Installed Packages</b>, then <b>Update All&#x2026;</b>, then <b>Accept All</b>
  657. followed by <b>Install</b> on the window that comes up; it will take a while to
  658. download and install everything; when it finishes, close the window (and the
  659. application if prompted to do so)</li>
  660. <li>Redo the above step until no more updates can be performed</li>
  661. <li>Click on <b>Virtual Devices</b>, then <b>New&#x2026;</b>, give it a <b>Name</b> and select a
  662. version of Android for <b>Target</b>, then optionally add an <b>SD Card</b> and
  663. <b>Hardware</b> as desired, finally click <b>Create AVD</b></li>
  664. </ul>
  665.  
  666. <p>
  667. You can now run this virtual android image by clicking the <b>Start&#x2026;</b> button.
  668. Or from the command line (replacing <b>NAME</b> with the name of the virtual you
  669. created):
  670. </p>
  671.  
  672. <div class="org-src-container">
  673. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">~/android-sdk/tools/emulator</span> @NAME
  674. </pre>
  675. </div>
  676.  
  677. <p>
  678. You can also create a custom application launcher with that command.
  679. </p>
  680.  
  681. <p>
  682. The next time you want to make sure your android installation is updated you
  683. can run:
  684. </p>
  685.  
  686. <div class="org-src-container">
  687. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">~/android-sdk/tools/android</span> update sdk
  688. </pre>
  689. </div>
  690.  
  691. <p>
  692. #+BEGIN_COMMENT
  693. </p>
  694. </div>
  695. </div>
  696. <div id="outline-container-orgb019f4f" class="outline-1">
  697. <h1 id="orgb019f4f">Android on VirtualBox</h1>
  698. <div class="outline-text-1" id="text-orgb019f4f">
  699. <p>
  700. I followed the steps <a href="http://www.taranfx.com/how-to-run-google-android-in-virtualbox-vmware-on-netbooks">this article</a>. Using the command line in Ubuntu, here are
  701. the steps to follow:
  702. </p>
  703.  
  704. <p>
  705. First, if you do not already have <a href="http://www.virtualbox.org/">VirtualBox</a> installed, you can install the
  706. open source edition with the following command:
  707. </p>
  708.  
  709. <div class="org-src-container">
  710. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> apt-get install virtualbox-ose
  711. </pre>
  712. </div>
  713.  
  714. <p>
  715. Now, under your Accessories menu you should see the <b>VirtualBox OSE</b> launcher.
  716. </p>
  717.  
  718. <p>
  719. #+END_COMMENT
  720. </p>
  721. </div>
  722. </div>
  723. <div id="outline-container-orgcd055ab" class="outline-1">
  724. <h1 id="orgcd055ab">Eclipse IDE</h1>
  725. <div class="outline-text-1" id="text-orgcd055ab">
  726. <p>
  727. Even though I prefer to code in <a href="http://en.wikipedia.org/wiki/Special:Search?search=Emacs">Emacs</a> whenever possible, the recommended
  728. method of programming for the Android platform is with the <a href="http://www.eclipse.org/">Eclipse IDE</a>. So,
  729. I'm starting with that at least until I get more used to Android programming.
  730. </p>
  731.  
  732. <p>
  733. At first I tried to install Eclipse with <b>apt-get</b> like so:
  734. </p>
  735.  
  736. <div class="org-src-container">
  737. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">sudo</span> apt-get install eclipse
  738. </pre>
  739. </div>
  740.  
  741. <p>
  742. However, I could not get the <a href="http://developer.android.com/sdk/eclipse-adt.html">Android Development Tools</a> to install with that
  743. version of Eclipse (Galileo v3.5.2). So, like many others have, I decided to
  744. use the latest version from their web site. I downloaded the 64-bit Eclipse
  745. Classic (Helios v3.6.1) tarball <a href="http://www.eclipse.org/downloads/">from their download page</a>. You should download
  746. the correct version for your architecture and uncompress it in your home
  747. directory.
  748. </p>
  749.  
  750. <div class="org-src-container">
  751. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">tar</span> zxvf eclipse-SDK-3.6.1-linux-gtk-x86_64.tar.gz
  752. </pre>
  753. </div>
  754.  
  755. <p>
  756. You might want to create a custom application launcher for it with these
  757. settings:
  758. </p>
  759.  
  760. <ul class="org-ul">
  761. <li>Type: Application</li>
  762. <li>Name: Eclipse</li>
  763. <li>Command: /home/USERNAME/eclipse/eclipse</li>
  764. <li>Icon: /home/USERNAME/eclipse/icon.xpm</li>
  765. </ul>
  766.  
  767. <p>
  768. Now launch Eclipse. Then select <b>Install New Software</b> from the <b>Help</b> menu
  769. and add the following sites:
  770. </p>
  771.  
  772. <ul class="org-ul">
  773. <li>Google Eclipse Plugin: <a href="http://dl.google.com/eclipse/plugin/3.5">http://dl.google.com/eclipse/plugin/3.5</a></li>
  774. <li>Android Development Tools: <a href="https://dl-ssl.google.com/android/eclipse/">https://dl-ssl.google.com/android/eclipse/</a></li>
  775. </ul>
  776.  
  777. <p>
  778. Install everything from each of them in the above order.
  779. </p>
  780.  
  781. <p>
  782. After that finishes, select Preferences from the Window menu. Select Android
  783. on the left and set the SDK Location to <b>/home/USERNAME/android-sdk</b> or
  784. wherever you installed the Android SDK. When you apply it you should see a
  785. list of Android target versions. OK the change.
  786. </p>
  787.  
  788. <p>
  789. Now when you create a new project, you can pick Android as a type.
  790. </p>
  791.  
  792. <blockquote>
  793. <p>
  794. James DeBragga [Windows Consumer Product Manager]: Android is "free like a
  795. puppy".
  796. </p>
  797.  
  798. <p>
  799. spark: "Free like a puppy" is certainly much, much better than an atrociously
  800. priced and uncontrollably incontinent, rabies-infected mad hound.
  801. </p>
  802. </blockquote>
  803. </div>
  804. </div>
  805. </div>
  806. <hr />
  807.      ]]>
  808.    </description>
  809.    <dc:creator>Kyle W T Sherman</dc:creator>
  810.    <dc:date>2010-10-16T11:01:00Z</dc:date>
  811.  </item>
  812.  
  813.  <item rdf:about="http://nulldot.net/2010/09/2010.09.23.1430-effective-emacs">
  814.    <title>10 Specific Ways to Improve Your Productivity With Emacs</title>
  815.    <link>http://nulldot.net/2010/09/2010.09.23.1430-effective-emacs.html</link>
  816.    <description>
  817.      <![CDATA[
  818. <div class="content-item">
  819. <div class="timestamp">2010.09.23</div>
  820.  
  821. <div id="org640a78f" class="figure">
  822. <p><a href="http://sites.google.com/site/steveyegge2/effective-emacs" class="blog-img" title="Effective Emacs"><img src="http://nulldot.net/2010/09/img/emacs.png" alt="emacs.png" class="blog-img" title="Effective Emacs" /></a>
  823. </p>
  824. </div>
  825.  
  826. <p>
  827. I was re-reading an old post by <a href="http://steve-yegge.blogspot.com/">Steve Yegge</a> about productivity tips for using
  828. Emacs, and I wanted to comment on a few of them, but I was not able to find a
  829. way to leave a comment or email him. That combined with the fact that I
  830. haven't done a blog entry in over a year, I thought I should blog my comments
  831. here.
  832. </p>
  833.  
  834. <p>
  835. If you use <a href="http://en.wikipedia.org/wiki/Special:Search?search=Emacs">Emacs</a> (and you should), you owe it to yourself to read his post. He
  836. does a very good job explaining why Emacs is better at certain [most] tasks
  837. and how to configure it for an even better experience.
  838. </p>
  839.  
  840. <p>
  841. <a href="http://sites.google.com/site/steveyegge2/effective-emacs">10 Specific Ways to Improve Your Productivity With Emacs</a>
  842. </p>
  843.  
  844. <p>
  845. As I read this I realized that I had incorporated a lot of his recommendations
  846. already. Some I had not implemented, others I had tried and reversed (as noted
  847. in my comments inside my <a href="http://nullman.net/emacs">dot-emacs</a> files). I've listed his sections that I
  848. have comments about.
  849. </p>
  850.  
  851. <dl class="org-dl">
  852. <dt>Item 1: Swap Caps-Lock and Control</dt><dd></dd>
  853. </dl>
  854.  
  855. <p>
  856. This time I am going to try to stick with using <b>Caps_Lock</b> as <b>Control</b>.
  857. Since I mostly use <a href="http://en.wikipedia.org/wiki/Special:Search?search=Ubuntu">Ubuntu Linux</a> setting up my <b>.xmodmap</b> files was pretty
  858. simple to do. I will be sure to try his <b>regedit</b> trick on Windows when I get
  859. a chance.
  860. </p>
  861.  
  862. <dl class="org-dl">
  863. <dt>Item 2: Invoke M-x without the Alt key</dt><dd></dd>
  864. </dl>
  865.  
  866. <p>
  867. I had this switched off because I was using the <b><b>C-xC-m</b></b> key for starting
  868. <a href="http://www.emacswiki.org/emacs/Mingus">Mingus</a>, but I'm going to try the keybindings he recommends.
  869. </p>
  870.  
  871. <dl class="org-dl">
  872. <dt>Item 3: Prefer backward-kill-word over Backspace</dt><dd></dd>
  873. </dl>
  874.  
  875. <p>
  876. I find it hard to switch finger-memory modes when switching between Emacs'
  877. cut/copy/paste bindings and the <b>standard</b> <b><b>CTRL-X/C/V</b></b> ones that so many
  878. other applications use. Because of this, I use <a href="http://www.emacswiki.org/emacs/CuaMode">cua-mode</a>. It allows me to keep
  879. the Emacs functionality of those keys while still being able to use them as
  880. needed. Having said this, I still want the original Emacs cut binding <b><b>C-w</b></b>
  881. to work as expected.
  882. </p>
  883.  
  884. <p>
  885. Since the <b>kill-region</b> command should only be called when a region has been
  886. selected, I wrote some code to solve this issue for me. Using the following
  887. code will <b>do-the-right-thing</b> when you press <b><b>C-w</b></b>:
  888. </p>
  889.  
  890. <div class="org-src-container">
  891. <pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">kill-region-or-word</span> ()
  892.  <span class="org-doc">"Call `</span><span class="org-doc"><span class="org-constant">kill-region</span></span><span class="org-doc">' or `</span><span class="org-doc"><span class="org-constant">backward-kill-word</span></span><span class="org-doc">' depending on</span>
  893. <span class="org-doc">whether or not a region is selected."</span>
  894.  (<span class="org-keyword">interactive</span>)
  895.  (<span class="org-keyword">if</span> (<span class="org-keyword">and</span> transient-mark-mode mark-active)
  896.      (kill-region (point) (mark))
  897.    (backward-kill-word 1)))
  898. (global-set-key <span class="org-string">"\C-w"</span> 'kill-region-or-word)
  899. </pre>
  900. </div>
  901.  
  902. <dl class="org-dl">
  903. <dt>Dialog Boxes: The Root of All Evil</dt><dd></dd>
  904. </dl>
  905.  
  906. <p>
  907. Just had to say that I completely agree.
  908. </p>
  909.  
  910. <dl class="org-dl">
  911. <dt>Item 7: Lose the UI</dt><dd></dd>
  912. </dl>
  913.  
  914. <p>
  915. Being nitpicky here but <b>when</b> should be used instead of <b>if</b> in the following
  916. code:
  917. </p>
  918.  
  919. <div class="org-src-container">
  920. <pre class="src src-emacs-lisp">(<span class="org-keyword">if</span> (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
  921. (<span class="org-keyword">if</span> (fboundp 'tool-bar-mode) (tool-bar-mode -1))
  922. (<span class="org-keyword">if</span> (fboundp 'menu-bar-mode) (menu-bar-mode -1))
  923. </pre>
  924. </div>
  925.  
  926. <p>
  927. Like so:
  928. </p>
  929.  
  930. <div class="org-src-container">
  931. <pre class="src src-emacs-lisp">(<span class="org-keyword">when</span> (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
  932. (<span class="org-keyword">when</span> (fboundp 'tool-bar-mode) (tool-bar-mode -1))
  933. (<span class="org-keyword">when</span> (fboundp 'menu-bar-mode) (menu-bar-mode -1))
  934. </pre>
  935. </div>
  936.  
  937. <dl class="org-dl">
  938. <dt>Keyboard Macros</dt><dd></dd>
  939. </dl>
  940.  
  941. <p>
  942. As mentioned in the comments section, after you've created a keyboard macro
  943. with <b><b>C-x(</b></b> and finished it with <b><b>C-x)</b></b>, and then used it once via
  944. <b><b>C-xe</b></b>, you can then repeat it by just pressing <b><b>e</b></b>.
  945. </p>
  946.  
  947. <p>
  948. That's about it for my comments. I hope Steve writes more articles on this
  949. topic and finishes his remaining 40 tips.
  950. </p>
  951.  
  952. <p>
  953. For more interesting Emacs sites see my <a href="http://nulldot.net///2008/01/2008.01.29.1741-getting-started-with-emacs.html">previous blog entry</a> about this topic.
  954. </p>
  955.  
  956. <blockquote>
  957. <p>
  958. If you don't use emacs, you're a pathetic, mewling, masochistic weakling and I
  959. can't be bothered to convert you.
  960. </p>
  961.  
  962. <p>
  963. -— Ron Echeverri
  964. </p>
  965. </blockquote>
  966. </div>
  967. <hr />
  968.      ]]>
  969.    </description>
  970.    <dc:creator>Kyle W T Sherman</dc:creator>
  971.    <dc:date>2010-09-23T14:30:00Z</dc:date>
  972.  </item>
  973.  
  974.  <item rdf:about="http://nulldot.net/2009/09/2009.09.03.0906-how-to-write-cross-platform-code">
  975.    <title>Rules for Writing Cross Platform Code</title>
  976.    <link>http://nulldot.net/2009/09/2009.09.03.0906-how-to-write-cross-platform-code.html</link>
  977.    <description>
  978.      <![CDATA[
  979. <div class="content-item">
  980. <div class="timestamp">2009.09.03</div>
  981.  
  982. <div id="org5d12190" class="figure">
  983. <p><a href="http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/" class="blog-img" title="Rules for How to Write Cross Platform Code"><img src="http://nulldot.net/2009/09/img/blackblaze.gif" alt="blackblaze.gif" class="blog-img" title="Rules for How to Write Cross Platform Code" /></a>
  984. </p>
  985. </div>
  986.  
  987. <p>
  988. After reading this <a href="http://blog.backblaze.com/2009/09/01/petabytes-on-a-budget-how-to-build-cheap-cloud-storage/">interesting blog about creating petabyte size storage
  989. servers</a> I found this <a href="http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/">entry about rules to follow when writing cross platform
  990. code</a> by Brian Wilson to be a good read for anyone doing cross platform coding
  991. in C/C++ (or any language for that matter).
  992. </p>
  993.  
  994. <p>
  995. The author works for <a href="http://www.backblaze.com/">Back Blaze</a> which seems like a nice inexpensive backup
  996. service. I will probably subscribe to their services once they have a Linux
  997. client. It is a little hard to ignore the irony of the cross platform article
  998. when the Linux client is still missing, however, anyone that has worked for a
  999. software corporation knows there are often many other non-technical reasons
  1000. for their product release decisions.
  1001. </p>
  1002.  
  1003. <blockquote>
  1004. <p>
  1005. There are 10 types of people in the world: Those who understand ternary, those
  1006. that don't, and those that confuse it with binary.
  1007. </p>
  1008. </blockquote>
  1009. </div>
  1010. <hr />
  1011.      ]]>
  1012.    </description>
  1013.    <dc:creator>Kyle W T Sherman</dc:creator>
  1014.    <dc:date>2009-09-03T09:06:00Z</dc:date>
  1015.  </item>
  1016.  
  1017.  <item rdf:about="http://nulldot.net/2009/08/2009.08.21.2142-apache-2-configuration">
  1018.    <title>Apache 2 Web Server Configuration</title>
  1019.    <link>http://nulldot.net/2009/08/2009.08.21.2142-apache-2-configuration.html</link>
  1020.    <description>
  1021.      <![CDATA[
  1022. <div class="content-item">
  1023. <div class="timestamp">2009.08.21</div>
  1024.  
  1025. <div id="org6065b7c" class="figure">
  1026. <p><a href="http://httpd.apache.org/" class="blog-img" title="Apache Web Server"><img src="http://nulldot.net/2009/08/img/apache.jpg" alt="apache.jpg" class="blog-img" title="Apache Web Server" /></a>
  1027. </p>
  1028. </div>
  1029.  
  1030. <p>
  1031. I finally got my site backup up and working on a new server. A very quiet <a href="http://www.hardforum.com/showthread.php?t=1374904">Dell
  1032. Studio Slim 540s</a>, running <a href="http://releases.ubuntu.com/intrepid/">Ubuntu 8.10</a> and <a href="http://httpd.apache.org/">apache 2</a>. I had been running apache
  1033. (1) on an old hand built Celeron 500MHz server that made a lot of noise and
  1034. had some hard drives dying. It was long over due for an upgrade.
  1035. </p>
  1036.  
  1037. <p>
  1038. Installing Ubuntu 8.10 was easy enough as was moving <a href="http://subversion.tigris.org/">subversion</a> over (it was
  1039. the first thing I did). All I needed to do for subversion was to <a href="http://www.samba.org/rsync/">rsync</a> the
  1040. directory over along with all of the other files I was copying, and start the
  1041. service. Once I had my <a href="http://www.openssh.com/">ssh</a> keys setup, subversion worked just like it did on
  1042. the old server.
  1043. </p>
  1044.  
  1045. <p>
  1046. Getting apache to work correctly, however, was not nearly as easy. The server
  1047. itself worked fine out of the box, but I have a lot of domain names that I
  1048. proxy with apache and it took me a while to figure out how to set those up
  1049. correctly. After looking at far too many examples online I finally got it
  1050. working. The following are the steps I took, and hopefully this will save
  1051. someone else the time it took me to figure it out. Note that all of these
  1052. commands need to be run as root or via sudo.
  1053. </p>
  1054.  
  1055. <p>
  1056. First I added some needed modules:
  1057. </p>
  1058.  
  1059. <pre class="example" id="org57b0d58">
  1060. a2enmod proxy proxy_connect proxy_http proxy_ftp userdir
  1061. </pre>
  1062.  
  1063. <p>
  1064. Then setup the proxy configuration by editing
  1065. <b>/etc/apache2/mods-available/proxy.conf</b>:
  1066. </p>
  1067.  
  1068. <pre class="example" id="org699154d">
  1069. &lt;IfModule mod_proxy.c&gt;
  1070.    ProxyRequests Off
  1071.  
  1072.    &lt;Proxy *&gt;
  1073.        AddDefaultCharset off
  1074.        Order deny,allow
  1075.        Deny from all
  1076.        Allow from all
  1077.    &lt;/Proxy&gt;
  1078.  
  1079.    ProxyVia On
  1080. &lt;/IfModule&gt;
  1081. </pre>
  1082.  
  1083. <p>
  1084. I did not need to make any changes to the default <b>userdir.conf</b>.
  1085. </p>
  1086.  
  1087. <p>
  1088. Now create a site file for every site you run. Here is mine for <a href="http://nulldot.net/">nulldot</a> as an
  1089. example:
  1090. </p>
  1091.  
  1092. <p>
  1093. Edit <b>/etc/apache2/sites-enabled/nulldot</b>:
  1094. </p>
  1095.  
  1096. <pre class="example" id="orgf318466">
  1097. &lt;VirtualHost *:80&gt;
  1098.    ServerName nulldot.net
  1099.    ServerAlias nulldot.net *.nulldot.net
  1100.  
  1101.    ProxyPass / http://localhost/~kyle/blog/
  1102.    ProxyPassReverse / http://localhost/~kyle/blog/
  1103. &lt;/VirtualHost&gt;
  1104. </pre>
  1105.  
  1106. <p>
  1107. Obviously, replace <b>nulldot.net</b> with your domain name and point the
  1108. <b>ProxyPass</b> and <b>ProxyPassReverse</b> lines to your target directory.
  1109. </p>
  1110.  
  1111. <p>
  1112. Then enable the site with:
  1113. </p>
  1114.  
  1115. <pre class="example" id="orgf7ba385">
  1116. a2ensite nulldot
  1117. </pre>
  1118.  
  1119. <p>
  1120. Now restart apache2 and hopefully everything works:
  1121. </p>
  1122.  
  1123. <div class="org-src-container">
  1124. <pre class="src src-sh"><span class="org-tree-sitter-hl-faceXfunctionXcall">/etc/init.d/apache2</span> restart
  1125. </pre>
  1126. </div>
  1127.  
  1128. <blockquote>
  1129. <p>
  1130. Getting information off the Internet is like taking a drink from a fire
  1131. hydrant.
  1132. </p>
  1133.  
  1134. <p>
  1135. &#x2013; Mitchell Kapor
  1136. </p>
  1137. </blockquote>
  1138. </div>
  1139. <hr />
  1140.      ]]>
  1141.    </description>
  1142.    <dc:creator>Kyle W T Sherman</dc:creator>
  1143.    <dc:date>2009-08-21T21:42:00Z</dc:date>
  1144.  </item>
  1145.  
  1146.  <item rdf:about="http://nulldot.net/2008/06/2008.06.27.1753-olpc-laptop-e-book">
  1147.    <title>Negroponte Unveils an OLPC Laptop E-Book</title>
  1148.    <link>http://nulldot.net/2008/06/2008.06.27.1753-olpc-laptop-e-book.html</link>
  1149.    <description>
  1150.      <![CDATA[
  1151. <div class="content-item">
  1152. <div class="timestamp">2008.06.27</div>
  1153.  
  1154. <div id="org98641bc" class="figure">
  1155. <p><a href="http://www.xconomy.com/2008/05/20/negroponte-unveils-2nd-generation-olpc-laptop-its-an-e-book/" class="blog-img" title="OLPC Laptop"><img src="http://nulldot.net/2008/06/img/olpc.jpg" alt="olpc.jpg" class="blog-img" title="OLPC Laptop" /></a>
  1156. </p>
  1157. </div>
  1158.  
  1159. <p>
  1160. Negroponte of <a href="http://laptop.org/">OLPC</a> fame, unveils the <a href="http://www.xconomy.com/2008/05/20/negroponte-unveils-2nd-generation-olpc-laptop-its-an-e-book/">2nd Generation OLPC Laptop</a>, which is an
  1161. E-Book. I'm not sure I'll get one (or even if I'll be <b>allowed</b> to buy one
  1162. [1]), but I like the idea. I'm still quite happy using my <a href="http://wiki.mobileread.com/wiki/REB_1100">Gemstar (RCA) REB
  1163. 1100</a> for all of my e-book needs.
  1164. </p>
  1165.  
  1166. <p>
  1167. While I like what the OLPC organization has done and continues to accomplish,
  1168. there are a couple sticking points for me. First, their laptop is very under
  1169. powered by today's standards. Although that is probably fine for their
  1170. intended audience, it does make me not want to own one myself. Plus if you use
  1171. it as intended, you're using their <a href="http://laptop.org/laptop/interface/index.shtml">SUGAR</a> interface which is new and limited &#x2013;
  1172. in the sense that you can only run applications specifically designed to run
  1173. under SUGAR.
  1174. </p>
  1175.  
  1176. <p>
  1177. Some great things have come out of the OLPC project. They were very innovative
  1178. with the <a href="http://wiki.laptop.org/go/Display">display</a> technology, which requires a lot less energy to power than
  1179. normal laptop screens. Also, their <a href="http://wiki.laptop.org/go/Mesh_Network_Details">mesh network</a> concept seems like a good
  1180. idea.
  1181. </p>
  1182.  
  1183. <p>
  1184. On a bad note, they've recently decided to support <a href="http://www.xconomy.com/boston/2008/05/15/xo-laptop-goes-windows/">Windows</a> on the OLPC
  1185. devices, which I think is a very bad idea. A main point of the OLPC project
  1186. was to foster openness and freedom, two ideals that Windows does not support
  1187. &#x2013; at least from a technical perspective.
  1188. </p>
  1189.  
  1190. <p>
  1191. On the e-book topic, researchers at Maryland and Berkeley Universities have
  1192. created an <a href="http://www.newscientist.com/blog/technology/2008/06/dual-display-e-book-reader-lets-you.html">interesting e-book reader</a> that lets you flip the pages. That's a
  1193. feature I don't think I need or want, but it's interesting.
  1194. </p>
  1195.  
  1196. <p>
  1197. [1] The original OLPC laptop cannot be bought directly. You may buy them for
  1198. children in other countries, or donate to the project only.
  1199. </p>
  1200.  
  1201. <blockquote>
  1202. <p>
  1203. Dew knot trussed yore spell chequer two fined awl mistakes.
  1204. </p>
  1205. </blockquote>
  1206. </div>
  1207. <hr />
  1208.      ]]>
  1209.    </description>
  1210.    <dc:creator>Kyle W T Sherman</dc:creator>
  1211.    <dc:date>2008-06-27T17:53:00Z</dc:date>
  1212.  </item>
  1213.  
  1214.  <item rdf:about="http://nulldot.net/2008/06/2008.06.23.1527-purity">
  1215.    <title>Purity Comic</title>
  1216.    <link>http://nulldot.net/2008/06/2008.06.23.1527-purity.html</link>
  1217.    <description>
  1218.      <![CDATA[
  1219. <div class="content-item">
  1220. <div class="timestamp">2008.06.23</div>
  1221.  
  1222. <div id="orge75cf8f" class="figure">
  1223. <p><a href="http://xkcd.com/" class="blog-img" title="Purity Comic"><img src="http://nulldot.net/2008/06/img/xkcd.png" alt="xkcd.png" class="blog-img" title="Purity Comic" /></a>
  1224. </p>
  1225. </div>
  1226.  
  1227. <p>
  1228. Another great entry from <a href="http://xkcd.com/">xkcd</a>. I remember a <b>real</b> version of this science
  1229. scale presented to me in college, but the professor labeled the sciences on
  1230. the left as <b>weak sciences</b> and the ones on the right as <b>strong sciences</b>. It
  1231. seems that Engineering and Computer Science have been left off &#x2013; on purpose I
  1232. suppose, since they would be pretty close to Mathematics and thus ruin the
  1233. joke.
  1234. </p>
  1235.  
  1236.  
  1237. <div id="org944df51" class="figure">
  1238. <p><a href="http://xkcd.com/435/"><img src="http://nulldot.net/2008/06/img/comic-purity.png" alt="comic-purity.png" /></a>
  1239. </p>
  1240. </div>
  1241.  
  1242. <blockquote>
  1243. <p>
  1244. Change is the essential process of all existence.
  1245. </p>
  1246.  
  1247. <p>
  1248. &#x2013; Spock, "Let That Be Your Last Battlefield", stardate 5730.2
  1249. </p>
  1250. </blockquote>
  1251. </div>
  1252. <hr />
  1253.      ]]>
  1254.    </description>
  1255.    <dc:creator>Kyle W T Sherman</dc:creator>
  1256.    <dc:date>2008-06-23T15:27:00Z</dc:date>
  1257.  </item>
  1258.  
  1259. </rdf:RDF>
  1260.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//nulldot.net/index.rss

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda