coding

Montag, 3. August 2009

inplaceeditor mit autocompleter

scriptaculous bietet sowohl einen inplaceeditor als auch einen autocompleter an. leider sind diese beiden jedoch separat.

falls jemand beide braucht - wie zb ich (von der firma aus) - müssen diese jedoch kombiniert werden. das ist aber kein problem.

meine variante
zwar könnten die änderungen auch direkt im quellcode von scriptaculous stattfinden, doch das ist imho eher die unschöne/unsaubere art. da man in javascript alles überschreiben kann, bietet sich diese (= meine) variante sehr gut an.

insgesamt sind 3 methoden davon betroffen, in denen kleine erweiterungen vorgenommen werden müssen.

go for it
der inplaceeditor weist den inputfeldern keine id zu. diese werden aber gebraucht, um vom autocompleter angesprochen werden zu können.
Ajax.InPlaceEditor.prototype.createEditField = function() {
  [...]
  // mod: add id to the input field
  if(this.options.acOn) fld.id = this.element.id+'_input';

  this._form.appendChild(this._controls.editor);
};

natürlich sollte der autocompleter nur solange wie nötig existieren, daher wird er nach der erstellung des inputfeldes erzeugt ...
Ajax.InPlaceEditor.prototype.enterEditMode = function(e) {
  [...]
  // mod: store the autocompleter element (for destroying afterwards)
  if(this.options.acOn) this._acElement = new Ajax.Autocompleter(
    $(this.element.id+'_input'),
    this.options.acDiv,
    this.options.acPath+'?'+this.options.acParam+'='+this.element.id,
    this.options.acOptions
  );
};

... und nach dem editieren wieder gelöscht.
Ajax.InPlaceEditor.prototype.leaveEditMode = function() {
  // mod: destroy the autocompleter element
  if(this.options.acOn) delete this._acElement;
  [...]
};

erklärung
insgesamt sind 4 selbstdefinierte variablen aktiv, die alle über die optionen des inplaceeditors mitübergeben werden können (zur konfigurierung des autocompleters).
  • acOn: boolean - zum ein- und ausschalten des autocompleters
  • acDiv: string - der div-container für die liste des autocompleters
  • acPath: string - pfad zur datei, die die autocompleter-ergebnisse zurückliefert
  • acParam: string - zusätzliche parameter, die zur obigen datei mitübergeben werden
beispiel
code (html)
<input type="text" id="myElement" name="myElement" />
<div id="inplaceEditorList" style="display:none;"></div>

code (javascript)
<script type="text/javascript">
  new Ajax.InPlaceEditor('myElement','file.php',{
    acDiv:'inplaceEditorList',
    acPath:'autocompleterList.php',
    acParam:'elem',
    acOn:1
  });
</script>

zum abstellen des (meiner meinung nach) nervigen gelben highlight effekts fügt man diese zeilen hinzu:
Ajax.InPlaceEditor.DefaultOptions.highlightEndColor = 'transparent';
Ajax.InPlaceEditor.DefaultOptions.highlightColor = 'transparent';

falls es jemand geholfen hat, wäre ich über ein kommentar froh ;)

mfg mailo

ps: es wurde die version 1.8.1 von scriptaculous verwendet!

Sonntag, 12. April 2009

minesweeper

was macht man wenn der abgabetermin der diplomarbeitsrohfassung immer näher rückt und noch viel zu tun ist?

genau! - man setzt sich hin und programmiert minesweeper in javascript! :D

vorhaben
  • minesweeper in javascript programmieren
  • mit purem javascript (ohne irgendwelche libraries oder frameworks)
dauer
  • gui und basis logik => 3h
  • logik für die 0-felder* => 1,5h
anleitung
  • aufspüren der 10 minen auf dem 9x9 feld
  • ein feld gibt preis wie viel minen direkt im umfeld liegen
  • marker setzen bzw löschen mit strg+klick
ergebnis
minesweeper (html, 4 KB)

enjoy and have fun!

mfg mailo

* wenn auf ein 0-feld geklickt wird, sollen alle benachbarten 0-felder aufgedeckt werden

Samstag, 11. April 2009

mach es richtig!

diesmal ein blogeintrag mit (vor)programmierten wortwitz.

immer/meistens/oft wird man dazu aufgefordert etwas richtig zu machen.
dazu habe ich ein kleines skript bzw einen einzeiler vorbereitet ;)

anforderungen
  • "es" (= s)
  • richtig (= true) machen
vorkehrungen
  • die variable s definieren (wertzuweisung egal)
  • beispiel: var s;
ergebnis
  • die variable s wird true (= richtig)
  • zwar doppelt so lang wie s=true; aber nicht so offensichtlich :)
der "mach es richtig"-einzeiler (in javascript)
s=!!!s?!s:!!s;

falls es jemand nicht verstanden hat - macht nichts, kein weltuntergang ;)

mfg mailo

ps: für die, die "es falsch" machen wollen
s=!!!s?!!s:!s;

Sonntag, 22. März 2009

javascript mal anders

da ich mich im diplomarbeitsschreibstress befinde, hier nur ein kurzer blogeintrag.

google's interne und externe entwickler und designer haben einige beispiele programmiert, was so alles mit javascript möglich ist.

beispiele zum selbstausprobiern und inklusive video: chromeexperiments
ich habe zwar erst einige angesehen, aber mein favourite ist bislang der browser ball.

was haltet ihr davon?

mfg mailo

Montag, 9. Februar 2009

ein ganz besonderer tag

ich freue mich schon auf den 14. februar 2009 - dieser tag ist ein toller tag!

wer glaubt, dass meine euphorie diesem tag gilt, weil (zufällig) "valentinstag" ist, der hat sich geschnitten - ich bin informatiker ;)

am 14. februar 2009 um 00:31:30 (MEZ=UTC+1) lautet der unix-timestamp:
1234567890

in php-code ausgedrückt:
echo strtotime("14.02.2009 00:31:30");  // 1234567890

bzw. anders herum:
echo date("d.m.Y H:i:s",1234567890);  // 14.02.2009 00:31:30

auf wikipedia sind weitere besondere tage/werte aufgelistet.

was meint ihr dazu? - schon ein cooler tag, oder?

mfg mailo

UPDATE: countdown

Samstag, 7. Februar 2009

ajax.request und ajax.updater

einer der vielen vorteile bei der verwendung von prototype ist die recht einfache verwendung von ajax requests. so braucht man sich überhaupt nicht um kümmern, ob nun eine instanz vom XHMHttpRequest() (firefox, opera, safari) oder vom ActiveXObject("Msxml2.XMLHTTP") bzw ActiveXObject("Microsoft.XMLHTTP") (internet explodierer) erzeugt werden muss.

da sich nun ajax.request und ajax.updater recht ähnlich sehen, kann man durch die "macht der gewohnheit" auch etwas übersehen. ich habe es also geschafft, dass etwas doppelt geladen wird und wusste zuerst nicht warum, obwohl die lösung doch ganz einfach ist/war ;)

hier mal die beiden, die das gleiche ergebnis liefern (farblich gekennzeichnet):

new Ajax.Request('file.html', {
  method:'post',
  evalScripts:true,
  onComplete:function(transport) {
    $('container').update(transport.responseText);
  }

});

new Ajax.Updater('container','file.html', {
  method:'post',
  evalScripts:true
});

wie zu sehen ist, erspart man sich durch den ajax.updater (= die spezielle form des ajax.requests) ein bisschen tipparbeit. vor allem zu empfehlen ist der updater, wenn die zu ladende datei ohne weitere verarbeitung gleich in einen container geladen werden soll, da dies automatisch geschieht.

aus gründen der interaktion ist es sinnvoll bei größeren ladezeiten den benutzer über den ladezustand zu informieren, dass es nicht den anschein hat, dass sich nichts tut. meist wird hier ein ladesymbol angezeigt (vgl sanduhr bei windows).

bei einem vorhanden ajax.request sieht dies möglicherweise so aus (vereinfacht dargestellt):

new Ajax.Request('file.html', {
  method:'post',
  evalScripts:true,
  onCreate:function() {
    $('container').update("<img src=\"path/to/loading.gif\" />");
  }
,
  onComplete:function(transport) {
    $('container').update(transport.responseText);
  }
});

hier wird beim erzeugen des requests (onCreate) das ladesymbol in den container geladen und wenn die datei fertig geladen wurde (onComplete) durch den eigentlichen content ersetzt.

da aber bereits ein ajax.updater vorhanden war und ich einfach nur die onCreate und onComplete funktion kopiert habe (i love copy&paste although sometimes it's evil), kam es zum doppelten laden:

new Ajax.Updater('container','file.html', {
  method:'post',
  evalScripts:true,
  onCreate:function() {
    $('container').update("<img src=\"path/to/loading.gif\" />");
  },
  onComplete:function(transport) {
    $('container').update(transport.responseText);
  }

});

glücklicherweise kam ich bei genauerem hinsehen gleich auf die lösung.

mfg mailo

Mittwoch, 4. Februar 2009

javascript pro

im zuge einer diplomarbeit liest man sich in das themengebiet (bei mir u.a. javascript, prototype, script.aculo.us) recht gut ein. javascript ist eine skriptsprache, die sehr vielfältig ist.

Der als ECMAScript (ECMA 262) standardisierte Sprachkern von JavaScript beschreibt eine moderne, schlanke, dynamisch typisierte, objektorientierte aber klassenlose Skriptsprache, die dennoch allen objektorientierten Programmierparadigmen unter anderem auch – aber eben nicht ausschließlich – auf der Basis von Prototypen gerecht wird. Obwohl im Grunde eine funktionale Skriptsprache, lässt sich in JavaScript sowohl prozedural als auch rein funktional bzw. objektorientiert programmieren.

dadurch ist sie für beginner nicht schlecht, da der programmierstil ziemlich flexibel ist. doch aufgrund der vielfältigkeit kann sie auch zur verwirrung führen. bislang habe ich immer gedacht, dass ich sehr viel bezüglich der programmierung von javascript weiß, doch wieder einmal wird der spruch "man lernt nie aus!" bestätigt.

wer sich nun vom novicen zum professional in sachen javascript weiterentwickeln will, dem empfehle ich folgende literatur: meiner meinung nach sind diese bücher sehr gut geschrieben (inkl. vieler code-beispiele) und ich habe sehr viel dazugelernt (besonders einige feinheiten, die beim erstellen eines frameworks essentiell sind).

mfg mailo

ps: für die hardcore-javascriptler die ecma-spezifikation ;)

NOTE: für alle die es noch nicht wissen: javascript == ecmascript

Donnerstag, 11. Dezember 2008

true or false

heute wäre fast das weltbild von einigen von uns (inklusive mir) zerbrochen ;)
beim bug fixing hat sich etwas interessantes herausgestellt:

(0=='string') ergibt true

viele (auch ich) dachten aber, dass das ergebnis dieses vergleichs false ist.

meine logik:
-> 0 wird als false behandelt
-> 'string' ist kein leerstring und daher true
-> daraus ergibt sich: (false==true) ist false

diese logik stimmt auch:
var_dump((bool)0);         // bool(false)
var_dump((bool)'string');  // bool(true)

sonderfall: beim vergleich von einem string mit einem integer wird der string zuerst in einen integer umgewandelt und dann erst verglichen [string in a numeric context]:
var_dump((bool)((int)'string'));  // bool(false)

somit ergibt sich:
var_dump((bool)0);                // bool(false)
var_dump((bool)((int)'string'));  // bool(false)
und (false==false) ist true.

anmerkung: wenn ein string in einen integer konvertiert wird, ist dieser immer 0 außer er beginnt mit einer zahl.
var_dump((int)'string');   // int(0)
var_dump((int)'9string');  // int(9)

FYI
-> typenvergleich: [php.net] bzw [blueshoes.org]
-> casting: boolean | string | integer

mfg mailo

Samstag, 1. November 2008

mein geekend

das ist KEIN tippfehler!

es ist eine kombination von geek und weekend. da ich dieses wochenende wieder recht geekig verbringe, habe ich mir gedacht, dass es passend ist. meine freunde wissen, dass ich ein computer freak und in dieser hinsicht entsprechend abgedreht bin ;)

woran erkennt man das an mir?
hier ist ein kleiner vereinfachter ausschnitt wie ich denke bzw programmiert bin (javascript-syntax):

var arrIndoorActivities = new Array('coding', 'reading (a book)', 'watching tv/movie', 'programming', 'i-net surfing', 'computer stuff');
var arrOutdoorActivities = new Array('playing freestyle soccer', 'visiting someone', 'go to the cinema', 'random things');

if(bolWeekend) {
  if(bolIll) {
    if(bolHeavyIllness) {
      lyingInBedAndGetHealthy();
    } else {
      doActivity(
        arrIndoorActivities[Math.random()*arrIndoorActivities.length]);
    }
  } else {
    if(Math.random()*10<3) {
      doActivity(
        arrIndoorActivities[Math.random()*arrIndoorActivities.length]);
    } else {
      doActivity(
        arrOutdoorActivities[Math.random()*arrIndoorActivities.length]);
    }
  }
} else {
  doActivity(...);
}

dieser code kann natürlich noch kürzer gehalten werden, nur dann wird er schwer leserlich (aber so denke ich) :D

aber solange ich mich nicht als klasse darstelle/ausprogrammiere, ist alles noch okay - vielleicht verstehen mich die meisten nicht, da sie keine programmierer sind ;)

so - genug vom unsinn!
eigentlich wollte ich nur darauf hinaus, dass ich gestern (an einem freitag!) nach der arbeit irgendwie das bedürfnis verspürte five stones in javascript zu programmieren ;)

nach obigem schema war ich zu krank, um fort zu gehen und zu gesund, um im bett zu liegen. da auch die einträge coding, programming und computer stuff recht ähnlich sind, war die wahrscheinlichkeit größer, dass eines davon zutrifft.

nach ca 2,5 stunden hatte ich ein lauffähiges programm und konnte sowohl gegen mich als auch gegen den selbstprogrammierten bot spielen. natürlich war ich ihm intelligenzmäßig überlegen, da ja ICH IHN programmiert habe - und nicht umgekehrt ;)

er setzt eben nur zufällig seine steine, aber wenn man sich "anstrengt", kann man ihn auch gewinnen lassen. geplant ist, dass ich meinem bot eine höhere intelligenz verpasse.

weiters habe ich nun meinen clean-up durchgeführt und ein generelles layout zusammengebastelt, wo man im browser zwischen den voreingestellten farben mittels stylesheets wechseln kann.

mfg mailo

Sonntag, 21. September 2008

thecoda/thecrypta

am freitag nachmittag fing es mit ein bisschen kopfweh an. doch wer hat schon zeit krank zu werden? - ich doch nicht! ;)

also sagte ich sowohl dem fußball spielen als auch dem "friday nightlife" ab und ging zeitig ins bett. am späten vormittag des samstags mehr oder weniger fit aufgestanden, wollte ich mich noch schonen und da es draußen kalt war, entschied ich mich für indoor activities.

doch was kann man in der wohnung schon treiben? als eingeschweißter informatiker und programmierer fiel ich wieder in mein altes verhaltensmuster und saß vor dem laptop.

ergebnis: thecoda/thecrypta

frage: wtf ist ein thecoda/thecrypta?

antwort: eine einfache webapplikation mit der verschiedenes kodiert/dekodiert und ver-/entschlüsselt werden kann.

daher auch die wortspielerei bei der namensgebung: "the coda" ("der kodierer" bzw "dekoder", was beide funktionen beinhaltet) und das gleiche schema bei "the crypta" ;)

eigentlich ist es eine einfache php-seite, die die nativen funktionen von php verwendet, ein bisschen mit javascript für mouseover/mouseout-events gepimpt und natürlich mit css gestylt ist.

die motivation war einmal eine solche applikation zu schreiben. weiters habe ich irgendwie ein faible für verschleierungen bzw verschiedene repräsentationsarten und wie diese genutzt werden können.

um nun das big picture der applikation zu sehen, habe ich eines angefertigt: [big picture]
btw: so groß ist es nicht, ursprünglich 1380 x 1380 pixel, nur hat es flickr auf 1024 x 1024 pixel skaliert - kA warum.

ein bisschen muss ich noch daran feilen (input validation, error handling), aber sonst finde ich es eigentlich recht gelungen (ja, mein innerer kritiker ist auch mal gut aufgelegt ;)

mfg mailo

ps: ich bin noch gesund und habe nicht vor diesen zustand zu ändern ;)

user status

Du bist nicht angemeldet.

archiv

Juni 2026
Mo
Di
Mi
Do
Fr
Sa
So
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
 
 
 
 
 
 

hinweis

die in diesem blog enthaltenen beiträge dienen ausschließlich dem informationszweck!

der autor übernimmt KEINE HAFTUNG für jeglichen missbrauch dieser informationen!

latest comments

Kumpulan Cerita Seks...
Kumpulan Cerita Seks Dewasa Terbaru 2017 Cerita Sex...
Cerita Sex (Gast) - 27. Feb, 02:58
St Patricks' Day Symbols...
The parade has more than 150,000 participants and attracts...
st patricks day t shirt (Gast) - 23. Feb, 14:08
John
Exclusively at Target 42 Bluray Combo Pack with exclusive...
Smithk112 (Gast) - 25. Mai, 20:10