Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Tuesday, September 23, 2025

Hibernate Tip - Using case expression in sorting

 I wanted to share this hard-earned discovery but couldn't find a suitable place to (or maybe didn't want to try that much)

Yes, the great and awesome Rand McRanderson has a day job and in such day job I do program and that programming involves the Hibernate ORM system.

One annoyance has been that Hibernate does not allow simple expressions in the sort by clause, that is I cannot do (inside a query annotation or by functionally using the entity manager to create a query)

SELECT * FROM Books b WHERE b.title LIKE CONCAT('%' , :param , '%') ORDER BY b.title = :param DESC, b.publishDate

For the unfamiliar, what this does is it looks through a database's book table for titles (the b.title field of the object) that contain the value of :param (which could be user input, for our example let's say the value is "Bob"), the LIKE and '%', '%', mean that the text "Bob" could have any text before or after it in the title, ie, "Bob's adventure", "Adventures with Bob", "The Bob of Bobbington" are all matches. The select clause is set to '*' which means to fetch all the fields (in this case that would be the entire Book entity).

In this scenario, sorting the results by b.publishDate is reasonable, however then you get cases where, a book called "Bob", published in 2022, is ranked after a book called "Long list of names including Alan, Joe, Michael, also Bob" published in 2024. Some people are fine with this, I find it a little annoying. 

So what I'm trying to do is to first sort by whether or not there is an exact match for the title "Bob" using the expression b.title = :param - this will evaluate to a boolean value, either TRUE or FALSE, and since TRUE (which means there is an exact match) = 1 and FALSE = 0 in Hibernate (as in most of the computer world), I sort this descending, after this sort criteria, I still sort by publishDate so I end up with exact matches first sorted by date and then the other matches sorted by date afterwards.

That's the idea at least, but Hibernate doesn't like this. Try to run this code and you get an exception like:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: = near line 1, column ...

(On a side note, I wish there was a better way to check this expressions at compile time, I know I could use the Criteria API for this with the static metamodel approach, but that ends up being very verbose with a significant learning curve that I cannot spare at the moment)

This issue is that Hibernate does not like that raw '=' expression in an ORDER BY clause (it is legal in SQL I believe, which raises questions about why I'm using Hibernate, which I'm not going to go into now)

Anyways, I went through a lot of variations trying to figure out how to get around this behavior (once I understood what the issue was, which took a little while), I seem not to be the only one to get this error:

(Although given that this post is from 10 years ago I might be the only one in recent times)

What I finally discovered is while you cannot use simple expressions like X = Y in order by clauses for Hibernate, however you can use a CASE expression, like CASE WHEN A THEN B ELSE C END, where A is a boolean expression which can be... X = Y. So I can rewrite this thing as:

SELECT * FROM Books b WHERE b.title LIKE CONCAT('%' , :param , '%') ORDER BY (CASE WHEN b.title = :param THEN 1 ELSE 0 END) DESC, b.publishDate

(Not sure if the parentheses are necessary, but I think it looks pretty ugly without them, and it is my blog so...)

And this works, and it gives me the ordering I want, so I'm happy with it. Now the trick is to remember this into the future where I might encounter this type of situation again, whether that will happen or not, well, that is a true mystery of life.

Anywho, take it to your head, take it to your heart, and remember Rand rocks!

Goodnight Folks!

And God Bless! 


Tuesday, March 9, 2010

An overall sketch of Drupal 7

-get drupal root
-drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL)
 define constants
 define('REQUEST_TIME', $_SERVER['REQUEST_TIME']);
 _drupal_bootstrap_configuration()
  error reporting set
  drupal_environment_initialize()
   server vars read
   ini settings set
   error reporting set
  timer_start('page')
   start timers
  drupal_settings_initialize()
   load settings
   set up path
   session cookies
 _drupal_bootstrap_page_cache();
  init user
  load cache
  check if no-db opt else - get db and variables
  block_denied
  cookie init
  _drupal_bootstrap_page_header()
   bootstrap_invoke_all
   drupal_page_get_cache
   check cachable - get cache
    -maybe still run boot hooks
    serve page from cache
    -maybe still run exit hooks
    _drupal_bootstrap_database();
  -set up db
  -register autoload
    _drupal_bootstrap_variables();
  -init variables (either via cache or db)
  -load modules
    require_once DRUPAL_ROOT . '/' . variable_get('session_inc', 'includes/session.inc');
    drupal_session_initialize();
  -conditionally start session
    _drupal_bootstrap_page_header();
  -boot all
  check cache
  get lock and init
  if !cli - ob start and page_header
   -init static + send headers   
    drupal_language_initialize();
  -get languages
  -invoke modules
    require_once DRUPAL_ROOT . '/includes/common.inc';
  define more constants
    _drupal_bootstrap_full();
  -load files
  -set up settings
  -varify
  -init path
  -init custom theme
  -run init hooks
-menu_execute_active_handler()

Wednesday, January 27, 2010

Because if you weren't supposed to abuse the api it wouldn't start with a

Of course, I mean really!

Let me say I have little sympathy with hackers from an ethical, sociological, or philosophical perspective (that's a gross exaggeration, I mean ewww, but to explicate the matter would be an even more gross waste of time)

But when it doesn't hurt, or waste people's time, or screw with peoples stuff, etc., why not tae things apart and then put them together in different ways so you can take it apart again, and so on, and so forth, and thus I decided to conduct a reflection upon the window object of javascript.

Since my sign off would be far too down at the bottom of the page let me sign off before the mark, because I can. So take it to your head, take it to your heart and remember Rand rocks. Goodnight Folks!

And God Bless.

Monday, January 25, 2010

Reflecting on the infinity of madness within the sanity of the sands of time

My creativity takes many forms, writing stories, poetry, essays, this blog, twitter feed, speculating on math, history, philosophy, etc. and so on.

And among the items I left out of that statement, or at least left implied was programming

My feelings toward programming have gone up and down, risen and fallen, but the one constant is... actually there's been no special constant to my feelings about programming, except perhaps my affection for C++.

But nowadays, perhaps because my work requires coding and the like, I find programming often coming to my head... to the point of disturbance.

Dun, dun, dun...!

Now the disturbance isn't because of a lack of creative potential in programming, though it is partially because of a lack of creative realization in my programming, but perhaps more strongly it is that programming can often involve very minute details that are ultimately useless... indenting lines of code, optimizing loops and recursions, rehashing solutions to old algorithms solved a million times over by smarter minds... and it's very easy for me to program and in that manner. That is in a manner which is mindless and emotionless and detail obsessed... well, truthfully obsession is a dear friend to any artist, but with me and programming I feel it perhaps comes a bit easier...

Counter-strike!

I could tell many strategies old and new about counteracting this feeling and that one, etc. leading to a triumphant reversal of fortunes, just over the horizon... and I will give you this one... to overcome the risk of tedium, numbness and insanity that programming risks, I do now fill my veins with the purpose of bringing out worth and polish to my often odd and weird programming experiments, or at the very least, and perhaps more humbly, at least sharing my programming experience, if not to share knowledge of programming, perhaps just knowledge of a man programming.

(Stay tuned for posts in this vein, or not, whichever I feel like or what you feel like wiht the staying tuned-ness and all, I mean all I'm saying is if you're all stressed out, maybe you shouldn't stay tuned, maybe you should just get some sleep... or maybe I should)

Now enjoy the very nice jamming of a warm-hearted code monkey, just like me

And if I cannot share a great algorithm, perhaps I can share the desire for a great algorithm, the artist's drive...perhaps... only God knows.

So take it to your head, take it to your heart and remember Rand rocks. Goodnight Folks!

And God Bless.

Sunday, November 22, 2009

Tech Note: Calender fix got to get fixed

So I'm no something of a calender fix, don't ask me why that's just how I role. And thus here's some code for an xhtml calendar, php-gened + with a custom start and a custom end:


$start=array(4,19,1986);
$day = 24*60*60;
$ts = mktime(0,0,0,$start[0],$start[1],$start[2]);
$ts -= date('w',$ts)*$day;
$doctype = DOMImplementation::createDocumentType("html",
"-//W3C//DTD XHTML 1.0 Strict//EN",
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");
$doc = DOMImplementation::createDocument(null, 'html', $doctype);
$html=$doc->documentElement;
$head=$doc->createElement('head');
$head->appendChild($doc->createElement('title','Timeline'));
$style = $doc->createElement('style');
$style->setAttribute('type','text/css');
$styledata = '
table {
width: 100%;
}
table td {
width: 12%;
}
';
$style->appendChild($doc->createCDATASection($styledata));
$head->appendChild($style);
$html->appendChild($head);
$body=$doc->createElement('body');
$html->appendChild($body);

$table=$doc->createElement('table');
$body->appendChild($table);
$thead=$doc->createElement('thead');
$table->appendChild($thead);
$trow=$doc->createElement('tr');
$thead->appendChild($trow);
$trow->appendChild($doc->createElement('th','Sunday'));
$trow->appendChild($doc->createElement('th','Monday'));
$trow->appendChild($doc->createElement('th','Tuesday'));
$trow->appendChild($doc->createElement('th','Wednesday'));
$trow->appendChild($doc->createElement('th','Thursday'));
$trow->appendChild($doc->createElement('th','Friday'));
$trow->appendChild($doc->createElement('th','Saturday'));
$endtime=mktime();
$tbody = $doc->createElement('tbody');
$table->appendChild($tbody);
$trow=$doc->createElement('tr');
$td=$doc->createElement('td');
$h2=$doc->createElement('h2',date('F Y',$ts));
$td->appendChild($h2);
$td->setAttribute('colspan','7');
$trow->appendChild($td);
$tbody->appendChild($trow);
while($ts < $endtime) {
$trow=$doc->createElement('tr');
for($i=0; $i < 7; $i++) {
$td=$doc->createElement('td');
$td->appendChild($doc->createElement('h3',date('d',$ts)));
$trow->appendChild($td);
$pastday=$ts;
$ts+=$day;
if(date('d',$ts) $tbody->appendChild($trow);
$trow=$doc->createElement('tr');
$td=$doc->createElement('td');
$h2=$doc->createElement('h2',date('F Y',$ts));
$td->appendChild($h2);
$td->setAttribute('colspan','7');
$trow->appendChild($td);
$tbody->appendChild($trow);
$trow=$doc->createElement('tr');
for($j=0; $j < date('w',$ts);$j++) {
$td=$doc->createElement('td');
$trow->appendChild($td);
}
}
}
$tbody->appendChild($trow);
}
header('Content-Type: text/xml');
echo $doc->saveXML();
exit();


Is that the only way to do things?

No.

Is that the best way to do things?

Honestly probably not.

What would probably be the best is if I could bust out some awesome XPath and XSL 2.0 functions/elements - with the date-time/duration functions this would be trivial, so much so it would not make it to any trivia gameshow of any repute.

However, as your next trivia question - who's fighting this lameness - XQilla! Qilla on, dude, Qilla on.

So take it to your head, take it to your heart and remember Rand rocks. Goodnight Folks!

And God Bless.

Wednesday, November 4, 2009

Because even in the Calendar one can turn the page

Unless your on the web, unless you count turning the web page and I don't, but still here's a calendar:






2007










January
SunMonTuesWedThursFriSat
    

11

You're all bums you know

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

Care

28

29

30

31

   













February
SunMon TuesWed ThursFri Sat
    

01

02

03

04

05

06

07

08

09

10

11

12

13

Reasons

14

15

On Passion: Love, Fury, Ambition, Fanaticism, Devotion and all the rest

16

17

18

19

20

21

22

23

24

25

26

27

28

Transfat, life, and a whole lot of shaking going on

   












March
SunMon TuesWed ThursFri Sat
    

01

02

03

04

05

06

07

08

09

10

11

The Horror and the Glory and a bunch of other stuff

12

13

14

15

16

17

18

19

I feel so good I feel so numb yeah, or the work which becomes a new genre itself: The Rand Show

20

21

22

23

24

25

26

27

28

29

30

31













April
SunMon TuesWed ThursFri Sat

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

     












May
SunMon TuesWed ThursFri Sat
  

01

02

That which we wait for

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

The temptation of wheat or Azumanga Diaoh review

26

27

28

29

30

31

  












June
SunMon TuesWed ThursFri Sat
     

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

The blues of the younger years

26

27

Never Fear Comikier is here

28

29

30

For James













July
SunMon TuesWed ThursFri Sat

01

02

03

04

05

The Logician's Dilemma

06

07

08

09

10

11

12

13

Sometimes you're trukin' and sometimes you're trucked

14

15

16

17

The Scarecrow loses again, poor scarecrow

18

19

20

21

22

23

24

25

Template: The Rand Show

The type of publishing done for this blog.

The name of the blog

A description of the blog

Whether this blog can be promoted on Blogger

Whether this blog should be indexed by search engines

Whether this blog contains adult content

Whether Quick Editing is enabled

Whether to show a link for users to e-mail posts

Maximum number of things to show on the main page"

Unit of things to show on the main page

The number of the date header format

The number of the archive index date format

The number of the time stamp format

The time zone for this blog

Language for this blog

Whether to convert line breaks into tags in post editor

Whether to show the title field

Whether to show a related link box in the post composer

Whether float alignment is enabled for the blog

The template for blog posts

Whether to show comments

Who can comment

Default comment mode for posts

Whether to show comment backlinks on the blog

Default backlinks mode for posts

Comment time stamp format number

Blog comment form location

Whether to enable comment moderation

Number of days after which new comments are subject to moderation

Whether to require commenters to complete a Captcha

Whether to show profile images in comments

List of e-mail addresses to send notifications of new comments to

Email address to send notifications of new comments needing moderation to

Blog comment message

How frequently this blog should be archived

Whether to provide an archive page for each post

The type of feed to provide for blog posts

The type of feed to provide for blog comments

The type of feed to provide for per-post comments

URL to redirect post feed requests to

Footer to append to the end of each entry in the post feed

Comma separated list of emails to send new blog posts to

Secret from which the Mail-to-Blogger email address is derived

Whether Mail-to-Blogger posts should be immediately published

The BlogSpot subdomain under which to publish your blog

The access type for the readers of the blog.

The list of emails for users who have permission to read the blog.

The list of authors' emails who have permission to publish.

The list of administrators' emails for the blog.

26

27

28

Some dreams deserve to die

29

30

31

    












August
SunMon TuesWed ThursFri Sat
   

01

02

The Rand Show - The next level

03

Face it all up with the Facebook

04

You're not really white, you're more pinkish

05

06

It begins AGAIN!!!

07

08

Quotable, boatable, John

09

10

11

12

Things sometimes are as they are

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

A is A, and in any universe Luthor is Luthor

31

 












September
SunMon TuesWed ThursFri Sat
      

01

02

03

04

05

06

07

08

Shaving the Tom

09

10

It really begins again!!!

11

12

13

14

Even more quotable, even more boatable, roughly the same amount of John

15

16

17

18

19

20

21

22

All things end in madness

23

24

25

26

27

28

29

30

      












October
SunMon TuesWed ThursFri Sat
 

01

02

03

Come on, Let's Dance! Come on, Let's Dance! Baby!

04

05

Boatier or Quotier?

06

07

08

In the Garden of Eden, baby

09

10

11

12

Creep

13

14

15

16

Shoutout

17

18

19

20

21

22

23

24

25

A contrite heart

26

27

There's a reason Rand has only one arm

28

29

30

TV meets IV: result: Destruction of the World!!!

31

   












November
SunMon TuesWed ThursFri Sat
    

01

02

03

04

05

06

07

08

09

10

Karaoke equals awesome

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

Aelita, Queen of Mars

29

30

 












December
SunMon TuesWed ThursFri Sat
      

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

     








2008












January
SunMon TuesWed ThursFri Sat
  

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

Highly distractible, but nigh industructable

19

20

21

22

23

Ah, the savage winds of history

24

25

26

27

28

29

Mathimoto Speaks!!!

Me, Eddy, and the Oriental Arts

30

31

Five Def. of Pi's

  












February
SunMon TuesWed ThursFri Sat
     

01

Time to go down to the ground where the Buffulo Roam

02

03

04

05

06

07

And what of the Oriental in America?

08

Why plan when you can scheme?

The End of Empires and other such tales

09

10

11

Quotes! Boats! And more of the Rand you love!

12

The Man from Tallahasse

13

Time keeps on Schemin'

Istanbul once Constantinople

14

Happy St. Valentine's Day

Happy St. Valentine's Day!

15

Here's a little sparkle

16

17

MC Esher be mathin' out

18

19

20

21

22

Cause the History don't stop coming

23

History repeats itself, first as tragedy, second as farce

24

India, a Chronology: Part I

That's what I get for all that Scheming

25

26

27

India, A Chronology: Prologue

28

29

 












March
SunMon TuesWed ThursFri Sat
      

01

02

03

The Beginning of an Empire

04

Cause Math don't stop

05

06

That's what I'm talking about

07

It's time to come down

When history's being abused, who you going to call?

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Easter!!! Wooo!!!

Easter

24

25

Even Mathimoto Loves Quotes

Soviet History: More enigma than you can shake a stick at

26

27

28

We need a long-er burn

29

30

31

     












April
SunMon TuesWed ThursFri Sat
  

01

02

03

04

05

06

Shoutout to the other Rand Show

Poetry, oh sweet poetry

07

08

History = Awesome

Tiding over the Tides

09

10

11

12

13

14

Buzzing with the Comp. Sci.

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

   












May
SunMon TuesWed ThursFri Sat
    

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

Tipu, if not Sultan then what?

Primes, they aren't just for Transformers

28

29

30

If there were only a few more Ruskies

31













June
SunMon TuesWed ThursFri Sat

01

Let me hear you say math... MATH!!!

02

03

04

05

The Lord remains

06

Mathimoto's Real Complaint

The art of revision

07

Shout-out to some mad-awesome historians

08

09

10

11

Because Math rocks... and Raps

12

13

14

15

16

17

18

The Great Companion of Man

19

20

21

22

23

24

25

26

27

28

29

History is a mess, but I love it

30

     












July
SunMon TuesWed ThursFri Sat
  

01

02

03

lots of change = good, net-wise at least

Secrets are me-cret, I suppose

04

05

06

Happy St. Thomas' Day

07

Welcome now to the Robo-Bobo report

Civilized, Smivilized!

08

09

Mathimoto's Revamp

Check it out now: The History's Your Brother

10

11

A little news, well of me

A matter of empire

We're all quadratics too

12

13

14

15

16

Still on the Vacationing

17

18

19

20

21

22

23

History keeps on moving... Into the future

Cleaning out with Robo-Bobo

Or do it the sensible way: Top 5 tips

These things I do believe

Posting, posting, posting, gotta keep on posting

24

25

26

An Era of Extra-Ordinary Prosperity

27

What is happiness? Baby, don't hurt me, don't hurt me no more

28

29

30

31

  












August
SunMon TuesWed ThursFri Sat
     

01

02

03

04

05

06

07

08

09

10

Robo Bobo and the Complaint

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

      












September
SunMon TuesWed ThursFri Sat
 

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

    












October
SunMon TuesWed ThursFri Sat
   

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

 












November
SunMon TuesWed ThursFri Sat
      

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

      












December
SunMon TuesWed ThursFri Sat
 

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

   








2009












January
SunMon TuesWed ThursFri Sat
    

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31













February
SunMon TuesWed ThursFri Sat

01

02

03

04

The Return of the King

05

06

Rand's Adventures in Job Land

07

08

09

10

Working in a Gold Mine, but all the shimmers must fade away

11

12

13

The sleepy

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28













March
SunMon TuesWed ThursFri Sat

01

02

Two steps forward, one step forward, one sideways, and always twirling toward the future

03

Move Along, Move Along, Like I told you too

04

Because I am a ROCKET MAN...

05

I am not your carpet ride

06

07

08

09

10

It's a long way down to nothing at all... My oh My

11

12

13

14

15

Cause sometimes computing ain't for tooling

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

A Certain Burden to Things

31

Brannigan, begin again

    












April
SunMon TuesWed ThursFri Sat
   

01

02

03

04

Chasing down infinity

05

Space Oddity

06

07

Let not the sun be proud, lest I strike it from the sky

08

09

10

11

I follow he who has conquered death

12

Christ has Risen!

13

Twittering away the blues

14

15

Don't turn around again

A little poetry for the emotionary

16

17

18

19

20

21

Sometimes not knowing is okay, Not this time though

22

Because this is my path

23

Ah, the savage winds of history

24

25

A good old fashioned shootout between me and my brain

26

When I get older... they'll call me freedom

27

Me, Eddy, and that Oriental-Looking Fellow

28

Time to be a sneaky oriental

29

30

  












May
SunMon TuesWed ThursFri Sat
     

01

02

These are the songs we sing

03

Because I got to keep moving on

04

Archimedes Rules!!! Woo!!!

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

For some reason I can't explain, once you were gone it was never the same

      












June
SunMon TuesWed ThursFri Sat
 

01

02

03

04

05

06

07

08

09

10

11

Sooner or later everyone fails

12

Because the Rand Show is Comikier than yo'mama

13

Prithee, have thee heard of the Prism

14

15

What are you waiting for really

16

17

18

The Rand Show Comic : 300% More Comikier than Yo Mamma

The Rand Show #1

The Rand Show #2

The Rand Show #3

The Rand Show #4

Even in defeat, one can reap the dividends of peace

19

DOOOOM!!!

20

Just a little lonely

21

Cause all is poetry... even the web

22

23

24

25

Here's to you Michael Jackson, Salute

26

27

Fool me once, shame on you, fool me twice, I the fool

28

29

Scar tissue that I wish you saw

30

Vacation is not quite what I wanted

    












July
SunMon TuesWed ThursFri Sat
   

01

02

Because I'm easy, easy like Sunday morning

03

04

05

Let me sing these songs of freedom... but not right now

06

07

Now to get

08

Unfortunately we need to sleep before Brooklyn

09

So what do you want?

10

11

12

13

Because Doom don't go away

It's not just a crappy new Korn song

14

15

16

And when I am freedom will I be a waving flag?

17

18

19

20

21

22

Live and let doom

23

A meditation on Archimedes to satisfy the needy

24

To Africa, I think

25

26

27

I think there is a point here that you are missing

28

29

Waxing and waning before an upcoming storm

30

Character Runner

Hex Converter

31

 












August
SunMon TuesWed ThursFri Sat
      

01

02

03

Lest you think me always a fool

04

Jersey is more awesome than your state plus yo mamma

05

06

07

08

09

10

I'm back, not quite in black

11

12

How to turn a Facebook Friends List into a CSV

13

14

15

Even though Sally can wait, don't look back in anger

16

17

And so they all exploded

18

19

I suppose I was bold that day

20

21

22

23

Excuse me, please miss

And when destiny is not enough

24

25

A conversation doomed to happen

26

Jersey City here I am

27

28

29

30

31

     












September
SunMon TuesWed ThursFri Sat
  

01

Working like a turkey

02

Programming Is Awesome

03

04

05

06

Circles, Dots, Squares

Beastia Viri

None the less, Doom my friends, doom

07

08

09

Doom to the max, with giraffes: A conversation destined to happen

Tech Notes: XLSX

10

And if I can turn the stars blue can I follow you

11

12

13

Damn it didn't I tell you to Ultra-Relax!

14

15

16

17

18

19

20

Happy Reunion Day!

21

22

23

24

25

26

And I knew if I had a chance I could make those people dance

27

28

Welcome to the World of Rand

29

30

   












October
SunMon TuesWed ThursFri Sat
    

01

The inherent folly of internal isolationism

02

03

04

The Rand Show

Web Mess

Because it cannot begin again when its never over

05

06

07

08

A meditation on Morrie

09

10

11

12

Exile

13

14

And it all makes you want to scream

15

16

Funky PHP

17

18

19

20

Because the hand that feeds tastes good

21

22

23

24

Our Father who art in Heaven

25

26

27

28

And in the stone temple like a pilot I will light a fire

29

30

31

The Nicene Creed

The Apostles' Creed











November
SunMon TuesWed ThursFri Sat

01

02

Blaze ye stars, let me not see you whimper

03

Patience

04

Min Date

Calendarier