<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8712424711890390704</id><updated>2011-10-12T10:43:06.505+01:00</updated><category term='linux'/><category term='tippfehler'/><category term='job'/><category term='computerbase'/><category term='_rowid'/><category term='mysql'/><category term='created_tmp_disk_tables'/><category term='fuse'/><category term='soundex'/><category term='typo'/><category term='sphinx'/><category term='search'/><category term='fulltext'/><category term='ssh'/><category term='show columns'/><category term='india'/><category term='kde'/><category term='levenshtein'/><category term='outsourcing'/><title type='text'>Steffen Weber</title><subtitle type='html'>Web-Entwicklung und sonstiger Kram :-)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-6819538627357179477</id><published>2011-01-19T17:51:00.000+01:00</published><updated>2011-01-19T17:51:37.061+01:00</updated><title type='text'>Google Chrome already uses SPDY</title><content type='html'>SSL connections from Google Chrome to a Google server have &lt;a href="https://groups.google.com/group/spdy-dev/browse_thread/thread/4c2396ecbc36b1c4"&gt;a 90 % chance of using SPDY&lt;/a&gt;. SPDY is an HTTP replacement that encrypts all data and greatly reduces latency (it's way better than persistent or keep-alive HTTP connections). Read more about &lt;a href="http://en.wikipedia.org/wiki/SPDY"&gt;SPDY at Wikipedia&lt;/a&gt;. Although already deloyed by Google, support for SPDY in any free HTTP server software is currently non-existent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-6819538627357179477?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/6819538627357179477/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=6819538627357179477' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/6819538627357179477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/6819538627357179477'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2011/01/google-chrome-already-uses-spdy.html' title='Google Chrome already uses SPDY'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-348048032305678908</id><published>2011-01-10T17:31:00.000+01:00</published><updated>2011-01-10T17:31:52.955+01:00</updated><title type='text'>Saving Revisions of Articles in a Database</title><content type='html'>&lt;b&gt;Reverse diffs&lt;/b&gt;&lt;br /&gt;Assumption: You have the most recent revision available anyways in your "articles" table. Then use reverse-diffs (that convert revision k into revision k-1) instead of normal forward-diffs (that would convert revision k into revision k+1). This saves disk space.&lt;br /&gt;&lt;br /&gt;Let's assume you have n revisions. With reverse-diffs your "revisions" table only needs to save one reverse-diff for each of the (n-1) old revisions. In contrast to that for forward-diffs you would have to store the initial revision completely (1) plus one forward-diff for each following revision (n-1) which sums up to n.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Diff format&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;Instead of using &lt;a href="http://www.gnu.org/software/diffutils/"&gt;diffutils&lt;/a&gt;&amp;nbsp;think about whether it might be more easy and maybe even efficient to serialize and gzip the data of all revisions. &lt;a href="http://www.mediawiki.org/"&gt;Mediawiki&lt;/a&gt; does this especially because this is a very efficient way to deal with edit-wars (source for this is a presentation by a Mediawiki developer, but I have lost the link, sorry).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-348048032305678908?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/348048032305678908/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=348048032305678908' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/348048032305678908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/348048032305678908'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2011/01/saving-revisions-of-articles-in.html' title='Saving Revisions of Articles in a Database'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-6858929535605250953</id><published>2011-01-08T13:36:00.003+01:00</published><updated>2011-01-08T13:41:41.417+01:00</updated><title type='text'>As expected: No Response to Opera Bug Reports</title><content type='html'>Why should I bother reporting bugs to &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; if they never ever send a response? Three weeks ago I told them that in Opera 11.00 input fields with type="search" cannot be submitted (DSK-322619). They did not respond to any of my bug reports in the past but I wanted to let them know nevertheless. But as expected they did not react at all.&lt;br /&gt;&lt;br /&gt;In the future I won't waste my time reporting Opera bugs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-6858929535605250953?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/6858929535605250953/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=6858929535605250953' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/6858929535605250953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/6858929535605250953'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2011/01/as-expected-no-response-to-opera-bug.html' title='As expected: No Response to Opera Bug Reports'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-1910293089351860313</id><published>2011-01-05T01:19:00.011+01:00</published><updated>2011-01-07T21:41:31.081+01:00</updated><title type='text'>nginx: Blocking Mozilla Prefetch Requests</title><content type='html'>&lt;pre&gt;if ( $http_x_moz = "prefetch" ) {&lt;br /&gt;    return 444;&lt;br /&gt;}&lt;/pre&gt;On &lt;a href="http://www.computerbase.de/" target="_blank"&gt;ComputerBase&lt;/a&gt; they accounted for 15 % of all HTTP requests for HTML pages. And our HTML pages cannot even be cached so this behaviour of Mozilla browsers is a waste of resources (server load + traffic).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mozilla should fix Firefox such that it only prefetches resources marked as rel="prefetch". Those marked as rel="next" should &lt;b&gt;not&lt;/b&gt; be prefetched.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Edit:&lt;/b&gt; Switched from "return 403" to "return 444" (i.e. just close connection) because some users reported problems with proxy servers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-1910293089351860313?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/1910293089351860313/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=1910293089351860313' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/1910293089351860313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/1910293089351860313'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2011/01/nginx-blocking-mozilla-prefetch.html' title='nginx: Blocking Mozilla Prefetch Requests'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-8865720011400106051</id><published>2010-01-14T17:43:00.003+01:00</published><updated>2010-01-14T20:53:46.453+01:00</updated><title type='text'>Removing a password from a PDF file</title><content type='html'>One of my tutors protects PDF files with a password although they are only accessible after you've authenticated yourself as a student. Since it is annoying to enter a password each and every time you open one of those PDFs, you can use &lt;a href="http://qpdf.sourceforge.net/" target="_blank"&gt;QPDF&lt;/a&gt; to get rid of the password:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;qpdf --password=&amp;lt;PASSWORD&amp;gt; --decrypt input.pdf output.pdf&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-8865720011400106051?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/8865720011400106051/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=8865720011400106051' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/8865720011400106051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/8865720011400106051'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2010/01/removing-password-from-pdf-file.html' title='Removing a password from a PDF file'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-8836540390812747325</id><published>2009-10-01T16:37:00.001+01:00</published><updated>2009-10-01T16:38:25.485+01:00</updated><title type='text'>Gentoo Overlay with GraphicsMagick ebuilds</title><content type='html'>Just have a look at the &lt;a href="http://overlays.gentoo.org/proj/sunrise/browser/sunrise/media-gfx/graphicsmagick/"&gt;Sunrise Project&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-8836540390812747325?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/8836540390812747325/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=8836540390812747325' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/8836540390812747325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/8836540390812747325'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2009/10/gentoo-overlay-with-graphicsmagick.html' title='Gentoo Overlay with GraphicsMagick ebuilds'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-6870257867294950531</id><published>2009-10-01T16:09:00.003+01:00</published><updated>2009-10-01T16:12:26.864+01:00</updated><title type='text'>Running Hunspell via PHP's exec function</title><content type='html'>Reminder to self: Ensure that the environment variable &lt;code&gt;$HOME&lt;/code&gt; is set. Otherwise &lt;a href="http://hunspell.sourceforge.net/"&gt;hunspell&lt;/a&gt; refuses to report any misspelled words.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-6870257867294950531?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/6870257867294950531/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=6870257867294950531' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/6870257867294950531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/6870257867294950531'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2009/10/running-hunspell-via-phps-exec-function.html' title='Running Hunspell via PHP&apos;s exec function'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-1434603686426128984</id><published>2008-01-08T17:41:00.000+01:00</published><updated>2008-01-08T17:49:09.902+01:00</updated><title type='text'>Lösung für memcached-Timeouts: Unix Domain Sockets</title><content type='html'>Beim Herstellen der Verbindung zu unserem memcached-Server kam es mehr oder weniger konstant zu ein paar Dutzend Timeouts pro Minute (das liegt in der Größenordnung von circa 1 % aller Verbindungsversuche).&lt;br /&gt;&lt;br /&gt;Diese Probleme waren schlagartig behoben, nachdem die Verbindung zu memcached via Unix Domain Sockets anstatt TCP/IP aufgebaut wurde (&lt;a href="http://php.net/memcache_connect"&gt;PHP Manual Memcache::connect&lt;/a&gt;). Ganz erklären kann ich mir das nicht, aber vielleicht hilft es ja jemandem.&lt;br /&gt;&lt;br /&gt;Unix Domain Sockets sind natürlich nur dann eine Option, wenn memcached auf demselben Server läuft wie die Clients (in unserem Fall Apache/PHP).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-1434603686426128984?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/1434603686426128984/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=1434603686426128984' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/1434603686426128984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/1434603686426128984'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2008/01/lsung-fr-memcached-timeouts-unix-domain.html' title='Lösung für memcached-Timeouts: Unix Domain Sockets'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-3374634787638246120</id><published>2008-01-03T16:33:00.000+01:00</published><updated>2008-01-04T00:52:24.468+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='_rowid'/><title type='text'>MySQL: _rowid ermöglicht Zugriff auf PRIMARY-Key</title><content type='html'>Wenn man eine Klasse zum Verwalten von Datensätzen hat, der man im Konstruktor nur den Tabellennamen und den &lt;span style="font-style: italic;"&gt;Wert&lt;/span&gt; des PRIMARY-Keys – nicht aber dessen Spaltenname – übergeben möchte, gibt es einen einfachen Trick.&lt;br /&gt;&lt;br /&gt;Solange der PRIMARY-Key nur eine einzige Integer-Spalte umfasst, lässt sich darauf mit dem Schlüsselwort &lt;span style="font-family:courier new;"&gt;_rowid&lt;/span&gt; zugreifen:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;SELECT * FROM table WHERE _rowid=$id&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nachzulesen im Abschnitt &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/create-table.html"&gt;CREATE TABLE Syntax&lt;/a&gt; des MySQL Manuals.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-3374634787638246120?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/3374634787638246120/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=3374634787638246120' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/3374634787638246120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/3374634787638246120'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2008/01/mysql-rowid-ermglicht-zugriff-auf.html' title='MySQL: _rowid ermöglicht Zugriff auf PRIMARY-Key'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-5685603671961359831</id><published>2008-01-02T16:35:00.001+01:00</published><updated>2008-01-04T00:51:57.849+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='show columns'/><category scheme='http://www.blogger.com/atom/ns#' term='created_tmp_disk_tables'/><title type='text'>MySQL: SHOW COLUMNS beeinflusst Created_tmp_disk_tables</title><content type='html'>Man sollte sich nicht über hohe Werte der MySQL-Statusvariable Created_tmp_disk_tables wundern, wenn man zahlreiche "SHOW COLUMNS"-Queries absetzt. Diese inkrementieren nämlich die genannte Statusvariable.&lt;br /&gt;&lt;br /&gt;Nachzulesen als &lt;a href="http://bugs.mysql.com/bug.php?id=29153"&gt;MySQL-Bug #29153&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-5685603671961359831?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/5685603671961359831/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=5685603671961359831' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/5685603671961359831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/5685603671961359831'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2008/01/mysql-show-columns-beeinflusst.html' title='MySQL: SHOW COLUMNS beeinflusst Created_tmp_disk_tables'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-4550783860707421429</id><published>2007-06-17T22:22:00.000+01:00</published><updated>2008-01-04T00:52:49.106+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computerbase'/><category scheme='http://www.blogger.com/atom/ns#' term='sphinx'/><title type='text'>Sphinx-Suche im ComputerBase-Forum</title><content type='html'>Die &lt;a href="http://steffenweber.blogspot.com/2007/03/sphinx-die-unglaublich-schnelle.html"&gt;im vorherigen Beitrag erwähnte Sphinx-Suche&lt;/a&gt; verwenden wir nun seit einem Monat im &lt;a href="http://www.computerbase.de/forum/search.php"&gt;Forum von ComputerBase&lt;/a&gt; und sind sehr zufrieden. Der Suchindex ist in etwa genau so groß wie die indizierten MySQL-Tabellen und wird aufgrund der erwähnten Update-Problematik jede Nacht neu erstellt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-4550783860707421429?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/4550783860707421429/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=4550783860707421429' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/4550783860707421429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/4550783860707421429'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2007/06/sphinx-suche-im-computerbase-forum.html' title='Sphinx-Suche im ComputerBase-Forum'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-2616428308105955932</id><published>2007-03-17T23:16:00.000+01:00</published><updated>2007-03-18T20:14:34.018+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fulltext'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='sphinx'/><title type='text'>Sphinx: Die Lösung für lahmende Suchfunktionen?</title><content type='html'>Betreiber großer Foren werden ein Lied davon singen können: Spätestens wenn die Datenbanktabelle mit den Beitragstexten die Gigabyte-Grenze überschreitet, gerät die in MySQL integrierte FULLTEXT-Suche an ihre Grenzen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sphinxsearch.com/"&gt;Sphinx&lt;/a&gt; könnte ein Ausweg aus dieser Misere sein. Diese Suchmaschine läuft als System-Daemon und verwendet MySQL lediglich zum Speichern des Datenbestands. Der eigentliche Suchalgorithmus hat nichts mit der MySQL-FULLTEXT-Suche zu tun.&lt;br /&gt;&lt;br /&gt;Nach allem was man im &lt;a href="http://www.sphinxsearch.com/forum/forum.html?id=1"&gt;Forum&lt;/a&gt; liest, ist Sphinx dabei unglaublich schnell, ein Vergleich mit der FULLEXT-Suche erscheint beinahe unfair. Diverse Benchmarks finden sich in den Folien des Vortrags &lt;a href="http://www.mysqlperformanceblog.com/files/presentations/EuroOSCON2006-High-Performance-FullText-Search.pdf"&gt;High Performance Full Text Search for Database Content&lt;/a&gt; von Peter Zaitsev.&lt;br /&gt;&lt;br /&gt;Ein paar Haken hat die Sache leider: Der Suchindex kann nur periodisch unter Verwendung von Delta-Indizes aktualisiert werden. Das Löschen von Einträgen scheint grundsätzlich nicht möglich – dazu muss der komplette Suchindex neu erstellt werden.&lt;br /&gt;&lt;br /&gt;Erste &lt;a href="http://www.vbulletin.org/forum/showthread.php?t=127868"&gt;Ansätze zur Integration von Sphinx in vBulletin&lt;/a&gt; existieren jedoch bereits.&lt;br /&gt;&lt;a href="http://www.sphinxsearch.com/forum/forum.html?id=1"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-2616428308105955932?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/2616428308105955932/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=2616428308105955932' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/2616428308105955932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/2616428308105955932'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2007/03/sphinx-die-unglaublich-schnelle.html' title='Sphinx: Die Lösung für lahmende Suchfunktionen?'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-9027351996072282385</id><published>2006-07-14T06:17:00.000+01:00</published><updated>2007-03-17T23:36:37.614+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Genial einfach, einfach genial: SSH Filesystem</title><content type='html'>&lt;p&gt;Seitdem in den Linux Kernel 2.6.14 das FUSE-Modul (&lt;a href="http://de.wikipedia.org/wiki/Filesystem_in_Userspace" mce_href="http://de.wikipedia.org/wiki/Filesystem_in_Userspace"&gt;Filesystem in Userspace&lt;/a&gt;) aufgenommen wurde, können Dateisystem-Treiber im User-Space implementiert werden. Eine solche Implementierung ist das &lt;a href="http://fuse.sourceforge.net/sshfs.html" mce_href="http://fuse.sourceforge.net/sshfs.html"&gt;SSH Filesystem&lt;/a&gt;. Damit kann man die Verzeichnisstruktur eines per SSH erreichbaren Servers in den lokalen Verzeichnisbaum integrieren als ob man eine Festplatte oder USB-Stick mounten würde. Fortan lässt sich mit jeder beliebigen Anwendung auf die Dateien des entfernten Computers zugreifen als befänden sich diese auf der lokalen Festplatte.&lt;/p&gt; Benutzern des UNIX-Desktops &lt;a href="http://www.kde.org/" mce_href="http://www.kde.org/"&gt;KDE&lt;/a&gt; steht ein vergleichbares Feature seit Jahrem unter dem namen KIO-Slaves zur Verfügung. Jedoch eben ausschließlich KDE-Anwendungen, da nur diese mit den speziellen Protokollen in den Adressen der Dateien wie beispielsweise sftp:// umgehen können.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-9027351996072282385?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/9027351996072282385/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=9027351996072282385' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/9027351996072282385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/9027351996072282385'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2006/10/genial-einfach-einfach-genial-ssh.html' title='Genial einfach, einfach genial: SSH Filesystem'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-5589211578038528263</id><published>2006-03-19T01:17:00.000+01:00</published><updated>2007-03-17T23:55:32.450+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='outsourcing'/><category scheme='http://www.blogger.com/atom/ns#' term='india'/><category scheme='http://www.blogger.com/atom/ns#' term='job'/><title type='text'>My Programming Job Went To India ...</title><content type='html'>&lt;p&gt;... ist ein sehr empfehlenswertes &lt;a href="http://www.pragmaticprogrammer.com/titles/mjwti/" mce_href="http://www.pragmaticprogrammer.com/titles/mjwti/"&gt;Buch von Chad Fowler&lt;/a&gt;, der als Mitarbeiter eines US-amerikanischen Unternehmens eineinhalb Jahre am Aufbau einer neuen Niederlassung in &lt;a href="http://de.wikipedia.org/wiki/Bangalore" mce_href="http://de.wikipedia.org/wiki/Bangalore"&gt;Bangalore&lt;/a&gt; beteiligt war.&lt;/p&gt; &lt;p&gt;Wie der Untertitel "52 Ways To Save Your Job" erahnen lässt geht es ihm nicht um das Verteufeln der Globalisierung und dem damit verbundenen Outsourcing in Länder mit niedrigen Arbeitskosten.&lt;/p&gt; &lt;p&gt;Stattdessen geht es in erster Linie darum, was man selbst tun kann, um das Outsourcen des eigenen Jobs zu verhindern. Praktisch läuft vieles darauf hinaus, dass man die Standortvorteile, die man in Europa oder den USA genießt, nutzt. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-5589211578038528263?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/5589211578038528263/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=5589211578038528263' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/5589211578038528263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/5589211578038528263'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2006/10/my-programming-job-went-to-india.html' title='My Programming Job Went To India ...'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-4137191358240751668</id><published>2006-03-16T12:17:00.000+01:00</published><updated>2007-03-17T23:37:30.937+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computerbase'/><category scheme='http://www.blogger.com/atom/ns#' term='typo'/><category scheme='http://www.blogger.com/atom/ns#' term='soundex'/><category scheme='http://www.blogger.com/atom/ns#' term='levenshtein'/><category scheme='http://www.blogger.com/atom/ns#' term='tippfehler'/><title type='text'>Einfache Tippfehlerkorrektur für Website-Suche</title><content type='html'>&lt;p&gt;Erstaunlich einfach lässt sich zu einer Website-Suche ein Korrekturvorschlag-Service hinzufügen. Zunächst erstellt man eine Datenbank aller Wörter und deren &lt;a href="http://php.net/soundex" mce_href="http://php.net/soundex"&gt;soundex&lt;/a&gt;-Wert. Die soundex-Funktion bildet ähnlich klingende Wörter auf den gleichen vierstelligen Wert ab, der immer aus dem Anfangsbuchstaben sowie drei Ziffern besteht (mehr zum &lt;a href="http://www.uni-oldenburg.de/nausa/soundex.htm" mce_href="http://www.uni-oldenburg.de/nausa/soundex.htm"&gt;Soundex-System&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Zudem sollte man zu jedem Wort speichern, wie oft dieses insgesamt vorkommt, hat also im Endeffekt zum Beispiel eine Tabelle mit den Spalten word, soundex und occurences.&lt;/p&gt; &lt;p&gt;Um Korrekturvorschläge zu einem Wort zu finden, bildet man dessen Soundex-Wert und liest alle Wörter mit dem gleichen Soundex-Wert aus der beschriebenen Tabelle aus, die mindestens genauso oft vorkommen wie das Wort, für das man Korrekturvorschläge sucht.&lt;/p&gt; &lt;p&gt;Welches dieser in Frage kommenden Wörter schlägt man dem Benutzer nun vor? Die &lt;a href="http://php.net/levenshtein" mce_href="http://php.net/levenshtein"&gt;levenshtein&lt;/a&gt;-Funktion zum Berechnen der Distanz zwischen zwei Strings hilft weiter. Sollten zwei der in Frage kommenden Korrekturwörter die gleiche Distanz aufweisen, bevorzugt man das häufiger vorkommende.&lt;/p&gt; &lt;p&gt;Idealerweise bräuchte man die Vorselektierung in Frage kommender Wörter anhand deren Soundex-Wert nicht. Dann müsste man jedoch den Levenshtein-Algorithmus über alle Wörter in der Datenbank jagen, was bei vielen Einträgen nicht performant zu bewerkstelligen ist (mehr zum &lt;a href="http://www.levenshtein.de/" mce_href="http://www.levenshtein.de/"&gt;Levenshtein-Algorithmus&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;In Aktion sind diese Korrekturvorschläge zu sehen bei &lt;a href="http://www.computerbase.de/" mce_href="http://www.computerbase.de/"&gt;ComputerBase&lt;/a&gt;. Beispiel-Suche mit absichtlichen Tippfehlern: &lt;a href="http://www.computerbase.de/suche/?q=nvidai+gforxe" mce_href="http://www.computerbase.de/suche/?q=nvidai+gforxe"&gt;nvidai gforxe&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-4137191358240751668?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/4137191358240751668/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=4137191358240751668' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/4137191358240751668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/4137191358240751668'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2006/10/einfache-tippfehlerkorrektur-fr-website.html' title='Einfache Tippfehlerkorrektur für Website-Suche'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-142444447053030893</id><published>2006-03-16T12:01:00.000+01:00</published><updated>2007-03-17T23:10:39.735+01:00</updated><title type='text'>Supernature-Forum klagt gegen unberechtigte Abmahnung</title><content type='html'>&lt;p&gt;Das &lt;a href="http://www.supernature-forum.de/" mce_href="http://www.supernature-forum.de/"&gt;Supernature-Forum&lt;/a&gt; wurde Opfer einer unberechtigten Abmahnung und hat sich nun dazu entschieden zurückzuschlagen. Die Anklage beruft sich auf das höchst umsttrittene &lt;a href="http://www.heise.de/newsticker/meldung/66982" mce_href="http://www.heise.de/newsticker/meldung/66982"&gt;Heise-Urteil&lt;/a&gt;, für das noch keine schriftliche Begründung vorliegt.&lt;/p&gt; &lt;p&gt;Um das finanzielle Risiko in Grenzen zu halten werden &lt;a href="http://www.supernature-forum.de/spendenaktion/index.php" mce_href="http://www.supernature-forum.de/spendenaktion/index.php"&gt;Spenden&lt;/a&gt; gesammelt!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-142444447053030893?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/142444447053030893/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=142444447053030893' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/142444447053030893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/142444447053030893'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2006/10/das-supernature-forum-wurde-opfer-einer.html' title='Supernature-Forum klagt gegen unberechtigte Abmahnung'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8712424711890390704.post-5336725415487729564</id><published>2006-03-16T11:10:00.000+01:00</published><updated>2006-10-30T19:48:24.294+01:00</updated><title type='text'>Mein Blog!</title><content type='html'>Nachdem ich nun schon lange Weblogs lese, habe ich nun endlich auch mein eigenes Blog eingerichtet. Ich werde wahrscheinlich ziemlich unregelmäßig bloggen, hoffe aber, dass es trotzdem für den ein oder anderen interessant ist. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8712424711890390704-5336725415487729564?l=steffenweber.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://steffenweber.blogspot.com/feeds/5336725415487729564/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8712424711890390704&amp;postID=5336725415487729564' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/5336725415487729564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8712424711890390704/posts/default/5336725415487729564'/><link rel='alternate' type='text/html' href='http://steffenweber.blogspot.com/2006/10/mein-blog.html' title='Mein Blog!'/><author><name>Steffen Weber</name><uri>http://www.blogger.com/profile/16399610489555689619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
