[en] Installing SilverStripe on IIS server

UPDATE 2009-02-17: As Sigurd from SilverStripe team states in a comment, You shouldn’t need to follow my „howto” – at least if You’re using IIS 7. Since I wrote this „howto”, SilverStripe website has been improved to include installation instructions on IIS so please give it a try before proceeding with my old instructions.

1. Install ISAPI/Rewrite. I have no idea how to do it since it was already installed at my provider’s server, but there probably is a limited free version that is enough.
2. Download SilverStripe archive and extract it to Your server.
3. Go to Your server’s URL and fill in installer details as usual.
4. After rewritetest fails, create httpd.ini file in SilverStripe root directory and make its contents like that (what it basically does with ISAPI/Rewrite is to mimic Apache’s mod_rewrite):

[ISAPI_Rewrite] RewriteEngine On

RewriteCond URL (?!.*gif|.*jpg|.*png|.*swf|.*xml|.*css|.*flv|.*js|.*php).*
RewriteCond URL (?!.*\?).*
RewriteRule (.*) /sapphire/main.php\?url=$1 [I,L]

RewriteCond URL (?!.*gif|.*jpg|.*png|.*swf|.*xml|.*css|.*flv|.*js|.*php).*
RewriteCond URL .*\?.*
RewriteRule (.*)\?(.*) /sapphire/main.php\?url=$1&$2 [I,L]

5. Click „click here to proceed anyway” link and You should be redirected to an ugly looking „successfully installed” page.
6. Now edit /sapphire/core/control/Director.php file and change

$s = (isset($_SERVER[‚SSL’]) || isset($_SERVER[‚HTTPS’])) ? ‚s’ : ”;

line to

$s = (isset($_SERVER[‚SSL’]) || (isset($_SERVER[‚HTTPS’]) && $_SERVER[‚HTTPS’] == ‚on’)) ? ‚s’ : ”;

7. Refresh the „successfully installed” page and if it looks pretty now, You know You correctly did step 6.
8. Click „Click here to delete the install files.” link so You don’t have a security hole.
9. Now edit /sapphire/main.php file and at the very beginning add these lines:

if (!isset($_SERVER[‚REQUEST_URI’])) {
$_SERVER[‚REQUEST_URI’] = $_SERVER[‚SCRIPT_NAME’];
}

10. Following are hacks I needed to add so i18n works on IIS. If You don’t use i18n, You’ll probably be fine without these hacks. This method is in sapphire/core/i18n.php file:

protected static function get_owner_module($name) {
if (substr($name,-3) == ‚.ss’) {
global $_TEMPLATE_MANIFEST;
$path = current($_TEMPLATE_MANIFEST[substr($name,0,-3)]);
// hacks for IIS start –>
$path = str_replace(‚\sapphire/..’, ”, $path);
$path = str_replace(‚C:’, ”, $path);
$path = str_replace(‚\’, ‚/’, $path);
$bf = Director::baseFolder();
$bf = str_replace(‚C:’, ”, $bf);
$bf = str_replace(‚\’, ‚/’, $bf);
// <-- end hacks
ereg($bf . ‚/([^/]+)/’,$path,$module);
} else {
global $_CLASS_MANIFEST;
$path = $_CLASS_MANIFEST[$name];
// hacks for IIS start –>
$path = str_replace(‚\sapphire/..’, ”, $path);
$path = str_replace(‚C:’, ”, $path);
$path = str_replace(‚\’, ‚/’, $path);
$bf = Director::baseFolder();
$bf = str_replace(‚C:’, ”, $bf);
$bf = str_replace(‚\’, ‚/’, $bf);
// <-- end hacks
ereg($bf . ‚/([^/]+)/’,$path,$module);
}
return $module[1];
}

11. Enjoy 🙂
12. If You can’t enjoy for some reason, try checking out this thread at SilverStripe forum where most of the above info is found.

Java: jak zrobić BufferedImage z grafiki SVG

SVG to przyjemny, otwarty format grafiki wektorowej. Aby go wykorzystać w Javie, potrzebna będzie biblioteka Batik. Żeby łatwo uzyskać BufferedImage zamiast zapisywać wyrenderowane SVG do pliku, skorzystamy z klasy której kod znajduje się na jednej z list dyskusyjnych.

Powyższe rozwiązanie można wygooglać, lecz oto moja wartość dodana 🙂 Minimalna lista plików .jar z Batika, które trzeba dodać do projektu by SVGRenderer działał prawidłowo:

  • batik-anim.jar
  • batik-awt-util.jar
  • batik-bridge.jar
  • batik-css.jar
  • batik-dom.jar
  • batik-ext.jar
  • batik-gvt.jar
  • batik-parser.jar
  • batik-rasterizer.jar
  • batik-script.jar
  • batik-svg-dom.jar
  • batik-transcoder.jar
  • batik-util.jar
  • batik-xml.jar
  • batik.jar
  • xerces_2_5_0.jar
  • xml-apis-ext.jar

MythTv 0.21 – wreszcie coś po polsku + problem z MythVideo

Pisałem o MythTv już wcześniej, wspominając że wszystko jest fajne, ale polskiej wersji brak. W komentarzu syskom wspomniał, że poświęcił kilka dni na zrobienie tłumaczenia i faktycznie – wersja 0.21 sprzed paru dni wita użytkownika polskim menu 🙂 Kilka rzeczy jest z pewnością do poprawienia (Biblioteka Media*** np. – co to za gwiazdki?) i sporo zostało do przetłumaczenia, ale idzie to w dobrą stronę.

MythTv w wersji 0.21 trafiło do repozytorium backports w Ubuntu, dzięki czemu niepotrzebne się stało dodawanie repozytoriów „trzecich”, takich jak te z projektu Mythbuntu. Wystarczy (używając sudo) odkomentować odpowiednie wpisy w /etc/apt/sources.list i zrobić apt-get update.

Niestety, bez problemów się nie obyło – po apgrejdzie serwera i klientów (klienty 0.20 nie chcą działać poprawnie z serwerem 0.21) okazało się, że wszystko działa, poza służącym do odtwarzania filmów DivX i podobnych pluginem MythVideo. Po poszperaniu w sieci znalazłem info, że MythVideo zostało połączone z MythDVD. Należało więc odinstalować mythdvd (apt-get remove mythdvd) żeby odblokować możliwość zainstalowania/upgrade’u mythvideo (apt-get install mythvideo). To wszystko – teraz już działa 🙂

Nowości na acogitosis

Przede wszystkim przepraszamy wszystkich (czyli dwóch) czytelników za przejściowe kłopoty z oglądaniem tej strony związane z przeniesieniem hostingu do innej firmy. Myślę, że propagacja w DNSach już się zakończyła, więc problemy – także.

Wraz z przenosinami nastała tutaj najnowsza (2.3.2) wersja WordPressa, a także dodana została obsługa logowania OpenID w komentarzach.

Niestety, po przenosinach okazało się że poprzednia skórka miała zakodowane na sztywno elementy paska bocznego, które po prostu poznikały. W związku z tym tymczasowa zmiana wyglądu serwisu – tymczasowa, bo w najbliższym czasie postaram się wrzucić tu autorski skin 🙂

Jeśli znajdziecie coś, co nie działa – dajcie znać w komentarzach. Dzisiaj postaram się jeszcze przetłumaczyć skórkę na język polski.

Access database (mdb file), format() function and ODBC/PHP

Can You tell a difference between

SELECT *, format(Data_ur, "yyyy-mm-dd") AS Datur FROM Czlonkowie

and

SELECT *, format(Data_ur, 'yyyy-mm-dd') AS Datur FROM Czlonkowie

?

It turns out that when using ODBC to connect to Microsoft Access database (in an mdb file), one has to use single quotes when writing function parameters. The first statement runs fine from the Access itself, but when called through the ODBC (for instance when using PHP and PDO) it returns empty set (it doesn’t even throw an exception).

The second statement (with single quotes) runs fine through ODBC. Worth remembering.