Marcel Eichner // Ephigenia

  • Home
  • Illustration
  • Code
  • Kontakt

Aktuelle Projekte

Horrorblog.org
jQuery.slideShow
Franklin
code.marceleichner.de

This Blog-Website is built with Harrison!

Blogs & Freunde

Gimmixx
Martin Fleck
Torsten Bergler
Jens Franke
Robokid
Peter Kröner
Polycoder
Coding Horror
Lotterliebe
CodeBalancer
Pseudocoder
Migrador
Piv-Berlin, Immobilienverwaltung Verwaltung Berlin Peter Arold Dachdeckermeister im Vogtland und Werda blogoscoop

#503

14.07.2010 11:40
0 Kommentare
Share
  • firefox
  • tool
  • open
  • source
  • console
  • Nerd
  • extension
Screenshot vom Vimperator in Aktion
Auf dem LinuxTag 2010 hat Caspar die Vimperator Erweiterung für den Firefox Browser vorgestellt die ich mir zu Hause gleich zu Gemüte geführt habe.

Die Erweiterung ist total für Nerds gedacht. Man kann den kompletten Browser, alle Links und Befehle von der durch den Vimperator hinzugefügten Kommandozeile aufrufen. So bekommt man noch mal mindestens 100 Pixel in der Höhe Platz für die Websites und gerade auf Netbooks ist das eine Menge Platz!

Nach einer leichten Einführungsphase um die wichtigsten Befehle wie
o www.spon.de[ENTER]
für Seite aufrufen oder
t www.horrorblog.org[ENTER]
für Tab öffnen zu lernen hab ich mir mitlerweile die komplette Bedienung zugelegt und auch schon mein erstes "Plugin" geschrieben das mit die aktuelle URL mit Bitly als ShortURL in die Zwischenablage legt. Hier meine eigene
.vimperatorrc
Datei die noch ein paar mehr Sachen macht:
" only use with buftabs plugin
set showtabline=0
"
custom colorsheme
colorscheme darkness
" set textmate as editr

set editor="mate -w"
" show hover links in status bar

set showstatuslinks=2
js document.getElementById("status-bar").setAttribute("moz-collapsed", false);
" no error sound, just flash display

set errorbells visualbell
" alternative tab navigation

map b gt
map v gT
" tab navigation via arrow keys

map <Left> <C-p>
map <Right> <C-n>
map h <C-p>
map l <C-n>
" bit.ly shortener.

javascript <<EOF
shortenURLIsGd = function (url) {
  var req = new XMLHttpRequest();
  " get your username and api key from bit.ly!!!

  req.open("GET", "http://api.bit.ly/v3/shorten?login=[Username]&apiKey=[API_KEY]&format=txt&longUrl=" + escape(url), true)
  req.onreadystatechange = function (ev) {
    if (req.readyState == 4) {
      if (req.status == 200) {
        util.copyToClipboard(req.responseText, true);
      } else {
        liberator.echo(req.responseText);
      }
    }
  }
  req.send(null);
}
EOF
map <silent> short :javascript shortenURLIsGd(buffer.URL);<CR>
map <silent> bitly :javascript shortenURLIsGd(buffer.URL);<CR>

Des weiteren sei noch erwähnt, dass man noch weitere ColorShemes oder Vimperator Plugins im Internet findet. Ein super Plugin ist auch das Buftabs Plugin, dass sogar die Tableiste überflüssig macht.

[UPDATE #1] Dank der Aktualisierung von Geshi, das das Code-Highlighting hier im Blog erledigt sieht das Vim-Script jetzt auch schön bunt aus.

#494

02.05.2010 21:25
3 Kommentare
Share
  • code
  • tutorial
  • tool
  • script
  • bash
  • shell
  • Gewinner
  • Email
  • Verlosung
  • Beispiel
  • Datei
Wie manche von euch wissen betreibe ich seit einiger Zeit ja ein kleines aber mittlerweile echt ganz gut erfolgreiches Blog über Horror- und Fantasyfilme. Bei dem dritten Gewinnspiel haben über 150 Leute mitgemacht und mir eine Email geschickt. Leider etwas viele um per Losverfahren Gewinner auszuwählen. Das folgende Beispiel wird für erfahrene Programmierer nichts neues sein oder total langweilig. Eventuell hilft’s aber dem einen oder anderen weiter ;-)

Einfach mit OSX Mail die Mails extrahieren, die das richtige Lösungswort enthalten, oder die man untersuchen möchte. Dabei erstellt Mail einfach eine Datei mit allen Email-Quelltexten untereinander in einer Textdatei. Diese kann man super mit der Bash maltretieren und die Absenderadresse extrahieren:
grep -Z -P '^From:s(.+)' mail_export.txt | uniq
Wenn man dann noch zwei Gewinner auswählen möchte, braucht man nur doch die Anzahl der Zeilen in der Datei und wählt dann einfach zwei aus. Das ganze Shell-Script sieht dann so aus:
#!/bin/bash
##########################################################
# Extract n radom emails from a file
#
# Usage:
#   winner.sh [filename] [count]
#
# Author: Marcel Eichner // Ephigenia <love@ephigenia.de>
# Date: 2009-03-30
##########################################################
TMPFILE=`mktemp -t emails` || exit 1
grep -Z -P '^From:s(.+)' "$1" | uniq > $TMPFILE
# select random line from file
LCOUNT=`wc -l "${TMPFILE}" | awk ' { print $1; }'`
echo "Choosing ${2:-1} winners from ${LCOUNT} emails"
for (( i = 0 ; i < ${2:-1}; i++ ))
do
  LINENUMBER=$((($RANDOM % $LCOUNT) + 1))
  sed -n ${LINENUMBER}p ${TMPFILE}
done

Das Script kann wenn es ganz doof kommt auch zwei mal die gleichen Absender auswählen. Wenn das passiert kann man das Bash-Script ja gleich noch mal laufen lassen. Danke an Caspar der noch weitere hilfreiche Anregungen gegeben hat!

#493

07.03.2010 18:53
0 Kommentare
Share
  • code
  • wordpress
  • php
  • deploy
  • local
  • programmieren
  • tutorial
  • url
  • permalinks
  • config
Ich hab ja in letzter Zeit mal sporadisch mit dem wunderbaren Wordpress zu tun gehabt und konnte mich eine Weile damit beschäftigen. Viele Sachen gefallen mir nicht, unter anderem die Tatsache das Wordpress URLs immer komplett haben muss. Wie soll ich bitte lokal entwickeln wenn alle URLs komplett sind?

Dem lässt sich zum Glück relativ einfach abhelfen. Man legt sich einfach eine wp-config.php Datei an die man nur benutzt wenn man lokal entwickelt. Das kann man zum Beispiel am username im System festmachen:
$envUsername = strtolower(get_current_user());
$envConfigFilename = dirname(__FILE__).'/wp-config-'.$envUsername.'.php';
if (file_exists($envConfigFilename)) {
  require $envConfigFilename;
}

Und dann kann man in der lokalen Konfigurations-Datei einfach den Wordpress-Installationspfad überschreiben:
define('WP_HOME','http://'.$_SERVER['HTTP_HOST'].'/wordpress/path/');
define('WP_SITEURL', WP_HOME);

So hat man zumindest damit keinen Stress mehr. Wie man die Bilder lokal verlinkt weiss ich allerdings auch noch nicht …

#470

15.07.2009 16:37
0 Kommentare
Share
  • code
  • javascript
  • script
  • klassen
  • lib
Oh mann, was für ein Pain-in-the-ass ... wenn man echte Klassen in Javascript haben möchte kann man sich so ziemlich tot googeln und man wird jedes mal nur 50% von dem finden was man eigentlich sucht wenn man echte Klassen mit Vererbung in JavaScript haben möchte.
Glücklicherweise gibt es Leute denen das auch schon so gegangen ist und die eine wirklich einfach zu nutzende und kleine Bibliothek für echte Ruby-like Klassen in JavaScript geschrieben haben: JS.Class Ein weiter Vorteil ist, dass man JS.Class anstandslos mit jQuery benutzen kann, was von kleineren Code-Snippets die Klassenverhalten simulieren soll nicht gerade sagen kann.
Wer erst abgeschreckt ist von den vielen Dateien sei beruhigt. Für einfache Klassen reicht schon das core.js was minified nur 7434 Bytes gross ist. Eine echte Zeitersparnis!

#466

02.07.2009 16:19
2 Kommentare
Share
  • code
  • script
  • bash
  • shell
  • file
  • changed
  • bell
  • log
Aus aktuellem Anlass wollte ich ein Shell-Script schreiben das mir anzeigt, wenn sich eine Datei ändert (ein Log-File) und diese dann kurz ausgibt. Jedes mal wenn sich also die Datei ändert, klingelt es im Terminal (printf 'a') und ich bekomme die letzten Einträge angezeigt:
interval=${2:-1}
filename=$1
filename=${filename:?"missing."}
while true
do
  if test `find "$filename" -mmin ${interval}`
  then
    clear;
    printf "`date`n$filenameann";
    tail "$filename"
  fi
  echo "sleeping for next check in $((interval * 60)) seconds ..."
  sleep $((interval * 60))
done

Man kann das auch auf die Spitze treiben, aber so macht’s erstmal das was ich wollte. Benutzt wird es dann wie folgt:
./fileChanged.sh folder/testlog.log
Checkt dann jede Minute ob die Datei sich geändert hat. Wer rausbekommt wie man das mit Sekunden machen kann sagt mir Bescheid :)

#461

15.06.2009 10:40
2 Kommentare
Share
  • code
  • wordpress
  • tip
  • apache
  • htaccess
  • mod
  • rewrite
Gerade wurde ich wieder gefragt wie man erfolgreich subdomains mit einer htaccess Rule erkennen kann. Grund dafür war das neue Update von Wordpress, nach dem die Subdomains nicht mehr so recht wollten.
Viele kenen die normalen Standard Rules für die htaccess Dateien und kennen noch nicht die Konditionalen Rules die auch sehr hilfreich sind.
RewriteCond %{HTTP_HOST} ^(subdomain1|subdomain2).domain.de$ [NC]
RewriteRule ^(.*)$ http://www.domain.de//$1 [R=301,L]
Diese müssen dann vor die Regeln von Wordpress und schon müsste es wieder laufen.

#456

04.06.2009 10:07
0 Kommentare
Share
  • code
  • php
  • file
  • upload
  • error
  • handling
Viele von den PHP Codern da draussen kennen es wahrscheinlich schon, aber ich will trotzdem mal darauf hinweisen. Datei Uploads in PHP sind ja manchmal etwas verwirrend, vor allem was verschiedene Fehlerquellen angeht. Um schon im Vorhinein Fehler abzufangen bietet sich folgendes Code-Snippet an:
// test if a file was uploaded
$formFieldName = 'myFile';
if (isset($_FILES[$formFieldName])) {
  switch(@$_FILES[$formFieldName]['error']) {
    case UPLOAD_ERR_OK: // 0
      // everything is ok with the upload for php
      break;
    case UPLOAD_ERR_INI_SIZE:
      // file is larger than the size set in php.ini
      // upload_max_filesize
      break;
    case UPLOAD_ERR_FORM_SIZE:
      // file exceeds size set in form
      break;
    case UPLOAD_ERR_PARTIAL:
      // file upload
      break;
    case UPLOAD_ERR_NO_FILE:
      // no file was specified (empty form field)
      break;
    case UPLOAD_ERR_NO_TMP_DIR:
      // no tmp dir specified in php.ini
      break;
    case UPLOAD_ERR_CANT_WRITE:
      // tmp dir from php.ini is not writable for php
      break;
    default:
      // unknown error code
      break;
  }
}
Wie man sieht bietet PHP weit aus mehr Möglichkeiten fehlgeschlagene Datei-Uploads zu erkennen als manchen bewusst ist. Vor allem wenn große Dateien hochgeladen werden die zu groß sind (upload_max_filesize) gibt PHP direkt einen Fehler aus, ohne riesen Dateien anzunehmen.

#449

31.03.2009 14:14
0 Kommentare
Share
  • osx
  • tip
  • tool
  • apple
  • quartz
  • filter
  • pdf
  • print
Ich hatte gerade das Problem das ich ein gescanntes PDF mit mehreren Seiten verkleinern wollte. Leider kann man das ohne die Adobe Acrobat Professional Version in der man einfach als PDF drucken kann nicht so mir nichts dir nichts am mac erledigen.
Ein paar Minuten mit Google verbracht und schon gibt es die Lösung! Einfach die Quartz Filter aus diesem Zip hier in ~/Library/Filters packen und schon kann man sehr einfach Dateien in der Vorschau als PDF mit weniger DPI speichern.

#433

06.01.2009 12:17
0 Kommentare
Share
  • code
  • osx
  • terminal
  • tool
  • script
  • bash
  • rar
  • extract
Das Script von letztens verkürzt:
ls | grep -E ".*part(1|01|001).rar" | xargs nice -n 20 unrar e -p[passwort] Extrahiert mehrere Rar Dateien mit dem selben passwort, eins nach dem anderen. So einfach is det :)

#429

17.12.2008 00:46
0 Kommentare
Share
  • osx
  • tip
  • terminal
  • script
  • bash
  • shell
  • console
k, ich hab’s ja versprochen, hier ein kleines shell script für den kleinen mac und auch die großen, um mehrere *.rar Dateien mit einem Passwort zu entpacken:
# copy from marceleichner.de/
password=$1
i=0
for var in "$@"
do
  if [ "$i" != 0 ]
    then
    echo "extracting $var"
    command="nice unrar e -p$password $var"
    echo $command
    $command
  fi
  i=$((i+1))
done
echo 'OK, finished!'

Das ganze einfach, am liebsten als unroar.sh abspeichern, und aufrufen:
sh unroar.sh passwort erstedatei.rar zweitedateivonwoanders.rar

vielleicht hilft das ja dem einen oder anderen!
  • 1
  • 2
  • weiter »
marceleichner HTML5 Harrison Theme (Validate Source), © 2010 by Ephigenia M. Eichner, Impressum