Category: it

old rover

Скорость строк в кавычках в PHP

В среде похапешников ходят легенды о том, что строки, заключённые в одинарные кавычки, "быстрее", чем строки, заключённые в двойные кавычки, так как типа на строки с двойными кавычками делает стойку интерпретатор. Я решил провести эксперимент и написал простенький скриптик:
<?php
$time = microtime(true);
$a = array();
for($i = 0; $i < 1000000; $i++)
{
    $s = < тестовая строка >;
    $a[$i] = $s;
}
echo "Time: ".ceil(1000 * (microtime(true) - $time))
    ." msec\nMemory consumption: ".ceil(memory_get_usage(true) / 1024 / 1024)." Mbytes\n";

В качестве тестовой строки я подставлял то или иное выражение, и записывал, сколько миллисекунд выполнялся скрипт, и сколько памяти пожрал. Записывал я обычно выполнение третьего-четвёртого выполнения подряд, чтоб там успело всё просраться и закешироваться, если надо. Итак, вот результаты тестов на PHP 5.4:
'qwerty asd' - 272 msec, 261 MBytes
"qwerty asd" - 272 msec, 261 MBytes
'qwerty $ asd' - 273 msec, 261 MBytes
"qwerty $ asd" - 271 msec, 261 MBytes
'qwerty $i asd' - 271 msec, 261 MBytes
"qwerty $i asd" - 427 msec, 269 MBytes - ага, вот тут интерпретатор делает стойку и вкорячивает значение переменной в строку вместо её названия. То есть только в том случае, если в строке попадается знак доллара, после которого идут буквы, только тогда строка в двойных кавычках медленнее, и то по понятной причине. Во всех остальных случаях ничего подобного. Для сравнения вариант с конкатенацией:
"qwerty asd".$i - 362 msec, 269 MBytes
Ну и напоследок я сейчас разобью сердца некоторых похапашников. Извините, ребята.
sprintf('qwerty %i asd', $i) - 563 msec, 475 MBytes
sprintf('qwerty %s asd', $i) - 664 msec, 475 MBytes

Отсюда выводы - пользоваться строками с одинарными и двойными кавычками можно как угодно, они одинаково "быстрые", вывод переменной в строке и sprintf лучше заменять конкатенацией, где можно.

Оригинал записи http://blog.axshavan.cz/2014/08/php-quoted-strings-speed.html
old rover

Поменять User-Agent в Deluge

Как поменять UserAgent в битторрент-клиенте Deluge?

Во-первых, надо сперва сказать, зачем это вообще делать. Некоторые трекеры не любят β и RC-версии и не позволяют ими пользоваться. А один мой знакомый трекер вообще взял да и забанил все версии Deluge после обнаружения там критический уязвимости. Или есть маргинальные трекеры, которые позволяют скачивать с них только определённым клиентам. Так что или поднимай wine или виртуальную машину, и ставь туда рекомендованный клиент, либо - подменяй юзерагент, чтоб твой битторрент-клиент выдавал себя за другого клиента.

Что такое юзерагент? Это строка, которую клиент отправляет на трекер, представляясь таким образом. У битторрент-клиентов юзерагент, как и у веб-браузеров, тоже есть. По этой строке трекер и идентифицирует клиента. Эвристические методы определения клиента по особенностям работы с протоколом неточные.

Описанный ниже метод вполне подходит для Linux, и для Windows, и для MacOS, и вообще для любой операционной системы, на которой работает Deluge. Этот битторрент-клиент написан на питоне, его исходники поставляются вместе с ним, так что главной проблемой будет просто их найти, чтоб внести соответствующие правки. Под линуксом это сделать наверняка сложнее, потому что они могут быть засунуты вообще хер знает куда, в зависимости от остроумия разработчиков и ментейнеров дистрибутива. Под виндой наверняка где-то есть папка C:/Program files/Deluge, где всё и хранится.

Так вот, нам нужен файл core.py. В моём дистрибутиве линукса (LMDE/Debian7) я нашёл в папке /usr/lib/python2.7/dist-packages/deluge/core симлинк на сам файл: /usr/share/pyshared/delude/core/core.py. Открываем его и ищем self.settings.user_agent. Дальше всё понятно или надо расписывать? :)

У меня сделано вот так:
# Set the user agent
self.settings = lt.session_settings()
#self.settings.user_agent = "Deluge %s" % deluge.common.get_version()
self.settings.user_agent = "Transmission/2.77 (14031)"

Не забудьте рестартить Deluge, чтоб он подцепил изменения. Особое внимание уделите пробелам в начале строк; это python, так что лишний или недостающий пробел порушат всю программу.

Оригинал записи http://blog.axshavan.ru/2013/09/deluge-change-user-agent.html
  • Current Music
    Theatres Des Vampires - Love Never Dies
  • Tags
old rover

Введение в HTML (часть 1)

Введение в HTML

HTML — язык разметки гипертекста (Hypertext Markup Language) зародился именно как способ отмечать, где надо шрифт сделать жирненьким, где наклонным, где нарисовать табличку, а где вставить картиночку. То, что с помощью HTML можно рисовать всякие красивые веб-страницы, люди поняли намного позже, но основной смысл HTML всё равно не в красивостях, а именно в разметке текста.

Collapse )
  • Current Mood
    krank
  • Tags
old rover

Эффективность разработчиков программного обеспечения

Простыня текста ворнинг

Максимальная эффективность программиста — это если он весь рабочий день не отрываясь, херачит, как Лев Толстой. Сразу пишет всё правильно, не отвлекается, не тратит время на отладку и компиляцию. Такого, конечно, не бывает. Но понятно, что больше, чем можно написать за день, программист за день не напишет.

Физические возможности программистов расширяют всякие IDE — интегрированные среды разработки. Они подсказывают, какие параметры у функции, предлагают параметры автодополнения, проверяют синтаксис, и вообще обеспечивают поддержку разработки кучей всяких мелких приятных штучек. В идеальном случае пишут код практически сами, под диктовку.

Также скорость письма зависит от выбранного языка программирорания. Язык с развесистым синтаксисом, длинными функциями и операторами — медленный для письма. А в пределах одного языка скорость письма определяется выбранной парадигмой программирования. Продвинутое ООП со всеми фабриками и синглтонами порождает неимоверное количество лишнего объёма кода. Говнокод с глобальными функциями и переменными из двух-трёх символов пишется в несколько раз быстрее.

Интерпретируемые языки отлаживаются значительно быстрее, чем компилируемые. Вообще Java — это медленное монструозное говнище, странно, что оно не сдохло ещё в прошлом тысячелетии, а продолжает до сих пор развиваться, и джава-программисты получают огромные деньжищи.
Collapse )
old rover

Agile

Long text warning. Осторожно, много букв.

Давно хочу написать, что я разочаровался в agile-разработке. Ну я и раньше как-то всё это недолюбливал, но это было то ли из вредности, то ли из-за консерватизма, то ли ещё почему-то, но только сейчас я понял, почему именно я разочаровался.

Итак, перво-наперво, что такое аджайл? Это семейство неких методологий, позволяющих производить разработку программного обеспечения быстро, качественно, с минимальными рисками и полным удовлетворением клиента. Вот, к примеру, небезызвестный скрам - это аджайл, методология экстремального программирования - это тоже аджайл. Если подумать, то зачем это всё нужно? Чтоб заказчикам больше нравился разрабатываемый программный продукт, то есть чтоб они с большей охотой платили бабло фирме-разработчику. Достигается это несколькими различными способами.

Нельзя сказать, что аджайл это совсем плохо. В нём есть множество плюсов. Однако, минусов, которые проистекают из невозможности адаптировать эти методологии под отечественный бизнес, гораздо больше. Прежде всего, спринт. В самом спринте по сути нет ничего плохого. В начале спринта разработчики определяют количество задач, которые они будут делать в течение спринта, в конце они выдают готовый результат. Однако, реальность штука жестокая, и на самом деле происходит всё совсем не так. Клиент звонит и говорит:
- Добавьте мне тут кнопку на сайт!
А у нас только начался спринт. Что мы ему скажем?
- Через две недели мы на планировании спринта включим доработку по вашей кнопке в список работ, ещё через две недели будет готово.
- Добавить кнопку? Четыре недели???
Начинает казаться, что аджайл тут вовсе не agile. Таким образом, спринт получается как бы и не спринт, потому что менеджеры начинают подкладывать в спринт задач. Сам спринт укорачивается, мы вот укоротили до недели. До недели, это нормально вообще? То есть несколько часов в понедельник идёт некий процесс под названием "планирование нового спринта и демонстрация прошедшего спринта". Потом четыре с половиной дня идёт кодинг. В эти четыре дня от клиентов или из отдела качества поступают репорты об ошибках. Чтоб не ждать долго-долго нового понедельника, было решено ошибки принимать в спринт. Поэтому примерно половину времени "спринта" мы занимаемся тем, что исправляем задачи, мигрировавшие таким образом из прошлых спринтов и потому неучтённые, или (гораздо реже, но всё же бывает) появившиеся внезапно и протолкнутые менеджером в спринт как ошибки.

Ни один спринт не был завершён нами нормально и в срок, все были сорваны и задачи потом возвращались с ошибками.
Collapse )
old rover

DragonFlyBSD 2.8.2

Совсем недавно вышел релиз 2.8.2 операционной системы DragonFlyBSD. И я решил себе поставить её на виртуальную машину поиграться. Ну, поставил, поигрался... честно говоря, я что-то DragonFlyBSD не осилил.

Итак, по порядку. Устанавливается быстро. Но есть некоторые тонкости. Во-первых, при установке в обязательном порядке требует себе отдельный раздел под /boot (без него вообще отказывается устанавливаться), и по умолчанию делает его в 768 мегабайт. Я сделал поменьше, и установщик выдал ошибку - дескать, не удалось разметить диск. В следующую попытку я оставил разметку по умолчанию как есть, и всё заработало. Вторая тонкость - в настройке сети. Во время установки получение адреса по дхцп не работает, потому что дхцпдемон не может залогиниться под пользователем nobody, полагая, что его нет (на самом деле есть). После перезагрузки сеть работает нормально.

DragonFlyBSD имеет общие корни с FreeBSD, более того, можно даже сказать, что когда-то она была от фряхи ответвлена с целью внесения улучшений и изменений в ядро. DragonFlyBSD, как я понял, оптимизирована для работы под высокой нагрузкой. Ну, то есть там всякие динамические балансировки всякие в ядре, и так далее. Особенно меня поразило описание файловой системы hammer, которую они сами придумали и используют. Эта файловая система требует для работы жёсткие диски объёмом не менее 50 Гб, потому что она постоянно делает всяческие чекпоинты, сохраняя состояние данных на диске в текущий момент времени, что позволяет делать откаты с точностью до 30 секунд. Ну, потом специальный демон, видя, что свободное место заканчивается, данные чекпоинтов подчищает. Зато вроде бы hammer тоже оптимизирован для работы с высокими нагрузками.

Я не питал беспочвенных иллюзий по поводу использования этой операционной системы как десктопной, но всё же набрал команду из хэндбука:
pkg_radd gnome
Так понимаю, что "pkg_radd" это аналог "pkg_add -r" из FreeBSD. Так вот, пакет gnome найден не был. Ну я и не расстраивался, установил mc. Здесь, как и во FreeBSD, кстати, по какой-то непонятной для меня причине сразу после установки нельзя пользоваться установленным пакетом, дескать, команда не найдена. Как с этим бороться, я не знаю, поэтому перезагружался. Но мне пришлось жить без mc, так как он не запускается и ругается, что, дескать, неверный терминал. Хм, бывает.

Раз не вышло с дружелюбностью к пользователю, я решил установить Apache и подцепить к нему PHP (про MySQL молчу пока). Апач установился, и я принялся искать его конфиги по всему разделу. Наконец, они нашлись в /usr/pkg/etc/httpd/, но апач не запускался "из коробки". Более того, он не запускался и после редактирования конфига, хотя с синтаксисом всё было в порядке.

На этом свои упражнения я завершил и с позором отправился спать.

Оригинал записи http://axshavan.blogspot.com/2010/11/dragonflybsd-282.html
  • Current Mood
    :(
  • Tags
old rover

Вопросы к собеседованию про PHP

Как я уже говорил, моё начальство вознамерилось нанять ещё одного PHP-разработчика мне в компанию. Круто, хоть будет с кем поговорить. Вероятно, скоро один из кандидатов придёт на собеседование. По этому поводу я подготовил список вопросов по PHP, но, как мне кажется, вопросы недостаточно сложны и список недостаточно длинен - я больше не могу придумать в силу своего скудоумия и отсутствия фантазии. Кроме того, я бы ещё дополнил его вопросами по HTML, CSS, JS и jQuery, MySQL, регулярным выражениям и основам работы в UNIX-подобных операционных системах, но, боюсь, у меня не хватит на всё это фантазии и знаний. Ну что там по jQuery спрашивать можно? Типа почему алерт, который стоит после гет-запроса, отобразится раньше, чем алерт, который стоит в функции, повешенной на калбек этого гет-запроса? Поэтому пока я решил ограничиться только PHP. Пару вопросов я убрал - про порядок выполнения деструкторов и про уборщика мусора (про уборщик мусора надо знать только, что он работает на выходе из функции), потому что в мануале про это как-то не особо написано, и если никогда с этим не сталкиваться, то можно только догадываться и строить логические рассуждения о том, как это должно происходить. Ну, оно происходит как и должно, если рассуждать логически, в отличие от того, как (по моему мнению) должна быть устроена модель ООП.

Ниже текущий вариант списка вопросов по PHP для чувака, который придёт собеседоваться. Хотите проверить себя?
Collapse )
old rover

Как я харденил свой Арч / ArchLinux Hardening

Пара слов о словечке, которое я тут употребляю. Hardening - увеличение безопасности системы. Недавно мне мой боевой товарищ Сирожа давал ссылку на сравнительное тестирование различных дистрибутивов Linux при помощи какого-то клёвого немецкого скрипта, который проверял какие-то там параметры ядра (я в этом не разбираюсь), и мог ещё проверить вирусостойкость различных файлов или запущенных процессов. Параметров было всего четыре - RELRO, "Canary" stack protection, NX и PIE. Что конкретно каждая эта фиговина, я полностью не уверен, но в моём ненаглядном Арчлинуксе для всех-всех бинарников из репозитория было найдено только NX. И я задумал Арч захарденить. Правда, так и не захарденил, но всё уже готово. Итак...
Collapse )
  • Current Mood
    krank
  • Tags
old rover

Как я стал использовать Google Chrome

Всё началось сегодня с утра, когда я зачем-то запустил виртуальную машину и решил попроходить Acid3 тест (acid3.acidtests.org) для браузеров всеми браузерами, которые у меня там в виртуальной машине были.

Opera 10.60, Chrome 5.0.375.99 и Safari 4.0.5 (531.22.7) под виндами прошли тест замечательно.


FireFox 3.6.6 немного подвёл (как в виртуальной машине под виндами, так и снаружи её под линуксом).


Ну и, сами понимаете, Internet Explorer 8.0.6001.18702 его не смог пройти даже наполовину.

Там наверху написано, что «для этого веб-узла нужна следующая надстройка: "MSXML 3.0 SP10" от "Microsoft Corporation" (неподтвержденный издатель)...». Но с установленной этой надстройкой тест выглядит ещё хуже.

И я задумался о том, какой же браузер всё-таки самый лучший. Опера? Ну уж нет, я столько натерпелся от ранних версий Оперы, что мои глаза её видеть не могут. Тем более, что она ещё и проприетарная. Фаерфокс открытый, я им пользовался последние несколько лет, но вот эти недопройденные 6% меня расстроили. Сафари мне просто не нравится внешне, да и меня смущает реакция виртуальной машины на запуск Сафари, мол, "а вы знаете, что сейчас мы почему-то изменим глубину цвета дисплея?" - это очень странно.

И я скачал Google Chrome для линукса. Скорость работы просто потрясающая. По всей видимости, Хром ещё не оброс миллионом патчиков и доделочек, как более древние браузеры, и поэтому просто летает. А если в настройках ему сказать "использовать тему GTK+" и "использовать системные рамки и строку заголовка", то его противная голубая рамка с противными голубыми кнопками превращается в красивую серо-чёрную убунтовскую рамку ambiance.

Вот только скроллбары мне тут не нравятся.

Оригинал записи http://axshavan.blogspot.com/2010/07/google-chrome.html
  • Current Mood
    krank
  • Tags
    ,
old rover

Эффект присутствия и прочие легенды об ITшниках

Что такое эффект присутствия? Это наблюдаемый многими эффект благополучной работы программного и аппаратного обеспечения при наличии в определённой близости или наблюдения за работой этого обеспечения человека, хорошо разбирающегося в информационных технологиях, и обратно, эффект неблагополучной работы этого обеспечения при отсутствии этого человека. Как будто и правда техника чувствует, что рядом человек, который её любит и в ней разбирается. К примеру: сервер начинает работать стабильно, когда к нему просто подходит системный администратор, ноутбук медленнее разряжается у него на коленях, программа успешно компилируется, если из-за плеча программиста за компиляцией наблюдает его старший и более опытный товарищ, и так далее - примеров можно привести сотни. Некоторые люди, пусть даже и опытные программисты и администраторы, эффектом присутствия не обладают (их техническая карма низкая).

Collapse )
  • Current Mood
    krank