<?xml version="1.0"  encoding="utf-8" ?>
<!-- RSS generated by TYPO3 v4 CMS on Mon, 21 May 2012 10:34:17 CEST -->
<rss  version="2.0" xml:base="http://meolus.de/">
	<channel>
		<title>meolus's Blog</title>
		<link>http://meolus.de/</link>
		<description>meolus's Blog Feed</description>
		<language>en-US</language>
		<copyright>&#x2117; &amp; &#xA9; Marcel Gehrmann</copyright>
		<pubDate>Sun, 07 Dec 2008 12:37:46 +0100</pubDate>
		<generator>TYPO3 v4 CMS</generator>
		<category>Computer &amp; Freizeit</category>
		<item>
			<title>LaTex in einem MediaWiki unter XAMPP/Windows einrichten</title>
			<link>http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=6</link>
			<description>&lt;p&gt;Um LaTex in einem &lt;a href=&quot;http://mediawiki.org&quot; title=&quot;WikiMedia - Meta-Wiki&quot; target=&quot;_blank&quot; class=&quot;external-link-new-window&quot; &gt; MediaWiki&lt;/a&gt; unter Windows in einer &lt;a href=&quot;http://www.apachefriends.org/en/xampp-windows.html&quot; title=&quot;XAMPP-Umgebung für Windows&quot; target=&quot;_blank&quot; &gt;XAMPP&lt;/a&gt;-Umgebung ans Laufen zu bekommen habe ich mich entschlossen auf &lt;a href=&quot;http://de.wikipedia.org/wiki/Texvc&quot; title=&quot;Texvc in der Wikipedia&quot; target=&quot;_blank&quot; &gt;texvc&lt;/a&gt; zu verzichten und stattdessen auf die &lt;a href=&quot;http://www.miktex.org&quot; title=&quot;MikTex - LaTex-Umgebung&quot; target=&quot;_blank&quot; &gt;MikTex&lt;/a&gt;-Umgebung zu setzen, da ich diese bereits installiert hatte.&lt;/p&gt;
&lt;p&gt;Meine Vorgehensweise basiert auf anderen Tutorial/HowTos, die ich im Internet gefunden habe wie &lt;a href=&quot;http://www.votapedia.com/index.php?title=Supporting_math_in_MediaWiki1.7_on_Windows_2003_and_IIS6&quot; title=&quot;Supporting math in MediaWiki1.7 on Windows 2003 and IIS6&quot; target=&quot;_blank&quot; &gt;Supporting math in MediaWiki1.7 on Windows 2003 and IIS6&lt;/a&gt; und &lt;a href=&quot;http://www.megashear.org/wiki/index.php?title=Help:Running_MediaWiki_on_Windows#Another_way_to_use_math_under_windows&quot; title=&quot;Running MediaWiki on Windows&quot; target=&quot;_blank&quot; class=&quot;external-link-new-window&quot; &gt;Running MediaWiki on Windows&lt;/a&gt; jedoch sind diese bereits etwas älter und ließen sich daher nicht ganz 1:1 umsetzen. Daher habe ich mich entschlossen diesen aktuelleren Guide zu schreiben.&lt;/p&gt;
&lt;h2&gt;Vorbereitung&lt;/h2&gt;
&lt;p&gt;Um die folgende Anleitung nachvollziehen zu können benötigt man folgendes oder ähnliches - in Klammern jeweils die Version die ich hier konkret benutzt habe:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Windows [Vista SP1 64-bit]&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.apachefriends.org/en/xampp-windows.html&quot; title=&quot;XAMPP-Umgebung für Windows&quot; target=&quot;_blank&quot; &gt;XAMPP&lt;/a&gt; [1.6.8 (Basispaket)]&lt;/li&gt;&lt;li&gt;ein bereits Installiertes &lt;a href=&quot;http://mediawiki.org&quot; title=&quot;WikiMedia - Meta-Wiki&quot; target=&quot;_blank&quot; class=&quot;external-link-new-window&quot; &gt; MediaWiki&lt;/a&gt; [1.13.2] (&lt;a href=&quot;http://www.mediawiki.org/wiki/Installation&quot; title=&quot;MediaWiki-Installation&quot; target=&quot;_blank&quot; &gt;Installation auf MediaWiki.org&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.imagemagick.org/script/binary-releases.php#windows&quot; title=&quot;ImageMagick&quot; target=&quot;_blank&quot; &gt;ImageMagick&lt;/a&gt; [6.4.7-2-Q16 64-bit static]&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://pages.cs.wisc.edu/%7Eghost/&quot; title=&quot;GhostScript&quot; target=&quot;_blank&quot; class=&quot;external-link-new-window&quot; &gt;GhostScript&lt;/a&gt; [8.63 GPL 64-bit] (laut obigen Links - bin jedoch nicht sicher ob man es wirklich benötigt)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.miktex.org&quot; title=&quot;MikTex - LaTex-Umgebung&quot; target=&quot;_blank&quot; &gt;MikTex&lt;/a&gt; [2.7.3164 Basic]&lt;/li&gt;&lt;li&gt;Die von mir modifizierte und ursprünglich aus den oben genannten Quellen stammende &lt;a href=&quot;{$siteURL}fileadmin/images/meolus/blog/Math.zip&quot; title=&quot;Modifizierte Math.php&quot; target=&quot;_blank&quot; class=&quot;download&quot; &gt;Math.php&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Durchführung&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Da ich bereits ein installiertes (also lauffähiges) MediaWiki vorraussetze, gehe ich davon aus, dass Windows, sowie XAMPP oder ähnliches bereits auch installiert wurde. Installationshilfen gibt es auf den jeweiligen Websites.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Installiere ImageMagick, GhostScript und MikTex mit Standardeinstellungen. (Es werden die LaTex-Packages: amssymb, amsfonts und amsmath benötigt.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ersetze im MediaWiki-Verzeichnis die Datei &amp;quot;includeMath.php&amp;quot; durch die oben angebene modifizierte Version (ggf. BackUp nicht vergessen).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Erstelle die Verzeichnisse &amp;quot;imagestmp&amp;quot; und &amp;quot;imagesmath&amp;quot; im MediaWiki-Verzeichnis.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Editiere die MediaWiki-Config &amp;quot;LocalSettings.php&amp;quot; und füge folgende Zeilen, entsprechend angepasst, ein (alternativ kann man ImageMagick und MikTex natürlich auch in die PATH-Variable eintragen):&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;code&quot;&gt;&lt;i&gt;#Activate Tex&lt;br /&gt;&lt;/i&gt;$wgUseTeX = true;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;#ImageMagick (ggf. anpassen)&lt;br /&gt;&lt;/i&gt;$wgImageMagickConvertCommand  = 'C:Program FilesImageMagick-6.4.7-Q16convert.exe';&lt;br /&gt;$wgImageMagickIdentifyCommand = 'C:Program FilesImageMagick-6.4.7-Q16identify.exe';&lt;br /&gt;&lt;br /&gt;&lt;i&gt;#Tex (ggf. anpassen)&lt;/i&gt;&lt;br /&gt;$wgLaTexCommand = 'C:Program Files (x86)MiKTeX 2.7miktexbinlatex.exe';&lt;br /&gt;$wgDvipsCommand = 'C:Program Files (x86)MiKTeX 2.7miktexbindvips.exe';&lt;br /&gt;&lt;br /&gt;&lt;i&gt;#MathEnviroment (passt zur Standardconfig von MediaWiki 1.13.2)&lt;br /&gt;&lt;/i&gt;$wgMathPath      = &amp;quot;{$wgScriptPath}/images/math&amp;quot;;&lt;br /&gt;$wgMathDirectory = &amp;quot;{$IP}\images\math&amp;quot;;&lt;br /&gt;$wgTmpDirectory  = &amp;quot;{$IP}\images\tmp&amp;quot;;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Fertig.&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Abschluss&lt;/h2&gt;
&lt;p&gt;Wenn es jetzt noch Probleme gibt, dann vielleicht doch noch in die anderen Anleitungen schauen und mir bitte &lt;a href=&quot;{$siteURL}kontakt/&quot; title=&quot;Opens internal link in current window&quot; class=&quot;internal-link&quot; &gt;schreiben&lt;/a&gt;, was nicht funktioniert, damit ich die Anleitung hier entsprechend korrigieren kann.  Denn MikTex und GhostScript habe ich bereits länger auf meinem Rechner installiert, so dass ich nicht sicher sein kann, dass da nicht doch noch etwas konfiguriert werden muss.&lt;br /&gt;Mir hat es beim debuggen der Math.php sehr geholfen einfach &amp;quot;cleanTemporaryDirectory()&amp;quot; zu deaktivieren, um anhand der bereits abgelegten Dateien zu finden, wo es hakte.&lt;/p&gt;
&lt;p&gt;Ansonsten ist wie in der Math.php selber bemerkt die LaTeX Rendering Class sehr gut zum Einbinden in weitere PHP-Projekten zur LaTex-Ausgabe geeignet.&lt;/p&gt;</description>
			<pubDate>Sun, 07 Dec 2008 12:37:46 +0100</pubDate>
			<guid isPermaLink="true">http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=6</guid>
			<source url="http://meolus.de/">LaTex in einem MediaWiki unter XAMPP/Windows einrichten</source>
		</item>
		<item>
			<title>Entity-Relationship-Model (ERM) zur imdbpy-Ausgabe</title>
			<link>http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=5</link>
			<description>&lt;p&gt;Inzwischen habe ich mich mal mit der von &lt;a href=&quot;http://imdbpy.sourceforge.net/&quot; target=&quot;_blank&quot; class=&quot;external-link-new-window&quot; &gt;imdbpy&lt;/a&gt; erzeugen Ausgabe befasst und ein ERM-Diagramm dazu gezeichnet, damit ich in Zukunft eigene Abfragen auf den von imdbpy erzeugten Daten erstellen kann. Zusätzlich habe ich in einem MySQL-Struktur-Export die vermutlichen Foreign-Keys beschrieben und die restlichen Attribute kommentiert. &lt;/p&gt;
&lt;h2&gt;ERM-Diagramm&lt;/h2&gt;
&lt;p&gt;In dem Diagramm (&lt;a href=&quot;{$siteURL}fileadmin/images/meolus/blog/imdb-erm.png&quot; title=&quot;ERM-Diagramm&quot; target=&quot;_blank&quot; &gt;Link zum Diagramm&lt;/a&gt;) sind links die Typen, in der Mitte die meisten logischen Verknüpfungen und rechts die Tabellen, welche die Namen enthalten. Die 1:n Relationen sind natürlich durch Spalten in den entsprechenden Tabellen realisiert, welche an der &amp;quot;n&amp;quot;-Seite verbunden sind. Manche der Relationen musste ich raten, da ich kein Dokumentation dazu gefunden habe, und nicht ganz sicher auf die Zusammenhänge schließen konnte.&lt;/p&gt;
&lt;p&gt;Die Namen der Relationen, Entitäten und Attribute habe ich sogut es geht versucht zu übernehmen. Vereinfachungen in dem Diagramm sind sicherlich noch möglich, aber dann ist dies nicht mehr so nah an der konkreten Struktur in der Datenbank. Die Zahl in den Klammern hinter den Entitäten gibt an, um wieviele Datensätze es sich in dieser Tablle handelt. Ferner bedeutet &amp;quot;(xx &amp;lt;&amp;gt; NULL)&amp;quot;, dass dieses Attribut fast immer auf NULL gesetzt ist bis auf xx Datensätze. &lt;/p&gt;
&lt;h2&gt;MySQL-Struktur kommentiert&lt;/h2&gt;
&lt;p&gt;Zur weiteren Erklärung habe ich versucht einen MySQL-Struktur-Export zu kommentieren (jeweils hinter &amp;quot;##&amp;quot;). Manche der Kommentare stammen aus verschiedenen Dokumentationen von imdbpy, die meisten sind jedoch eigene Beobachtungen, welche nicht korrekt sein müssen, da dies erst ein erster Überblick ist, den ich mir gemacht habe:&lt;/p&gt;
&lt;p&gt;## Alternative Schaulspieler(?)/Charakter-Bezeichnungen&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;aka_name&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `person_id` int(11) NOT NULL,                            ## FOREIGN KEY(name.id)&lt;br /&gt;  `name` text NOT NULL,                                            ## alternativer Name von Schauspieler(?)/Charakter&lt;br /&gt;  `imdb_index` varchar(12) default NULL,        ## meistens NULL&lt;br /&gt;  `name_pcode_cf` varchar(5) default NULL,    ## Soundex von name&lt;br /&gt;  `name_pcode_nf` varchar(5) default NULL,    ## Soundex von name&lt;br /&gt;  `surname_pcode` varchar(5) default NULL,    ## Soundex des Nachnamens aus name&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_person` (`person_id`),&lt;br /&gt;  KEY `idx_pcodecf` (`name_pcode_cf`),&lt;br /&gt;  KEY `idx_pcodenf` (`name_pcode_nf`),&lt;br /&gt;  KEY `idx_pcode` (`surname_pcode`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=516315 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Alternative Film/Serien-Bezeichnungen&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;aka_title&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `movie_id` int(11) default NULL,                    ## FOREIGN KEY(title.id)&lt;br /&gt;  `title` text NOT NULL,                                        ## Name der Serie/des Films&lt;br /&gt;  `imdb_index` varchar(12) default NULL,        ## fast immer NULL (sonst römische Zahlen)&lt;br /&gt;  `kind_id` int(11) NOT NULL,                                ## FOREIGN KEY(kind_type.id)&lt;br /&gt;  `production_year` int(11) default NULL,        ## Produktionsjahr&lt;br /&gt;  `phonetic_code` varchar(5) default NULL,    ## Soundex von title&lt;br /&gt;  `episode_of_id` int(11) default NULL,            ## FOREIGN KEY(title.id)&lt;br /&gt;  `season_nr` int(11) default NULL,                    ## Season-Nr.&lt;br /&gt;  `episode_nr` int(11) default NULL,                ## Episoden-Nr.&lt;br /&gt;  `note` text,                                                            ## Notiz&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_movieid` (`movie_id`),&lt;br /&gt;  KEY `idx_pcode` (`phonetic_code`),&lt;br /&gt;  KEY `idx_epof` (`episode_of_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=271577 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;cast_info&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `person_id` int(11) NOT NULL,                            ## FOREIGN KEY(name.id)&lt;br /&gt;  `movie_id` int(11) NOT NULL,                            ## FOREIGN KEY(title.id)&lt;br /&gt;  `person_role_id` int(11) default NULL,        ## FOREIGN KEY(char_name.id)&lt;br /&gt;  `note` text,                                                            ## Text&lt;br /&gt;  `nr_order` int(11) default NULL,                    ## ????????????????????????&lt;br /&gt;  `role_id` int(11) NOT NULL,                                ## FOREIGN KEY(role_type.id)&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_pid` (`person_id`),&lt;br /&gt;  KEY `idx_mid` (`movie_id`),&lt;br /&gt;  KEY `idx_cid` (`person_role_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16523187 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Namen der Schaulspieler, Regisseure... ?!&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;char_name&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `name` text NOT NULL,                                            ## Namen von Regisseuren, Produzenten, Schauspielern, ..., jedoch keine Film/Serien, ...-Namen!&lt;br /&gt;  `imdb_index` varchar(12) default NULL,        ## fast immer NULL (sonst römische Zahlen)&lt;br /&gt;  `imdb_id` int(11) default NULL,                        ## immer NULL&lt;br /&gt;  `name_pcode_nf` varchar(5) default NULL,    ## Soundex von name im normalen Format&lt;br /&gt;  `surname_pcode` varchar(5) default NULL,    ## Soundex des Nachnamens aus name, falls es von name_pcode_nf abweicht&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_name` (`name`(6)),&lt;br /&gt;  KEY `idx_pcodenf` (`name_pcode_nf`),&lt;br /&gt;  KEY `idx_pcode` (`surname_pcode`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2083542 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Filmstudios/Firmen&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;company_name&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `name` text NOT NULL,                                            ## Name des Filmstudios/einer Firma z.B. &amp;quot;Warner Bros.&amp;quot;&lt;br /&gt;  `country_code` varchar(255) default NULL,    ## z.B. &amp;quot;[de]&amp;quot; oder &amp;quot;[us]&amp;quot;&lt;br /&gt;  `imdb_id` int(11) default NULL,                        ## immer NULL&lt;br /&gt;  `name_pcode_nf` varchar(5) default NULL,    ## Soundex von name im normalen Format&lt;br /&gt;  `name_pcode_sf` varchar(5) default NULL,    ## Soundex von name plus Ländercode&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_name` (`name`(6)),&lt;br /&gt;  KEY `idx_pcodenf` (`name_pcode_nf`),&lt;br /&gt;  KEY `idx_pcodesf` (`name_pcode_sf`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=194732 ;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;## Art der Firma  &lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;company_type&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `kind` varchar(32) NOT NULL,                            ## one of 1-4 / SET z.B. 'production companies'&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `kind` (`kind`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;complete_cast&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `movie_id` int(11) default NULL,                    ## FOREIGN KEY(title.id)&lt;br /&gt;  `subject_id` int(11) NOT NULL,                        ## FOREIGN KEY(comp_cast_type.id)&lt;br /&gt;  `status_id` int(11) NOT NULL,                            ## FOREIGN KEY(comp_cast_type.id)&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_mid` (`movie_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=78838 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;comp_cast_type&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `kind` varchar(32) NOT NULL,                            ## one of 1-4 / SET&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `kind` (`kind`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;info_type&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,                            &lt;br /&gt;  `info` varchar(32) NOT NULL,                            ## one of 1-113 / SET&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `info` (`info`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=114 ;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;## Art des Eintrages&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;kind_type&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `kind` varchar(15) NOT NULL,                            ## one of 1-7 / SET z.B. 'movie', 'tv series', 'video games'&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `kind` (`kind`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;link_type&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `link` varchar(32) NOT NULL,                            ## one of 1-18 / SET    &lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `link` (`link`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Relation Film &amp;lt;-&amp;gt; Firma&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;movie_companies&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `movie_id` int(11) NOT NULL,                            ## FOREIGN KEY(title.id)&lt;br /&gt;  `company_id` int(11) NOT NULL,                        ## FOREIGN KEY(name.id)&lt;br /&gt;  `company_type_id` int(11) NOT NULL,                ## FOREIGN KEY(company_type.id)&lt;br /&gt;  `note` text,                                                            ## Anmerkung&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_mid` (`movie_id`),&lt;br /&gt;  KEY `idx_cid` (`company_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1482933 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Filmdetails, wie z.B. Laufzeit oder Seitenverhältnis&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;movie_info&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `movie_id` int(11) NOT NULL,                            ## FOREIGN KEY(title.id)&lt;br /&gt;  `info_type_id` int(11) NOT NULL,                    ## FOREIGN KEY(info_type.id)&lt;br /&gt;  `info` text NOT NULL,                                            ## Text&lt;br /&gt;  `note` text,                                                            ## Anmerkung&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_mid` (`movie_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10449698 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Relation Filme &amp;lt;-&amp;gt; Filme: Ãƒâ€žhnliche Filme&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;movie_link&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `movie_id` int(11) NOT NULL,                            ## FOREIGN KEY(title.id)&lt;br /&gt;  `linked_movie_id` int(11) NOT NULL,                ## FOREIGN KEY(title.id)&lt;br /&gt;  `link_type_id` int(11) NOT NULL,                    ## FOREIGN KEY(link_type.id)&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_mid` (`movie_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=789129 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Namen von Personen und Charakteren (?)&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;name&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `name` text NOT NULL,                                            ## Namen von Regisseuren, Produzenten, Schauspielern, ...&lt;br /&gt;  `imdb_index` varchar(12) default NULL,        ## häufig NULL (sonst: römische Zahlen)&lt;br /&gt;  `imdb_id` int(11) default NULL,                        ## immer NULL&lt;br /&gt;  `name_pcode_cf` varchar(5) default NULL,    ## Soundex von name im kanonischen (canonical) Format&lt;br /&gt;  `name_pcode_nf` varchar(5) default NULL,    ## Soundex von name im normalen Format, falls es sich von name_pcode_cf unterscheidet&lt;br /&gt;  `surname_pcode` varchar(5) default NULL,    ## Soundex des Nachnamens aus name, falls es sich von name_pcode_cf und name_pcode_nf unterscheidet&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_name` (`name`(6)),                                &lt;br /&gt;  KEY `idx_pcodecf` (`name_pcode_cf`),&lt;br /&gt;  KEY `idx_pcodenf` (`name_pcode_nf`),&lt;br /&gt;  KEY `idx_pcode` (`surname_pcode`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2305107 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Art der Personen, z.B. Charakter, Schauspieler, Regisseur, ...&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;person_info&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `person_id` int(11) NOT NULL,                            ## FOREIGN KEY(name.id)&lt;br /&gt;  `info_type_id` int(11) NOT NULL,                    ## FOREIGN KEY(info_type.id)&lt;br /&gt;  `info` text NOT NULL,                                            ## Text&lt;br /&gt;  `note` text,                                                            ## Anmerkung&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_pid` (`person_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1918571 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;role_type&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `role` varchar(32) NOT NULL,                            ## one of 1-12 / SET&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `role` (`role`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## Filme/Serien/Spiele&lt;br /&gt;CREATE TABLE IF NOT EXISTS `&lt;b&gt;title&lt;/b&gt;` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `title` text NOT NULL,                                        ## Filmtitel, Serientitel, ...&lt;br /&gt;  `imdb_index` varchar(12) default NULL,        ## fast immer NULL (sonst: römische Zahlen)&lt;br /&gt;  `kind_id` int(11) NOT NULL,                                ## FOREIGN KEY(kind_type.id)&lt;br /&gt;  `production_year` int(11) default NULL,        ## Produktionsjahr&lt;br /&gt;  `imdb_id` int(11) default NULL,                        ## immer NULL&lt;br /&gt;  `phonetic_code` varchar(5) default NULL,    ## Soundex von title&lt;br /&gt;  `episode_of_id` int(11) default NULL,            ## FOREIGN KEY(title.id)&lt;br /&gt;  `season_nr` int(11) default NULL,                    ## Season-Nr.&lt;br /&gt;  `episode_nr` int(11) default NULL,                ## Episoden-Nr.&lt;br /&gt;  `series_years` varchar(49) default NULL,    ## Ausstrahlung der Serie (z.B. &amp;quot;2008-????&amp;quot;)&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `idx_title` (`title`(10)),&lt;br /&gt;  KEY `idx_pcode` (`phonetic_code`),&lt;br /&gt;  KEY `idx_epof` (`episode_of_id`)&lt;br /&gt;) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1231480 ;&lt;/p&gt;
&lt;h2&gt;Verwandtes&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;{$siteURL}blog/?tx_wecdiscussion[single]=4&quot; target=&quot;_self&quot; &gt; Internet Movie Database (IMDB) in MySQL importieren&lt;/a&gt;&lt;/p&gt;</description>
			<pubDate>Mon, 18 Aug 2008 23:45:34 +0200</pubDate>
			<guid isPermaLink="true">http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=5</guid>
			<source url="http://meolus.de/">Entity-Relationship-Model (ERM) zur imdbpy-Ausgabe</source>
		</item>
		<item>
			<title>Internet Movie Database (IMDB) in MySQL importieren</title>
			<link>http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=4</link>
			<description>&lt;p&gt;Im folgenden werde ich beschreiben, wie man die Internet Movie Database (IMDB) in eine MySQL-Datenbank importieren kann. Dazu benötigt man zunächst einen MySQL-Server bzw. Zugang zu einem. Dieser sollte idealerweise lokal angeschlossen sein und Daten von temporär bis zu 4 GB aufnehmen können, womit schonmal die meisten einfachen Hosting-Angebote wegfallen. Ich habe dazu einen lokalen MySQL-Server aus einer &lt;a href=&quot;http://www.apachefriends.org/de/xampp.html&quot; target=&quot;_blank&quot; &gt;XAMPP&lt;/a&gt;-Installation verwendet, so dass ich dort keine Einschränkungen hatte.&lt;/p&gt;
&lt;h2&gt;Python vorbereiten und imdbpy installieren&lt;/h2&gt;
&lt;p&gt;Für den Import gibt es ein Phython-Script namens &lt;a href=&quot;http://imdbpy.sourceforge.net/&quot; target=&quot;_blank&quot; &gt;imdbpy&lt;/a&gt;. Ich musste jedoch erstmal unter Windows Vista Phython installieren. Dazu habe ich einfach den Windows Installer von &lt;a href=&quot;http://www.python.org/download/&quot; target=&quot;_blank&quot; &gt;http://www.python.org/download/&lt;/a&gt; benutzt. Leider war das noch nicht alles, sondern man muss noch zwei weitere Python Module installieren, damit imdbpy funktioniert. Dafür habe ich einfach &lt;a href=&quot;http://peak.telecommunity.com/DevCenter/EasyInstall#installing-easy-install&quot; target=&quot;_blank&quot; &gt;easy-install&lt;/a&gt; installiert, indem ich einfach &amp;quot;ez_setup.py&amp;quot; herunter geladen und installiert habe. Zur Not gibt es auch noch ein &lt;a href=&quot;http://showmedo.com/videos/video?name=2070000&amp;amp;fromSeriesID=207&quot; target=&quot;_blank&quot; &gt;Video&lt;/a&gt;, welches auf der easy-install Website verlinkt ist, in dem vorgeführt wird wie man easy-install installiert.&lt;/p&gt;
&lt;p&gt;Wenn man dann easy-install installiert hat, muss man nur noch in der Eingabeaufforderung einmal &amp;quot;easy_install -U SQLObject&amp;quot; und &amp;quot;easy_install -U mysql_python&amp;quot; ausführen um den benötigten Datenbank-Wrapper SQLObject und das MySQL-Modul zu installieren. Ferner sei hier anzumerken, dass imdbpy natürlich auch mit allen anderen vom Python-Datenbankwrapper unterstützten Datenbanksystemen funktioniert.&lt;/p&gt;
&lt;p&gt;Schließlich installiert man dann noch imdbpy, wozu ich mich des &lt;a href=&quot;http://imdbpy.sourceforge.net/?page=download&quot; target=&quot;_blank&quot; &gt;Windows-Installers&lt;/a&gt; von imdbpy bedient habe. Ob die Installation mittels des nahe liegenden Befehls &amp;quot;easy_install -U imdbpy&amp;quot; funktioniert hat kann ich nicht genau sagen, da ich bereits als erstes per Windows-Installer imdbpy installiert hatte und danach erst die ganzen Abhängigkeiten aufgedeckt habe. Jedenfalls gab es beim nachträglichen Versuch ein paar Warnungen, dass Python mit dem falschen Compiler kompiliert sei und deswegen einzelne Bestandteile von imdbpy dann ihrerseits nicht kompiliert werden können.&lt;/p&gt;
&lt;h2&gt;Download der IMDB Daten&lt;/h2&gt;
&lt;p&gt;Natürlich braucht man auch noch die Daten der IMDB. Dazu lädt man von einem der &lt;a href=&quot;http://www.imdb.com/interfaces#plain&quot; target=&quot;_blank&quot; &gt;IMDB FTP-Mirrors&lt;/a&gt; ALLE Dateien aus dem Hauptverzeichnis herunter, was momentan 52 Dateien sind, die insgesamt 582 MB groß sind. Die Dateien müssen alle in das gleiche Verzeichnis welches ich hier mal 'D:IMDB-Daten' nenne. Beim Download der 52 Dateien kann ein Download-Manager wie z.B. das Firefox-Plugin &lt;a href=&quot;http://www.downthemall.net/&quot; target=&quot;_blank&quot; &gt;DownThemAll!&lt;/a&gt; sehr behilflich sein. Die Unterverzeichnisse mit den Diffs, etc. benötigt man nicht.&lt;/p&gt;
&lt;h2&gt;imdbpy anwenden&lt;/h2&gt;
&lt;p&gt;Schließlich kann man imdbpy mittels &amp;quot;imdbpy2sql.py -d 'D:IMDB-Daten' -u 'mysql://user:password@host/database'&amp;quot; anwerfen, wobei die Datenbank &amp;quot;database&amp;quot; existieren muss (weiterführende Details in der &lt;a href=&quot;http://imdbpy.sourceforge.net/?page=docs&quot; target=&quot;_blank&quot; &gt;imdbpy-Dokumentation&lt;/a&gt; in der Datei &amp;quot;README.sqldb&amp;quot;). Nach 100 Minuten war das Script auf meinen (Athlon64 X2 4200+, 3GB RAM) durchgelaufen, wobei ich glaube das das verschlüsselte Laufwerk auf dem der MySQL-Server lief das ganze sehr verlangsamt hat. Denn das Einfügen der Daten hat 65 Minuten gedauert und alleine das darauf folgende Erstellen der Indizes weitere 35 Minuten. In der &amp;quot;README.sqldb&amp;quot; ist auf einem AthlonXP 1800+, 1GB RAM von 160 und 45 (insgesamt 205) Minuten die Rede, was meine Vermutung zu bestätigen scheint, dass mein System ohne die Verschlüsselung hätte schneller sein sollen.&lt;/p&gt;
&lt;p&gt;Das Script erzeugt 18 MyISAM Tabellen, mit insgesamt fast 38 Millionen einzelnen Einträgen. Die Datenbank ist final etwa 2,8 GB groß, hat aber gerade bei der Index-Erstellung temporär bis zu 4 GB benötigt. Da die Internet Movie Database immer weiter wächst wird der Speicherverbrauch in Zukunft vermutlich immer weiter anwachsen.&lt;/p&gt;
&lt;h2&gt;Fazit&lt;/h2&gt;
&lt;p&gt;Wie die Datenbank nun benutzt werden kann findet man in der  &lt;a href=&quot;http://imdbpy.sourceforge.net/?page=docs&quot; target=&quot;_blank&quot; &gt;imdbpy-Dokumentation&lt;/a&gt; verschiedenen Dateien erklärt. Man kann z.B. mit imdbpy direkt auf die runtergeladenen Dateien der IMDB zugreifen, mit den imdbpy-Programmen auf die Datenbank zugreifen oder natürlich die imdbpy-Komponente direkt in Python benutzen. Mir ging es jedoch in erster Linie darum die IMDB in eine lokale Datenbank zu bekommen was mit dem oben genannten Arbeitsschritten gelungen ist, wenn ich auch noch nicht genau die Struktur rausgefunden habe um eigene sinnvolle Anfragen in SQL zu stellen.&lt;/p&gt;
&lt;h2&gt;Verwandtes&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=5&quot; target=&quot;_self&quot; &gt;Entity-Relationship-Model (ERM) zur imdbpy-Ausgabe&lt;/a&gt; &lt;/p&gt;</description>
			<pubDate>Sun, 13 Jul 2008 00:02:26 +0200</pubDate>
			<guid isPermaLink="true">http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=4</guid>
			<source url="http://meolus.de/">Internet Movie Database (IMDB) in MySQL importieren</source>
		</item>
		<item>
			<title>Windows Vista SP1 64-bit und Borland Developer Studio 2006</title>
			<link>http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=1</link>
			<description>&lt;p&gt;Manchmal verstehe ich es selber nicht, was man sich nicht alles an tut um aktuell zu sein. Doch vor etwa einem Monat habe ich dann den Plan gefasst: Ich will mein Windows Vista Business 32-bit durch Windows Vista Business 64-bit mit Service Pack 1 ersetzen.&lt;/p&gt;
&lt;h2&gt;Windows Installation&lt;/h2&gt;
&lt;p&gt;Also 'ran gemacht, die neue DVD vom MSDN AA-Downloadserver herunterzuladen. Doch zu dem ersten Problem, dass der Download immer wieder hängen bleibt, weil die Verbindung abbricht - schätzungweise sind es WLAN, DSL-Verbindung und VPN gleichermaßen entschuld - gesellt sich als bald das Problem, dass der Downloadserver teils nur sporadisch erreichbar ist. Naja, nach gerade mal zwei Wochen, immer wieder den Download zu versuchen, hab ich dann endlich alle benötigten Teile zusammen. Weiter erscheint es mir als Wunder, dass nach einem derartigen abenteuerlichen Download die DVD sogar fehlerfrei ist, was ich leider direkt praktisch evaluieren musste, weil auf dem MDSN AA-Downloadserver auch noch keine MD5-Hashes der Downloadteile angeben waren. An der Installation hat sich nichts geändert, so dass diese fix von statten geht. Selbst das Schmunzeln welches sich einstellt, wenn die Hotline einen nach der Aktivierung zur &amp;quot;Erfolgreichen Aktivierung von Windows XP&amp;quot; beglückwünscht ist geblieben.&lt;/p&gt;
&lt;p&gt;Zum Glück hatte ich vorher auch schon Vista, so dass nicht mehr viele Überraschungen bei inkompatibler Software und Geräte gab. Im Grunde hat es lediglich den Cisco-VPN-Client erwischt, der einfach nicht unter der 64-bit Version läuft. Alles andere läuft wie gehabt, wenn mich auch ein wenig enttäuscht, dass 2/3 der Software 32-bit Programme sind. Das ist zwar egal, da diese auch ohne weiteres in der 64-bit Edition laufen, jedoch hatte ich schon gehofft, dass ich jetzt viele 64-bit Programm nutzen kann.&lt;/p&gt;
&lt;p&gt;Jedoch gibt es z.B. DivX nur als 32-bit Version, die zwar unter der 64-bit Version läuft, jedoch nicht von den 64-bit Versionen von Programmen wie Windows Media Player oder VirtualDub genutzt werden können, wodurch auch diese Programme alle in der 32-Bit Version benutzt werden müssen. Oder Java, da freut es mich ebenso wenig eine 32-bit und eine 64-bit Runtime Enviroment (RE) installieren zu müssen, weil einige Programme da so wählerisch sind - Plattformunabhängigkeit hatte ich mir doch nen bischen anders vorgestellt.&lt;/p&gt;
&lt;h2&gt;Borland Developer Studio 2006 Installation&lt;/h2&gt;
&lt;p&gt;Eigentlich hatte ich mir diesmal vorgenommen mit Vista zu arbeiten wie Microsoft es sich wohl gedacht hatte. Also NoExecution-Bit (NX-Bit) gesetzt und schön Massen von Meldungen des &amp;quot;User Access Control&amp;quot; (UAC) bei den Installationen abgenickt. Doch schließlich stand wiedermal das Borland Developer Studio 2006 (BDS 2006) auf der Tagesordnung und dessen Installation gelang einfach nicht, selbst wenn man die Installation explizit als Administrator ausführt. Also kurzerhand das UAC deaktiviert und sieh da, die Installation funktionierte nun tadellos.&lt;/p&gt;
&lt;p&gt;An das NX-Bit hatte ich mich inzwischen auch gewöhnt. Einzelne Programme wie &amp;quot;Quake III Arena&amp;quot; in die Ausnahmeliste aufgenommen, jedoch führten die heutigen Arbeiten an MailOffice dazu, dass ich mal wieder richtig mit dem BDS 2006 arbeiten musste und den Debugger verwenden musste. Schön dachte ich mir, als er ohne zu murren am ersten Haltepunkt hielt, doch bereits dass auf die meisten Variablen nicht zugegriffen werden konnte machte mich argwöhnig. Schließlich wurde das zu debuggende Programm von Windows geschlossen, weil es Programmcode auf dem Stack ausführen wollte. Also das Programm ebenfalls in die Ausnahmeliste aufgenommen, und es lief scheinbar besser. Ich sah zwar noch immer viele Variablen nicht, jedoch wurde mein Programm nicht mehr von Windows beendet. Dafür prasselte es nun einige Ausführungsschritte weiter, Speicherschutzverletzungen im BDS, worauf ich das NX-Bit nun auch vollkommen deaktivierte, was die Lösung brachte.&lt;/p&gt;
&lt;h2&gt;Fazit&lt;/h2&gt;
&lt;p&gt;Windows Vista (inkl. der 64-bit Versionen) ist inzwischen gut einsetzbar. UAC und NX-Bit sind noch immer nix für mich. Und mein gutes altes Borland Developer Studio 2006 lässt mich noch immer nicht im Stich.&lt;/p&gt;</description>
			<pubDate>Sat, 29 Mar 2008 23:47:00 +0100</pubDate>
			<guid isPermaLink="true">http://meolus.de/{$siteURL}blog/?tx_wecdiscussion%5Bsingle%5D=1</guid>
			<source url="http://meolus.de/">Windows Vista SP1 64-bit und Borland Developer Studio 2006</source>
		</item>
	</channel>
</rss>

