Jobbsökeri

Jag har varit på intervjuer hos två företag, i två omgångar. Första varvet kände jag mig en aning osäker på om det var rätt inriktning av jobb jag sökte, andra varvet kändes det mer rätt och jag tror jag kommer kunna utvecklas både på personligt och professionellt plan.

Första uppföljningsintervjun avslutades på ett ganska dråpligt vis, jag tweetade minuterna efter …

Avslutade anställningsintervjun med att trampa på kontorshunden 🙁

Tweet

Hopperligen avgör inte det om jag får jobbet eller inte.

Andra uppföljningsintervjun sattes jag mittemot tre herrar som läst och utvärderat min kod som jag skickat in som arbetsprov, som lösts enligt bifogade anvisningar, inga konstigheter. De gillade vad de såg och var mycket trevliga, småprat om ditt och datt hanns också med.

Jag får snart veta om något av företagen vill erbjuda mig arbete och jag hoppas att jag får det omåttligt lyxiga förmånen att få väga företagen mot varandra och välja … det är nog få förunnat att få göra så i dagens läge. Jag tycker båda företagen verkar ha trevlig utvecklarmiljö, där tyck, tänk och argument tas in i diskussioner och kan leda framåt/uppåt vad gäller lösningar på problem.

Båda företagen ligger på attraktiva adresser i Stockholms innerstad och på lagom promenadavstånd från Stockholms Central, något som för mig personligen är positivt då jag försöker röra på mig mer. Att båda företagen även erbjuder friskvård med gymkort, gör dem än mer intressanta.

Det är med stort intresse jag ser fram emot att få svar från dem, samtidigt är jag ivrig med att få “komma igång” igen, då jag varit arbetslös sedan början av November.

PHP Optimization, Randomness at work

I stumbled across a piece of code that were acting up, instead of 1048575 possible combinations (0x0 through 0xFFFFF hexadecimal) it varied between 16 distinct combinations … when executed a couple of thousands times in a tight loop.

	public static function generateBase16Code() {
		$chars = "0123456789ABCDEF";
		srand();
		$result = '';
		for ($i = 0; $i < 5; $i++)
			$result .= substr($chars, rand() % strlen($chars), 1);

		return $result;
	}

It produces a string of 5 chars, hexadecimal (0-9 & A-F) in a rather difficult way,

  • Define which characters to use in a string
  • Seed the rand()-function with srand()
  • Prepare a string to store the result in
  • Loop 5 times, where ..
    • A character is chosen from the string, based on "rand() modulo string-length", concatenated to the result-string
  • Return the generated result-string to caller

.. I thought for at few seconds and commented out the above code and replaced it with this;

	public static function generateBase16Code() {
		mt_srand();
		return strtoupper(substr('00000' . dechex(mt_rand(0x0,0xfffff)),-5,5));
	}

.. This could be a one-liner, but I wanted to make sure the random function were seeded properly, therefore two lines of code. The randomness factor is way higher and the function overall is faster, as it doesn’t loop and does string-concatenation only once, instead of at least five times. Also mt_srand() and mt_rand() uses the Mersenne Twister for better randomness, it could be tweaked further with a chosen seed for mt_srand().

Creeper API

Igår satte jag igång med CreeperFramework API på allvar. Att börja med en ping-funktion, för att möjliggöra server-server kommunikation för att kringgå blockering av domän/ip. Enkelt och lightweight, enligt KISS (Keep It Simple Stupid).

Börjat skissa på andra smör-och-bröd-funktioner, för att dynamiskt hämta information on-demand. Är öppen för idéer angående vilka funktioner som kan tänkas behövas, kommentera!

Några av grundtankarna är att kunna servera resultat i Atom, RSS, XML, JSON, OPML och CSV. Missat något?

API’t kommer vara versionerat för att inte bryta kompabilitet, siktar på att försöka hålla tre versioner bakåt när det blir dags. Alla skriv-funktioner kommer kräva username/password medan läs-funktioner blir öppna, som även cache’as och fördröjs med 15 sekunder upp till 5 minuter beroende på funktion.

Jag har fått synpunkter på tidszonen jag använder, GMT+0000, det är ett genomtänkt beslut och ingen slump. Framöver kommer MediaCreeper lanseras internationellt och GMT-standard tid känns mest “rätt”.

Eventuellt kommer jag sätta upp en blog på MediaCreeper för att samla allt relaterat material på ett och samma ställe med engelska som språk att kommunicera på.

Mera WordPress-hack

Jag har just uppdaterat/modifierat ett WordPress plugin som jag använder tillsammans med Akismet för att spärra/blockera kommentars spam; Akismet htaccess writer — som jag “justerat” att blockera C-nät (IPn i formen AAA.BBB.CCC.DDD, där blockerings mönstret blir AAA.BBB.CCC/24 — 24-bitars adresser) i stället för specifika och enskilda IPn. Den påverkar filen .htaccess som läses av Apache (webserver) som i sin tur avgör om besökarens IP skall tillåtas eller blockeras.

Jag tror det är mycket mer effektivt, då många kommentars-spam kommer från samma C-nät och förmodligen är Zombie-maskiner. Samtidigt är det även risk för att spärra ut riktiga besökare som kommer från samma nät — dock känns det som en blog skriven på svenska som besöks mest av svenskar, att jag kan ta den risken, för det handlar mest om IP-adresser från asien och sydamerika som blockeras.

Samtidigt passade jag på att justera urvalsfrågan att returnera endast unika IP-adresser och samtidigt sortera dem i decimal-form.

Jag skickade den uppdaterade/tweakade källkoden tillbaka till upphovsmannen- eller kvinnan för att förhoppningsvis få med förändringarna i nästa version.

Update 2009-07-15: Det verkar fungera, strömmen av spam-kommentarer har avtagit markant, från 42 till 46 (i spam-kommentarskön), 4 på ett 3 dagar mot normalt 3-4 varje dag. Kanske lite tidigt att jubla eller fira på något sätt men det gör lite skillnad.

WordPress blir bättre

Efter att ha spenderat lite tid idag med att härja runt med WordPress upptäckte jag en bugg, provade med flera varianter och samtliga misslyckades. Loggade in på trac.wordpress.org och postade en bugg-rapport.

Jag har inte hunnit kika på någon lösning för problemet ännu, det är lite lagom komplext. Buggen, som visar sig när man försöker spara en länk i WordPress under “Manage Links”, med tecken som “å”, “ä” eller “ö” i en länk-URL. WordPress protesterar inte men strippar i tysthet av alla tecken med ringar eller prickar — en URL som till exempel http://www.hallå.se/ blir http://www.hall.se/

Troligtvis är det en regular expression som är lite för snävt konstruerad, man har helt enkelt inte tänkt på att man nu för tiden även tillåter bokstäver med ringar, prickar och diverse krokar och kringlor på i domännamn. De flesta webbläsare av rang (dock inte MSIE6 eller tidigare/sämre) klarar av dessa, då borde även WordPress klara av det.

Inte riktigt vad man önskar, det jag fick göra för att komma runt problemet var att lirka fram motsvarande IDN-domännamn. IDN-motsvarigheten till exemplet är xn--hall-toa.se. Konverteringar kan göras på IDN-Konverterare.

Jag hackar WordPress

Jag var inte riktigt nöjd med hur WordPress fungerade efter jag hade uppdaterat/uppgraderat till WordPress 2.6, så jag kollade hur högt rankade bloggar länkar taggar. Därefter satte jag mig och slängde ihop lite kod för att åstadkomma länkning av taggar. Nedan delar jag med mig av koden, för den som är lite händig med PHP kan själv göra ändringar. Jag lämnar ingen som helst support på koden, you’re on your own lixom. Kommentera gärna om du använder koden, du får länk tillbaka genom CommentLuv! 🙂

I WordPress admin, gå till Design, vidare till Theme Editor och välj sedan Main Index Template (index.php) och klistra byt ut kodsnutten ..

<?php get_tags(); ?>

… mot …
<?php if(kakhack()) { ?>
<p style="border: 1px solid #ddd;background-color: #eee;padding: 3px;">
<span class="taglinks"><?php echo(makeTagLinks('bloggar.se: ','http://bloggar.se/om/')); ?></span><br />
<span class="taglinks"><?php echo(makeTagLinks('knuff.se: ','http://knuff.se/q/')); ?></span><br />
<span class="taglinks"><?php echo(makeTagLinks('bloggtips.se: ','http://bloggtips.se/kategori/')); ?></span>
<?php } ?>

… sedan sparar du och väljer Theme Functions (functions.php) och klistrar in koden nedan högst upp i koden.

function kakhack() {
  $posttags = get_the_tags();
  if ($posttags) {
    return true;
  } else {
    return false;
  }
}

function makeTagLinks($link_prefix_text,$link_uri_base) {
  $result = "";
  $posttags = get_the_tags();
  if ($posttags) {
    $result = $link_prefix_text;
    foreach($posttags as $tag) {
      $result .= '<a href="' . $link_uri_base;
      $result .= rawurlencode(strtolower($tag->name));
      $result .= '" ';
      $result .= 'title="' . htmlentities($tag->name) . '" ';
      $result .= 'rel="tag"';
      $result .= '>';
      $result .= htmlentities($tag->name);
      $result .= '</a>, ';
    }
    $result = preg_replace('/\x2c\x20$/','',$result);
  }
  return $result;
}

Koden är ganska enkel och behöver inte förklaras i detalj, jag har med flit låtit bli att kommentera koden. Förstår du inte vad den gör, låt bli att använda den.

Produktiv och massor av idéer

Jag har producerat massor av saker idag, trycksaker, men inget jag egentligen vill producera, som vacker kod och finurliga lösningar. Inte särskilt produktivt på utvecklingsfronten, vilket ställer till vissa problem, jag fick passa vidare ett projekt till mina kollegor.

När jag satt på tåget hem med Damen och flickorna som spenderat större delen av dagen på Naturhistoriska, tänkte jag på hur man relativt enkelt skulle kunna slänga ihop en Firefox add-on, som på begäran klumpar ihop några väl valda och möjliga trigger-ord och spottar ut resultatet där man råkar ha markören, som tex. i den inmatningsruta man skriver blog-inläggen. Lite bete för FRA att hugga på.

Gjorde lite research på Firefox add-ons, funderade ut några fiffiga lösningar och skulle sätta igång, då är klockan strax efter midnatt och det känns inte riktigt som jag orkar göra något, utom möjligtvis att gå och lägga mig.