<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>SweetFriday</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/" />
    <link rel="self" type="application/atom+xml" href="http://www.neverfriday.com/sweetfriday/atom.xml" />
    <id>tag:www.neverfriday.com,2008-06-09:/sweetfriday//1</id>
    <updated>2009-11-05T19:37:39Z</updated>
    <subtitle>Talking about software, programming, computer science, etc.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Open Source 4.1</generator>

<entry>
    <title>Some Dijkstra Quotes</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/11/some-dijkstra-quotes.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.55</id>

    <published>2009-11-05T19:36:21Z</published>
    <updated>2009-11-05T19:37:39Z</updated>

    <summary> A few weeks ago I picked up the books A Discipline in Programming and Structured Programming. The first is by E. W. Dijkstra and the second includes a large section written by him. I became interested in these books...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Computing Science" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Writing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="computerscience" label="computer science" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="computers" label="computers" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="computingscience" label="computing science" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dijkstra" label="dijkstra" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p>A few weeks ago I picked up the books <a href="http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X">A Discipline in Programming</a> and
<a href="http://www.amazon.com/Structured-Programming-E-W-Dijkstra-Hoare/dp/B000OHQL5C/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1257447527&amp;sr=1-1">Structured Programming</a>. The first is by <a href="http://en.wikipedia.org/wiki/Edsger_W._Dijkstra">E. W. Dijkstra</a> and the second
includes a large section written by him. I became interested in these
books after reading a few of Dijkstra's other papers and about Donald
Knuth's great works. The computer science field could stand to have a
bit more formalism in it and less hand-waving about &quot;real-world&quot; tools
and methodologies.</p>

<p>Here are some quotes that I found especially good.</p>
]]>
        <![CDATA[<h4>Recursive procedures/functions</h4>

<p class="first">The first quote is about recursive procedures. My friend and I had an
argument over their efficiency when using the C programming language.
I took the same view as Dijkstra though I did not put it in such
words.</p>

<blockquote>
<p class="quoted">
The argument against recusrive procedures was always an efficiency argument: non-re-entrant code could be executed so much more efficiently. But with the advent of multiprogramming another need for felxible storage allocation has emerged. And if there are still machines in which the use of recursive routines is punished by too heavy a penalty, then I would venture the opinion that the structure of such a machine should now be called somewhat old-fashioned.</p>

</blockquote>

<p><em>(Found on page 47-48 of Notes on Structured Programming)</em></p>

<p>In other words, we should build the machines we want to use if we are
able to. We should not have to be stuck with old designs and Dijkstra
talks about this in another paper of his, where he says that he hoped
the computing industry would create new and better hardware. However,
the industry insisted on backwards compatability which is why newer
machines still contain the flaws of previous machines.</p>


<h4>On program modification as a manipulation of text and symbols</h4>

<p class="first">In this next quote, Dijkstra highlighted the dangers of regarding
program modification as the manipulation of the symbols and text of a
programming language.</p>

<p><em>(Both quotes found on page 60 of Notes on Structured Programming)</em></p>

<blockquote>
<p class="quoted">
...In designing a program we have to consider many, many alternative programs and once our program is finished, we will have to change it (into one of the aternative ones). <em>As long as programs are regarded as linear strings of basic symbols of a programming language and accordingly, program modification is treated as text manipulation on that level, then each program modification must be understood in the universe of all programs (right or wrong!) that can be written in that programming language.</em> No wonder that program modification is then a most risky operation! The basic symbol is too small and meaningless a unit in terms of which to describe this.</p>

</blockquote>

<p>This final quote again highlights the difference between the ideas
behind a program and the surface of it expressed in some programming
language.</p>

<blockquote>
<p class="quoted">
...It was slightly overlooed, however, that <em>by expressing structure via syntax, this structure is only given very indirectly</em>, i.e. to be derived by means of a parsing algorithm to be applied to a linear sequence of basic symbols. This hurts if we realise that many a program modification leaves large portions of the structure unaffected, so that after painful re-parsing of the modified text the same structure re-emerges!</p>

</blockquote>

<p>I find it slightly difficult to understand this when all we ever see
of programs are the source code which is written in some programming
language. We only ever really see the indirect structure. But when you
look at a language like Lisp, or some Assembly language, there isn't
really a syntax there at all. You're forced to discard the pervasive
language metaphor.</p>


<h4>Final Note</h4>

<p class="first">There are some more interesting ideas buried in the books and while I
am exploring more of the history of the computing field, I have
decided to give Donald's Knuth's idea of <a href="http://en.wikipedia.org/wiki/Literate_programming">Literate Programming</a> a
chance. I am using it to complete a lab and an assignment for a class
I'm taking and I have posted <a href="http://neverfriday.com/temp/unwrap/unwrap.html">a sample conversion of a Haskell program</a>.</p>
]]>
    </content>
</entry>

<entry>
    <title>GNU Moe Tutorial/Review</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/09/gnu-moe-tutorialreview.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.54</id>

    <published>2009-09-13T01:56:24Z</published>
    <updated>2009-09-13T01:58:09Z</updated>

    <summary> Yesterday I was looking at a listing of updates for free software projects. I commented that the package moe could be used as a replacement for nano or zile, that is, when you need to quickly edit files from...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Writing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="freesoftware" label="free software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gnu" label="gnu" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="writing" label="writing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p><a href="http://www.neverfriday.com/sweetfriday/2009/09/free-software-supporter-18-ann.html">Yesterday I was looking at a listing of updates for free software projects.</a>
I commented that the package <a href="http://www.gnu.org/software/moe/moe.html">moe</a> could be used as a replacement for
<code>nano</code> or <code>zile</code>, that is, when you need to quickly edit files from the
command-line.</p>



<p>So today I'm giving it a go.
<a href="http://ftp.gnu.org/gnu/moe/">I downloaded moe via the GNU project's FTP server and installed it.</a>
The compilation was insanely fast, I think it took less than 10
seconds to get it all built and installed.</p>
]]>
        <![CDATA[<p>So today I'm giving it a go.
<a href="http://ftp.gnu.org/gnu/moe/">I downloaded moe via the GNU project's FTP server and installed it.</a>
The compilation was insanely fast, I think it took less than 10
seconds to get it all built and installed.</p>

<p>This blog post is a small tutorial (and a bit of a review) for using
<code>moe</code> and is actually being written in it. I'm learning as I'm doing and
this is usually the best way to learn anything. The manual for <code>moe</code> is,
well it doesn't exist. When you first enter <code>moe</code> you are confronted
with a blank screen and a title bar at the top of it.</p>

<p>The title bar lists:</p>

<ul>
<li>the command key being used (if any)</li>
<li>the current mode of the text editor, either &quot;I&quot; for &quot;Insert&quot; or &quot;O&quot; for &quot;Overwrite&quot;</li>
<li>the name of the file being edited</li>
<li>whether it has been modified and needs to be save</li>
<li>which line you are on</li>
<li>which column you are at</li>
<li>the time (in 12-hour clock with no AM/PM indicator)</li>
<li>a helpful reminder telling you to press &quot;F1 for help&quot;</li>
</ul>

<p>In comparison, <code>nano</code> only tells you the version of GNU <code>nano</code> that you
are using and the name of the file. Nano also helpfully lists some
commands at the bottom of its screen.</p>

<p>The first command key I used was of course <code>&quot;F1&quot;</code>, the help key. Moe uses
the function keys for saving files, loading files, undo and redo, the
options menu, the buffers menu and some other things which I will get
into as I come across them.</p>

<p>The second command key that I used was <code>Ctrl+C</code>. If the current file
being edited is Modified, it will ask if you want to &quot;lose your
changes&quot;. If you press &quot;n&quot; meaning &quot;No I don't want to lose my changes&quot;,
it will save the file. I think this is better than asking if you want to
save your changes. The way the question is posed is different and
highlights the fact that you <em>will</em> lose whatever you were working on.</p>

<p>In terms of typing, <code>moe</code> hasn't gotten in the way at all. In fact, it
has provided two useful command keys; <code>Ctrl+Y</code> which kills/deletes a
whole line of text, and <code>Ctrl+B</code> which re-formats a paragraph by
wrapping it at a certain column (I think column 72). The re-formatting
is very useful when you're on a regular terminal. Right now I'm in the
shell that you get before running any desktop system. The screen can
only handle 80-character columns right now. You can set the column to
whatever you like in the Options menu (accessed by pressing <code>F10</code>).</p>

<p>Okay, I just pressed <code>F2</code> to save the file. It asked me for a new name
or location for the file, but luckily it already provides the same
name as before. So saving the changes is a matter of pressing <code>F2</code> and
then the Enter key. You can also save and exit <code>moe</code> by pressing <code>Ctrl+X</code>.
After I'm done typing here, I'll definitely be using <em>that</em>, heh.</p>

<p>To load a file, you press <code>F3</code>. As soon as you open more than one file,
they are loaded into separate <em>buffers</em> and then <code>moe</code> gives you access
to the <em>buffer menu</em>. You can access it by pressing <code>F11</code> and it lets
you switch between the different buffers by choosing from the menu or
pressing a number key. To get rid of the buffer, you press <code>Ctrl+C</code>.</p>

<p>So far <code>moe</code> is very easy to deal with, it all seems self-explanatory.</p>

<p>One thing to watch out for is the behaviour of whatever terminal you're
using. The GNOME Terminal wouldn't let me use the function keys properly
and the same was true of xterm. Another thing is the key bindings.
They're kinda like Emacs's key chords, though not all of them are like
that. There are four different prefixes for the key chords: &quot;<code>[</code>&quot;,
&quot;<code>O</code>&quot;, &quot;<code>Q</code>&quot;, &quot;<code>S</code>&quot;. The first prefix is the most commonly used one,
while the other three are used for special commands.</p>]]>
    </content>
</entry>

<entry>
    <title>Free Software Supporter #18 announces some recent GNU software releases</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/09/free-software-supporter-18-ann.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.53</id>

    <published>2009-09-12T02:59:25Z</published>
    <updated>2009-09-12T03:08:13Z</updated>

    <summary> Free Software Supporter is a newsletter run by the FSF (Free Software Foundation) and in it they have a section announcing a few software releases from the GNU project. However, they do not seem to provide any description of...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
    <category term="freesoftware" label="free software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="fsf" label="fsf" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gnu" label="gnu" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p><a href="http://www.fsf.org/free-software-supporter/">Free Software Supporter</a> is a newsletter run by
<a href="http://www.fsf.org/">the FSF (Free Software Foundation)</a> and in it they have a section
announcing a few software releases from <a href="http://www.gnu.org/">the GNU project</a>. However, they
do not seem to provide any description of the projects aside from
their name and version.</p>]]>
        <![CDATA[<p>I guess this is okay since Free Software Supporter readers may only be
interested in particular software packages and may already know what
they do. But for me, it's just a list of random names and numbers that
don't mean much at all.</p>

<p>Here's the list and a few brief sentences about them. Some of them
look useful and might help us programmers avoid re-inventing the
wheel!</p>

<p><a href="http://www.gnu.org/software/acct/">acct-6.5.1</a>, The GNU Accounting Utilities are used for recording
information about system usage by users. This would be useful for
system administrators because they can see a history of <em>past</em> usage by
user. <a href="http://www.gnu.org/software/acct/manual/html_node/Preface.html#Preface">The preface</a> to the manual is awesome awesome. It begins with
this line:</p>

<blockquote>
<p class="quoted">
Way back a long time ago, Thompson and Ritchie were sitting opposite one another at the commissary, sipping coffees and discussing their evolving behemoth.</p>

</blockquote>

<p><a href="http://www.gnu.org/software/ccscript/">ccscript-4.1.2, ccscript3-1.1.7</a>, GNU ccScript3 seems to be useful for
creating scripting languages to use with C++ applications. Their website says,</p>

<blockquote>
<p class="quoted">
GNU ccScript is a C++ class framework for creating a virtual machine execution system for use with and as a scripting/assembler language for state-transition driven realtime systems. The most common example of this is as the core of the scripting engine found in GNU Bayonne.</p>

</blockquote>

<p>I haven't ever seen this in action but it sounds a little interesting.</p>

<p><a href="http://www.gnu.org/software/coreutils/">coreutils-7.5</a>, GNU Core Utilities are the standard GNU/Linux
utilities. These are basically <code>cd</code>, <code>ls</code>, and other things like that.
Obviously very useful for everyone.</p>

<p>Here are some utilities that I haven't even heard about before:</p>

<ul>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/tac-invocation.html#tac-invocation">tac: Concatenate and write files in reverse</a></li>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/stat-invocation.html#stat-invocation">stat: Report file or file system status</a></li>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/nl-invocation.html#nl-invocation">nl: Number lines and write files</a></li>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/fmt-invocation.html#fmt-invocation">fmt: Reformat paragraph text</a>, more specifically, &quot;<code>fmt</code> fills and
joins lines to produce output lines of (at most) a given number of
characters (75 by default)&quot;. I usually use this type of function
within Emacs (<code>fill-paragraph</code>) but it's nice to know that I can
format whole files like this from the command-line.</li>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/pr-invocation.html#pr-invocation">pr: Paginate or columnate files for printing</a></li>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/ptx-invocation.html#ptx-invocation">ptx: Produce permuted indexes</a></li>
<li><a href="http://www.gnu.org/software/coreutils/manual/html_node/expand-invocation.html#expand-invocation">expand: Convert tabs to space</a>. This is possibly the most helpful
utility that I haven't heard of before! If someone's using tabs in
their C, Java or Python files, I'll have to run <code>expand
--initial --tabs=4</code> to change all tabs at the beginning of
the lines to 4 spaces.</li>
</ul>

<p><a href="http://www.gnu.org/software/freeipmi/">freeipmi-0.7.12</a>, GNU FreeIPMI is used for managing IPMI stuff. I have
no idea what that means, so here's the excerpt from their homepage
explaining it:</p>

<blockquote>
<p class="quoted">
The IPMI specification defines a set of interfaces for platform management and is implemented by a number vendors for system management. The features of IPMI that most users will be interested in are sensor monitoring, system event monitoring, power control, and serial-over-LAN (SOL).</p>

</blockquote>

<p>So I guess it's meant for managing large amounts of computers. Handy
for system administrators for sure.</p>

<p><a href="http://www.gnu.org/software/gengen/gengen.html">gengen-1.4</a>, GNU Gengen (it stands for GNU GENerator GENerator) is like
a template generator for C/C++. It's not like C++ templates or
meta-programming, I think it's more like Lisp's macros. The variable
names (the symbols of them if you will) can be substituted into a
template. This is somewhat like the C pre-processor macros but I think
it's a bit more powerful. I can't see myself using this though so I
can't explain its usefulness any more than that.
<a href="http://www.gnu.org/software/gengen/gengen.html#The-Problem">Read this section to see how Gengen could help you</a>.</p>

<p><a href="http://www.gnu.org/software/gsl/">gsl-1.13</a>, the GNU Scientific Library contains a collection of
science-related calculation functions such as those for dealing with
polynomials, vectors, matrices, sorting, etc. It is easy to see how
this could of use to a large number of developers.</p>

<p><a href="http://www.gnu.org/software/libsigsegv/">libsigsegv-2.7</a>, GNU libsigsegv is a &quot;library for handling page faults
in user mode. A page fault occurs when a program tries to access to a
region of memory that is currently not available&quot;. This library is
useful for developers, in particular for systems developers.</p>

<p><a href="http://www.gnu.org/software/libunistring/">libunistring-0.9.1.1</a>, GNU libunistring is a C library for handling
Unicode text and is useful for developers dealing with Unicode text.
Note that this library isn't for providing translations, that's what
<a href="http://www.gnu.org/software/gettext/">GNU gettext</a> is for.</p>

<p><a href="http://www.gnu.org/software/moe/moe.html">moe-1.3</a>, GNU Moe is a text editor with a file size of less than 500KB.
It has a lot cool stuff in it even though it's so small. According to
the README, <em>there is no learning curve</em>. Some experience with a text
editor and a look at the README and apparently you're set to use <code>moe</code>.
I'm going to download it and I'll see if it's a good replacement for
<code>nano</code> and <code>zile</code>.</p>

<p><a href="http://www.gnu.org/software/mtools/manual/mtools.html">mtools-4.0.11</a>, Mtools is utility tool collection for dealing with the
MS-DOS filesystem. It has the basic tools needed to make use of the
file system, such as a list directory utility, and another one for
formatting a disk. This is useful for archival purposes or when
dealing with legacy machines. I'm not sure recent versions of Windows
use the MS-DOS filesystem for much ;-)</p>

<p><a href="http://www.gnu.org/software/auctex/reftex.html">reftex-4.34</a>, RefTeX is a package for automating labeling, referencing
and citing other articles. It is used with LaTeX and BibTeX. I might
have to check this out the next time I'm writing a paper for
college/university.</p>

<p><a href="http://www.gnu.org/software/sipwitch/">sipwitch-0.5.7</a>, GNU SIP Witch is a SIP server. Basically, &quot;GNU SIP
Witch can be used to build secure and intercept-free telephone
systems&quot;. Again, this is useful for system administrators to know
about, but isn't very interesting for me.</p>

<p><a href="http://www.gnu.org/software/vc-dwim/">vc-dwim-1.2</a>, <code>vc-dwim</code> is very useful for programmers because it keeps
track of discrepencies between version control and ChangeLogs. The
coolest thing is that it can commit changes to files that have been
mentioned in the ChangeLog, the unmentioned files won't be committed.
This makes it very easy to keep the version control commits and
ChangeLog synchronized. I know I've forgotten to update the ChangeLog
many many times.</p>

<p><a href="http://www.gnu.org/software/xboard/">xboard-4.4.0</a>, GNU XBoard is a GUI for chess. It lets you use various
chess engines to play. It handles a few different variations of the
game too. I may check it out, I've been using eboard for a bit now.</p>

<p><a href="http://www.gnu.org/software/zile/">zile-2.3.10</a>, GNU Zile (which stands for Zile is Lossy Emacs) is a
small text editor modeled on Emacs. It provides the same key-bindings
and some useful commands. I've been using it as a replacement for <code>nano</code>
and <code>vi</code>. The size of it is less than 500KB too.</p>]]>
    </content>
</entry>

<entry>
    <title>PLATO and the TUTOR programming language manual</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/09/plato-and-the-tutor-programmin.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.52</id>

    <published>2009-09-02T20:18:49Z</published>
    <updated>2009-09-02T20:23:49Z</updated>

    <summary>I was reading a bit about PLATO, a computer system for computer-aided instruction, and it is astonishingly old. It was around in the 70s, the 80s, etc. The language originally used for creating lessons and tutorials was called TUTOR. I&apos;ve...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[I was reading a bit about <a href="http://en.wikipedia.org/wiki/PLATO_%28computer_system%29">PLATO</a>, a computer system for computer-aided instruction, and it is astonishingly old. It was around in the 70s, the 80s, etc. The language originally used for creating lessons and tutorials was called <a href="http://en.wikipedia.org/wiki/TUTOR_%28programming_language%29">TUTOR</a>. I've been extremely curious about the language since I first read about it on the weekend and I'm glad to say that I've found the manual.<br /><br /><a href="http://www.eric.ed.gov/ERICWebPortal/custom/portlets/recordDetails/detailmini.jsp?_nfpb=true&amp;_&amp;ERICExtSearch_SearchValue_0=ED050583&amp;ERICExtSearch_SearchType_0=no&amp;accno=ED050583">It can be found here</a>.<br /><br /><a href="http://www.eric.ed.gov/ERICWebPortal/custom/portlets/recordDetails/detailmini.jsp?_nfpb=true&amp;_&amp;ERICExtSearch_SearchValue_0=ED050583&amp;ERICExtSearch_SearchType_0=no&amp;accno=ED050583"><font style="font-size: 0.8em;">Here is a mirror hosted on this web server just in case.</font></a><br /><br />I bet there are a few gems in this manual. History is awesome ;-)<br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Java Applets and Wikipedia</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/09/java-applets-and-wikipedia.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.51</id>

    <published>2009-09-02T19:58:02Z</published>
    <updated>2009-09-02T20:06:32Z</updated>

    <summary>There is a proposal to allow the inclusion of Java applets into Wikipedia to increase interactivity. What this says to me is that the Web is not enough and that it is mainly a document system. Instead, the Wikipedians should...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[<a href="http://strategy.wikimedia.org/wiki/Proposal:Java_applet_support">There is a proposal to allow the inclusion of Java applets into Wikipedia to increase interactivity. </a><i>What this says to me is that the Web is not enough and that it is mainly a document system. </i>Instead, the Wikipedians should build a proper desktop application for viewing Wikipedia articles and then separate it from the Web and HTML. This would allow them to display the information in a variety of forms and fix the flaws of the Web.<br /><br />The first thing I would add is a way of linking to specific paragraphs or sentences. The second thing I would add is a proper discussion board system and possibly add an IRC chat component. For the chat component, I would also make it easy to paste snippets of the conversations into the discussion board. This is useful because you may have discussed an article with someone and then made changes to it, but everyone else would be unaware of your discussion unless they checked the discussion board and the discussion may have provided a rationale for why you made the change.<br /><br /><i>Java applets and more interactivity would be a fine addition to Wikipedia, but this is solving the wrong problem.</i><br />]]>
        
    </content>
</entry>

<entry>
    <title>Web Junk</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/08/web-junk.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.50</id>

    <published>2009-08-24T22:29:15Z</published>
    <updated>2009-08-24T22:31:27Z</updated>

    <summary> INS and DEL elements re-discovered and used for version control. HTML document&apos;s version history kept within itself. HTML pages as containing structure and storing their contents in separate files. Easier for everyone to deal with and splits up your...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Python" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p><code>INS</code> and <code>DEL</code> elements re-discovered and used for version control. HTML document's version
history kept within itself.</p>
<p>HTML pages as containing structure and storing their contents in separate files. Easier for everyone to deal with and splits up your page into logical pieces.</p>]]>
        <![CDATA[<h4>HTML Version Control</h4>

<p><em>Summary: <code>INS</code> and <code>DEL</code> elements re-discovered and used for version control. HTML document's version
history kept within itself.</em></p>

<p>I re-discovered the <code>INS</code> and <code>DEL</code> elements in the <a href="http://www.w3.org/TR/html401/">HTML 4.01 specification</a> last week and realized that
it could be used for version control of an HTML document. The document itself could be a history of
all the changes made to it. The key piece that makes this possible is the <code>datetime</code> attribute of the
elements. If it is unspecified, then you don't know when the change was made which means <em>all</em> changes
are blended together which makes this method of version control impossible. The W3C did the elements
a great disservice by supplying examples in the specification that lack the <code>datetime</code> attribute.</p>

<p><strong>So I hacked on some code that uses jQuery and JavaScript to go through a versionned HTML document
and it applies changes from various days.</strong> You can <a href="http://www.neverfriday.com/html-version-control/web-vc.html">see it in action here</a>. You select a day and then
click &quot;Apply Changes Up Until This Date&quot; to cycle through all of the changes made up until that
date. Any text highlighted in red has not yet been deleted, it will be deleted at a future date. Any
text in green was inserted as part of a change. Click &quot;Apply All Changes&quot; to have it cycle through
all the versions and apply their changes. This will turn the HTML document into the <em>latest</em> version.</p>

<p>This was all a hack and not very well explained on the page itself. I'm starting to code a PHP
script that will generate the HTML document in various dates to make it much easier to see the
differences.</p>

<p>I was excited about this because it allows version control software to become aware of the structure
of HTML. Instead of the software having to define new methods and data structures to save changes
made to an HTML document, they can use the HTML document itself. For example, SVN and GIT store
meta-data about the files in separate folders like <code>.svn</code> and <code>.git</code>. Using the <code>INS</code> and <code>DEL</code> elements,
you can leave all the changes in the document; the meta-data is already in the document. <strong>The
advantage is that you can move around the HTML document and it will always contain its own history
of changes.</strong> You could have this by default and you wouldn't have to worry about saving files like
this &quot;my_document.html.version2&quot; or &quot;my_document.html.version3&quot;.</p>

<p><strong>The trouble with HTML is that you need to wear a fucking biohazard suit to deal with it.</strong> You should
and cannot be touching it directly, there are too many things that can go wrong. It's the same thing
with XML. If you are writing it by hand, something <em>will</em> inevitably go wrong. You'll forget to close
a tag, or one of the attribute values will be incorrect, or you'll just get confused by it all. We
no longer use regular expressions to parse HTML and XML, we instead use proper parsers.
Unfortunately we haven't gotten to that point with regular web design, the visual editors usually
produce awful code.</p>

<p><strong>I'll be creating a biohazard suit to deal with editing HTML that will have integrated version
control</strong>. This is a spare time project, just like everything else I work on so don't expect too much
too soon. Dealing with the versions and grouping the changes won't be difficult, the hard part is
the user-facing portion where the versions will be creating by editing the document. I'm thinking of
using an already existing HTML/rich-text editor like TinyMCE or whatever it's called.</p>


<h4>Assembling An HTML Page Out Of Components</h4>

<p><em>Summary: HTML pages as containing structure and storing their contents in separate files. Easier for
everyone to deal with and splits up your page into logical pieces.</em></p>

<p>I hacked on another web junk project last night that separates content from structure. Current
templating systems all will separate content/structure from the presentation layer but they don't go
the one step further to make it all worthwhile. When I'm working on a website, I have portions of it
where particular content goes in. I want to write out this content as plain-text, maybe with a few
HTML tags like italics and bold inserted, and then have it inserted into a particular part of a
webpage.</p>

<p>This isn't too hard, templating systems already do the find/replace stuff. However, I wanted the
plain-text to be processed and HTML tags to be added to it automatically. Basically markup without
me doing any markup. For example, I have a file whose content is used as a list. Every paragraph in
the file is a list item in an unordered list. In another file, every paragraph should fit into an
HTML paragraph tag.</p>

<p><strong>The advantage for me is that if I have to collaborate with someone, I can send them the plain-text
file and they can edit it without learning some fancy markup language or HTML.</strong> All they need to do
is be able to write out sentences and paragraphs. Then I just drop the file back in and the proper
content is generated. This is much easier than going through the file manually, looking for content
differences and adding HTML tags.</p>

<p>This requires a biohazard suit for generating the HTML and for processing the plain-text content.
The classes for processing the plain-text content are finite state machines: they read a line, check
for some conditions and then do something. I'll post the code soon.</p>

<p>The hard part isn't inserting the content into the structure, it's finding out how much you want to
split up the content. One section could be split into many different sub-sections and each
sub-section could contain several paragraphs. Traditional CMSes (Content Management Systems) work on
a page-based basis. They'll let you edit <em>all</em> of the content for the main part of the page, but they
won't let you edit or split up that content into sub-sections.</p>

<p>Anyway, I'll have to write up some documentation and a tutorial on exactly how this all works. It'll
probably be released under the GNU GPL version 3 license.</p>
]]>
    </content>
</entry>

<entry>
    <title>What The Macintosh Took Away</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/08/what-the-macintosh-took-away.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.49</id>

    <published>2009-08-13T21:46:08Z</published>
    <updated>2009-08-14T17:57:04Z</updated>

    <summary><![CDATA[ Update: I found a copy of the essay here but it appears to be a reprint with a different title, &ldquo;Time To Liberate The Web&rdquo;. Same content though, so it doesn't matter. I found an essay by Ted Nelson...]]></summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
    <category term="computers" label="computers" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="design" label="design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="writing" label="writing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[<!-- title: What The Macintosh Took Away -->

<p style="font-style: italic;">Update: I found a copy of the essay <a href="http://people.artcenter.edu/~vanallen/web_techniques/tednelson_liberate.htm" title="Inter@ctive Week: Time To Liberate The Web">here</a> but it appears to be a reprint with a different title, &ldquo;Time To Liberate The Web&rdquo;. Same content though, so it doesn't matter.</p>

<p>I found an essay by <a href="http://en.wikipedia.org/wiki/Ted_Nelson" title="About Ted Nelson">Ted Nelson</a> titled &ldquo;Way Out Of The Box&rdquo;, and it's about limitations imposed by technical-minded people on everyone else. It's about the assumptions made when programs and computers are designed.</p>

<p>Here is a particularly good passage that tells us what we sacrifice when we force users to become distinct from programmers,</p>

<blockquote><p>Suppose they gave you MTV, and in return took away your right to vote? Would you care? Some of us would. That's how I think of today's computer world, beginning with the Macintosh. The  Macintosh gave us Fonts,  pretty fonts to play  with, and graphic arts tools  that previously were out  of reach, except in  the most high-budget realms of advertising and coffeetable book production. Those fonts and graphic arts tools were a great gift.</p>

  <p><em>But nobody seems to have noticed what the Macintosh took away.</em></p>

  <p>It took away THE RIGHT TO PROGRAM.</p>

  <p><em>If you bought  an Apple II, you could begin  programming it right out of the  box. I have friends who bought  the Apple II without knowing  what programming was, and became professional programmers almost overnight. The system was clean and simple and allowed you to do graphics.</em></p>

  <p>But the Macintosh (and now the Windows PC) are another story. And the story is simple: PROGRAMMING IS ONLY FOR OFFICIAL REGISTERED &ldquo;DEVELOPERS&rdquo;.</p></blockquote>

<p>(Emphasis mine)</p>
]]>
        
    </content>
</entry>

<entry>
    <title>EventCal style update</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/08/eventcal-style-update.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.48</id>

    <published>2009-08-07T03:19:55Z</published>
    <updated>2009-08-07T03:30:27Z</updated>

    <summary> So I was studying my marketing textbook and I realized that Free Software has an awful reputation because of bad marketing. The software is, for the most part, technically sound, however the image of it is awful. This then...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="design" label="design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="eventcal" label="eventcal" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p>So I was studying my marketing textbook and I realized that Free Software has an awful reputation because of bad marketing. The software is, for the most part, technically sound, however the image of it is awful. This then reminded me of <a href="http://neverfriday.com/eventcal/">EventCal</a>, the Python HTML calendar generator that I wrote a few years ago. I still get emails about it once in a while, even though I'm not actively maintaining.</p>

<p>So instead of studying, I created a quick checklist on what a Free Software website should have in order to be considered helpful by users. I won't post that list here just yet, because I want to write up a few other checklists and notes on marketing.</p>]]>
        <![CDATA[<p>Here are the results of the change:</p>

<p><strong>Old</strong></p><p><img src="/images/blog/eventcal_old.png" /></p>

<p><strong>New</strong></p><p><img src="/images/blog/eventcal_new.png" /></p>

<p>About the marketing...it just bugs me that I can only point to programmer tools as examples of great work when talking about Free Software. Sure Firefox is fairly impressive, but what about The GIMP and OpenOffice and Inkscape? Not so impressive. Some of that has to do with the technical stuff, but most of it has to do with the lack of good marketing. Not enough tutorials, documentation, contact/support/contributor information, etc. etc.</p>]]>
    </content>
</entry>

<entry>
    <title>Beginner Infographics with Free Software</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/08/beginner-infographics-with-fre.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.47</id>

    <published>2009-08-05T17:47:50Z</published>
    <updated>2009-08-05T18:07:52Z</updated>

    <summary> I&apos;ve become interested in infographics, those fancy diagrams and charts and illustrations/visualizations of data that make them stick in your mind more easily. Why settle for an ugly chart when you can just adjust the fonts and colours a...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
    <category term="design" label="design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="freesoftware" label="free software" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p>I've become interested in infographics, those fancy diagrams and charts and illustrations/visualizations of data that make them stick in your mind more easily. Why settle for an ugly chart when you can just adjust the fonts and colours a bit and get something sweeter looking.</p>]]>
        <![CDATA[<p>Here's the result of taking <a href="http://trinifar.wordpress.com/2007/02/21/creating-graphs-with-inkscape/" title="creating graphs with Inkscape">a bar graph</a> from <a href="http://www.openoffice.org/product/draw.html" title="DRAW: 
The powerful graphics package">OpenOffice Draw</a>, exporting it to an <acronym title="Scalable Vector Graphics">SVG</acronym> file and then importing it into <a href="http://www.inkscape.org/" title="Inkscape: Draw Freely">Inkscape</a>.</p>

<p><img src="http://www.neverfriday.com/images/blog/us-pop-chart.png" alt="U.S. Population Growth from 1950 to 2050"/></p>

<p>The font I used was <a href="http://en.wikipedia.org/wiki/Georgia_%28typeface%29" title="Georgia (typeface)">Georgia</a> and I used the green and grays from the Tango desktop palette. The chart was originally created in OpenOffice Draw and I'm impressed by how much information it included! It included all of the lines and all of the text. In the future, it might be wise to modify the chart as much as possible in OpenOffice Draw before resorting to Inkscape.</p>

<p>You can <a href="http://www.neverfriday.com/images/blog/us-pop-chart.svg" title="SVG version of U.S. Population Growth bar graph">download the SVG file here</a>.</p>]]>
    </content>
</entry>

<entry>
    <title>Relative Timing With Org-Mode</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/07/relative-timing-with-orgmode.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.46</id>

    <published>2009-07-28T21:22:07Z</published>
    <updated>2009-07-28T21:24:58Z</updated>

    <summary> I hve been re-arranging my TODO lists using Emacs&apos;s Org-Mode and when I realized that it could calculate the exact hours taken for a bunch of tasks, I felt I should explore the rest of the Org-Mode manual and...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Emacs" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Writing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="emacs" label="emacs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="orgmode" label="org-mode" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="writing" label="writing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <!-- Page published by Emacs Muse begins here -->
<!-- body -->
<p>I hve been re-arranging my TODO lists using Emacs's <a href="http://orgmode.org/">Org-Mode</a> and when I realized that it could calculate the exact hours taken for a bunch of tasks, I felt I should explore the rest of the Org-Mode manual and see what else I had been missing out on.</p>

<p>Org-Mode allows you to use <a href="http://orgmode.org/manual/Relative-timer.html">relative timers</a> which, it says, are useful for recording notes during a meeting or video viewing. I did not understand exactly how to use the relative timers, but it looks like they are like timestamps. Here's a brief run-down and example on how to use them.</p>]]>
        <![CDATA[<!-- extended -->
<p>Say you are watching a conference presentation on your favourite programming language, and you want to take notes. First, you would open up a buffer that is using <code>org-mode</code> and find the place where you want to put the notes. Then, you must start a relative timer by pressing <code>C-c C-x .</code> which starts the timer and inserts the current time (which is of course <code>00:00:00</code>). This timer will continue to run even while you are in other buffers.</p>

<p>When an interesting point is made, or whenever you feel the need to record the time, you press <code>C-c C-x .</code> again. Then you just make your notes as quickly as you can!</p>

<p>Org-Mode also lets you pause the relative timer with <code>C-c C-x ,</code> though I am not sure when you would want to use this. Maybe if the presenter is taking a break or if you were taking a break when watching a video?</p>

<p>Finally, to stop the timer, you press <code>C-u C-c C-x ,</code> (which is basically just adding <a href="http://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html#index-prefix-arguments-132">a prefix argument</a>).</p>

<p>Here is a sample Org-Mode relative timer file:</p>

<pre class="example">
* <b>My Awesome Language (presentation)</b>
0:00:00 Start of presentation
0:05:33 5 minutes in and we hit some interesting points
I don't know, Ruby as your Awesome Language? Ugh.
0:06:04 Oh good, he mentioned Python! But where's Lisp?!
0:06:26 jerk skipped over the Lisp slide...
I don't get why people <b>*always*</b> skip over Lisp :-(
0:07:35 Well that was a short presentation (thankfully)
</pre>

<p>That is the trouble with Emacs and its modes. There are so many useful functions contained that it is hard to use them all or to even know about them unless you read through the manual.</p>
<!-- Page published by Emacs Muse ends here -->
]]>
    </content>
</entry>

<entry>
    <title>Composable Regular Expressions and Fields</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/07/composable-regular-expressions.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.45</id>

    <published>2009-07-23T21:00:06Z</published>
    <updated>2009-07-23T21:06:19Z</updated>

    <summary> Martin Fowler wrote a brief article about composing regular expressions in order to make it easier to deal with individual &quot;tokens&quot; and to give them structure....</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Python" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Scheme" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="regularexpressions" label="regular expressions" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="scheme" label="scheme" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="scripting" label="scripting" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p><a href="http://martinfowler.com/bliki/ComposedRegex.html" title="ComposedRegex">Martin Fowler wrote a brief     article about composing regular expressions</a> in order to make it easier to deal with individual   "tokens" and to give them structure.</p>]]>
        <![CDATA[<p>As noted by a reddit commenter, string constants can be a bit   unwieldly to deal with and will break. <a href="http://www.scsh.net/docu/html/man-Z-H-7.html#node_chap_6" title="Pattern-matching strings with regular expressions, chapter 6 of the Scsh Reference Manual">Scheme Shell solves this problem with an s-expression-based structure syntax     of regular expressions called     SRE.</a> You can click that link to read more about it, but what I'll do here is convert Fowler's example to some SREs to show how much more useful structured regular expressions are when you use them in a Lisp-like language.</p>
<p>His structured pattern in the Java language looks like this:</p>
<pre>
const string scoreKeyword = @"^score\s+";
const string numberOfPoints = @"(\d+)";
const string forKeyword = @"\s+for\s+";
const string numberOfNights = @"(\d+)";
const string nightsAtKeyword = @"\s+nights?\s+at\s+";
const string hotelName = @"(.*)";
const string pattern =  scoreKeyword + numberOfPoints +
  forKeyword + numberOfNights + nightsAtKeyword + hotelName;
</pre>
<p>He also has an alternative method that joins strings with   whitespace:</p>
<pre>
private String composePattern(params String[] arg) {
  return "^" + String.Join(@"\s+", arg);
}
const string numberOfPoints = @"(\d+)";
const string numberOfNights = @"(\d+)";
const string hotelName = @"(.*)";
const string pattern =  composePattern("score", numberOfPoints, 
  "for", numberOfNights, "nights?", "at", hotelName);
</pre>
<p>Here is what that looks like in Scheme Shell:</p>
<pre>
(define number-of-points (rx (submatch (+ digit))))
(define number-of-nights (rx (submatch (+ digit))))
(define hotel-name (rx (submatch (* any))))
(define s+ (rx (+ whitespace)))
(define pattern (rx "score" ,s+ ,@number-of-points ,s+ "for" ,s+ ,@number-of-nights ,s+ "nights?" ,s+ "at" ,s+ ,@hotel-name))
</pre>
<p>Now that I've written that out, it looks cumbersome. It wasn't a huge pain to type out, but all of that whitespace matching looks redundant and I can see why Fowler wrote up the   <code>composePattern</code> function.</p>
<p>Let's try treating this problem differently by assuming that the important data is separated by whitespace, and let's call the stuff that's in between the whitespace a "field". By doing this, we no longer have to use regular expressions. We can now use a tool like AWK or something else to split each string into some fields and then look   at each field and turn it into the appropriate data type.</p>
<p>Here is my Python solution:</p>
<pre>
# fields:    0    1   2  3   4     5   6     7       8
example = "score 400 for 2 nights at Minas Tirith Airport"
fields = example.split() # Python assumes whitespace as the delimiter
numberOfPoints = int(fields[1]) # 400
numberOfNights = int(fields[3]) # 2
hotelName = ' '.join(fields[6:])   # 'Minas Tirith Airport'
</pre>
<p>There might be a slightly better solution that treats the hotel name differently, but it doesn't really matter. The point is that this is no longer a problem that requires the use and composition of   regular expressions.</p>]]>
    </content>
</entry>

<entry>
    <title>TechCrunch, FasterWeb, Lack of Proper Journalism</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/07/techcrunch-fasterweb-lack-of-p.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.44</id>

    <published>2009-07-19T17:50:03Z</published>
    <updated>2009-07-19T17:55:50Z</updated>

    <summary><![CDATA[ Warning: I'm not editing this or re-reading it after writing it. This is a rant though I hope it contains something useful in it. TechCrunch, a popular tech. news website, posted an article by MG Siegler on how &quot;FasterWeb...]]></summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Writing" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p><em>Warning: I'm not editing this or re-reading it after writing it. This is a rant though I hope it contains something
useful in it.</em></p>

<p>TechCrunch, a popular tech. news website, posted an article by MG Siegler on how
<a href="http://www.techcrunch.com/2009/07/19/fasterweb-aims-to-make-the-web-up-to-ten-times-faster-and-gets-money-to-do-so/">&quot;FasterWeb Wants To Make The Entire Web Up to Ten Times Faster In 2010&quot;</a>. FasterWeb is a technology startup that is
funded by a venture capital firm called YL Ventures. The article is brief and is not investigative whatsoever, there is
hardly meat on the bones of it.</p>]]>
        <![CDATA[<p>This is the trouble with tech. news. All of the news sources are shit. They are complete and utter shit and even when
they contain a reader-worthy gem, they inevitably retreat to their usual shit writing. The majority of tech news sites
are tabloids and are made up of gossip columns idolizing the celebrities of the next tech. fad or the current fad of Web
2.0 and &quot;cloud computing&quot;. Many tech. news articles read as press releases and this latest article on TechCrunch is the
perfect example of this. Even the journals that deal with serious subjects, such as business enterprise or academic
software and ideas, are filled with journalists who are clueless or editors who are equally clueless and lack any
standards whatsoever.</p>

<p>Myself and many others can hardly find journals and magazines and news sources worth reading. All that is left are
individual articles. We are forced to pick and choose when a respectable news source would have hired a decent editor to
do that for us. Alex Payne stated in an article published on 3 March 2009, titled <a href="http://al3x.net/2009/03/03/towards-better-technology-journalism.html">&quot;Towards Better Technology Journalism&quot;</a>
that the problem is that developers are not talented at writing and that journalists typically are not experts in the
domain,</p>

<blockquote>
<p class="quoted">
How can journalists without any engineering expertise possibly hope to keep up? Simply tapping expert sources isn't enough. A reporter can't simply string together quotes from PhDs and CTOs and end up with something cogent, accurate, and informative to a non-technical reader.</p>

</blockquote>

<p>Payne pointed out flaws in two examples and here I will do the same for this recent example of tech. journalism failure.</p>

<p>In this specific instance, the Siegler clearly has little domain expertise. This can be seen when he writes,</p>

<blockquote>
<p class="quoted">
As the web matures, it's also getting more complex. Yet much of it is still fundamentally based on things like HTML which are 30 years old.</p>

</blockquote>

<p>The documents of the Web are based on HTML, the underlying infrastructure is based on HTTP. HTML is not 30 years old, it
is just shy of 20 years old.<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup> This may seem like minor details, but they are important to this article since it
discusses improving the performance of the Web.</p>

<blockquote>
<p class="quoted">
A new startup, FasterWeb, aims to bring these old technologies up to speed -- as it were -- making the web faster, by optimizing the old standards for doing new things.</p>

</blockquote>

<p>By using the words &quot;new&quot; and &quot;old&quot;, Siegler is positioning new as positive and old as negative, thus positioning
FasterWeb as doing something favourable when in fact they are doing nothing or at least not showing their results,</p>

<blockquote>
<p class="quoted">
One VC firm, YL Ventures, believes that it can. And they've seen it in action, so <em>we'll just have to take their word for it, for now.</em></p>
<p class="quoted">...</p>
<p class="quoted">So how does FasterWeb claim to work? <em>Leitersdorf wouldn't go into the details</em>, saying that's the company's secret, but he would say that it uses 45 different techniques to optimize the web.</p>

</blockquote>

<p>This sounds like blatant PR material, aimed at selling the company and their product (which may not exist) to venture
capitalists and other investors. Why is Siegler talking to Leitersdorf at all? Leitersdorf is a managing partner at YL
Ventures, is a financial person, not a technical person, not a hardware engineer, not a software developer: he does not
know what he is talking about when it comes to technology.</p>

<p><strong>This is where the methods of investigative journalism should be used.</strong> Siegler should hunt down the technical people
working at FasterWeb and conduct anonymous interviews. He should ask about how exactly it works, or ask for more hints
and clues about how it works at particular points. TechCrunch has enough money to wine and dine people and to bribe them
into giving answers about a possibly important technological development.<sup><a class="footref" name="fnr.2" href="#fn.2">2</a></sup></p>

<p>Failing that, the article could appear somewhat neutral and more informative with the author quoting several more
sources. It would not be a good solution, but it would bring this article up to the standards of newspaper technology
articles.</p>

<p>Next, Siegler discusses the business model,</p>

<blockquote>
<p class="quoted">
The business model for the project seems sound as well. FasterWeb has a multi-pronged approach depending on the situation of the website or ISP. That means it can either charge a one-time fee, or do a revenue sharing model. "What we found out as a VC fund going into this business is that by selling this to websites, it's going to increase their revenues. And <em>these sites are willing to spend 20-30% of their increase in revenues on our solution</em>," Leitersdorf says.</p>

</blockquote>

<p>Why do we care about their multi-pronged approach if their product has not launched and if they do not wish to talk
about it at all? Furthermore, the numbers given by Leitersdorf should be called into question by Siegler. It is too bad
that Siegler seems to think it his job to simply transcribe what Leitersdorf is saying and then to approve of it or not
express his own opinion about it.</p>

<blockquote>
<p class="quoted">
He also notes that in their research, YL only found two companies even come close to doing what these guys are doing. <em>But Leitersdorf declined to name them.</em></p>

</blockquote>

<p>Siegler should conduct his own research to find out the names of those two companies and contact them for interviews, or
he should try and get information from an anonymous source within the company.</p>

<p>If the subject of the article is boring, then it may not even be worth reporting on. If it must be reported, the article
should contain less information and be buried as quickly as possible. Make it easier for the reader to ignore the
article and to move on to more interesting articles on your blog.</p>

<p>There are other examples of shit articles in other technology news sources, but this one pissed me off the most. For all
of TechCrunch's desires to become a proper business/technology news source, they continue to publish shit articles with
little useful information and articles worshipping the shallowness of Silicon Valley.</p>

<hr>
<p class="footnote"><a class="footnum" name="fn.1" href="#fnr.1">1.</a> The first draft specification was published in 1991 and the first web browser, created by Tim Berners-Lee was
WorldWideWeb which was released on 26 February 1991. The Internet, and its predecessor ARPANet, <em>are</em> much older than
the Web by more than a decade. The first ARPANet message was sent on 29 October 1969.</p>

<p class="footnote"><a class="footnum" name="fn.2" href="#fnr.2">2.</a> If it isn't important, then why is this company reported on at all?</p>
]]>
    </content>
</entry>

<entry>
    <title>Quick Notes on Annotations</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/06/quick-notes-on-annotations.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.43</id>

    <published>2009-06-13T04:23:40Z</published>
    <updated>2009-06-13T04:25:28Z</updated>

    <summary> I just stumbled upon the Online Journalism Blog. My entry point was a post on how to make money from [online] content. An interesting topic because it appears that much of the money is made indirectly through advertising, events,...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Emacs" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Writing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="emacs" label="emacs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="writing" label="writing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p>I just stumbled upon the <a href="http://onlinejournalismblog.com/" title="Online Journalism Blog">Online Journalism Blog</a>. My entry point was a post on <a href="http://onlinejournalismblog.com/2009/06/09/making-money-from-content-online-presentation/" title="Online Journalism Blog: Making money from content online - presentation">how to make money from [online] content</a>. An interesting topic because it appears that much of the money is made indirectly through advertising, events, etc. What was more interesting, however, was a post on the the death of the <a href="http://onlinejournalismblog.com/2009/06/12/interactive-presentation-tool-flowgram-to-close/" title="Online Journalism Blog: Interactive presentation tool Flowgram to close (some suggested alternatives)">interactive presentation tool Flowgram</a>.</p>]]>
        <![CDATA[<p>With Flowgram, you could <a href="http://onlinejournalismblog.com/2009/06/12/interactive-presentation-tool-flowgram-to-close/" title="Online Journalism Blog: Interactive presentation tool Flowgram to close (some suggested alternatives)">record notes and audio narration on top of webpages and other material</a>. In other words, overlay annotations could be added to webpages. If you don't understand why annotations are useful, you only need to look at references and foot/end-notes. They provide extra detail associated with some piece of content. They let you overcome the restrictions of paper. This has <a href="http://onlinejournalismblog.com/2009/06/12/interactive-presentation-tool-flowgram-to-close/" title="Online Journalism Blog: Interactive presentation tool Flowgram to close (some suggested alternatives)">obvious applications for journalism (slideshows, tutorials, blogging, training etc.)</a> The article lists a few alternatives (Diigo looked like a good tool) which made me reflect on my own recent research and writing.</p>
<p>My writing process for the latest blog post (which I'm still writing, it isn't coherent yet) is basically:
  <ol>
    <li>Research and find articles about what I'm thinking about</li>
    <li>Dump them into a plain-text form on my computer</li>
    <li>Insert parts of those articles into a new file</li>
    <li>Write paragraphs around those parts and form new ideas</li>
  </ol>
</p>
<p>I dump all of the useful articles into a plain-text format on my computer so that I may refer to them when offline. I'm only using the Emacs text editor for this and it's powerful enough. <a href="#" title="Closer to the Past's Future (unfinished article by Rudolf Olah)">It seems a good start</a>, and feels as if writing comes more easily this way.</p>
<p>This leads me to wonder, <em>why do Web-based annotation tools feel so limited? Is it because they cannot link to things you have on your own computer or because they can't easily be dumped into new articles, essays, etc.?</em></p>
]]>
    </content>
</entry>

<entry>
    <title>Trying out Compass, a CSS Framework</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/05/trying-out-compass-a-css-frame.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.42</id>

    <published>2009-05-25T18:32:43Z</published>
    <updated>2009-05-25T18:36:07Z</updated>

    <summary> A week or so ago I decided to finally sit down and try out the Compass CSS framework. When I first looked at it, I was dismayed to find that it required Yet Another Language to learn, but then...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="compass" label="compass" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="design" label="design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[ <p>A week or so ago I decided to finally sit down and try out the <a href="http://wiki.github.com/chriseppstein/compass" title="Compass is a real stylesheet framework, not a collection of classes.">Compass</a> CSS framework. When I first looked at it, I was dismayed to find that it required Yet Another Language to learn, but then I quickly saw its advantages when I started using it.</p>]]>
        <![CDATA[<p>The Compass CSS framework aims to be a real framework that does some heavy-lifting to let a web designer focus on CSS. It compiles a language called SASS into CSS and uses modules to allow integration with other "plain" grid-based CSS frameworks such as <a href="http://developer.yahoo.com/yui/grids/" title="Yahoo! User Interface Library: Grids CSS">YUI Grids</a>, <a href="http://www.blueprintcss.org/" title="Blueprint: A CSS Framework | Spend your time innovating, not replicating">Blueprint</a>, and <a href="http://960.gs/">960 Grid System</a>.</p>

<!-- why use SASS -->

<p>The SASS language is indentation-based and is similar to <a href="http://www.yaml.org/" title="YAML Ain't Markup Language">YAML</a>. When Compass is run, it generates CSS files from the SASS files. This lets SASS provide all sorts of nifty things, such as inheritence, mixins, functions and variables. Inheritence and mixins are important because you can define a general border style, such as a left border that is solid thin and black, and then apply it to whatever CSS selectors you like. Then when you make a change to the border style, you only have to make the change once instead of finding/replacing the styles in all the selectors.</p>

<p>When trying to learn Compass, I decided to convert an old stylesheet to SASS. <strong>I wrote less than 100 lines of SASS to generate over 400 lines of CSS</strong>. On top of that, I used variables for different colours and added/subtracted to those colour values to generate new colours. Instead of finding/replacing and manually calculated, SASS took care of both of those things.</p>

<p>SASS functions let you calculate things based on the input that you give it. Just like functions in any other programming language. SASS mixins let you combine various styles under a CSS selctor.</p>

<p>An example of the SASS syntax:</p>

<pre>
// example of a variable
!titleColor = #a3a

//example of a mixin/function
=minSize(!a)
  :font-size = (!a + 10) "px"

// inherited css selectors
a
  color: blue
  &:hover
    :color black
  &:visited
    :color purple

// more inheritence
body
  #header
    // color variable
    :background-color = !titleColor
    #blog-title
      // mixin/function call
      +minSize(22)
    #description
      +minSize(8)
      :font-family sans-serif
  #content
    +minSize(9)
    :background-color = !titleColor + #505
    #blog-post
      :font-family serif
</pre>

<p>And here is the CSS output that was generated by SASS:</p>

<pre>
a {
  color: blue; }
  a:hover {
    color: black; }
  a:visited {
    color: purple; }

body #header {
  background-color: #aa33aa; }
  body #header #blog-title {
    font-size: 32 px; }
  body #header #description {
    font-size: 18 px;
    font-family: sans-serif; }
body #content {
  font-size: 19 px;
  background-color: #ff33ff; }
  body #content #blog-post {
    font-family: serif; }
</pre>

<p>You can see how the selectors are nested and inherited. You can also see how the <code>font-size</code> of the various elements that used the <code>minSize</code> function were generated. The best part is the addition of two colours to create the colour for the <code>body #content</code>.</p>

<p>Basically, to summarize why you would want to use Compass:
  <ul>
    <li>SASS lets you use <strong>variables</strong> and <strong>functions</strong> to generate CSS</li>
    <li>SASS lets you <em>mix styles</em> with different CSS selectors</li>
    <li>Compass has <strong>plugins and modules</strong> to support the grid-base frameworks like Blueprint</li>
  </ul>
</p>

<p>This was a short post, mainly because as a programmer, the idea of variables/functions and a proper language for generating CSS is instantly appealing. So I'm hoping to create a module/plugin or plain template of my own for the MovableType blogging software (which this blog uses) and I'm attempting to convert templates and themes to use Compass to learn more about Compass and to improve my not-so-great web design skills.</p>]]>
    </content>
</entry>

<entry>
    <title>How I used Magritte, Seaside, and Smalltalk for a class project</title>
    <link rel="alternate" type="text/html" href="http://www.neverfriday.com/sweetfriday/2009/04/how-i-used-magritte-seaside-an.html" />
    <id>tag:www.neverfriday.com,2009:/sweetfriday//1.41</id>

    <published>2009-04-13T21:20:16Z</published>
    <updated>2009-04-13T21:29:02Z</updated>

    <summary>In the Human-Computer Interfaces class I have been taking for the last few months, I had to write up a software prototype for a restuarant ordering system. The goal was to design a user interface that allowed a customer in...</summary>
    <author>
        <name>Rudolf Olah</name>
        <uri>http://neverfriday.com/</uri>
    </author>
    
        <category term="Squeak" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="magritte" label="magritte" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="seaside" label="seaside" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="squeak" label="squeak" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.neverfriday.com/sweetfriday/">
        <![CDATA[<p>In the Human-Computer Interfaces class I have been taking for the last few months, I had to write up a software prototype for a restuarant ordering system. The goal was to design a user interface that allowed a customer in the restaurant to use their iPhone or some other smart phone to quickly order food.</p>

<p>For this prototype, I used <a href="http://www.squeak.org/">Squeak</a> Smalltalk, the <a href="http://seaside.st/">Seaside web framework</a>, and the <a href="http://www.lukas-renggli.ch/smalltalk/magritte">Magritted meta-description framework</a>.</p>
]]>
        <![CDATA[<h2>Database</h2>

<p>As the database for this prototype, I used a class with only class methods, which is the Singleton pattern, or something like that. In any case, it was some variables which were Dictionaries and that was it. I didn't see a need to explore the object-oriented database systems available nor did I want to force the instructor of the course to setup an SQL database on his computer just to test this prototype.</p>

<h2>Components and Tasks</h2>

<p>There were several processes and screens that needed to be mapped to Seaside <code>WAComponents</code> and <code>WATasks</code>. For example, placing an order is a process/task that will first force you to login, then allow you to browse a menu, and when you're done ordering, it will place the order into the system for the kitchen staff to handle. Within that, there would be a "Login", "Menu   Selection", "<em>[Menu Selected]</em> Items", and "Review Order" screens/components. This mapping made it easy to figure out where to sub-class components and where to jump into different tasks.</p>

<p>Later on in the project timeline, I realized that Magritte might make things easier for me. I was trying to figure out how to model menu items with varying options, such as pizzas that came in only 2 different sizes, salads with a choice of dressings, and burgers with a choice of "toppings" (with tomatoes? with mayo?). I wanted to write a generalized <code>MenuItem</code> class with a render method that could display check boxes or radio buttons depending on what was needed. This would have allowed me to add or remove option groups because what if the restaurant no longer wants to give people a choice of pizza sizes or whatever? Then I realized this was too customizable and cut back, because there was only one place where the menu item was viewed with its options.</p>

<p>In the end, I created a <code>MenuItem</code> class and then sub-classed it into <code>PizzaItem</code>, <code>SaladItem</code>, etc. with each one supporting different options. In the <code>ViewItem</code> class, the <code>renderContentOn:</code> method would call other methods depending on the class of the menu item. So if the item's class was <code>PizzaItem</code>, then <code>renderPizzaItemOn:</code> would be called.</p>

<h2>Magritte's Help</h2>

<p><a href="http://www.lukas-renggli.ch/smalltalk/magritte">Magritte</a> is a meta-description framework for Seaside. It lets you describe the model of the object you want to display and then you can use different views that render those descriptions. It makes it easier to display. Instead of making an <code>EditObjectView</code> or a <code>CreateObjectView</code>, and then calling them, you just call the asComponent method on the Object, and Magritte will generate the HTML for you. The view that it uses is either a table- or CSS-based view.</p>

<p>I used Magritte to create the administrative side, the control panel where I modified the database. I defined the descriptions for all the objects and then let Magritte create the forms so I could create or edit them. For example, the <code>Menu</code> object had 2 class methods:</p>

<ul>
  <li><code>descriptionName</code></li>
  <li><code>descriptionItems</code></li>
</ul>

<p>Magritte will automatically look for class methods that start with "description" and use them as part of a default view (which is found   in the class method <code>description</code>). On the control panel <code>WAComponent</code>, I rendered a list of menus and then had a link that said "Add Menu", something like this:</p>

<pre>
<b>renderContentOn:</b>&nbsp;<i>html</i>
    <i>html</i> heading level1; with: 'Menus'.
    <b>menus</b> do: [ :<i>menu</i> | <b>self</b> renderMenu: <i>menu</i> on: <i>html</i> ].
    <i>html</i> paragraph: [ <i>html</i> anchor callback: [ <b>self</b> createNewMenu ]]
</pre>

<p>The <code>createNewMenu</code> class is where the Magritte-related   magic happens and it looked like this:</p>

<pre>
<b>createNewMenu</b>
    | <i>menu</i> |
    <i>menu</i> := <b>self</b> call: (<b>Menu</b> new asComponent addValidatedForm).
    <i>menu</i> ifNotNil: [ <b>menus</b> add: <i>menu</i> ]
</pre>

<p>Very simple to use as you can see.</p>

<h2>Magritte's Trouble</h2>

<p>Unfortunately, Magritte still felt cumbersome to work with in some ways. To me, it felt easier to create custom classes for rendering and to write some <code>renderContentOn:</code> methods than to deal with figuring out how Magritte's description objects worked and how to   re-arrange them for sub-classes (such as for <code>Item</code> and <code>PizzaItem</code>). With some more thought and planning, it probably wouldn't have felt so difficult.</p>

<p>One particular problem that I had was there weren't too many tutorials and examples of Magritte usage, aside from some blog posts and <a href="http://www.lukas-renggli.ch/smalltalk/magritte#202088451" title="Tutorial section on Magritte website">a tutorial from the main website</a>. I didn't like the tutorial because it was a PDF and it was a bunch of slides from a presentation. The information density in a Powerpoint presentation is very low and you end up speaking in bullet-points but aside from that, it was helpful.</p>

<h2>Seaside's Awesomeness</h2>

<p>Seaside was wonderful to work with. I found it slow at first but now that I've grown more used to it, it isn't that bad and I feel like I could write some simple web applications much more quickly in  Seaside/Smalltalk than in Django/Python. There isn't too much to say, the awesomeness of Seaside is subtle, such as automatic session creation, composable components, proper tasks, etc.</p>

<h2>Seaside's Problemness</h2>

<p>Seaside's documentation is lacking. I couldn't find comments for some components that I thought I wanted to use.</p>

<p>Seaside also has a precedence problem when you are HTML rendering. I ran into this when I tried to use radio buttons. When rendering a view in HTML, the order of the methods called matters. The <code>with:</code> method should be the last call made to an HTML tag object since it renders the object. I had reversed the order and was creating radio buttons like this:</p>

<pre>
<b>renderContentOn:</b>&nbsp;<i>html</i>
    | <i>group</i> |
    <i>group</i> := <i>html</i> radioGroup.
    <i>group</i> radioButton
        with: 'Some Text';
        value: 'Hello'.
</pre>

<p>That's incorrect because the radio button will be rendered before the <code>value:</code> method is called on it. What I really should have done was this:</p>

<pre>
<b>renderContentOn:</b>&nbsp;<i>html</i>
    | <i>group</i> |
    <i>group</i> := <i>html</i> radioGroup.
    <i>group</i> radioButton
        value: 'Hello';
        with: 'Some Text'.
</pre>

<h2>Conclusion</h2>

<p>Overall, I found working with Smalltalk awesome. I worked on 3 different platforms; in gNewSense on my desktop (a GNU/Linux distro), in Windows XP on my desktop, and in ArchLinux on my laptop. On each platform I just had to install Squeak and then copy the image over to the computer and run it. No messy setup of databases, text editors, version control, etc.</p>

<p>Magritte was very helpful and let me avoid writing redundant admin/database managment code. I'll have to sit down and force myself to figure it all out for the next Seaside application I write.</p>]]>
    </content>
</entry>

</feed>
