Własna strona błędu 404 w Kohanie
Ostatnio odkryłem prawdziwy "pałer" frameworków. Zacząłem od CodeIgnitera. Całkiem fajny, w większości miejsc daje wolną rękę programiście. Jednak nie wygląda na to, żeby miał być dalej tworzony. Spróbowałem Kohanę, jedną (to ona jest?
) z jego forków.
Jako że dosłownie zakohałem się w Kohanie, będę co jakiś czas umieszczał tutaj jakieś porady.
Porada na dziś:
Własna strona błędu 404 w Kohanie
Wbrew pozorom nie jest to takie trudne! Kohana (tak jak CodeIgniter) ma zaimplementowany system tak zwanych Hooków/Eventów (zdarzeń). Mogę zmienić standardową funkcję obsługi błędu 404, i podmienić ja na moją własną.
Na początku musimy się upewnić, czy mamy w naszej aplikacji włączone hooki. W tym celu otwieramy plik application/config/config.php, i prawdopodobnie w linijce 75 będzie znajdować się poniższy kod:
$config['enable_hooks'] = FALSE;
Zmieniamy FALSE na TRUE.
Następnie tworzymy nowy plik application/hooks/error_404.php. Kohana automatycznie wykonuje wszystkie pliki z katalogu application/hooks/, więc nie musimy go jakoś specjalnie włączać ![]()
W tym pliku zadeklarujemy klasę przechwytywania błędu (error_404), oraz podmienimy standardową funkcję obsługi błędu 404, na naszą własną z klasy error_404. Nasza funkcja będzie uruchamiać inny, podany w stałej, kontroler.
<?php
class error_404 {
const error_controller = 'Error404'; // Nazwa kontrolera który chcemy wykonywać podczas błędu. (jeżeli mamy kontroler np. w pliku application/controllers/errors/Error404.php, wpisujemy tutaj errors/Error404)
public static $page = '';
public static function show_404() { // nasza funkcja przechwytująca błąd 404
header("HTTP/1.0 404 Not Found"); // wysyłamy nagłówek ze statusem Not Found.
if(Router::$current_uri != self::error_controller) { // zabezpieczenie, przed zapętleniem się strony, gdy podany kontroler obsługi błędu nie zostanie znaleziony
self::$page = Router::$current_uri; // zapisujemy adres brakującej strony, więc możemy w kontrolerze strony błędu wyświetlić jej adres
Router::$current_uri = self::error_controller; // Przekierowujemy na nasz kontroler
Router::setup(); // i ponownie inicjalizujemy klasę Router.
} else {
Kohana::show_404(self::$page); // gdy nasz kontroler obsługi błędu nie istnieje, wyświetlamy standardową tablicę z Kohany, z adresem strony wcześniej zapisanej do zmiennej $page.
}
}
}
Event::replace('system.404', array('Kohana', 'show_404'), array('error_404', 'show_404')); // Podmieniamy standardową funkcję obsługi eventu "system.404", na naszą.
?>
Potem musimy zdefiniować nasz kontroler w pliku application/controllers/Error404.php. Nie będzie on się różnił specjalnie od innych, więc nie będę się tutaj specjalnie rozpisywał:
<?php
class Error404_Controller extends Controller {
public function index() {
echo '<html><body><b>404 Not Found</b><small> - '.error_404::$page.'</small><br /><br /><small>Powered by KohanaPHP</small></body></html>';
}
}
?>
Stay tuned, następne tutoriale już niedługo!
Using LED on N810 Tablets in Python
I think that in Poland we don't have much NIT developers, and... Here we go - first post in English ![]()
I was looking for an API in Python for manipulating color (and brightness ofc
) of builtin LED on my N810. I drilled through some sites, and i found that FlipClock (which is written in Python) uses LED in some cases. I downloaded it, and found that you can set color of LED with these two simple functions.
Manipulating LEDs rely on writing to virtual files in /sys/ directory.
import time
# This function changes color of LED
def setLED(r,g,b):
val = "%X:%X:%X" % (r, g, b)
f = open('/sys/devices/platform/i2c_omap.2/i2c-0/0-0032/color', 'w')
f.write(val)
f.close()
# This functions sets LED mode ("run" - default mode. "direct" - in this mode you can change color of LED)
def setLEDMode(mode):
f = open('/sys/devices/platform/i2c_omap.2/i2c-0/0-0032/', 'w')
f.write(mode)
f.close()
# using:
# 1. First we need to set mode to "direct"
setLEDMode('direct')
# 2. Now set color of LED
setLED(255, 255, 255) # no, it won't be really white, blue led is too strong, so it will be like lightblue =)
# Let it sleep for a while
time.sleep(5)
# 3. Set everything to 0, so next time we won't see ugly "blink" of last color.
setLED(0, 0, 0)
# 4. Return to "default mode" (run)
setLEDMode('run')
Let's do some fireworks on your N810! ![]()
I'm really sure, that it should work also on N800 and family (770 have led?
)
PS. I have just found out strange thing - when I close keyboard while LED is on it automagicaly turns off
I must try it ![]()
PS2. And also when i lock keypad... It's not a big deal, when you are just blinking LED, but when you must turn it on for a long time, you can set color and sleep for 0.5sec in loop instead of setting color and waiting Xsec.
Edit!
Today I found out this post on some forum: http://forum.mobile-review.com/showpost.php?s=936a897dcf4ba22136a9fb1fc0904dd9&p=2120483&postcount=441
So on N900 (Maemo 5) LED is controlled in similar way, expect thing, that path pattern is like this:
/sys/class/led/[some unique/unknown ID]/brightness
I don't have N900, so i can't try it (and i don't know if my mother and GTranslate translated this post correctly
)
I think that it should work
Instalacja FlexSDK/mxmlc na Debianie/Ubuntu
Po ściągnięciu FlexSDK na mój komputer, i uruchomieniu pliku mxmlc ujrzałem piękny "Segmentation Fault". Przypomnę że korzystam z Debiana (w przypadku Ubuntu będzie tak samo
)
mxmlc wymaga nowszej wersji Javy, niż tej którą mamy zainstalowaną. Wystarczyło doinstalowanie pakietu sun-java6-jdk komendą aptitude install sun-java6-jdk i wybranie w update-alternatives --config java opcji ze ścieżką /usr/lib/jvm/java-6-sun/jre/bin/java (w moim przypadku było to 3) aby mxmlc zaczął poprawnie działać.
Miłego Flex'owania!
Prace nad TastyCode
Właśnie rozpocząłem prace nad moim "flagowym" projektem (na który wykupiłem tę domenę
)
Pojawiła się informacja "Stay tuned" na stronie głównej, a niedługo (jak coś skodzę) zostaną otwarte beta-testy. Podstawowy "niby-framework" już napisałem. Będę korzystał z własnej klasy obsługi templatek (którą pewnie niedługo udostępnię
) opartą bezpośrednio na plikach PHP (oddzielne pliki z kodem HTML i definicjami typu =$zmienna?>) - najprościej i najszybciej. Mod_rewrite oczywiście do tego.
TastyCode ma być serwisem umożliwiającym użytkownikom wymienianie się ciekawymi kawałkami kodu (code-snippets?), jak i swego typu forum na którym każdy pomaga każdemu
Tak więc powtórzę się - stay tuned!