FindingIT

laid back Article

second: give support or one's approval to; "I'll second that motion"; "I can't back this plan"; "endorse a new project"

Home

laid back Navigation

Laid Back
Back Door
Back Seat
When Do We Put The Clocks Back


Giving the world a pluggable Gnutella
WorldOS is a framework on which to build programs that work like Freenet or Gnutella -allowing distributed applications using peer-to-peer routing.
Syndication discussions hot up
After a period of dormancy, the Syndication mailing list has become active again, with contributions from leaders in traditional media and Web syndication.
Personal web server integrates file sharing and messaging
The Magi Project is an innovative project to create a combined personal web server and messaging system that enables the sharing and synchronization of information across desktop, laptop and palmtop devices.
Syndication and Metadata
RSS is probably the best known metadata format around. RDF is probably one of the least understood. In this essay, published on my O'Reilly Network weblog, I argue that the next generation of RSS should be based on RDF.
UK bloggers get organised
Looks like the weblogs scene is gathering pace beyond the shores of the US. There's now a UK-specific page on weblogs.com, and a mailing list at egroups.
Yournamehere.com more important than anything
Whatever you're publishing on the web, your site name is the most valuable asset you have, according to Carl Steadman.



Below, you'll find extensive information on leading laid back articles and products to help you on your way to success.

The Value Of Maintenance And System Analysis
By George Van Lieu

When a packaging line shuts down, it is time and production lost forever. Most companies today have regularly scheduled maintenance programs and some have packaging line system analysis, but few seem to have combined the two concepts.

Having up replacement parts, especially in today’s servo-controlled environment is essential to shorten unplanned downtime. The “bigger picture” suggests that utilizing a system that collects and analyzes data from the entire production line can pinpoint where major stops originate, calculate the individual category of downtime (changeovers, lunch breaks, breakdowns, jams, etc.) and identify where preventative maintenance is best utilized, would result in significant cost savings.

An example of this process in action is on a packaging line where multiple pieces of equipment operate in line to wrap, insert, weigh and case pack a product. The case packing did not operate even close to capacity and system analysis discovered the bottleneck was at the insertion stage caused by jamming. Planned

What You Need To Know If You're Stuck With Republicans Around The Holidays
President-elect Obama won by 8 million votes. President Bush is probably drinking again. Many media conservatives are furious with President Bush. Experts say that Al Qaeda's recent video shows that the terrorists are afraid of President-elect Obama. President-elect Obama is...
Holiday Update
I finished work early today and I will be spending the holiday with friends, family, various pies and dvds of the show Medium. I'm grateful for lots of things- some superficial some spiritual. I hope everyone reading this has...
Thankyou Sarah Palin! (The liberal version)
Click here to watch funny video....
Bottoms Up
I knew he was drinking again! Rumors have been circulating for years now. Our current president/war criminal in charge, was seen recently drinking an alcoholic cocktail in Peru. What can I say but how typical. Supposedly he stopped drinking...
Baking With Grandmom
Three of my favorite people.......
Bow Ties are Back
It seems that everything about the 1930's are back and not just the bad economy. Woman are wearing those collars and big pins and now the bow tie is back for men. How exciting. I like a bow tie...
The Bitter Are Really Clinging to Their Guns
The NRA scares the hillbillies ( and I mean that in the nicest way) into thinking they will be disarmed. Now they are shopping for weapons and ammo in droves....
Straight People Will Have to Stand Up to the H8te
Watch as Drew Barrymore takes to the streets in protest of this wretched prop 8 that bans gay marriage in California. When are some people going to get over it, I mean seriously. We straight people will have to stand...
"Irrelevant"
When Bill Clinton became president in the 90's big mouthed loser radio/ talk show hosts crawled out of the right sides wood work to smear every move he and Hillary made and they haven't shut up since. Part of...
When Did You Know Barack Won?
Watch Oprah talk to Will Smith about when he first realized Barack was the next president. I know for me, I knew he won when he took Pennsylvania. I jumped up and screamed and filled up with tears. A...
Yes We Can, Yes We Did, Yes We Will
"In the words of Gloria Steinem, "I feel like our future has come back." And indeed it has. For in the words of Martin Luther King, Jr., "No lie can last forever." What Bobby Kennedy tried to do, and was...
Yes We Can, Yes We Did! (Gloat, gloat)
"No more patriotic primates to rule the roost."~ John Cusack Robert Kennedy Jr. said it would be great "just to have a President who can give a speech and who can write," Kennedy compared the sensation of Tuesday night to...
I'm Ready To Barack the Vote!

Bride of McCainstein
I had a really uneventful Halloween. The only trick or treaters I saw were my nieces. I was invited to two parties but took a pass on both. Of course all the Halloween candy around didn't get past me...
SJP Works Phones For Obama
(source)...

maintenance was scheduled at this station with higher frequency and focus on continuous adjustment monitoring by the operator. The result was an increase in overall output of 9%.

The old time mentality of “run it till it breaks” does not fly in today’s world of sophisticated high efficiency production systems. Combining the tried and true process of monitoring, cleaning and adjusting equipment with computer evaluation of overall system equipment efficiency and identifying negative factors in production, makes sense for an increasing number of companies today.

Article Directory: http://www.articlecube.com

George Van Lieu is a manager for Belcorp, Inc., an automated packaging equipment supplier located in Cincinnati, Ohio.


We strive to provide only quality articles, so if there is a specific topic related to back that you would like us to cover, please contact us at any time.

And again, thank you to those contributing daily to our laid back website.

Presenting for Presenters
<p style="padding-left:3em;"><em>If you are speaking at RubyConf this year, we have a special opportunity for you.</em></p> <h2>Are You Speaking at RubyConf 2008?</h2> <p>If so, congratuations! And have we got a deal for you &#8230;</p> <p>Wednesday evening, Nov 5, at 6:00 pm, (that&#8217;s the night before the conference) we are inviting all speakers to a special training session. I&#8217;m going to be sharing some ideas for putting together and delivering a good presentation.</p> <p>After my talk, Patrick Ewing and Adam Keys are geared up to do some Powerpoint Karaoke with everyone there. I&#8217;m not even sure what Powerpoint Karaoke is, but it sounds like fun.</p> <p>I hope to see everyone there.</p> <h2>Update (4/Nov/08)</h2> <p>I&#8217;ve talked to Adam today. He says that Patrick isn&#8217;t going to able to make RubyConf this year, but we will be ready to roll with Powerpoint Karaoke anyways.</p> <h2>Update (5/Nov/08)</h2> <p>It looks like the speakers training will be in the Olympic Room tonight. The Olympic Room is on the same floor as the registration desk. Go to the left past the elevators and turn right down that hall (or ask someone who looks like they know what they are doing).</p>
Articles are Back!
<p style="padding-left:3em;"><em>I&#8217;ve received a lot of requests for my old articles &#8230;</em></p> <h2>The Article Section has been Restored</h2> <p>When I changed to my new hosting machine, I moved all my blog posts but didn&#8217;t move any of the articles. Of course I <em>intended</em> to move them eventually but never got around to it.</p> <p>A lot of people have been asking for this article or that presentation, or pointing out that a number of old bookmarked links are no longer any good. So due to popular demand the <b>Articles and Presentations</b> section of onestepback.org is now restored.</p> <p>Enjoy</p>
Comments Are Now Enabled
<p style="padding-left:3em;"><em>I&#8217;ve gone without comments on this blog for a long time &#8230;</em></p> <h2>Comments via Disqus</h2> <p>I&#8217;ve gone through several commenting systems for this blog over time. First was the really cool <a href="http://onestepback.org/index.cgi/Tech/Web/MoreWebApps.rdoc">TagSurf</a> application that allowed commenting on about any web page on the internet arbitrary tags. Unfortunately, TagSurf died a (in the words of its creator) &#8220;well deserved&#8221; death.</p> <p>Then I tried a wiki for comments. That worked pretty good (aside from spam issues), but setting up a new page for comments for each new post was just too much hassle.</p> <p>Now I&#8217;m trying <a href="http://disqus.com/docs/about/">Disqus</a> for comments. It only took an hour or so to integrate Disqus with my ancient blogging engine (anyone else still using Rublog?).</p> <p>Kick the tires and see how it works. If you have feedback &#8230; well, just leave a comment.</p> <p>I guess this means I&#8217;ll have to start writing some <em>real</em> content here so there will be something worth commenting on &#8230; let&#8217;s see if there is anything I feel like ranting about &#8230;</p> <p>(Oh, and a hat tip to <a href="http://brionesandco.com/ryanbriones/">Ryan Briones</a> for pointing out Disqus when I was ready to go out and implement something from scratch.)</p>
RedMine For Rake
<p style="padding-left:3em;"><em>The is now a RedMine setup for Rake, FlexMock and Builder.</em></p> <h2>RedMine</h2> <p>As part of an effort to get better control of changes to the my open source projects, I&#8217;ve setup a RedMine issue tracking site for Rake, FlexMock and Builder. You can find it at <a href="http://onestepback.org/redmine">http://onestepback.org/redmine</a>.</p>
Moving Blog Host
<p style="padding-left:3em;"><em>I am changing host for the One Step Back blog.</em></p> <h2>It&#8217;s Time to Move</h2> <p>This is just a quick little post to let you know that the One Step Back blog is moving. In fact, it has already moved. But don&#8217;t worry, we aren&#8217;t going far.</p> <p>Originally this blog was hosted on a shared co-op system run by <a href="http://www.n2net.net/">N2Net</a>. It was dirt cheap and easy to maintain. The down side was that support was sporadic. As the hardware has aged, the Co-op has decided to let the current system run until the hardware dies, and then disolve the co-op.</p> <p>Today there are tons more hosting opportunities available than there were when the co-op was first formed. I&#8217;m now leasing a Linode <a href="http://www.linode.com/">node</a> and running the blog and other associated software from there. Its almost as inexpensive and the co-op and uptime <em>should</em> be better.</p> <p>Write now the blog has been moved. As time passes I&#8217;ll move the article archive as well. Let me know if anything looks amiss.</p> <p>&#8212;Jim Weirich</p>
How did you get started in software development.
<h2>Tagged</h2> <p>Looks like <a href="http://objo.com/2008/6/7/how-did-you-get-started-in-programming">Joe O&#8217;Brien</a> tagged me for answers to the following questions. He, in turn, was tagged by <a href="http://joshholmes.com/">Josh Owens</a>, who in turn was tagged by <a href="http://www.jeffblankenburg.com/index.html">Jeff Blankenburg</a>. It looks like <a href="http://www.codinggeekette.com">Sarah Dutkiewicz</a> and <a href="http://michaeleatonconsulting.com/blog/archive/2008/06/04/how-did-you-get-started-in-software-development.aspx">Micheal Eaton</a> started this.</p> <p>OK, sounds like fun. Here goes.</p> <h2>How old were you when you started programming?</h2> <p>I was introduced to programming in high school by reading a book on the topic. The book taught me how to write machine code for a strange decimal-based machine. Unfortunately, there was no actual computer involved in the process. Shoot, who had computers back then? Certainly not our high school (the personal computers? not invented yet!)</p> <p>In college, I learned a smattering of <span class="caps">FORTRAN</span>. Just enough to drive a Calcomp plotter to plot data from my undergraduate physics courses. But didn&#8217;t really get into programming until my junior year in college. (Story continued in next question)</p> <h2>How did you get started in programming?</h2> <p>So, I was planning out the courses for my junior year in college and I had a hole in my math courses. The math class I needed was not offered that semester, so my adviser suggested taking a computer programming course. He said it would be useful and, who knows, I might enjoy it.</p> <p>So I signed up for an introduction to <span class="caps">FORTRAN</span> course, figuring it would be easy because I already knew a little bit of <span class="caps">FORTRAN</span>. I show up on the first day of class and after a few preliminaries the instructor jumps right into some code, that looked like this:</p> <pre> (de member (pip deck) (cond ((null deck) nil) ((eq pip (car deck)) t) (t (member pip (cdr deck))))) </pre> <p>I remember scratching my head and thinking this was the strangest <span class="caps">FORTRAN I</span> had ever seen. I was totally confused for about three days, then something clicked on the third day of class. I suddenly &#8220;<em>got</em>&#8221; what the instructor was trying to get across and it all made perfect sense.</p> <p>If you haven&#8217;t figured it out yet, the instructor taught us Lisp as part of an introduction to <span class="caps">FORTRAN</span>. The instructor turned out to be Daniel Friedman, the author of <a href="http://www.amazon.com/Little-LISPer-Third-Daniel-Friedman/dp/0023397632"><em>The Little Lisper</em></a>, and was well known in the Lisp community. That small exposure to Lisp hooked me on programming from that point on. I took as many CompSci courses as I could in my remaining year and a half in college. I eventually graudated with a BS in Physics, but had a strong background in Computer Science as well.</p> <h2>What was your first language?</h2> <p>Technically, <span class="caps">FORTRAN</span> was my first language. But Lisp is the language I fell in love with and is what got me hooked on programming.</p> <h2>What was the first real program you wrote?</h2> <p>I have a very clear memory of the very first program I wrote professionally. The reason it is so clear is that this was the first program I wrote that was intended for actual use by someone who wanted it. Everything else up to that time was done for my own personal enjoyment or to satisfy some course requirement.</p> <p>The program calculated the &#8220;critical angles&#8221; of &#8220;pieces&#8221;. I was given the requirements by Anne Exline, a senior programmer, and proceeded to write the program to spec. It took a few days, but when I was done I showed the result to Anne and she was pleased with the result.</p> <p>The funny thing is that I had no idea what a &#8220;piece&#8221; was nor what was so critical about the angles I was calculating. I was so excited about writing an actual program that I did not ask until the software was done. When asked, Anne just looked at me funny and said &#8220;Rocket Pieces&#8221;. When Cape Canaveral lauches a rocket, they track it very carefully to make sure it stays on course. If it strays, the range safety officer is required to activate the self destruct. The critical angles are those angles that would cause the &#8220;rocket pieces&#8221; to land outside the safety area of the flight path.</p> <p>So, my very first professional program was not only useful, it might actually save lives.</p> <h2>What languages have you used since you started programming?</h2> <p>Languages I have used as part of my professional career (in roughly chronological order) include <span class="caps">FORTRAN</span>, various assembly languages, <span class="caps">FORTH</span>, C, PL/M, C++, Java, Ruby.</p> <p>Languages I have used in addition to those mentioned above: Pascal, Perl, Eiffel, and Lisp/Scheme.</p> <p>Languages I can read, but never wrote anything significant in them: Ada, Python, Erlang, Smalltalk, <span class="caps">SNOBOL</span>, Algol, Pascal.</p> <h2>What was your first professional programming gig?</h2> <p>I was hired by the <span class="caps">RCA</span> Missile Test project in Cape Canaveral, Florida as a Near Real Time Analyst. Duties included programming various launch related software (e.g. the critical angle program mentioned above) and working launch support.</p> <p>The launch support was the &#8220;Near Real Time&#8221; part of the job description. From the moment a rocket is launched until it reaches orbital velocity, any malfunction could cause it to fall back to earth. During this initial portion of the launch, the launch is monitored in &#8220;real-time&#8221; so that we know exactly where it would land if the engines were to cut off <span class="caps">NOW</span>. Trajectory calculations had to be done in fractions of a second and updated constantly in real time.</p> <p>After the rocket reaches oribital velocity (usually somewhere between 8 and 14 minutes into its flight), it won&#8217;t fall back to earth. At this point the real time trajectory program is shut down and the near real time program is started. The near real time program can take a few minutes to calculate a more exact orbital prediction and then send that prediction to downrange radars (e.g. the the <a href="http://en.wikipedia.org/wiki/Ascension_Island">Ascension Island</a> station) that won&#8217;t see the rocket until about 20 minutes after launch. It was the job of the Near Real Time analyst to run that program and provide oribital predictions for downrange station.</p> <h2>If there is one thing you learned along the way that you would tell new developers, what would it be?</h2> <p>Find something that you enjoy and do that. Life is too short to work in a job that you dislike.</p> <h2>What?s the most fun you?ve ever had ? programming?</h2> <p>Oh, the fun I have had. This story still makes me smile.</p> <p>My first computer was a single board <span class="caps">Z80</span> microcomputer with 4 KB of memory. I wrote a small <span class="caps">FORTH</span>-like interpreter for it and hacked a version of the animal game in <span class="caps">FORTH</span>. The animal game is a program that plays 20 questions to figure out what animal you are thinking of. It constructs a binary tree where each node is a question and the subtrees are the yes and no answers to the question. To play the game, all the program does is walk the tree, ask the question at the current node and follow either the <span class="caps">YES</span> branch or the NO branch as appropriate.</p> <p>If the program guesses wrong, it will ask you for your animal and a question that will distinguish your animal from the one it guessed. It then adds your question to the tree. By this extremely simple mechanism, it is able to expand its knowledge base. (see <a href="http://www.rubyquiz.com/quiz15.html">Ruby Quiz #15</a> for more details).</p> <p>I had just finished the program and had seeded it with a single animal, a mouse. I turned to my wife and asked her to play the game. She thinks of an animal and starts the program, which immediately asked her &#8220;Is it a mouse?&#8221;. She turned to me with surprise and said &#8220;How did it know?&#8221;. Of course, the animal she picked was a mouse.</p> <p>I don&#8217;t think I have ever impressed anyone with my programming skills as much as she was impressed with that game.</p> <h2>Who&#8217;s up next?</h2> <p>I&#8217;m tagging the following people. Remember, this is entirely voluntary so don&#8217;t feel obligated to answer. But I&#8217;m betting the answers are interesting:</p> <ul> <li><a href="http://mysterycoder.blogspot.com/">Chris Nelson</a></li> <li><a href="http://clarkware.com/cgi/blosxom">Mike Clark</a></li> <li><a href="http://gilesbowkett.blogspot.com/">Giles Bowkett</a></li> <li><a href="http://railsstudio.com/">Mark Windholtz</a></li> <li><a href="http://www.vanderburg.org/Blog">Glenn Vanderburg</a></li> </ul>
Rails Conf 2008 Summary
<h2>Conference Summary Video</h2> <p>Wow, what a great conference! There was a lot of energy flowing at RailsConf this year. Overall I&#8217;d rate this year as head and shoulders above last year. I&#8217;m not going cover much here, but will direct you attention to a <a href="http://www.railsenvy.com/2008/6/2/Railsconf-videos">Rails Envy VideoCase</a> that Greg Pollack put together. The video is a series of very short interviews with a number of presenters giving summaries of their own talks. The only downside with the video is that I wish it was available <em>before</em> the conference. I see there were a number of interesting talks that I missed.</p> <h2>Followup on the &#8220;Modelling Dialogue&#8221;</h2> <p>Joe O&#8217;Brien, Chris Nelson and myself did a dialogue style presentation on the difference between object modelling and data modelling. The most common question I got after the talk was requests for book titles to learn more about object oriented modelling. Here are the books that Joe, Chris and I have recommended:</p> <ul> <li><em><a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1?ie=UTF8&#38;s=books&#38;qid=1212463473&#38;sr=1-1">Domain Driven Design</a></em>&#8212;Eric Evans</li> <li><em><a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=sr_1_1?ie=UTF8&#38;s=books&#38;qid=1212502027&#38;sr=1-1">AgileSoftware Development, Principles, Patterns, and Practices</a></em>&#8212;Bob Martin</li> <li><em><a href="http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/ref=pd_bbs_sr_1?ie=UTF8&#38;s=books&#38;qid=1212465268&#38;sr=1-1">Refactoring: Improving the Design of Existing Code</a></em>&#8212;Martin Fowler</li> </ul>
Artichoke Music Rocks
<p style="float: right; padding: 0.5em;"><a href="http://www.artichokemusic.com/index2.htm"><img border="0" src="http://www.artichokemusic.com/LogocommUnity-sm.jpg"/></a></p> <p>The Musician&#8217;s Birds of a Feather gathering at RailsConf was great. We had a room full people, two guitars, a ukulele, a flute, several harmonicas and an improvised drum set. Unfortunately, one of the guitars was an electric travel guitar which had a dead battery, therefore no way to really hear it.</p> <p>However, the other guitar was a nice Epiphone accoustic which was passed from player to player. It became the quickly became the basis for most of the music performed that night.</p> <p>I want to thank <a href="http://www.artichokemusic.com/index2.htm">Artichoke Community Music</a> for supplying the guitar. Travelling with a guitar by plane is a big pain, so I arrived with nothing to bring to the music <span class="caps">BOF</span>. I called several local music stores looking for a guitar that I could rent for an evening. Artichoke music said they had a &#8220;not-for-profit&#8221; guitar that they would let me borrow for a day. Not many stores would do that for an out-of-town stranger.</p> <p>So, if you&#8217;re in Portland looking for a good guitar store, check out the great people at <a href="http://www.artichokemusic.com/index2.htm">Artichoke Community Music</a>.</p>
Test Driven Studio in June 2008
<p><em>Joe O&#8217;Brien and I will be leading another Test Driven Studio in Denver, June 9-11.</em></p> <p style="float: right; padding: 0.5em;"><a href="http://pragmaticstudio.com/images/studio/tdd-with-rails-icon.jpg"><img border="0" src="http://onestepback.org/images/pragstudio/studio-medium.gif"/></a></p> <h2>Testing, Colorado, June &#8230; What&#8217;s not to like?</h2> <p>About 8 years ago I come upon a technique that radically changed the way I developed code. I was reading Martin Fowler&#8217;s &#8220;Refactoring&#8221; book and came across this paragraph:</p> <p style="padding-left:3em;"><em>&#8220;Whenever I do refactoring, the first step is always the same. I need to build a solid set of tests for that section of code. The test are essential because even though I follow refactorings structured to avoid most of the opportunities for introducing bugs, I&#8217;m still human and still make mistakes. Thus I need solid tests.&#8221; </em>&#8212;Martin Fowler</p> <p>Chapter 4 of &#8220;Refactoring&#8221; was my first introduction to JUnit and got me interested in &#8220;Test First Design&#8221; (what we now tend to call &#8220;Test Driven Development&#8221;). Although I wrote <em>good</em> code before, the confidence I had in my code took a dramatic leap forward after I started adopting <span class="caps">TDD</span> practices.</p> <p>On June 9 through 11, <a href="http://objo.com">Joe O&#8217;Brien</a> and I will have the pleasure of leading the next Pragmatic Programmer&#8217;s <a href="http://pragmaticstudio.com/testing-rails">Test-Driven Development with Rails Studio.</a> in Denver. We will have an opportunity to share with you some of our experiences in using <span class="caps">TDD</span> with Ruby and Rails.</p> <p>There are still seats available, so its not too late to sign up. More information is available <a href="http://pragmaticstudio.com/testing-rails">here</a>.</p>
Lisp in Ruby
<p style="padding-left:3em;"><em>I stumbled across <a href="http://bc.tech.coop/blog/080101.html">this</a> and it got me thinking &#8230;</em></p> <h3>Update</h3> <p style="padding-left:3em;"><em>I&#8217;ve updated the Textile formatter on the site and the code for this entry is now displaying correctly. The previous version was swalling the == operators in the code.</em></p> <h2>Lisp 1.5 Programmer&#8217;s Manual</h2> <p>I stumbled across <a href="http://bc.tech.coop/blog/080101.html">this</a> in Bill Clementson&#8217;s blog and remembered using the Lisp 1.5 Prgrammers manual from the college years. I have strong memories of pouring over that particular page in the manual and attempting to understand all the nuances.</p> <p>If you&#8217;ve never read the Lisp 1.5 Programamers Manual, page 13 is the guts of a Lisp Interpreter, the &#8220;eval&#8221; and &#8220;apply&#8221; functions. It is written in Lisp, although the notation used is a bit funky. The entire interpreter (minus two utility functions) is presented on a single page of the book. Talk about a concise language definition!</p> <h2>In Ruby?</h2> <p>I had often thought about implementing a Lisp interpreter, but back in the &#8220;old days&#8221;, the thought of implementing garbage collection and the whole runtime thing was a bit daunting. This was in the day before C, so my implementation language would have been assembler &#8230; yech.</p> <p>But as I was reviewing the page, I realized that with today&#8217;s modern languages, I could problably just convert the funky M-Expressions used on page 13 directly into code. So &#8230; why not?</p> <h2>The Code</h2> <p>Here is the complete Ruby source code for the Lisp interpreter from page 13 of the Lisp Programmers manual:</p> <pre> # Kernel Extensions to support Lisp class Object def lisp_string to_s end end class NilClass def lisp_string "nil" end end class Array # Convert an Array into an S-expression (i.e. linked list). # Subarrays are converted as well. def sexp result = nil reverse.each do |item| item = item.sexp if item.respond_to?(:sexp) result = cons(item, result) end result end end # The Basic Lisp Cons cell data structures. Cons cells consist of a # head and a tail. class Cons attr_reader :head, :tail def initialize(head, tail) @head, @tail = head, tail end def ==(other) return false unless other.class == Cons return true if self.object_id == other.object_id return car(self) == car(other) &#38;&#38; cdr(self) == cdr(other) end # Convert the lisp expression to a string. def lisp_string e = self result = "(" while e if e.class != Cons result &lt;&lt; ". " &lt;&lt; e.lisp_string e = nil else result &lt;&lt; car(e).lisp_string e = cdr(e) result &lt;&lt; " " if e end end result &lt;&lt; ")" result end end # Lisp Primitive Functions. # It is an atom if it is not a cons cell. def atom?(a) a.class != Cons end # Get the head of a list. def car(e) e.head end # Get the tail of a list. def cdr(e) e.tail end # Construct a new list from a head and a tail. def cons(h,t) Cons.new(h,t) end # Here is the guts of the Lisp interpreter. Apply and eval work # together to interpret the S-expression. These definitions are taken # directly from page 13 of the Lisp 1.5 Programmer's Manual. def apply(fn, x, a) if atom?(fn) case fn when :car then caar(x) when :cdr then cdar(x) when :cons then cons(car(x), cadr(x)) when :atom then atom?(car(x)) when :eq then car(x) == cadr(x) else apply(eval(fn,a), x, a) end elsif car(fn) == :lambda eval(caddr(fn), pairlis(cadr(fn), x, a)) elsif car(fn) == :label apply(caddr(fn), x, cons(cons(cadr(fn), caddr(fn)), a)) end end def eval(e,a) if atom?(e) cdr(assoc(e,a)) elsif atom?(car(e)) if car(e) == :quote cadr(e) elsif car(e) == :cond evcon(cdr(e),a) else apply(car(e), evlis(cdr(e), a), a) end else apply(car(e), evlis(cdr(e), a), a) end end # And now some utility functions used by apply and eval. These are # also given in the Lisp 1.5 Programmer's Manual. def evcon(c,a) if eval(caar(c), a) eval(cadar(c), a) else evcon(cdr(c), a) end end def evlis(m, a) if m.nil? nil else cons(eval(car(m),a), evlis(cdr(m), a)) end end def assoc(a, e) if e.nil? fail "#{a.inspect} not bound" elsif a == caar(e) car(e) else assoc(a, cdr(e)) end end def pairlis(vars, vals, a) while vars &#38;&#38; vals a = cons(cons(car(vars), car(vals)), a) vars = cdr(vars) vals = cdr(vals) end a end # Handy lisp utility functions built on car and cdr. def caar(e) car(car(e)) end def cadr(e) car(cdr(e)) end def caddr(e) car(cdr(cdr(e))) end def cdar(e) cdr(car(e)) end def cadar(e) car(cdr(car(e))) end </pre> <h2>An Example</h2> <p>And to prove it, here&#8217;s an example program using Lisp. I didn&#8217;t bother to write a Lisp parser, so I need to express the lists in standard Ruby Array notation (which is converted to a linked list via the &#8220;sexp&#8221; method).</p> <p>Here&#8217;s the ruby program using the lisp interpreter. The Lisp system is very primitive. The only way to define the function needed is to put them in the environment structure, which is simply an association list of keys and values.</p> <pre> require 'lisp' # Create an environment where the reverse, rev_shift and null # functions are bound to an appropriate identifier. env = [ cons(:rev_shift, [:lambda, [:list, :result], [:cond, [[:null, :list], :result], [:t, [:rev_shift, [:cdr, :list], [:cons, [:car, :list], :result]]]]].sexp), cons(:reverse, [:lambda, [:list], [:rev_shift, :list, nil]].sexp), cons(:null, [:lambda, [:e], [:eq, :e, nil]].sexp), cons(:t, true), cons(nil, nil) ].sexp # Evaluate an S-Expression and print the result exp = [:reverse, [:quote, [:a, :b, :c, :d, :e]]].sexp puts "EVAL: #{exp.lisp_string}" puts " =&gt; #{eval(exp,env).lisp_string}" </pre> <p>The program will print:</p> <pre><code>$ ruby reverse.rb EVAL: (reverse (quote (a b c d e))) =&gt; (e d c b a)</code></pre> <p>All I need to do is write a Lisp parser and a <span class="caps">REPL</span>, and I&#8217;m in business!</p> <h2>The Example in Standard Lisp Notation</h2> <p>If you found the Ruby-ized Lisp code hard to read, here is the reverse funtions written in a more Lisp-like manner.</p> <pre> (defun reverse (list) (rev-shift list nil)) (defun rev-shift (list result) (cond ((null list) result) (t (rev-shift (cdr list) (cons (car list) result))) )) </pre>


Additional Related Resources      
Utilizing The Excellence Of Disposable Beard Covers
As a professional man or woman, you understand the necessity for safety. Sometimes, that safety means keeping your hair out of your work. Often, men have the unique issue of Read more...
Internet Advertising: Viral Ads
Viral ads are called so because they are sent through emails, from account to account, spreading like viruses. The negative connotation of the name is merely due to its Read more...
Feeling A Little Conservative ? Try A Swimsuit By Island Company Swimwear Or Onda De Mar
By Anne Tide
Nowadays, is it is never easy to find a swimsuit that fits your style. Are you conservative? That is a good question. You don’t have to be a Republican or a southern Democrat to Read more...
Feeling A Little Conservative ? Try A Swimsuit By Island Company Swimwear Or Onda De Mar
By Anne Tide
Nowadays, is it is never easy to find a swimsuit that fits your style. Are you conservative? That is a good question. You don’t have to be a Republican or a southern Democrat to Read more...
© 2008 Back. All rights reserved. laid back
 
Google
 
     

laid back

Information
Management Tip: Why People Get Help
By Daryl Cowie
For any business to be successful, the people inside the business must understand why people would want their products or services. Understanding the 5 reasons people ask for Read more...