July 31st, 2010
Heute habe ich nach langer Zeit mal wieder ein Ordner zu meinem SVN Repository hinzufügen wollen.
Da stellte sich die Frage: Wie bekomme ich einen bereits gefüllten Ordner in mein bestehendes Repository
dafür gibt es zwei Möglichkeiten mit TortoiseSVN
- SVN Add
- SVN Import
SVN Add
SVN ADD wird dann verwendet wenn der Ordner den ihr importieren wollt bereits unter einem Versionierten Ordner liegt
Ordner(versioniert)
Unterordner(versioniert)
Unterordner2(nicht versioniert)
Vorgehen:

- Rechte Maustaste auf den Unterordner –> SVN–>ADD (wie auf dem Bild)
- Das Adden bestätigen
- Der Ordner muss jetzt noch Committed werden
- Dazu Rechte Maustaste auf den Ordner und Commit des Ordners durchführen
SVN Import
Wird verwendet wenn sich der Ordner auserhalb eines versionierten Ordners befindet
Order(versioniert)
Unterordner(versioniert)
Ordner2(nicht versioniert)
Vorgehen
Rechte Maustaste –> SVN Import

Pfad auswählen
Hierbei ist zu beachten, dass der Pfadname den Ordnernamen des zu importierenden Ordners enthält
bei mir soll der Ordner Texmakerwin32USB importiert werden deshalb wird in den Ordner svn…/Texmakerwin32USB importiert
fehlt die Angabe des Ordners, werden alle Dateien in den Übergeordneten Ordner kopiert (das ist sicher nicht gewollt)

dann wird das ganze bestätigt
Achtung: der Ordner ist zwar im Repository, aber auf dem Laufwerk auf dem Ihr euch befindet ist er noch nicht unter Versionskontrolle.
Um dies zu erreichen wird vom Ordner eine Sicherheitskopie gemacht (falls Fehler auftreten, oder beim ersten Versuch)
Jetzt wird der zu versionierende Ordner von der Festplatte gelöscht.
Im nächsten Schritt wird der Ordner aus dem Repository ausgecheckt
Dazu im Übergeordneten Ordner auf Checkout klicken und einen Ordner angeben

Nun steht dieser versioniert zur Verfügung
Wenn alles geklappt hat, kann die Sicherheitskopie gelöscht werden
Robert Schöbel |
SVN |
July 25th, 2010
Die Silbentrennung in Latex erfolgt normalerweise automatisch.
Trotzdem kann es vorkommen, dass Latex über den Rand schreibt, weil es nicht umbrechen kann.
In meiner Diplomarbeit hatte ich ziemlich oft dieses Problem, weil ich viele Englische Wörter und IT-Fachbegriffe verwendet habe.
Ich verwende die Pakete
\usepackage[utf8x]{inputenc} %\UTF 8
\usepackage[T1]{fontenc} %damit Latex keine Probleme mit der Silbentrennung bei Worten mit Umlauten hat
Hier sind deshalb ein paar Tipps
| Ausgabeziel |
Latexformatierung |
Beschreibung |
| Analyse- und Berichtsfunktion |
Analyse”~ und Berichtsfunktion |
Mit dem “~ bleibt der Aufzählungsbindestrich erhalten und es wird kein Umbruch an dieser Erstelle erzeugt |
| BI-Produkte |
BI”~Produkte |
“~ verhinder eine Trennung der Beiden Worte und der Bindestrich bleibt erhalten, das Wort Produkte wird weiterhin normal getrennt |
| Management-In|for|mations|system |
Management-In\-for\-mations\-system |
Ein normales - verhindert das die Worte Management und Informationssystem getrennt werden, deshalbt muss mit \- wieder die Trennungsmöglichkeiten eingebaut werden |
| Fragenkatalog |
Fragen”-katalog |
Latex kennt Beispielsweise das Wort Fragenkatalog nicht, deshalb muss es getrennt werden, mit “- wird es in Fragen und Katalog getrennt und wird wieder nach der richtigen Silbentrennung verarbeitet |
Robert Schöbel |
Latex, usefull stuff |
July 5th, 2010
Es ist Zeit etwas über meine Bauberichtssoftware Speed.up.Work zu schreiben.
In der aktuellen Version gibt es folgende Auswertungsfeatures:
Visualisierung der Arbeiter je Firma,
einfache Zeitraumauswahl durch markieren des Bereiches
Firmenaus- und Abwahl durch setzen eines Hakens



Visualisierung der Arbeiter die sich pro Firma auf dem Bau befanden

Es können jetzt auch Mängel eingetragen werden (inklusive Bild).
Diese Mängel können dann als PDF (inklusive Bilder) oder als Excel (ohne Bilder) exportiert werden

weiter Infos
Robert Schöbel |
usefull stuff |
June 24th, 2010
Um allen zu helfen, die den hohen Einarbeitungsaufwand für Latex umgehen wollen, biete ich hier ein Latex-Portable Zusammenstellung für Windows an.
Ich habe alles in einer Zip-Datei zusammengestellt, was benötigt wird um ein Dokument (pdf) zu erzeugen.
Natürlich können die einzelnen Komponenten auch einzeln von den Anbietern geladen werden
- Miktex (Bibliothekslader für Latex)
- http://miktex.org/2.8/setup
- texmaker (Schreibprogramm für Latex) (
- http://www.xm1math.net/texmaker/download.html)
- jabref (Literaturdatenbank für die *.bib Datei)
- http://jabref.sourceforge.net/
- FoxitReader (PDF-Betrachter)
- http://foxit-pdf-reader.softonic.de/
einfach die Datei extrahieren und lostexen
hier ist die Zusammenstellung als rar download
Das Beispiel Dokument (Typ article) steht auch in einem Ordner bereit
Das Dokument ist als Diplomarbeit aufgebaut und besitzt dann folgende Komponenten
- Inhaltsverzeichnis
- Deckblatt
- Abbildungsverzeichnis
- Tabellenverzeichnis
- Abkürzungsverzeichnis(\glossaries)
- Glossar (\glossaries)
- Literaturverzeichnis(bibtex)
- Kopf und Fusszeilen
- Grafiken (png)
- Zitate
- und viele Beispiele
Texmaker darf allerdings nicht mit der normalen texmaker.exe ausgeführt werden, dabei werden die Umgebungsvariablen nicht gesetzt. Es steht eine start_texmaker*.bat im texmaker Ordner zur Verfügung die dies erledigt.
Dazu einfach die im Archiv Ordner liegende readme druchlesen.
Normalerweise ist alles vorkonfiguriert aber evtl. müssen in Texmaker der Übersetzer angepasst werden
Ich habe es mit Windows XP und Vista getestet und es hat super funktioniert.
Option->texmaker konfiguriern->schnelles Übersetzen
pdflatex -interaction=nonstopmode %.tex|bibtex %.aux|pdflatex -interaction=nonstopmode %.tex|makeindex -s %.ist -t %.alg -o %.acr %.acn|makeindex -s %.ist -t %.glg -o %.gls %.glo|pdflatex -interaction=nonstopmode %.tex
Wenn das Übersetzen nicht geht müssen die Pfade zu den einzelnen Komponenten neu eingestellt werden.
Bei fragen steht das Board zur Verfügung
Robert Schöbel |
Latex |
June 11th, 2010
Die USB-Festplatte wird nicht erkannt oder die USB Geräte
The connection to the VMware USB Arbitration Service was unsuccessful. Please check the status of this service in the Microsoft Management Console.
Lösung:
Start->Ausführen->services.msc
Den Dienst:
VMware USB Arbitration Service
starten und auf automatisch umstellen stellen
Robert Schöbel |
usefull stuff |
June 3rd, 2010
Dinge die beim Einrichten des Cronjobs für den MySQL-Dumper zu beachten sind
- pl oder cgi Datei in den Ordner /cgi-bin/ ablegen, dieser liegt oberhalb des normalen Webverzeichnisses welches oft “https” oder “web” heißt, allerdings trotzdem als http://deine_website/cgi-bin/ aufgerufen wird
- pl bzw. cgi Dateien müssen Rechte 755 besitzen
- in der datei crondump.pl ist folgendes anzupassen (my $absolute_path_of_configdir=”")
...
my $absolute_path_of_configdir="/var/www/......pfad........./web/mysql_dumper/work/config/";
...
die Pfad kann aus der MySQLDumperOberfläche entnommen werden
Die Url lautet dann
http://deine_webseite/cgi-bin/crondump.cgi?config=mysqldumper
Wenn die Mail nicht zu versendet geht, fehlt oft nur MIME-Lite. Dieses kann einfach mit in den cgi-bin Ordner kopiert werden
Ausführlich ist dies unter http://forum.mysqldumper.de/probleme-mit-sendmail-und-mime-lite-t3549.html
und http://forum.mysqldumper.de/features-perl-cronscript-einstellungen-von-konfiguration-cron-t502.html beschrieben
Robert Schöbel |
usefull stuff |
May 10th, 2010
Dies soll eine kleines HowTo sein, wie man mittels JSON und PHP amCharts zum Laufen bekommt
Ziel ist ein Chart wie hier abgebildet
Erstmal die Amcharts js Dateien einbinden
<script type="text/javascript" src="deinewebseite/amcharts/amline/swfobject.js"></script>
Im HTML Code legt man ein div-Tag an. Dieses div-Tag bekommt eine ID um später den Flash-Content einzuspielen.
<div id="my_chart">
</div>
Nun erst einmal die Javascript Funktion die mir den FlashChart zeichnet
function draw(data,settings,print_id,width,height){
//mit jquery habe ich die base_uri auf der Seite hinterlegt und hole sie mir
var main_path_on_server = $('#base_uri').val(); // deine website url
var so = new SWFObject(
main_path_on_server + "/amcharts/amline/amline.swf", "amline", width, height, "8", "#FFFFFF");
so.addVariable("path", "amcharts/amline/");
//Chart Wertepaare einfügen
so.addVariable("chart_data", escape(data));
//Chart Settings einfügen
so.addVariable("chart_settings", encodeURIComponent(settings));
so.addParam("wmode", "opaque");
//flash in das div, mit der übergebenen id schreiben
so.write(print_id);
}
Die Funktion draw wird von der folgenden Funktion aufgerufen
//diese Funktion bekommt ein Json Objekt als Rückgabe einer AJAX-Anfrage vom Server
// dieses Objekt enthält die Member: xml,settings,flash_name,height,width
function prepare_draw(json_data){
var data = json_data.xml;
var settings = json_data.settings;
var flash_name = json_data.flash_name;
var height = json_data.height;
var width = json_data.width;
//call der draw funktion mit vorangestelltem xml- Syntax
draw("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + data,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + settings,
flash_name, width, height);
}
Das JSON Objekt wurde über ein Ajax Aufruf in PHP erstellt.
Um es zu füllen habe ich die PHP JSON Funktion aus PHP 5
und um die Amcharts XML zu generieren die Libraries von AmCharts-PHP 0.2.0 genutzt.
in Pseudo Code sieht das ganze dann so aus
......
require_once( APPPATH . 'libraries/amxml_dateien.php');
......
$chart = new AmLineChart("Mychart");
foreach ($query->result() as $row) {
$chart->addSerie($row['id_x'],"titel");
$werte_paare[ $row['id_x'] ] = $row['y_wert'];
}
$chart->addGraph("Wetter_id", "Wetter_name", $werte_paare);
$conf = array('text_size'=> '12', 'align' =>'center');
$chart->addLabel("<b>Wetter</b>", 10,25,$conf);
$chart->setConfig("column.balloon_text"," {title}: {value}");
$chart->setConfig("values.x.rotate","90");
$chart->setConfig("grid.x.approx_count","30");
$chart->setConfig("export_as_image.file","export");
$chart->setConfig("export_as_image.target","_blank");
$json->data['xml'] = $chart->getDataXml();
$json->data['settings']= $chart->getConfigXml();
$json->data['width'] = 800;
$json->data['height']= 400;
$json->data['flash_name']= "my_chart";
....
<code>echo json_encode($json);</code>
...
Wenn noch jemand genauere Hilfe benötigt, gibt es ja die Möglichkeit hier etwas zu Posten.
$json->data['xml'] = $chart->getDataXml();
$json->data['settings']= $chart->getConfigXml();
Robert Schöbel |
PHP |
May 9th, 2010
Problem:
Outlook 2007 verschiebt Mails von gmx doppelt und dreifach in einen Postfach Ordner
bzw. es sieht so aus als ob es die Mails mehrfach abholt
Lösung:
Es waren mehrere Regeln für ein Postfach angelegt
z.B.: nach Erhalt einer Nachricht über das Konto xy@gmx.net diese in Ordner xy verschieben
und Nach erhalt einer Nachricht von xyz@gmx.net diese in Ordner xy verschieben
Um das Problem zu lösen muss man eine dieser beiden Regeln löschen.
Robert Schöbel |
usefull stuff |
April 12th, 2010
Folgendes Problem beim Export von PDF-Dateien mit Dompdf
Fatal error: Allowed memory size of xxxxxx bytes exhausted (tried to allocate xxxxxxxx bytes) in /var/www/vhosts/domain.net/httpdocs/itpage/system/application/libraries/dompdf/lib/class.pdf.php(1969) : eval()'d code on line 5914
Lösung (nicht die Beste Lösung)
öffen die Datei: libraries/dompdf/lib/class.pdf.php
Zeile 1969
@ini_set('memory_limit', '128M');
Das hilft bis eine gut Lösung gefunden ist
Robert Schöbel |
Uncategorized |
April 9th, 2010
Bis jetzt habe ich immer FPDF verwendet, allerdings ist es in FPDF nur schwer möglich (bzw. ich habe keine gute Lösung gefunden) Bilder in einer Zelle unterzubringen.
Mit DOMPDF ist dies einfacher zu realisieren, da HTML interpretiert wird.
(INFO: ich nutze Codeigniter als PHP MVC Framework)
Nun zum Problem
- in DOMPDF ist ein Header oder Footer nur mit Inline-Code realisierbar
- ich wollte aber kein Inline-Code für den Header
- ich wollte den Header mit dem Controller steuern.
- ich wollte ein Text, ein Bild und eine Linie im Header
Die Seitennummerierung erfolgt im Moment mit Inline-PHP-Code
Dieser Code befindet sich ganz normal in einer HTML / PHP Seite
<html>...<head>....</head>
<body>
<script type="text/php">
if ( isset($pdf) ) {
$font = Font_Metrics::get_font("verdana");
// If verdana isn't available, we'll use sans-serif.
if (!isset($font)) { Font_Metrics::get_font("sans-serif"); }
$size = 6;
$color = array(0,0,0);
$text_height = Font_Metrics::get_font_height($font, $size);
$foot = $pdf->open_object();
$w = $pdf->get_width();
$h = $pdf->get_height();
// Draw a line along the bottom
$y = $h - 2 * $text_height - 24;
$pdf->line(45, $y, $w - 16, $y, $color, 1);
$y += $text_height;
$pdf->close_object();
$pdf->add_object($foot, "all");
$text = "Page {PAGE_NUM} of {PAGE_COUNT}";
// Center the text
$width = Font_Metrics::get_text_width("Page 1 of 2", $font, $size);
$pdf->page_text($w / 2 - $width / 2, $y, $text, $font, $size, $color);
}
</script>
....html tags und Codeigniter Variablen
</body>
</html>
Dompdf interpretiert erst alle HTML Elemente, normale PHP Tags werden wie immer vorher interpretiert (<? echo “dies und das”; ?>)
Dannach geht dompdf erneut durch und bearbeitet die im mit <script type=”text/php”> </script> gekennzeichneten Abschnitte.
Nun zur Header Lösung ohne Inline-PHP-Code (Workaround)
Damit das ganze Funktioniert, muss ein wenig vorarbeit geleistet werden.
Der DOMPDF Ordner befindet sich in system->application->libraries->dompdf
jetzt muss man herausfinden welcher PDF-Adapter verwendet wird, ich nutze cpdf (wird ein anderer genutzt, kann die Änderung analog vorgenommen werden)
erstmal wird die Datei geöffnet: system->application->libraries->dompdf->include->cpdf_adapter.cls.php
In der Datei ist bereits eine Funktion “page_text” zu finden, mit Ihr kann Text auf jeder Seite einfügt werden
function page_text($x, $y, $text, $font, $size, $color = array(0,0,0),
$adjust = 0, $angle = 0) {
$_t = "text";
$this->_page_text[] = compact("_t", "x", "y", "text", "font", "size", "color", "adjust", "angle");
}
Text alleine Reicht mir bei meinem Header nicht aus.
Ich benötige zusätzlich eine Linie und ein Bild
Deswegen werden nun die folgenden Funktionen/Methoden angefügt
function page_line($x1, $y1, $x2, $y2, $color, $width, $style = array(),
$blend = "Normal", $opacity = 1.0) {
$_t = "line";
$this->_page_text[] = compact("_t", "x1", "y1", "x2", "y2", "color", "width", "style",
"blend", "opacity");
}
function page_image($img_url, $img_type, $x, $y, $w, $h) {
$_t = "image";
$this->_page_text[] = compact("_t", "img_url", "img_type", "x", "y", "w", "h");
}
Dann werden die Methode gesucht, in der die Daten verarbeitet werden (_add_page_text)
Die Methode muss nun folgendermaßen angepasst werden
protected function _add_page_text() {
if ( !count($this->_page_text) )
return;
$page_number = 1;
$eval = null;
foreach ($this->_pages as $pid) {
$this->reopen_object($pid);
foreach ($this->_page_text as $pt) {
extract($pt);
switch ($_t) {
case "text":
$text = str_replace(array("{PAGE_NUM}","{PAGE_COUNT}"),
array($page_number, $this->_page_count), $text);
$this->text($x, $y, $text, $font, $size, $color, $adjust, $angle);
break;
case "script":
if (!$eval) {
$eval = new PHP_Evaluator($this);
}
$eval->evaluate($code, array('PAGE_NUM' => $page_number, 'PAGE_COUNT' => $this->_page_count));
break;
case "line":
$this->line($x1, $y1, $x2, $y2, $color, $width, $style = array(),
$blend, $opacity );
break;
case "image":
$this->image($img_url, $img_type, $x, $y, $w, $h);
break;
}
}
$this->close_object();
$page_number++;
}
}
Das ganze ist noch nciht 100 % perfekt aber funktioniert erstmal
Wie kann man das jetzt in Codeigniter nutzen?
Als Beispiel soll uns ein einfacher Controller dienen
class controllerxy{
.....
function export_lack_2_pdf(){
require_once(APPPATH . 'libraries/dompdf/dompdf_config.inc.php');
$html = $this->load->view("content/mangel/templates/export_html.php", $this->data,true);
$my_font_family = "Arial";
$dompdf = new DOMPDF();
$dompdf->set_paper('A4');
$dompdf->load_html($html);
$dompdf->render();
$font = Font_Metrics::get_font($my_font_family);
$left = 45;
$text = $this->lang->line('ein_beispieltext_aus_der_lang_datei'');
$size = 14;
$color = array(0,0,0);
$pdf = $dompdf->get_canvas();
$pdf->page_text($left, 35, $text, $font, $size, $color);
$bild = FCPATH."/img/logo.png";
$info = getimagesize( $bild );
$w = 100;
$b = ceil($w * $info[1] / $info[0]);
$pdf->page_image($bild, "png", 450, 15,$w, $b);
$pdf->page_line($left, 100, 530, 100, array(0,0,0), 1);
$time = time();
$dompdf->stream("mangel_".$time.".pdf");
}
.....
}
Ich hoffe ich es hilft jemandem, für Verbesserungen und Tipps bin ich offen
mfg Robert
Robert Schöbel |
PHP |