программирование

99 бутылок: gnuplot

46. gnuplot — программа для построение графиков, имеющая довольно развитый язык программирования. Основная особенность — отсутствие циклов, хотя доступна их эмуляция — через команду перезагрузки файла (reread).

Программа, выводящая песню о пиве (beer.gp)

# Написал Евгений Степанищев

bottles(beer) = beer == 1 ? '1 bottle' : beer ? sprintf('%d bottles', beer) : 'no bottles'

if (!exists("beer")) beer=99
print bottles(beer), " of beer on the wall, ", bottles(beer)," of beer\n",\
      "Take one and pass it around,"

beer=beer-1

print bottles(beer)," of beer on the wall.\n"

if (beer>0) reread

print "No more bottles of beer on the wall, no more bottles of beer.\n", \
"Go to the store and buy some more, 99 bottles of beer on the wall."

2 комментария

Internet Explorer 9 Platform Preview 2

Вышел Internet Explorer 9 Platform Preview 2, список изменений есть на сайте Microsoft, ACID3 проходит на 68%.

В Сети есть даже возможность полюбоваться на прогресс в тесте SunSpider.

Оставить комментарий

Сколько браузеров нужно, чтобы вкрутить лампочку

Мне кажется, скоро нас ждёт браузерная олигополия. Посудите сами, хороший браузер, чем дальше, тем больше всего должен уметь. CSS1, 2, 3, HTML5, Geolocation API, различные Storage, Web Workers, Web Socket, Drag’n’Drop, SVG, XML, XSLT, WebGL и так далее и тому подобное.

Ведь правда же, вряд ли наступит момент, когда консорциум W3 вдруг скажет «мы всё придумали» и разойдётся по домам. Там финансирование, серьёзные люди, у них дети и дома в кредит. Я не знаю шутка или нет, но на сайте W3 есть документ «CSS Backgrounds and Borders Module Level 4» (от 1 апреля 2010), а ведь CSS3 ещё далёк от завершения.

Браузер уже похож на небольшую операционную систему, скоро станет похож на большую. А в мире операционных систем успешных новичков я что-то не вижу уже много лет. В браузерах уже так же. Четыре основных движка и всё остальное построено на них.

Десять лет назад, если тебе не нравилась такая ситуация, ты шёл и писал свой движок, теперь — плагин, да и то, VRML помер, Google бросил свой Gears, Java отступает и Флешу многие уже готовы показать где вырыта для него могила. Да-да, есть ещё «Сервелат», но его пока всерьёз никто не принимает.

Если CSS4 шутка, то это блестящая самоирония W3. Что предлагает консорциум? Да, там много интересного, но вот что касается всех этих прозрачностей, тенёчков и прочей визуальщины, какое-то лишнее и негибкое. Раз уж всё равно переизобретаем то, что прозорливый Microsoft реализовал много лет назад, то почему бы не принять то, что уже реализовано, за стандарт и не разойтись по домам?

Масса же нерешённых проблем, куча недописанных стандартов. Всё самое интересное в черновиках, нет, давайте забахаем очередную прозрачность. Где продолжение HTTP Basic/Digest в современных реалиях? Почему так долго тянем с Drag’n’Drop, это же разрушает опыт пользователя? Где модульность в HTML? Где sandbox, чтобы вставлять код других сайтов на свой? Форматам изображений, используемых в браузерах по 15 лет более, что ничего современнее так и нет? Нормальная реализация защиты от кражи кук? Более человеческие способы делать layout? И так далее.

Мне кажется, что производители браузеров и W3 слишком увлекаются Инновациями, а хорошо бы выделить больше сил на приведение в порядок того, что уже сделано. Я даже знаю, чем это обусловлено — чем больше добавлено в браузер Нового и Интересного, тем богаче пресс-релиз. С другой стороны, «Опера» старается придумать что-то своё, выходящее за рамки, «Гугл» делает отличные информационные события из любого велосипеда, а «Эпл» умеет эти велосипеды продавать по цене Кадиллака. В этой весёлой компании, буду надеятся, кто-то обратит внимание на уже сделанное и протолкнёт какие-то изменения в стандарт.

15 комментариев

DevelStudio

DevelStudio (41.05КиБ)

Когда-то я программировал на Delphi. Несколько лет и, кажется, даже неплохо. Два диплома, сделанных мною при помощи этой среды люди защитили на «пять». Поэтому, увидев этот скриншот пару дней назад, я бы подумал, что это какие-то ранние прототипы Delphi или что-то самодельное, но сделанное под влиянием.

Это PHP DevelStudio, среда для разработки графических утилит на PHP, сделанная действительно под влиянием Delphi. Визуальное программирование — натаскиваем компонентов, расставляем кнопки, диалоги, окошки, пишем обработчики кликов, нажатий и прочего, компилируем, готов exe-файл. При этом приложение пишется на PHP с использованием специального framework.

Пару дней поковырялся, забавно. Никакой мистики, старый как мир принцип — интерпретатор, библиотеки и прочее складывается в один файл. Отсюда и основной недостаток — даже сжатый UPX’ом (среда сама умеет им сжимать) запускаемый файл примера, который всего-то решает квадратное уравнение, занимает несколько мегабайт и стартует чуть-чуть медленнее, чем хотелось бы.

Тем не менее, авторы сделали гигантскую работу (кстати, DevelStudio написана на PHP) и программировать действительно удобно и просто.

На сайте программы есть справка и видеоуроки (кстати, рекомендую посмотреть видеоуроки, основы воспринимаются очень быстро).

Из-за стартового конского размера, программировать на DevelStudio что-то мелкое как-то расточительно, сказываются накладные расходы, но может это мои комплексы. При увеличении объёма программы они не меняются (если вы не подключаете ещё модули, cURL, скажем), так что логичнее замахнуться на что-то более существенное. Проект молодой (ему несколько месяцев), желаю авторам не потерять запал.

Добавлено на следующий день. Тут в комментариях вспомнили Delphi for PHP и веб-разработку. Ребята, DevelStudio не про то. DevelStudio позволяет получать запускаемые GUI приложения. Никакого веба, никакого Apache и прочего.

22 комментария

MHTML/Data URI и Windows Vista+IE7

В копилку ссылок. Пару лет назад я нашёл способ совместить data URI и MHTML в одном документе, с тех пор этот способ широко используется, но в интернете иногда появлялись сообщения, что в Internet Explorer 7 в Windows Vista есть какие-то проблемы с таким совмещением.

На «Хабре» подсказали исправление этой проблемы (на блоге китайского товарища), насколько я понял этот мунспик в переложении на какой-то дикий суржик при помощи переводчика от Гугла, основная идея — просто тщательно следовать RFC2557, на котором построен формат MHTML.

Точнее — не забывать в конце документа выставлять закрывающий boundary (страница семь RFC 2557).

3 комментария

Так ли безопасен Safari

В Ванкувере на встрече хакеров (…) демонстрировалась масса способов хакнуть Mac через Safari — там штук 20 эксплойтов было уже заготовленных — известный специалист по безопасности Чарли Миллер намекнул, что он сам использует браузер Opera, но и то, только потому что он (кроме России) пока не так популярен, как остальные и особо за него никто еще не брался.

Цитата с «Кулера». В очередной раз убеждаюсь, что всё дырявое, просто в непопулярном дырки никто не ищет.

8 комментариев

Невнятный exception у xml.sax

import xml.sax as sax

sax.parseString(u'<r/>', sax.ContentHandler())

Вот этот код выдаёт совершенно невразумительный exception: «xml.sax._exceptions.SAXParseException: :1:1: not well-formed (invalid token)». Ошибка в том, что строка не объект класса str (как должно быть), а unicode.

1 комментарий

IE9 в режиме IE7

IE9 в режиме IE7 можно будет отследить по User-agent. Нормальный user-agent для IE9 — «Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)», в режиме IE7 это будет выглять так: «Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)».

8 комментариев

WebKit иногда не передаёт Referer

Так вот, оба браузера построены на библиотеке Webkit и оба грешат тем, что не передают HTTP_REFERER.

На самом деле передают, но не всегда, что еще больше запутывает ситуацию. Если человек просто нажмет на ссылку, то реферер будет передан серверу, если откроет новое окно или вкладку «альтернативным» нажатием (на Маке это cmd-click или нажатие средней кнопки), то тоже передастся, а вот если нажать правой кнопкой (или ctrl-click), то нет.

Причём, пятый Хром ведёт себя так же. Ненависть. Багу уже несколько лет, разработчикам он известен, но они его не исправляют.

14 комментариев

SVG и браузеры

Поддержка браузерами SVG (15.68КиБ)

Это таблица показывает насколько успешно проходят разные браузеры тесты SVG с сайта W3C (таблица с сайта CodedRead). В таблице, на мой взгляд, примечателен уровень поддержки SVG браузером IE 9 preview. Несмотря на уверения Microsoft о 100% уровне поддержки SVG, видно, что до идеала ещё делековато.

Я, правда, не понимаю что происходит и где правда. С одной стороны, таблица как бы говорит нам, с другой, на сайте IE9 написано следующее:

I want to thank the members in the W3C working groups that helped us develop these tests, the community members for providing valuable feedback on the tests, as well as the engineers on the IE team that made these possible

То есть тесты придуманы не самим Майкрософтом и наверняка в W3C их видели и одобрили. Где правда?

10 комментариев

IE 9 TP

Ну что, дождались! Можно скачать Preview Internet Explorer 9 и посмотреть что получилось у Microsoft (потребуется Vista SP2 или Windows 7).

Получился, кстати говоря, очень неплохой браузер: 55% ACID3, проходит все 578 тестов селекторов CSS3, тест SunSpider на уровне FireFox 3.7a2, поддержка SVG 1.1 2nd edition и прочее.

Скриншот страницы блога «последние 15» в браузере IE9 TP: заголовок «IE 9 TP», текст о скачивании Preview, поддержке CSS3, SVG, тестов Acid3 и Firefox 3.7a2.

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

Впечатляет. Не забудьте, что это только preview. Кстати, user-agent у браузера пока прежний — от 8-й версии. Браузер не затирает предыдущую версию IE, а запускается отдельно.

11 комментариев

Зависание _mysql (mysqldb)

Мучался-мучался, на выборке висит модуль _mysql (это биндинг mysqldb к MySQL у Python). Совершенно случайно заметил, что нигде не указываю кодировку, указал — виснуть перестало.

Судя по strace, модуль чего-то ждёт из сокета, ощущение такое, что просто неверно подсчитывается длина контента — если не указать кодировку, данных ожидается больше, чем приходит. Мда.

Добавлено чуть позже: да что ж такое! Опять висит. И с указанием кодировки — тоже. В интернете ничего нет, что же я не так делаю?

Через _mysql — висит, через MySQLdb — тоже, через execute — висит, через курсор — тоже. Что ж это такое-то?

Добавлено ещё позже: вот весь код:

import MySQLdb as mysql

db = mysql.connect(\
    host = 'localhost',
    user = 'log',
    passwd = 'xxx',
    db = 'log',
    use_unicode = True,
    charset='utf8'
)

c  = db.cursor()
c.execute("SELECT * FROM wp_4_posts")

Вот так уже висит. Не знаю что с этим делать, пойду домой.

8 комментариев

Mongo vs. MySQL

Mongo vs. MySQL (34.83КиБ)

Сравнение скорости MongoDB и MySQL на вставку и чтение. Как видно из данных, MongoDB в 3­-4 раза быстрее, чем MySQL на запись, но чуть медленнее на чтение.

Конечно, это достаточно сферические тесты, но голые чтение/запись тоже интересны.

На графу «Mongo cursor (WRONG)» внимания не обращайте, это ошибочные данные.

4 комментария

PyPy 1.2

Вышел PyPy 1.2, это интерпретатор Пайтона, написанный на Пайтоне. Из интересного: появился JIT-компилятор и PyPy стал работать быстрее CPython, помимо этого появился полноценный sandbox (он уже был в CPython, но функционал в этом режиме был далеко неполным).

Django выполняется под ним быстрее в 2,86 раз быстрее, чем под CPython. Смущает только:

PyPy does not support the CPython C API, which means that third party libraries for python, written in C, will not work.

Придётся использовать биндинги, написанные на чистом Python, для MySQL, например, такой есть.

Оставить комментарий

Производительность «Оперы» 10.50

Решил посмотреть производительность финальной версии новой «Оперы», по сравнению с последними альфами и бетами других браузеров. На момент выхода финальной версии 10.50 это был самый производительный браузер. Поменялась ли ситуация?

Тест «V8» не показал ничего неожиданного: этот тест придуман «Гуглом» оптимизирован под браузер «Хромиум». Но я всё равно сожалею, «Опера» ничего не сделала, чтобы догнать «Хромиум» в этом тесте.

V8 (2.76КиБ)

Тест «Sunspider» (версии 0.9) показал, что последние версии «Хромиума» уже потихоньку сдвигают «Оперу» с престола. В этом тесте, в отличие от остальных, чем меньше показатель, тем лучше.

Sunspider (2.77КиБ)

Увы, тест «Peacekeeper показывает то же самое: „Хромиум“ сдаваться не собираться и наращивает производительность семимильными шагами.

Peacekeeper (2.83КиБ)

FireFox сейчас аутсайдер и в гонке не участвует.

18 комментариев

IE6- и фон полупрозрачного PNG

TweakPNG (3.26КиБ)

Тема Internet Explorer и PNG как-то удивительно неисчерпаема. Совершенно случайно накнулся на способ, который широко известен в буржуинских интернетах, а в рунете мне как-то на глаза не попался, хотя, судя по поиску, всё-таки известен.

Касается он отображения полупрозрачных PNG в Internet Explorer 6 и ниже. Как известно, без ухищрений, у PNG полупрозрачность в указанных версиях не появится, вместо этого IE покажет серый фон.

Оказывается, есть способ заменить этот цвет на любой другой. Например, на белый. Это можно сделать, например, утилитой TweakPNG:

  • открываем PNG в TweakPNG
  • в меню «Insert» выбираем «bkGD (Background-color)»
  • выделяем свежесозданную строку «bkGD»
  • клик правой клавишей → «Edit chunk…», меняем цвет, к примеру, на белый
  • сохраняем файл
    Кстати, многие инструменты оптимизации PNG удаляют параметр «bkGD».

Отличный способ сделать graceful degradation.

13 комментариев

Microsoft покажет IE9 в марте

В середине следующего месяца, в марте, на Mix 2010, Microsoft покажет наконец-то Internet Explorer 9 широкой публике. Никаких официальных сведений о дате выхода релиза этой версии пока нет.

7 комментариев

Проблема в IE: «//» в link на CSS

Проблема IE с «//» (5.70КиБ)

Стив Саудерз из «Гугла» нашёл препеприятнейшую проблему в IE7 и 8. При указании подключении к странице CSS через тег LINK, если не использовать протокол, а указывать только хост, эти два браузера почему-то загружают CSS два раза.

Небольшой поясняющий пример, чтобы было понятно о чём идёт речь:

<link type="text/css" rel="stylesheet" href="//www.test/t/yack.css" />

Я проверил по логам, всё действительно так. Причём, если подключить внешний CSS через @import, то всё нормально — файл загружается один раз.

3 комментария

JavaScript V8 и nginx

Игорь Сысоев написал интересную статью «Почему Google V8 пока не подходит для встраивания в сервера», краткая выжимка:

Поскольку V8 разрабатывается в первую очередь для Chrome, то это наложило на него существенный отпечаток и, перефразируя высказывание Генри Форда о цвете машины, можно сказать, что V8 будет хорошо работать в любой программе, при условии, что эта программа называется Chrome. (…) Подытоживая вышеописанное, можно сказать, что на данный момент (версия 2.0.6.4, февраль 2010 года) V8 не подходит для серьёзного встраивания в сервера.

Оставить комментарий

Как узнать в каком месте зависла программа на PHP?

PHP 5.3.1 что-то меня разочаровывает. Висит (по крайней мере под Windows XP) в самых неожиданных местах. Кстати, эти зависания подтолкнули меня к поиску способа, которым можно было бы отследить где зависла программа.

Способ проще некуда: ставим модуль PHP xdebug, прописываем его в php.ini (не забываем, что в PHP 5.3 всегда используется «zend_extension»), а в исследуемой программе указываем:

xdebug_start_trace('/какой/то/путь/имя-лога', XDEBUG_TRACE_APPEND);

После зависания идём в указанную папку и смотрим в лог, последняя строка в нём и есть источник зависания.

10 комментариев

← 1 49 50 51 52 53 67 →