Previous 10 | Next 10

May. 14th, 2013

(no subject)

Yesterday around 4PM the phone rang, and came up UNKNOWN NUMBER on the caller id. Those are never worth answering, but I picked up anyway.

Hello? "Hello, this is Jack," said a heavily accented voice, "This is the second call about the slow performance and possible virus problems of your Windows PC."

I don't have one of those, is what I thought, but what I said was, Ok, yeah, I have had a lot of problems lately. "Well sir I am calling to assist you with those problems, is the PC on right now?" Yeah, sure. "Ok, sir, can you please go to your PC."

Ok, I'm at my PC. "Now in the LOWER, LEFT corner of the screen, do you see a Windows button?" Windows button? What's that? "It looks like a flag." What color flag? "It is a flag in the corner." Which corner? What color is it?

Jack is starting to sigh. "In the LOWER, LEFT corner." I don't see a button anywhere. "It is in the corner sir." OH! I see the button!

Jack gets happier. "Now do you see Computer or My Computer in the menu that pops up?" I don't see any menu. "You have to click the Windows button." Where is that? More sighs. "In the lower left corner." OH! Ok, I clicked it! "Do you see Computer or My Computer in the menu?" I can't see YOUR computer! I'm at my house! "No, do you see COMPUTER, or do you see MY COMPUTER?" I can't see your computer, that doesn't make any sense!

Jack sighs some more. "What do you see for menus?" OH! I see Computer there! "Ok, can you right-click on Computer, and..." I closed the menu. Sigh, sigh. "Can you open the menu again and right-click on..." Where am I supposed to write it?

I can't stop laughing any more, so I interrupt Jack and ask him how dumb he thinks I am. "VERY DUMB!" He is pretty mad. Jack, who are you calling from, who do you represent? "I am calling from Afghanistan!" And what company are you calling from? "I am Mozilla Firefox!" And what are you trying to do? "I am trying to HACK YOUR COMPUTER!" I just laugh and wish him good luck, and he says "Go to hell, you bastard!" and hangs up.

May. 13th, 2013

ECLM 2013 - two days left to register

Important news:

Subject: ECLM 2013 - two days left to register
Date: Mon, 13 May 2013 19:17:26 +0200
From: Edi Weitz

Ladies and Gentlemen,

This is our last call - there are two days left to register for this year's ECLM in case you haven't done so already:

   http://weitz.de/eclm2013/

We have more than 50 registrations so far, but we wouldn't mind seeing another dozen or two...

Best regards,
Arthur & Edi.

I greatly enjoyed my last visit to ECLM and I can't recommend it highly enough if you want to meet people with interesting Common Lisp projects and ideas.

Tags:

May. 8th, 2013

Lisp gatherings

I'm very excited to be attending both ECLM and ELS in Madrid this year. This is the last week to register for ECLM, so if you want to go, you should register ASAP.

Tags:

Apr. 28th, 2013

jscl rising

I am impressed with the web-based jscl repl. Most Lisp web repls are for toy Lisps. I was so charmed that the first form I tried in JSCL, (make-package "FOO"), worked that I didn't mind that a lot of other stuff hasn't been implemented yet. I want to help hack on it to make it better!

A bunch of people have forked it on github to add more and more functionality, and I think jscl will just keep getting cooler. Good job, David Vázquez and contributors!
Tags:

Apr. 24th, 2013

Quick and dirty progress tracking

Today I was running some analysis on about 9,000 files, basically mapping a function over each to warm up a cache. Something like this:

* (map nil 'analyze-file *9000-files*)
time passes

I had no idea how well it was progressing, and whether I'd need to take a snack break or let it run overnight. So I interrupted it and wrote a quick and dirty REPL utility function:

(defun :dot-every (count fun)
  (let ((i 0))
    (lambda (&rest args)
      (when (< count (incf i))
        (setf i 0)
        (write-char #\. *trace-output*)
        (force-output *trace-output*))
      (apply fun args))))

It prints out one dot per COUNT invocations of the function it returns, giving some indication of progress. Sensible values for COUNT depend on the volume of function calls.

For this problem, I called it with a COUNT of 100:

* (map nil (:dot-every 100 'analyze-file) *9000-files*)
............etc

The cached analyses printed out a ton of dots quickly, and the uncached analyses started printing dots at a slow but steady pace, and I could tell that it would be done in a few minutes instead of a few hours.

So now I'm going to use this to wrap up any function I have to call a ton of times and I want to get a sense of how it's progressing.

Tags:

Feb. 16th, 2013

Maximum (Lisp) Overdrive

A long time ago Philip Greenspun wrote about a system to control bulldozers with Lisp Machines. You can read about it in his thesis, SITE CONTROLLER: A system for computer-aided civil engineering and construction.
Tags:

Feb. 2nd, 2013

The Rob Warnock Lisp Usenet Archive

I've been reading and enjoying comp.lang.lisp for over 10 years. I find it important to ignore the noise and seek out material from authors that clearly have something interesting and informative to say.

Rob Warnock has posted neat stuff for many years, both in comp.lang.lisp and comp.lang.scheme. After creating the Erik Naggum archive, Rob was next on my list of authors to archive. It took me a few years, but here it is: the Rob Warnock Lisp Usenet archive. It has 3,265 articles from comp.lang.lisp and comp.lang.scheme from 1995 to 2009, indexed and searchable. I hope it helps you find as many useful articles as I have over the years.

Here are a few articles I've saved and shared over the years:
There are many, many more, but I hope this gets you interested in finding some on your own Enjoy!

(In case you're curious, I used a library called usenet-legend to create the archive and make it searchable. I also have some unreleased code that provides a thin layer of web interface on top of usenet-legend.)
Tags:

Jan. 2nd, 2013

Dr. David McClain code release

Dr. McClain has been working on cool Common Lisp stuff for many years, and now he's starting to release some of his code.
Well, it has been more than 20 years with Lisp in earnest... I'm sitting on a gold mine of great code that I have
used over the entire period, and still use daily in my work. But it seems the Lisp community is a bit short on
libraries of code. No point sitting on all this stuff till I die...

One of the (many) great things I have found with Lisp is that Code Rot (I always called this Bit-Rot, but I
realize that I'm wrongly attributing when I do that) is almost a non-problem, compared to just about every
other language system that I have used in my 40+ year career. I'm still using a large body of code that I wrote
nearly 15-20 years ago and has never needed any maintenance.

My code generally grows organically to supply solutions to problems I am facing in my own work. I generally
don't write libraries for others to use. And that will show through in a lot of what I share with the world.
C'est la vie...
You can read the rest of his message on the lisp-hug archive. His github page is here.
Tags:

CAPI demos from Dr. Weitz

Some interesting news from Edi:
The upshot in terms of Lisp evangelism has been quite good, BTW. Most
of the students have only been exposed to Java and scripting languages
so far and there are always some who express an immediate interest in
learning more about CL.
Read the full post here.
Tags:

Dec. 20th, 2012

Glacier transition support added to ZS3

Amazon Glacier came out a few months ago. Glacier is a system for storing data very cheaply, only $0.01 per gigabyte per month. It also has a high level of redundancy and reliability. The drawback, compared to S3, is that you can't access it on demand. It was added as a new API, and I looked into writing a CL library for it, but never found the time.

A few days ago Amazon announced integration between S3 and Glacier. Objects in S3 can be automatically transitioned to Glacier storage after a period of time. It's very similar to the automatic object expiration support already present in the S3 API.

Since I already have an S3 library, I updated it to support the new Glacier features.

The lifecycle-rule function has been revamped to support a new action argument, :transition. Instead of deleting the object when the rule is applied, it is transitioned to Glacier storage.

New functions restore-object and object-restoration-status let you initiate a Glacier object restoration and query the status of that restoration.

Here's an example:

  (zs3:create-bucket "storage.xach.com")
  (setf (zs3:bucket-lifecycle "storage.xach.com") 
        (zs3:lifecycle-rule :action :transition 
                            :prefix "glacier/" 
                            :days 7))

Any object uploaded to the "storage.xach.com" with a prefix matching "glacier/" will be automatically transitioned to Glacier storage after 7 days. You can also use a :days option of 0, which means "transition as soon as possible." I tried that, and "as soon as possible" can mean hours. Apparently the process that does the transition does not run all the time.

After the object has transitioned, you can't retrieve it with functions like get-file:

  (zs3:get-file "storage.xach.com" "glacier/archive.tgz" "/tmp/archive.tgz")
  Error: "InvalidObjectState: The operation is not valid for the object's storage class"

The object has to be restored first. Restoring an object works like this:

  (zs3:restore-object "storage.xach.com" "glacier/archive.tgz" :days 1)

The "days" argument refers to the number of days the object is available for download before it automatically reverts back to Glacier storage.

Restoring an object can take several hours. To check on object's restoration status, you can do this:

  (zs3:object-restoration-status "storage.xach.com" "glacier/archive.tgz")
  => "ongoing-request=\"true\""

The next release of Quicklisp will have this ZS3 update. To get it early, you can check it out from github or download it from my website. Enjoy!
Tags:

Previous 10 | Next 10

April 2014

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930   

Syndicate

RSS Atom
Powered by LiveJournal.com