“But how do I find out?”

“But how do I find out what I search for?”, a friend asked the other day, “Google cannot help me find information that I need”. This friend is in the process of completing a thesis on social networks.

Google, Yahoo! Search, Bing and the rest are tools that help us search information already available. Unfortunately they are not mind readers, plus vast though it may be, indexed information on the web is not all available information. Years ago, when put in the same situation, my post started with “I have a silly question” and got back two answers, the answer to my question and that “Silly questions are the ones never asked; there are no silly questions”. So whenever in trouble, when your favorite search engine (or your ability to ask it) seems limited, ask the ultimate search engine:

People

The best answers I have ever got for questions that troubled me were from humans, be it in person, telephone, the USENET or even mailing lists. My advice to her was to locate and subscribe to a mailing list relevant to her subject (in her case SOCNET) and ask people there. Impressive things happen when you ask people instead of machines. Ideas spring and flourish and (human) networks form. Just do not ask anyone to do your homework for you.

Δεν είμαστε υπηρέτες

Από μια λίστα staff που διαβάζω:

“Το καλώδιο δικτύου μου τα είχε παίξει και επειδή δεν βρήκα κανένα άλλο πρόχειρο (έψαξα και στη ντουλάπα σου) πήρα του Σ*****. Χρειάζομαι όμως ένα πιο μακρύ. Οπότε μπορέσεις σε παρακαλώ φτιάξε μου ένα.”

Για όποιον βιάζεται και μπαίνει στον κόπο (α) να ψάξει στη ντουλάπα κάποιου άλλου και (β) να πάρει το καλώδιο του διπλανού του, το Πλαίσιο για παράδειγμα έχει τα 15m UTP cat 5 στα €5,77 και τα 10m στα €3,99.

Εάν πάλι το συγκεκριμένο μήκος δεν βολεύει και υπάρχει κουλούρα διαθέσιμη, υπάρχουν και οδηγίες.

Δεν είμαστε σκλάβοι.

Studies in the Economics of Transportation

While reading Nagurney‘s “Comment on Catching the Network Science Bug“, I was fascinated that “Studies in the Economics of Transportation”, which was written in 1956 was mentioned. After all, Network Science is supposed to be “newer” than that.

For anyone interested the book is available from the RAND classics section. A more readable PDF is located here.

I will not claim that I have given the book anything more than a brief look. However I read “A Retrospective on Beckmann, McGuire and Winsten’s Studies in the Economics of Transportation“.

This was not the first time that I saw this book being cited: It is also cited in Preface to “On a Paradox of Traffic Planning” (a preface to the English translation of Braess‘s “On a Paradox of Traffic Planning“ which introduces Braess’s Paradox).

Sometimes the titles stick to your head, I guess.

10

Από το εξώφυλλο του Πρωταθλητή:

Πρωταθλητής, 2009-09-23
Πρωταθλητής, 2009-09-23

Έτσι όπως είναι προπονημένη η ομάδα, ο Zico άνετα φοράει στολή και παίζει. Να δούμε και καμιά “μπανάνα”.

– Μόνο για την ομάδα μας γυρίζει στο ποδόσφαιρο ο Πελέ!

Εμείς έχουμε μέλος τον Πελέ και προπονητή τον Λευκό Πελέ. Για να δούμε.

Με την ευκαιρία, αλίευμα από το twitter, χάρη στον @Jimbo77:

Score, 2006-09-23
Score, 2006-09-23

OneWebDay

For this year’s OneWebDay, I simply quote from “Doctor for Two Decades“:

“I’ve seen the Internet go from E-mail to Twitter. I’ve seen fax machines and CDs go from amazing technologies to has beens. And computers got much faster and smaller. I no longer have time for a restroom break when I LaTeX a paper.”

And like the author notes: “I got to watch it all in real time“

(previous) (next)

Conway’s Game of Life implemented in Processing

Yesterday’s ugliness in implemented in Processing:

class Cell {
  int x;
  int y;
  int size;
  int live;

  Cell(int tx, int ty, int ts, int tl) {
    x = tx;
    y = ty;
    size = ts;
    live = tl;
  }

  void display() {
    stroke(0);
    if (live == 0) {
      fill(209);
    } else {
      fill(255);
    }
    rect(x, y, size, size);
  }

  void display(int c) {
    stroke(0);
    fill(c);
    rect(x, y, size, size);
  }
}

Cell[][] grid;
int[][] next;
int maxI;
int maxJ;
int size = 10;
int start = 0;

void setup() {
  size(900, 500);
  background(255);

  maxI = floor(width / size) - 1;
  maxJ = floor(height / size ) -1;
  grid = new Cell[maxI][maxJ];
  next = new int[maxI][maxJ];

  noLife();
}

void noLife() {
  for (int i = 0; i < maxI; i++) {
    for (int j = 0; j < maxJ; j++) {
      grid[i][j] = new Cell(i * size, j * size, size, 0);
      next[i][j] = 0;
      grid[i][j].display();
    }
  }
}

void draw() {
  if (start == 1) {
    runLife();
    delay(200);
  }
}

void mouseClicked() {
  if (start == 1) {
      noLife();
      start = 0;
  }

  if ((mouseX < maxI * size) && (mouseY < maxJ * size)) {
    int i = floor(mouseX / size);
    int j = floor(mouseY / size);
    if (grid[i][j].live == 1) {
      grid[i][j].live = 0;
    } else {
      grid[i][j].live = 1;
    }
    grid[i][j].display();
  } else {
    start = 1;
  }
}

void runLife() {
  int i0;
  int i1;
  int j0;
  int j1;
  int alive;

  for (int i = 0; i < maxI; i++) {
    for (int j = 0; j < maxJ; j++) {
      i0 = i - 1;
      i1 = i + 1;
      j0 = j - 1;
      j1 = j + 1;

      if (i0 < 0) i0 = maxI - 1;
      if (j0 < 0) j0 = maxJ - 1;
      if (i1 == maxI) i1 = 0;
      if (j1 == maxJ) j1 = 0;

      alive = 0;

      if (grid[i][j0].live == 1) alive++;
      if (grid[i1][j0].live == 1) alive++;
      if (grid[i1][j].live == 1) alive++;
      if (grid[i1][j1].live == 1) alive++;
      if (grid[i][j1].live == 1) alive++;
      if (grid[i0][j1].live == 1) alive++;
      if (grid[i0][j].live == 1) alive++;
      if (grid[i0][j0].live == 1) alive++;

      if ((grid[i][j].live == 1) && ((alive == 2) || (alive == 3))) {
        next[i][j] = 1;
      } else {
        next[i][j] = 0;
      }

      if ((grid[i][j].live == 0) && (alive == 3)) {
        next[i][j] = 1;
      }
    }
  }

  for (int i = 0; i < maxI; i++) {
    for (int j = 0; j < maxJ; j++) {
      grid[i][j].live = next[i][j];
      grid[i][j].display();
      next[i][j] = 0;
    }
  }
}

Two things that I find cool about Processing:

  • You can export your application as a Java applet.
  • Processing.js

Conway’s Game of Life implemented in SmallBasic

At work we have a new junior system administrator. Given the fact that he is junior and lacks even programming experience, I gave him the following assignment:

– Implement Conway’s Game of Life. Pick the programming language of your choice, the user interface of your choice, read anything you believe is relevant, ask anyone (including me) for advice, make the assumptions that suit you (and document them). Just someday come back with a demo.

Life’s rules are simple:

  • Any live cell with fewer than two live neighbours dies, as if caused by underpopulation.
  • Any live cell with more than three live neighbours dies, as if by overcrowding.
  • Any live cell with two or three live neighbours lives on to the next generation.
  • Any dead cell with exactly three live neighbours becomes a live cell.

His language of choice is PHP (as I said he lacks programming experience and PHP is the only language he has ever written anything meaningful in). Given that a system administrator must be proficient at least in sh, awk, Perl and some Python (and VBScript or Windows PowerShell if working in a Windows environment) I expect a change of choice soon. He will see the light of C later.

Upon hearing about the assignment a colleague made an unfortunate humorous attempt to challenge me: If I am to put an assignment to the junior administrator, why don’t I implement it too? Due to the law of unintended consequences, this was an unfortunate remark that was done in front of the junior administrator (more on why this was a bad choice of timing later).

Continue reading “Conway’s Game of Life implemented in SmallBasic” →