Peter Rehm's Blog

apple,development,life & more

Installing MongoDB Binaries on Mac

Ohne Kommentare

Get latest binaries from here: http://www.mongodb.org/downloads
and unzip.

CODE:
sudo mv mongodb-osx-x86_64-2.2.1 /usr/local/mongodb
sudo mkdir /usr/local/mongodb_data /var/log/mongodb
sudo chown -R root /usr/local/mongodb
sudo vi /usr/local/mongodb/mongod.conf


Insert the following content

CODE:
# Store data alongside MongoDB instead of the default, /data/db/
dbpath = /usr/local/mongodb_data
 
# Only accept local connections
bind_ip = 127.0.0.1


Create a LaunchDaemon

CODE:
sudo vi /Library/LaunchDaemons/org.mongodb.mongod.plist


CODE:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>org.mongodb.mongod</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/mongodb/bin/mongod</string>
    <string>run</string>
    <string>--config</string>
    <string>/usr/local/mongodb/mongod.conf</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local/mongodb</string>
  <key>StandardErrorPath</key>
  <string>/var/log/mongodb/output.log</string>
  <key>StandardOutPath</key>
  <string>/var/log/mongodb/output.log</string>
</dict>
</plist>


CODE:
sudo launchctl load /Library/LaunchDaemons/org.mongodb.mongod.plist


Try it with http://localhost:28017

CODE:
sudo sh -c 'echo "/usr/local/mongodb/bin" > /etc/paths.d/mongodb'

Geschrieben von Peter Rehm

05.11.2012 um 14:49:57

Tags für diesen Artikel: , ,

Compiling error regarding xcode select

Ohne Kommentare

If you get this error

CODE:
xcode-select: Error: No Xcode is selected. Use xcode-select -switch <path-to-xcode>, or see the xcode-select manpage (man xcode-select) for further information.


Make sure that you have the Apple Command Line Tools from https://developer.apple.com/downloads/index.action?=command%20line%20tools installed. This should be necessary unless you want to develop OSX or iOS applications.

Then just execute this on the command line to set the default entry.

CODE:
sudo xcode-select -switch /usr/bin


There you go...

Geschrieben von Peter Rehm

18.08.2012 um 17:03:38

Tags für diesen Artikel: ,

Installation PEAR/PECL/autoconf/intl/icu auf Mac OSX Mountain Lion

Ohne Kommentare

Installation PEAR/PECL/autoconf/intl/icu auf Mac OSX Mountain Lion

- Install PECL & PEAR

CODE:
cd /usr/lib/php
sudo php install-pear-nozlib.phar


- Add to php.ini

CODE:
include_path = ".:/usr/lib/php/pear"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20090626"


- Update pear channels

CODE:
sudo pear channel-update pear.php.net
sudo pecl channel-update pecl.php.net
sudo pear upgrade-all


- Install ICU from http://site.icu-project.org/download/48#ICU4C-Download

CODE:
tar -xzvf icu4c-4_8_1_1-src.tgz
cd icu/source/
./runConfigureICU MacOSX
make
sudo make install


If you get something linke this...


configure: error: in `/Users/peterrehm/Downloads/icu/source':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
./runConfigureICU: ./configure failed


you have to install the apple command line tools which you will find
under the following URL for the appropriate OS version like Mountain Lion.

CODE:
https://developer.apple.com/devcenter/mac/index.action


then you should be able to install it..

CODE:
sudo pecl install intl


If you have autoconfi missing go for that:

CODE:
curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar -xzvf autoconf-latest.tar.gz
cd autoconf-2.69/


Now you should add "extension=intl.so" to php.ini and restart apache. Here you go.

Geschrieben von Peter Rehm

01.08.2012 um 21:11:24

Tags für diesen Artikel: , ,

Anzeige der git branch in der Console (OSX/bash)

Ohne Kommentare

.bash_profile anlegen mit dem folgenden Inhalt


PATH=$PATH:/usr/local/git/bin:.
source /usr/local/git/contrib/completion/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '


Danach sieht der shell prompt wie folgt aus:


[peterrehm@tokyo-3 /www/scalc (master)]$


Dadurch wird nebenbei auch die completion hinzugefügt, zum Beispiel bei
der Auswahl der Branches mittels git branch ...

Geschrieben von Peter Rehm

29.07.2012 um 19:26:01

Tags für diesen Artikel: , , ,

gängige PHP Fehler - Tipps & Tricks

Mit 2 Kommentaren

Neulich wurde ich gebeten, mir "kurz" ein kleines PHP Skript anzusehen,
und bei der Fehlersuche zu helfen. Dabei ist mit allerdings sehr schnell
aufgefallen dass einige grundlegende Unschönheiten zu finden sind.

Daher will ich anhand des mir zugesandten Codes einige Tipps zur PHP Entwicklung
geben.



  1. register_globals

    Ein immer wieder auftrendes Problem ist die register globals Geschichte,
    da PHP einem lange Zeit die Freiheit ließ, auf die POST Variable 'test' auf
    zwei Arten zuzugreifen. Entweder als $test, oder per $_POST['test'].
    Nutzt man erstere Variante kann man sich nie sicher sein, woher der
    Inhalt der Variablen eigentlich stammt, und man vergisst leicht einen
    vielleicht gefährlichen Inhalt zu escapen. Sofern die Möglichkeit besteht
    ist es sogar empfehlenswert register_globals auszuschalten. Aber man
    sollte es sich zumindest immer angewöhnen, auf POST/GET/REQUEST variablen
    immer mittels den dafür vorgesehenen superglobalen Arrays zuzugreifen.




  2. SQL Injections

    Eine große Gefahr stellen vor allem im Zusammenhang mit register_globals
    die SQL Injections dar, über die nicht gewollter SQL Code eingeschleußt
    werden kann. Um hier nicht auszuschweifen sollte man sich immer angewöhnen,
    Inhalt der manipuliert sein kann, zu escapen. Eine einfach Möglichkeit
    hierzu bietet mysql_real_escape_string(). Man sollte sich wenigstens
    angewöhnen den Inhalt immer zu escapen. Es empfiehlt sich auch eine
    eigene Funktion dafür zu nehmen, dass man später auch noch andere
    Verfahren einsetzen könnte, indem man nur eine Funktion überarbeiten
    muss. Hier ein Beispiel:



    CODE:
    /**
    * easy accesible handle to escape all db strings
    * @param string $string string which should be escaped to be put into an sql statement
    * @return string returns the escaped string
    */
    function escapeDB($string)
    {
    global $run;
    if(is_numeric($string))
    {
    return $string;
    } else {
    return $run['db']->qstr($string,get_magic_quotes_gpc());
    }
    }



  3. Variablen

    Man sollte Variablen immer klein schreiben, und Umlaute sollten nicht
    eingesetzt werden. Es ist meist auch recht angenehm die äquivalente englische
    Bezeichnung für Variablen zu verwenden. EIn unschönes Beispiel:



    CODE:
     '$Arbeitsverhaeltnis', '$Kündigungsfrist', '$Sonstiges'



  4. Fehlermeldungen

    Fehlermeldungen sollte man am besten immer beherzigen. PHP kennt verschiedene
    Modi, je nach "wichtigkeit" eines Fehlers. Meist werden die NOTICE's
    ausgeblendet. Allerdings sind NOTICES oft auch recht hilfreich,
    da man erkennt wo man z.B. eine noch nicht initialisierte Variable
    verwendet. Es empfiehlt sich meistens alle Fehlermeldungen anzuzeigen.
    Die macht man wie folgt:


    CODE:
    error_reporting(E_ALL);

    Vor allem gefährlich ist das manuelle Unterdrücken von Fehlermeldungen
    mittels dem @ Operator. Diesen sollte man auch nicht einsetzen, da dadurch
    die Fehlersuche oft erschwert sein kann.





Dies mal nur als kurze Zusammenfassung.

Geschrieben von Peter Rehm

07.06.2007 um 15:49:13

Abgelegt in PHP

Tags für diesen Artikel: ,

Performancetests / Profiling in C

Ohne Kommentare

Dies musste ich heute einsetzen beim Testen eines Sortieralgorithmus.

Man compiliere sein Programm wie folgt:

CODE:
gcc -o ex1b -pg -ansi ex1b.c


Danach muss das Programm einmal ausgeführt werden

CODE:
./ex1b


Danach kann man sich direkt die Profiling Informationen anzeigen lassen, in meinem Fall:

CODE:
gprof ./ex1b


CODE:
granularity: each sample hit covers 4 byte(s) for 0.81% of 1.23 seconds

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 91.9       1.13     1.13        1  1130.00  1130.00  _ins_sort [3]
  2.4       1.16     0.03                             ___sfvwrite [4]
  1.6       1.18     0.02        2    10.00    10.00  _print_array [5]
  1.6       1.20     0.02                             _write [6]
  0.8       1.21     0.01                             ___vfprintf [7]
  0.8       1.22     0.01                             _localeconv_l [8]
  0.8       1.23     0.01                             _printf [9]
  0.0       1.23     0.00        1     0.00     0.00  _create_random_array [39]
  0.0       1.23     0.00        1     0.00  1150.00  _main [1]


Index by function name

   [4] ___sfvwrite           [3] _ins_sort             [5] _print_array       
   [7] ___vfprintf           [8] _localeconv_l         [9] _printf            
  [39] _create_random_arra   [1] _main                 [6] _write 

Geschrieben von Peter Rehm

01.12.2006 um 13:54:34

Abgelegt in Programmierung

Tags für diesen Artikel: , ,

malloc in C

Mit 2 Kommentaren

Die Erkenntnis des Tages: Manche Fehler sind echt dumm!!

Zur Erklärung:

Bei der Fehlermeldung

CODE:
structfun.c:41: warning: incompatible implicit declaration of built-in function 'malloc'


kommt man schnell zu einem Truschluss. Der Fehler befindet sich nicht in der Zeile 41
sondern liegt einfach an der Header Datei.

CODE:
#include <stdlib.h>


Damit sollte das Problem erledigt sein :-)

Geschrieben von Peter Rehm

27.11.2006 um 17:52:35

Abgelegt in Programmierung

Tags für diesen Artikel: , , ,

KDebug (kdbg) unter Ubuntu

Mit 1 Kommentar

Ich hatte irgendwie wohl zuviel Zeit, auf jedenfall habe ich mich mit dem
Debuggen von meinen C Übungen mit kdbg unter Ubuntu beschäftigt.

Angefangen mit dem Installieren von Ubuntu unter Parallels Desktop,
aber darauf will ich nicht näher eingehen. Wer das nicht kann ist schonmal
raus.

Nachdem Ubuntu installiert ist, geht es gleich weiter mit dem installieren
von kdbg. Dies ist allerdings nicht ganz so unkompliziert, zumindest unter
meinem System. Normal kann man kdbg über "Anwendungen" -> hinzufügen/entfernen
installieren, ging bei mir aber nicht :-)

Nun die komplizierte Art & Weise über die Konsole.
Als erstes habe ich mich von der Bash entfernt, um gleich wieder die zsh
zur Verfügung zu haben

CODE:
sudo apt-get install zsh


Dann machen wir einfach kurz eine root zsh Shell auf, um das alles zu installieren.
Ansonsten sollte man aber nicht auf einer root shell arbeiten.

CODE:
sudo zsh


Alternativ kann man sich auch kurz eine root Bash aufmachen.

CODE:
sudo bash


Installieren kann man kdbg auch komfortabel über apt. Allerdings muss man die
sources.list dazu anpassen, die "RESTRICTED" Einträge entfernen.

Es sollte danach dann so a

CODE:
deb http://de.archive.ubuntu.com/ubuntu/ edgy main
deb http://de.archive.ubuntu.com/ubuntu/ edgy-updates main
deb http://security.ubuntu.com/ubuntu edgy-security main


Die deb-src einträge sind egal. Nun muss apt upgedated werden.

CODE:
apt-get install kdbg


Nun wird kdbg mit allen benötigten Programmen installiert.

Nun kommt der spannendere Teil, der Einsatz von kdbg.
Also erstellen wir einfach ein C Programm und compilieren das.

z.B. folgendes Programm

Damit man das Programm debuggen kann, muss es zwingend mit dem Parameter -g
compiliert werden.

CODE:
gcc -o ex9 -g ex9.c


Kommt ein Fehler, dass z.b. die Headerdateien nicht gefunden werden können,
muss man ein Package nachinstallieren.

CODE:
apt-get install build-essential


Nun sollte sich das Programm ohne Probleme compilieren lassen.
Nun kann man das Programm debuggen.

CODE:
kdbg ex9


Nun kann man sich in den Debugger einarbeiten und z.B. mit [F5] das Programm ausführen.

Geschrieben von Peter Rehm

19.11.2006 um 20:05:05

Tags für diesen Artikel: , ,

MySQL Berechtigungen in Confixx

Ohne Kommentare

Nach meinem Umstieg auf S9Y wollte ich einen Artikel suchen und bekam sofort eine Fehlermeldung.

CODE:
Die Suche konnte nicht wie gewünscht ausgeführt werden. 
Hinweis für den Administrator dieses Blogs: Der Fehler kann durch fehlende 
Index-Schlüssel der Datenbank verursacht werden. Auf MySQL-Systemen 
muss der Datenbankbenutzer-Account in der Lage sein, Index-Schlüssel 
zu erstellen und folgende Abfrage auszuführen: 

CREATE FULLTEXT INDEX entry_idx on serendipity_entries (title,body,extended);
...


Der Index konnte auch nicht manuell erstellt werden, da dem Benutzer schlichtweg die Rechte dazu fehlen.
Dies ist eine Standardeinstellung des Verwaltungstools Confixx.
Dies ist in meinem Fall bei einem Managed Server sehr ärgerlich, und ich hab sofort den Support benachrichtigt, der meinte das kann man nicht umstellen.

Eine Lange Recherche im Internet brachte auch keien Erfolg, und ich nahm gleich Kontakt mit SW-Soft, dem Hersteller von Confixx auf. Von dem Support Team erhielt ich umgehend folgene Hilfestellungen:

CODE:
MySQL Rechte können in der Datei 
../confixx/html/include/class.MysqlPermissions.php eingestellt werden.

Oder man kann die Berechtigungen manuell in der Datenbank 'mysql' setzten.
In diesem Fall muss man auch die Variable $restore_users_permissions in der 
Datei confixx_main.conf auf '0' setzen. Sonst werden die Berechtigungen wieder 
überschrieben.


Vielen Dank an das Support Team von Confixx und ich hoffe, dass mein Provider das nun auch so umsetzen kann!

Geschrieben von Peter Rehm

03.11.2006 um 12:52:44

Abgelegt in Web

Tags für diesen Artikel: , , ,

Aufwachen beim Aufklappen verhindern

Ohne Kommentare

Man kann umstellen, dass das Laptop nur bei Tastendruck aufwacht und nicht beim aufklappen.

CODE:
sudo pmset lidwake 0


Der Tipp stammt von hier.

Geschrieben von Peter Rehm

02.11.2006 um 17:42:34

Abgelegt in Apple

Tags für diesen Artikel: , ,

Stress Tests für Webentwickler

Mit 1 Kommentar

Immer wieder macht sich ein Webentwickler gedanken, wie seine Webanwendung sich wohl unter Last verhält. Dies kann man nachstellen:

Im folgenden möchte ich kurz die Tools auflisten die man dazu verwenden kann:



Vielleicht kann ich demnächst Erfahrungsberichte dazu abgeben wenn ich die Zeit gefunden habe die Tools mal zu testen.

Geschrieben von Peter Rehm

19.09.2006 um 21:02:48

Abgelegt in Verschiedenes

Tags für diesen Artikel: , ,

[PHP] String als Zipfile

Mit 2 Kommentaren

Wie oft habe ich bereits einen String in ein komprimiertes File schreiben wollen, das vollautomatisiert und zum Download für den User. Allerdings eignet sich dazu das gzip format nicht da die meisten Benutzer mit Windows arbeiten und man ein zusätzliches Tool installieren.

Daher benötigt man das PEAR Module Archive_Zip das hervorragend Zip Dateien erstellen kann. Allerdings benötige ich das Zip File nicht direkt, da ich das File nach dem Download nicht mehr benötige da es veraltet sein könnte. Daher habe ich mir eine Funktion gebaut, die auf Archive_Zip aufbaut, mit der ich das Problem erledigen kann.

Die Funktion stringtozip erstellt temporär das Archiv mit den gewünschten Dateinamen, und löscht danach alles wieder, um nur den String zurückzuliefern.

Aber sehet selbst!

CODE:
/**
* function to create an zip file from an string
* @param string $string content of the file
* @param string $filename name of the file includes the content
* @param string $zipdescription description in the zipfile
* @param string $tmpfolder path for the temporary files with an ending /
*/
function stringToZip($string,$filename,$zipdescription,$tmpfolder)
{
global $cfg;
$rand=rand();

if(!class_exists('Archive_Zip'))
{
// module archive_zip is not existing
return false;
}

if(!is_writable($tmpfolder))
{
// directory is not writeable
return false;
}

if(!file_exists($tmpfolder.$filename))
{
$int_filename=$tmpfolder.$filename;
} else {
$int_filename=$tmpfolder.$filename.'-'.$rand;
}

$fhandler=fopen($int_filename,'a');
fwrite($fhandler,$string);
fclose($fhandler);

$zipHandler=new Archive_Zip($tmpfolder.date("YmdHis").'-'.$zipdescription.'-'.$rand.'.zip');
$zipHandler->create($int_filename,array('remove_all_path'=>true));

// unlink the file containing the string
unlink($int_filename);

// store the data and delete the temp file
$data=file($tmpfolder.date("YmdHis").'-'.$zipdescription.'-'.$rand.'.zip');
unlink($tmpfolder.date("YmdHis").'-'.$zipdescription.'-'.$rand.'.zip');

return join("\n",$data);
}


Viel Spaß!

Geschrieben von Peter Rehm

15.09.2006 um 16:17:50

Abgelegt in PHP, Programmierung

Tags für diesen Artikel: ,

Mod Rewrite und die Sonderzeichen

Ohne Kommentare

Wer viel mit Mod Rewrite arbeitet hat meist mit einem Problem zu tun.

Namen, die Sonderzeichen enthalten, können zu Fehlern führen. Eine kleine Funktion kann dabei helfen, da ich nicht auf die umfangreichere Version zurückgreifen wollte, auf die mich Sebastian aufmerksam gemacht hat, Translit.
CODE:
<?php
/**
*    Clean Name prepares an String to be used in the mod rewrite
*    @param string $string string to clean
*    @return string clean string
*    @access public
*/
function cleanName($string)
{
$search=array('é','á','ó','í','ñ','Ä','ä','Ö','ö','Ü','ü','ß',' ','-','/');
$replace=array('e','a','o','í','n','Ae','ae','Oe','oe','Ue','ue','ss','','','_');
return str_replace($search,$replace,$string);
}
echo cleanName('Diäsüsß ißt éiñ Tásót');
?>


Diese Funktion ha bisher in den meisten kleinen Anwendungen gereicht, allerdings kann es gut sein dass man diese noch um ein paar Sonderzeichen erweitern muss.

Über ein Feedback würde ich mich freuen.

Geschrieben von Peter Rehm

16.08.2006 um 23:14:15

Abgelegt in Verschiedenes

Tags für diesen Artikel: , ,

Xdebug zum Performancetest in PHP

Ohne Kommentare

Es ist während der Entwicklung immer interessant zu sehen wie performant der Code ist, bzw. wie viele Funktionen gestartet werden.

Dies kann man alles mit xdebug einsehen. Xdebug lässt sich über PEAR sehr einfach installieren.

Achtung! Diese Installation beziegt sich auf ein OSX Betriebssystem mit Apache 1.x und dem zufolge xdebug 1.
Eventuelle Ähnlichkeiten mit anderen Plattformen sind vollkommen unbeabsichtig.
CODE:
pear install xdebug


Danacht muss nun Xdebug nur noch in der PHP Config vermerkt werden. Ich empfehle davor noch ein Verzeichnis anzulegen, in dem man den ganzen Krempel dann ablegen lässt.

CODE:
mkdir /xdebug/
sudo chmod -R 777 /xdebug/

Nun machen wir uns an das Bearbeiten der php Config

CODE:
;;xdebug
zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so"
xdebug.auto_trace=1
xdebug.auto_profile=1
xdebug.profiler_enable=1
xdebug.output_dir="/xdebug/"


So werden autmatisch alle Seitenaufrufe geparst. Ist aber nicht zu empfehlen, da wenn man das mal vergisst und eine Woche an einem Projekt arbeitet ein dickes temporäres Verzeichnis entstehen kann.

Geschrieben von Peter Rehm

19.07.2006 um 16:08:09

Abgelegt in Verschiedenes

Tags für diesen Artikel: , ,

IFrames mit variabler Höhe

Mit 1 Kommentar

Bei Iframes ist eine Breite von 100% kein Problem, dies lässt sich technisch ohne Probleme realisieren. Bei der Höhe ist dies allerdings nicht möglich da dann immer 100% der gesamten Höhe genommen werden.

Daher kann man sich nur mit JavaScript aushelfen. Dieses Javascript wird beim onLoad ausgeführt. onLoad kann nicht nur bei body Elementen sondern auch bei iframe Elementen verwendet werdenten verwendet. Allerdings kann Safari mit den onLoad Elementen nicht viel Anfangen, dies ist das Hauptproblem. Da kann man sich nur helfen, indem man in den body einen onload hinzufügt der die Größe speichert.

Das passende JavaScript dazu:

CODE:
function getIframeHeight1() {
fix = 300; // fixe höhe
min = 100; //mindes höhe
max = 300; //max höhe
if(fix>max) return fix; // wenn fix größer als max => fix
if(fix>min && fix
if (window.innerHeight) {
h = window.innerHeight;
} else if (document.body && document.body.offsetHeight) {
h = document.body.offsetHeight;
}
if(h
if(h>max) return max;
return h;
}
function adjustIframe()
{
document.getElementById('iframe1').height=getIframeHeight1();
}


Danke an Alex für die "Inspiration" :-)

Geschrieben von Peter Rehm

12.07.2006 um 00:16:28

Abgelegt in Verschiedenes

Tags für diesen Artikel: ,