Sep 19
Дааа… Если в линуксе большая часть програм пишутся по принципу “лучше много отдельных прог + некий стандарт связи между ними”, то в винде большие программы становятся все больше и больше, фичастее и фичастее. Одной из таких программ стала Nero. Если раньше слово “Nero” обозначало только программу для записи дисков (сейчас это Nero Express + Nero Burning Rom), то сейчас Nero превращается в огроменного монстра, который управляет всем, что хоть немного связано с CD/DVD. Явная монструозность стала проявлятся с 7-й версии - лично я только тогда впервые услышал отзывы типа “200мб - нихера себе, что они туда запихали”…
К чему я все это - встречайте мегамонстра - Nero 8. Да, фич куча, но весит эта хрень целый гигабайт (инсталляха) - я просто хренею.
PS. Я до сих пор юзаю под виндой Small CD Writer - пишет все что мне нужно + весит 420кб.
PPS. Еще можно вспомнить продукты Adobe (CS -> CS2 -> CS3: 150 -> 300 ->450мб), но это еще ладно - возьмите MS Office. Был нормальный пакет: 200-300мб (эт я про 2003й), а 2007й весит уже DVD, причем добавилось, имхо - не настолько много.
Ужас, куда мы катимся.
written by FX Poster
Sep 18
Очень познавательная статья про ООП в JS. Для новичков в JS и для тех, кто средне в нем шарит - самое оно. Для тех, кто вообще не в теме - ООП в этом замечательном языке реализовано не на основе классов и обьектов, как экземпляров классов, к чему многие (очень многие) привыкли, а на основе прототипов. Подробнее - википедия, как всегда рулит.
После этой статьи и статьи википедии очень советую взять какой-нибудь из JS-фреймворков (Prototype, JQuery, гугл рулит) и поизучать их код - эффект будет еще круче, чем от статей, но основы нужно же знать. ;)
written by FX Poster
\\ tags: JavaScript
Sep 18
Мдя, решений моей задачки вообще нет. Неинтересно так. :(
Мое решение:
$filename = "test.txt";
class Tree {
var $children = array();
var $level;
var $name;
}
function display($tree) {
// кто знает, как вывести n строк подряд - подскажите
for($i = 0; $i < $tree->level; $i++) echo "\\t";
echo $tree->name . "n";
foreach($tree->children as &$child)
display($child);
}
$root = new Tree();
$root->level = -1;
$nodes = array($root);
foreach(file($filename) as $record)
{
$record = preg_replace('/\\n|\\r\\n/', '', $record);
list($id, $parent_id, $name) = explode('|', $record);
$parent = $nodes[$parent_id];
$node = new Tree();
$node->level = $parent->level + 1;
$node->name = $name;
$parent->children[] = $node;
$nodes[$id] = $node;
}
foreach($root->children as $child)
display($child);
written by FX Poster
Sep 15

Днепропетровску - 231! Развлекательная программа - ИМХО супер! Днепропетровчане, оторвемся на славу!?!?!?
UPD: Погуляли классно, только что домой пришел. Разочаровало только то, что в реале всё получилось не так, как планировалось: концерты были другие, кое-чего вообще не было - жаль.
PS. Оказывается сегодня еще и у Google день рождения!
written by FX Poster
Sep 14
Зашел сегодня на блог одного знакомого. И тогда и сейчас у него было обьявление о наборе программистов в его фирму, писать на PHP. В качестве “пробы” предлагалось, да и предлагается, решить такую задачу:
Есть текстовый файл, в котором находится описание дерева в следующем виде:
node_id|parent_id|node_name
parent_id - id родителя, если оно равно 0 - это корневой узел.
Задача: отобразить этот файл в виде дерева, с отступами для каждого уровня табуляциями (первый уровень - ноль табуляций, второй уровень - одна, и т.д.).
Файл-пример содержит:
1|0|Electronics
2|0|Video
3|0|Photo
4|1|MP3 player
5|1|TV
6|4|iPod
7|6|Shuffle
8|3|SLR
9|8|DSLR
10|9|Nikon
11|9|Canon
12|11|20D
Ответом должно быть:
Electronics
MP3 player
iPod
Shuffle
TV
Video
Photo
SLR
DSLR
Nikon
Canon
20D
Тут еще заметки относительно решения есть.
Где-то полгода назад я пробовал ее решить. Решил. Очень по идиотскому, даже вспоминать не хочется. Сейчас вот зашел на блог и захотелось опять попробовать решить задачу… И вот сейчас хочется услышать/увидеть ваши решения. Интересует именно алгоритм, писать можете на любом языке (для C++-ников предлагаю вставить вместо разделителя “|” пробел, чтобы не парится с считыванием из файла).
PS. Моим новым решением я тоже поделюсь… Потом. ;)
PPS. JQuery 1.2 - объявлен новый пользовательский интерфейс для платформы Java - Да… Не перевелись еще идиоты на Руси…
written by FX Poster
\\ tags: Задачи
Sep 13
День программиста — неофициальный праздник программистов, отмечаемый на 256-й день года. Число 256 (28) выбрано, потому что это количество чисел, которое можно выразить с помощью одного байта. В невисокосные этот праздник попадает на 13 сентября, a в високосные годы — на 12 сентября.
Все программисты - примите мои поздравления!
PS. О празднике я сам узнал только сегодня утром. Был приятно удивлен. :)
written by FX Poster
Sep 12
Была одна девченка… Давно… Любил… ОЧЕНЬ СИЛЬНО ЛЮБИЛ! Долго любил… Даже когда расстались любил… А оказалась она распоследней сукой… А я - распоследним ослом… 3 года жизни - впустую…
written by FX Poster
Sep 12
Нечасто я читаю посты из блога “Юмор” на хабре. Обычно смотрю на название и забиваю. Но тут…
В общем - читать всем обязательно!
PS. Это первый пост, который я пишу не из браузера:

written by FX Poster
Sep 09
Позавчера обратился ко мне один из заказчиков с проблемкой…
Проблема заключалась в следующем - после переноса всех скриптов и бд с одного хостинга на другой возникла проблема - не открывались страницы, отличные от главной. После просмотра кода (код, кстати, ужасный) - догадался в чем проблема - на старом хостинге в PHP флаг register_globals был включен, в новом - выключен, поэтому код типа:
if($id > 0) {
// загружаем страничку, соответствующую данному id
} else {
// загружаем index
}
совсем не работал (переменной $id в глобальном пространстве имен не было). Через пару минут в голову пришло решение - эмулировать работу флага register_globals. Где-то я уже видел такое решение, кажется в Joomla’е, но искать времени особо не было.
В итоге получилось следующее решение:
function register_globals_array($array)
{
foreach($array as $key => $value)
if(preg_match("/[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*/", $key))
$GLOBALS[$key] = $value;
}
function register_globals()
{
register_globals_array($_GET);
register_globals_array($_POST);
register_globals_array($_COOKIE);
register_globals_array($_ENV);
register_globals_array($_SERVER);
}
Пользуйтесь на здоровье.
PS. Да… Ну почему бОльшая часть кода на PHP написана так херово… :(
written by FX Poster
\\ tags: PHP
Sep 01
Не спится. Сижу пишу scaffolding для Zend Framework. Возникла проблема - для того, чтобы реализовать полноценное редактирование/удаление записей в таблице нужно добавить к стандартному классу Zend_Db_Table_Row одну public-функцию. Вот теперь сижу и думаю - насколько “правильно” будет просто открыть файл с этим классом и дописать функцию по сравнению с порождением подклассов.
С точки зрения проектировщика - этого делать не стоит. лучше породить подкласс. Но в данном случае прийдется порождать подкласс не только от Zend_Db_Table_Row, но и от Zend_Db_Table, а может и еще чего-то. Чего делать ну вообще не хочется - там кода писать абсолютно тупого - ну просто дофига (возможно я преувеличиваю немного, но все же…).
Чтобы вы делали в моем случае?
Да… Все больше и больше понимаю “недоразвитость” PHP. Если уж делать язык динамически типизированным и объектно-ориентированным - почему нельзя было сделать это нормально? Примеры “нормальных” языков в этом плане привести несложно - Python, Ruby, JavaScript.
В питоне такое “добавление” метода к классу решалось бы так:
def some_name(self):
...
Class.new_func = some_name
В JavaScript и того легче:
Class.new_func = function() {...}
А в PHP… Эх…
written by FX Poster
\\ tags: JavaScript, PHP, Python, Ruby
Последние комментарии