Main Contents
January 31, 2008 by Scratch
Сразу хочу заметить, что все описанное ниже было получено методом черного ящика. Я не смотрел исходник PHP, я не знаю как устроены массивы в этом языке; все описанное — только предположения, которые я выдвигаю. Впрочем, именно эти предположения помоги мне справиться с одной весьма нетривиальной ошибкой.
Для начала, я приведу небольшой тестовый код, который наглядно продемонстрирует проблему.
< ?php
// This script runs more than 30 secs.
set_time_limit(0);
$test = array();
for ($i=0; $i<40000; $i++) {
$test[$i] = array();
for ($k=0; $k<5; $k++) {
$test[$i][$k] = array();
for ($j=0; $j<5; $j++) {
$test[$i][$k][$j] = $i+$k+$j;
}
}
}
// So, array will contain
// 40000 * 5 * 5 integers (1000000 elements)
// And sleep to have time to
// see memory usage in Task Manager
sleep(100);
?>
Как вы думаете, сколько будет занимать полученный массив $test()
в памяти?
(more…)
Filed under: Deep Internals |
Comments (3)
January 25, 2008 by Scratch
Решил пройти Мамбовский тест. Вот что получилось:

Filed under: Блог |
Comments (2)
January 23, 2008 by Scratch
var_dump() — эта функция знакома большинству программистов, пишущих на php, которые переросли стадию HelloWorld. Любой более-менее сложный проект требует отладки и проверки работы — для чего используются функции наподобие var_dump, print_r, var_export… Некоторые программисты даже наловчились использовать echo, хотя на это бывает страшно смотреть.
Но, как обычно бывает, встроенных средств отладки (а также самописных библиотек) начинает не хватать. Те разработчики, которые перешли на PHP с языков вроде C, страдают от нехватки удобных и мощных средств отладки. Я, например, долго писал на BorlandC++, и отсутствие профайлера и дебаггера в PHP меня дико расстраивало.
Для того, чтобы восполнить этот пробел, придумали программу (а точнее, подключаемое дополнение) XDebug.
(more…)
Filed under: Tips and tricks |
Comments (3)
January 17, 2008 by Scratch
Как вы заметили, мой блог ведется не очень периодично. Так уж получается — иногда есть мысли, которые можно быстро написать, а иногда — статьи пишутся долго, и выкладывать что-то недописанное нет смысла.
Чтобы блог не пустовал (точнее, чтобы создать хотя бы выдимость некоторой периодичности) я решил написать некоторые мелкие мысли, создавать для которых отдельную запись в блоге смысла нет, а так — они пропадут.
Итак:
- Я решил немного поколдовать над оформлением блога.
Начну, конечно, с ключевых слов, названия и прочих прелестей (да, блог “о Жизни, Вселенной и вообще” — название нормальное, но не очень популярное при поиске… Нужно что-нибудь про веб-разработку, программирование и так далее. Вот, у Дмитрия Сергеева (и это неприкрытый пиар хорошего автора) — хорошее название. Потенциальные клиенты, которые ищут ВЧ — проектирование сайтов — получают в выдаче Яндекса его блог на первом месте…) И, само собой, поправить мета-теги, заголовки и так далее.
- Теперь все статьи, написанные мной, будут подписаны не Админом.
Вместо этого они будут подписаны собственно автором (Scratch). Потому что Админ — он нарицательный до жути, а Скрэч — он все-таки более конкретный и понятный. Ну и переработать немного оформление — нужно чтобы читатель знал автора в лицо (осталось только подходящее лицо в завалах фоток отыскать). Также — контакты, подписки, и прочие радости для читателя — чтобы не бегать лишний раз на сайт.
- “Большой брат следит за тобой”.
Так обычно говорят, когда упоминают Гуглевские сервисы, то есть — почту, документы, календари и прочие онлайн-хранилища приватной информации. Так и представляется большой зал, в котором сидят специальные люди и читают всю почту. И потом подставляют правильную контекстную рекламу. С одной стороны, да — Гугль (а он, между прочим, гораздо большее зло, чем Микрософт) теоретически имеет доступ ко всей информации, которая у него хранится… С другой стороны — до тех пор, пока мне на папку “Спам” в почте рекламируют тушеную говядину (точнее, Spiced Ham) — я могу быть спокоен.
- Интересные задачи.
Я наткнулся на массу интересных задач для программистов — преимущественно, это задания с собеседований — и решил некоторые из них решить. Не стоит ожидать тут примеров кода, потому что это было бы неэтично (люди старались, придумывали хороший тест, а я его взял и решил!) — поэтому в лучшем случае будет выложено демо рабочих примеров. Исключительно для того, чтобы показать, что решение у задачи есть, и оно работает. Тем более что многие задачи — действительно красивые.
Вот, собственно, и все на сегодня. Единственное, что могу сказать — я решил попробовать себя в создании screencast-ов (и уже софт достал), написать несколько статей по юзабилити, JS и странностях заказчиков, а также сменить дизайн блога. Но это только планы. Кто знает, может вместо этого я буду писать о поисковой оптимизации или html-верстке, а также об офисных неурядицах?
Filed under: Блог |
Comments (1)
January 8, 2008 by Scratch
Есть в html такая штука — checkbox. Штука очень удобная, полезная и вообще — почти ни один сайт не обходится без чекбоксов.
Но есть у чекбоксов дурная черта, да и не только у них… Но об этом по порядку.
Достаточно часто при создании страниц нужно сделать некоторый текст нередактируемым. Все замечательно, берем элемент, добавляем ему атрибут readonly, и все работает (точнее, все кроме редактирования).
А теперь пробуем проделать ту же штуку с чекбоксом — и видим, что его значение можно изменить, причем успешно.
Первое, что приходит на ум — это выставить ему значение disabled. Тогда он показывается, он даже может быть отмечен (checked), но — значение от него не отдается серверу при отправке формы. Нормальное поведение для нормального элемента, но — дело в том, что если чекбокс не отмечен, то его значение тоже не отправляется. То есть, в общем виде, имея только результат запроса от браузера, невозможно определить — значение checkbox не пришло потому что он не был выбран, или потому что он был запрещен…
(more…)
Filed under: Tips and tricks |
Comments (0)
January 6, 2008 by Scratch
Интернет Эксплорер опять меня удивил.
Да, я уже писал, что надо смотреть свой блог на предмет ошибок. И — стоило только посмотреть свежую запись из дому, как вот, пожалуйста — опять баг. Свежеприкрученная подсветка синтаксиса рвала страницу. Уже, конечно, пофикшено, но это только для 1024х768… Эх, надо будет посмотреть вообще на 800х600, на всякий случай…
Filed under: Блог |
Comments (0)
January 5, 2008 by Scratch
Я решил попробовать экспортировать записи из этого блога в свой яндекс-аккаунт.
Вот что мне выдал Яндекс:
Теперь у меня есть персональная страница на Я.ру — Scratch613!

Я.ру - это новый сервис Яндекса, на котором делятся с друзьями самым интересным, знакомятся, дружат или ссорятся, вывешивают фотки, комментируют свои, чужие записи, обмениваются ссылками и рассказывают о своем настроении.
Я не знаю, что из этого выйдет. И не знаю, какой из блогов будет считаться главным.
В общем-то, я даже не знаю, можно ли будет эту связь удалить — но, собственно, для того-то и эксперимент
Filed under: Блог |
Comments (0)
January 4, 2008 by Scratch
Иногда самые простые вещи могут поставить в тупик. Например, такая банальная штука как удаление элемента из массива. Собственно, с одним таким багом я столкнулся сегодня, и хотел бы его описать.
Итак, представим ситуацию. У нас есть JS код, в котором объявлен массив. Например, вида
var arr = [1,2,3,4,5,6,7];
Теперь перед нами стоит задача — удалить все четные элементы. Причем — удалить из исходного массива, а не получить новый
Для этого обычно пишется такая функция:
function cleanEven(arr) {
// проходим по всем элементам
for (var i = 0; i < arr.length; i++) {
// Если элемент делится нацело на два
if ( ! (arr[i] % 2)) {
// Заменяем часть массива
// с позиции i, длиной 1 на пустоту
// (то есть удаляем i-тый элемент массива)
arr.splice(i, 1);
}
}
}
После запуска и выполнения все вроде бы работает. В моем тестовом запуске все сработало нормально.
Но — попробуем этот же код на массиве
var arr = [1,2,3,4,4,3,2,1];
После выполнения функции над этим массивом мы обнаружим, что внутри массива осталась четверка.
В чем проблема?
(more…)
Filed under: Tips and tricks |
Comments (0)