Подборка цитат о языках программирования (на английском). Мой перевод на русский:
- Настоящий программист никогда не напишет процедуру УничтожитьБагдад(). Профессиональная этика вынудит его написать процедуру УничтожитьГород(), которой “Багдад” может быть передан в качестве параметра (Натаниэль Боренштейн);
- Существует только два вида языков програмированния: те, которые постоянно критикуются, и те, которыми никто не пользуются (Бьерн Страуструп);
- Элементы массива должны нумероваться с 0 или с 1? Моё компромиссное предложение начинать нумерацию с 0.5 было отвергнуто без, как мне кажется, должного внимания (Стен Келли-Бутл);
- Программное обеспечение, как и секс, гораздо лучше, когда бесплатно (Линус Торвальдс);
- Тег <BLINK> в HTMLе был шуткой, понятно? Если бы мы знали, что им действительно будут пользоваться, мы бы его не создавали (Марк Андрессен);
- Повторное использование кусков кода похоже на выдёргивание предложений из чужих историй в попытке написать статью в журнал (Боб Франкстон);
- Разрабатывать компьютерный язык — это как гулять по парку. То есть по парку юрского периода (Ларри Волл);
- Память — как оргазм. Гораздо лучше, когда вам не приходится (си)эмулировать (Сеймур Крей);
- Сначала изучите информатику и всю теорию. Затем выработайте стандарт оформления кода. Потом забудьте всё это и просто хакайте (Джордж Карретт);
- Get и set методы суть зло (Аллен Холуб);
- Объектно-ориентированная модель позволяет легко разрабатывать программы путём приращения. На практике это часто означает, что ООП обеспечивает структурированный способ написания спагетти-кода (Пол Грехем);
- Если мы хотим считать код в строках, то мы должны называть их строками не написанными, а потраченными (Эдсгер Дейкстра);
- Написание кода занимает в иерархии профессий место где-то выше рытья могил и ниже менеджмента (Джеральд Вайнберг).
Иногда возникает необходимость протестировать тот или иной скрипт/сервис обработки кредитных карточек. Вот список номеров кредитных карт для тестирования:
Card Type |
Number |
Master Card (16 Digits) |
5105105105105100 |
Master Card (16 Digits) |
5555555555554444 |
Visa (13 Digits) |
4222222222222 |
Visa (16 Digits) |
4111111111111111 |
Visa (16 Digits) |
4012888888881881 |
American Express (15 Digits) |
378282246310005 |
American Express (15 Digits) |
371449635398431 |
Amex Corporate (15 Digits) |
378734493671000 |
Dinners Club (14 Digits) |
38520000023237 |
Dinners Club (14 Digits) |
30569309025904 |
Discover (16 Digits) |
6011111111111117 |
Discover (16 Digits) |
6011000990139424 |
JCB (16 Digits) |
3530111333300000 |
JCB (16 Digits) |
3566002020360505 |
Провести удачную транзакцию с этими номерами скорее всего не удастся.
Если ваш php-скрипт начинает выдавать 406-ую ошибку (точнее не сам скрипт, а apache) со словами “An appropriate representation of the requested resource /***.php could not be found on this server”, то скорее всего apacheвскому mod_security что-то не нравится в вашем скрипте.
Например, ваш скрипт может принимать в качестве параметра какие-нибудь URLы, а mod_security будет думать, что злобный хакер пытается выполнить remode code injection. Или ещё что-нибудь.
Если вы уверены в своём скрипте, то можно попробовать отключить mod_security. Проще всего это сделать, добавив две директивы в .htaccess:
SecFilterEngine Off
SecFilterScanPOST Off
Если не получается отрубить mod_security с помощью .htaccess, отключайте его с помощью httpd.conf.
Если это не разрешает сделать админ или ваша религия, то читайте логи (типа такого: [mod_security: Access denied with code 406. Pattern match “\\\\.php(3|4|5)?(\\\\?|&).*=(ht|f)tps?:/.*(\\\\?|&) ” at REQUEST_URI [id “300018″] [rev “1″] [msg “Generic PHP code injection protection”] [severity “CRITICAL”] …]
) и модифицируйте скрипт таким образом, чтоб он не вызывал подозрений у mod_security.
Продолжаем тему создания папок в PHP.
Судя по тому, как нас ищут, создание папок даже без SAFE MODE является нетривиальной задачей.
Ответ: mkdir().
Подсказка: php-скрипт должен иметь нужные права записи (chmod 0777 на папку, в которой собираемся создавать папку, решает большинство из возникающих проблем, но так не безопасно).
В WordPress существует два места, где можно редактировать настройки комментариев: на странице редактирования самой записи (локальные настройки) и на странице настроек (глобальные настройки).
При этом эти настройки практически не зависят друг от друга: глобальная настройка будет выставлена в качестве значения локальной настройки по умолчанию для каждой новой записи. Чувствуете, где подвох? Изменение глобальной настройки не влечёт за собой изменение локальных настроек у уже написанных записей.
То есть если вы написали 100 записей с включенными комментариями и решили их отключить для этих записей, то вам надо вручную поменять соответствующую локальную настройку для этих записей. Для отключения комментариев у ненаписанных записей, надо поменять глобальную настройку. На этом, кстати, накололся Мицгол: он отключил трекбеки к новым записям, но не сообразил отключить их для единственной записи, ставшей для его standalone блога последней.
Наверняка есть костыли к WordPress, которые позволяют совершать групповые операции над записями: включать/отключать комментарии, например. Но эти костыли не отменяют design flaw.
Решить эту проблему очень просто: локальные настройки должны позволять выставить себя в Default. Т.е. позволять не указывать значение настроек явно, а установить его в такое же, как на всём сайте. В случае с комментариями локальные настройки должны иметь такое множество значений: {Allowed, Disabled, Default}.
И всё.
Вот такая изящная функция для опреления абсолютных координат элемента:
function getAbsolutePos(el)
{
var r = { x: el.offsetLeft, y: el.offsetTop };
if (el.offsetParent)
{
var tmp = getAbsolutePos(el.offsetParent);
r.x += tmp.x;
r.y += tmp.y;
}
return r;
}
А вот второй по популярности пост из старого блога. Написано больше трёх лет назад.
Слишком часто я слышу эту фразу последнее время. Очень много PHP-программистов вокруг. Просто эпидемия.
Из моего собственного скромного опытного рекрутинга веб-программистов: в 50% случаев эта фраза подразумевает, что “программист” освоил три тега html и выучил две команды PHP: echo и mysql_query.
При этом из теории баз данных он знает только слово SQL, и путается с выбором средства для реализации задачи: то ли тут можно обойтись JavaScriptом, то ли всё-таки надо писать PHP. На написание скрипта, генерирующего картинку на лету и встраивание этой картинки в другой скрипт у этой особи уходит два дня, первые полтора из них он пытается всунуть всё в один файл. Сдавшись, лезет с бестолковыми вопросами, вместо того, чтобы прочитать fucking manual.
PHP - язык высокого уровня. PHP-программисту не надо обращать особое внимание на элементарные операции: работу с памятью, обработку ошибок и сортировку. Практически для всего есть готовые функции. Если, не дай бог, нет - то можно потратить полдня на поиск нужного класса в интернете, вместо того, чтобы написать свой за 2 часа, немного порисовав на бумаге.
PHP позволяет писать на PHP и не думать. За тебя уже подумали. Взял переменную, засунули в базу, вывел html. Всё.
Программировать на C++ гораздо сложнее. Надо уметь работать с памятью, мучаться со строками и работать с массивами на низком уровне.
Входная планка для PHP гораздо ниже. Три тега, два оператора - и добро пожаловать в мир веб-программинга. Это очень обесценивает профессию. Большинство PHP-программистов - это кодеры, а не девелоперы. Кодеры не умеют мыслить концептуально и творить. Они могут действовать по шаблону. Тут взяли, сюда положили, здесь вывели.
Девелопер - это по сути хакер. Хакер не в опошленном смысле слова (который всё ломает), а в смысле творец.
Будьте скромнее, господа PHP-программисты. Не путайте божий дар с яичницей.
Задача: создавать с помощью PHP скрипта такие директории, в которых можно потом создавать файлы с помощью того же скрипта.
Условие, без которого задача тривиальна: PHP работает в Safe Mode.
Без Safe Mode всё работает прекрасно, главное не забывать делать chmod новым файлам, чтобы иметь возможность удалить их вручную (по ftp/sftp). В Safe Mode директории создаются без проблем, а вот при попытке записать в такую директорию файл PHP выдаёт такой warning:
SAFE MODE Restriction in effect. The script whose uid is 529 is not allowed to access /home/website/autofolder owned by uid 48 in /home/website/script.php on line XX
И никакого файла, естественно, не создаёт.
Решение: создавать нужные папки с помощью ftp-функций: ftp_connect, ftp_login, ftp_mkdir. Законнектились, сделали папку, отвалились.
Пришла в голову такая идея — было бы здорово, если бы браузеры умели отображать стандартные картинки самостоятельно, из своей внутренней библиотеки.
Пример: в html код вставляется тег рисунок с src=”image://hardware/computer/keyboard”. Браузер этот код интерпретирует и подставляет в страницу рисунок клавиатуры из своего клипарта. Список поддерживаемых рисунков является общепринятым стандартом по аналогии со списком английских наименований html-цветов.
Пишешь себе скрипт, и на лету вставляешь в него иконки, не тратишь время на поиск и последующую обработку. Рисунки могут не являться концептуальной частью дизайна сайта; у сайта может вообще отсутствовать дизайн — Browser Clipart отлично справится с «раскраской» таких сайтов.
Браузеры карманных устройств могут иметь специальный клипарт с рисунками маленького размера, или иметь укороченный вариант клипарта.
Экономия на траффике незначительная, имеет смысл только для всяких gprsов.
Ну а пользователь может скачивать себе клипарт-темы: стандартные рисунки, нарисованные в разных стилях.
Офигительный Тетрис от Сергея Попова. На джаваскрипте, между прочим.
Я на первом месте в таблице рекордов.