Showing posts with label code. Show all posts
Showing posts with label code. Show all posts

pagenator  

Posted in , ,

simple pages on your cite with your PHP code.

Этот код родился давно и был использован в нескольких фриланс-проектах.
Со временем он изменился и приобрел законченый вид, после которого мне не надо в него более лазить чтобы использовать. На самом деле я стремлюсь все компоненты своего кода довести до такого состояния. Но заказчику такой подход как минимум не понятен, а как максимум не выгоден - ибо скорость выполнения заказа падает. Зато потом, на следующем заказе, она может резко возрасти.

Это предисловие. А содержание такое - я хочу похвастаться своим первым публичным релизом кода. Очень надеюсь он будет полезным хоть кому-нибудь.

Что этот код делает.
Pagenator - это простая библиотека позволяющая за минуту развернуть мини-сайт со страничками и ЧПУ. Ориентирована на програмистов, т.к. это не CMS. Никаких БД или файлов, никаких конфигов. Просто складываете свои PHP файлы в директорию и не забодьтесь о том, как их показать. Вообщем то, что делает Pagenator делал каждый PHP програмист, как пить дать.

Суть.
Сама либа в google code - http://pagenator.googlecode.com/svn/trunk/
Скриншот, исчерпывающи описывающий принцип работы:
Спасибо за внимание. Рад любым отзывам.

Unicode and UTF-8. Рвем волосы на голове.  

Posted in ,

Unicode. Как много в этом слове. Сейчас использовать юникод в вэб приложениях - это уже не просто хороший тон, а стандарт.

Но с юникодом бывает много проблем, т.к. для начала наиболее расспространенные операционные системы используют "снаружи" однобайтовые кодировки и на этапе создания основных языков програмирования поддержка UTF не была заложена. Юникод был предложен как универсальная кодирвка в 1991 году, и в 1993 уже использовалась версия 1.1. Сейчас при слове "юникод" у большенства всплывает в голове аббревиатура UTF-8. Но честно говоря UTF-8 - это не юникод. Чуть более внимательно вчитавшись в определения можно подчеркнуть, что "Юникод" - это стандарт кодирования символов. А UTF-8 - кодировка, реализующая представление Юникода. Основная черта UTF-8 заключаеться в том, что первые 128 символов совпадает с ASCII, что дает обратную совместимость с ПО "не умеющим" юникод.

Всеже "Настоящим" юникодом считается UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE. Собственно первая версия кодирования юникода была 16-битной, с фиксированной шириной символа. Windows начиная с 2000 внутри себя использует UTF-16LE. В мире *nix принято использовать UTF-8.

И наконец о том, как все это касается нас. Редактирование файлов в нужной кодировке, темпаче если она отличается от системной становится не найтивной. Впрочем всегда решается удачным редактором, или толковым IDE. Для простых целей - это EditPro (win) и JOE (*nix). Тексты - это только пол беды. Оснавная беда - это языки програмирования. Про С/С++ говорить не имеет смысла, т.к. язык достаточно низкого уровня и собственно является основой для всего остального. А все остальное - это как минимум JAVA, Perl, PHP, Python, etc..

О некоторых тонкостях стоит рассказать. От простого к сложному.
JAVA - найтивно поддерживает юникод. JDK 1.5 полностью реализовывает стандарт Unicode 4.0.
PHP - впринципе при работе с UTF-8 не возникает никаких проблем. Пока речь не доходит до регулярных выражений и мультабайтных строчек. Есть несколько библиотек, которые решают возникающие проблемы, не считая iconv конечно. Собственно для поддержки всего рациона кодировок в PHP есть mbstring.
Perl - изначально работает на своей собственной кодировке, т.е. имеет внутренние представление текста. Впринципе при работе с однобайтными кодировками это не заметно, т.к. кодировка определяется автоматически. В остальных случаях её следует указывать для источника данных и для вывода. Тут неплохо об этом написано. Вообщем ясная документация дает все ответы:
http://perldoc.perl.org/functions/open.html
http://perldoc.perl.org/Encode.html.

Пример работы с разными кодировками в Perl:
open(SQLFILE, "<:encoding(UTF-16LE)", $SQL_files{$item})
$current_sql_query =~ s/\x{FEFF}//g; ## срезаем спецсимволы.
$current_sql_query_utf8 = encode("UTF-8",$current_sql_query);

Об остальных языках я пожалуй говорить не буду.
На закуску, настоящий юникод: http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html

Да, есть ещё одна забавная штука - юникод в виндовой консоле.
Ставим PowerShell, в нем помимо иных возможностей можно менять кодировку на лету:
$OutputEncoding = [System.Text.Encoding]::UTF8

Другие материалы:
http://docs.activestate.com/activeperl/5.10/lib/Encode/Unicode.html
http://www.utf8-chartable.de/
http://www.php.net/manual/en/regexp.reference.php
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
http://www.mapbender.org/Encoding_UTF8/ISO8859-1#utf8_decode
http://webcollab.sourceforge.net/unicode.html

PHP tips  

Posted in , ,

Несколько не хитрых типсов по решению хитрых проблем на PHP.
Честно скажу - от PHP у меня на зубах песок образовывается, зато его (PHP) сырость и нелогичность позволяет делать забавные хаки.

Типс о занимаемой мамяти.
В PHP есть вообщем ссылки. И если у вас есть переменная, которая содержит большой объем данных и вы хотите эти данный ещё разок обработать.
(например nl2br($str); и т.д.) - передавайте по ссылке. Просто nl2br(&$str);. Экономия памяти и процессорного времени на копировании данных в функцию и обратно.
(надо будет посчитать в циферках что к чему)

Типс о неровной отдаче.
Когда большой скрипт долго думает - он может отдавать страницу кусками, что выглядит некрасиво. Поэтому такой вывод можно буфферизировать, благо в PHP есть для этого средства. Можно использовать эти два типса вместе. Т.е. буферизировать вывод, сохранив его в переменную, потом проверить например на XSS.
Буферизация смотрится красиво + можно при таком подходе сделать какой-нить "please wait" красивый, или рекламу показать, пока вывод готовится на сервере. (только чтоб таймаут не порвался, ибо данные-то не идут)

Типс о скрытых ошибках.
Никакие ошибки пользователь не должен видеть на вашем сайте.
И для этого не нужно городить нечитаемых ифов и переменных состояния - достаточно просто чуть что выкидывать эксепшн. При том можно написать свой класс эксепшенов, который юудет все логировать. Или логировать через catch(Exception $e) { /* code */ }.
Для пользователя любой лаг может выглядеть например как выкидывание на последнюю посешенную страницу на сайте. Использой везде файринг с "тихим" отловом можно даже защитится от собственных кривых рук.


Спасибо за внимание, надеюсь был ползен.

c  

Posted in


#include <stdio.h>

#define SIX 1+5
#define NINE 8+1

int main(void)
{
int value = SIX * NINE;
printf("Answer = %d\n", value);
return 0;
}

metanews


Add to Google