|  |

 |
|
Здравствуйте! Рад Вас видеть.
В этот журнал я пишу заметки о компьютерах, софте, его разработке и разработке под веб на PHP. Поскольку это персональный журнал он также содержит некоторые сопутствующие заметки касающиеся меня лично, каких-то моих увлечений или заморочек. Стараюсь делать посты в ленте краткими, остальное прятать под кат, чтобы не раздражать читателя.
Я разрабатываю программу BullDoc, которая позволяет делать документацию в виде текстовых файлов в формате html, держать их в одном SVN-репозитории с кодом. Возможна правка тектса через вебинтерфейс, где сразу виден результат без сборки проекта. Во время релиза собирается статичная книжка-документация. Имеется экспорт в CHM с индексом
Статья на хабре про программу
Можно посмотреть тюториал
Некоторые постинги делаются в виде статей, я бы не хотел что бы они со временем уезжали в далекий архив, поэтому вынесу их сюда. Мне будет приятно, если Вы их прочитаете и они Вам понравятся.
Дейкстра, Смиренный программист
Про изобретение велосипеда и Not-Invented-Here Syndrome
Метрики производительности
Слишком простые уязвимости, чтобы их не замечать
Apache php4+php5 на девелоперской машине
Книга Э. Голдратта "Цель"
( Подробности: Статьи, Ссылки, Браузер Опера, Рубрикатор )
Тексты публикуются под Creative Commons License: разрешается свободное копирование, распространение и демонстрация объектов авторского права (в том числе и в коммерческих целях), а также создание на их основе производных объектов авторского права. Чтобы воспользоваться этой лицензией, третьему лицу достаточно лишь указать автора работы, а также указать, что работа распространяется на условиях CC.
 This work is licensed under a Creative Commons Attribution 3.0 Unported License.
38 Comments | Post A Comment | Add to Memories | Share | Link
Стиву удалось вызвать у членов команды почти слепую преданность концепции создания «Мака», одновременно назначив им зарплату, не превышавшую 10-20 тыс. долл. в год, что не мешало ему по-прежнему требовать работать по 90 часов в неделю, днем и ночью, а также по выходным. Эта ситуация вызвала «глубокую депрессию у инженеров», как написал в своей служебной записке один из менеджеров.iCona Либо ты кодишь кровавый энтерпрайс и получаешь относительно нормальную зарплату, либо занимаешься высокими материями и будешь с трудом выживать. Объявление Поиск работящего реально расстроило, если не убило.
68 Comments | Post A Comment | Add to Memories | Share | Link
Вах! http://habrahabr.ru/blogs/infosecurity/129221/зловред грузит екзешники через флеш, жаву и пдф. Пока правда только на винду и ие.
Post A Comment | Add to Memories | Share | Link
 |
|
Меня тошнит от того, что в телевизоре. Вчера ребенок мне рассказал, что им в школе на уроке истории рассказывали про " План даллеса", после чего он прозрел и больше не будет смотреть американские фильмы. Ну про фальшивку можно таки пойти в интернет и прочитать сколько там правды. Вспомнил, как мы в первом классе рисовали Рейгана с ядерной бомбой в руке и стало грустно. Рассказал об этом. После политических вакханалий по телеку хочется вспомнить именно слова этого нашего врага в холодной войне: Мы совершили первую революцию в истории человечества, которая совершенно развернула курс правительства. Мы сделали это с помощью слов "мы, граждане". "Мы, граждане" говорим правительству, что делать, а не наоборот. "Мы, граждане" -- водители, а государство, это машина. И мы решаем, что делать, и каким курсом, и как быстро. Почти все конституции в мире, -- это документы, говорящие, какие у граждан есть права. Наша Конституция -- это документ, где мы, граждане, говорим правительству, что ему можно делать. "Мы, -- граждане" мы свободны. Вера в этот принцип была основой для того, что я делал в прошедшие 8 лет.
Но в 1960-х, когда я начинал, казалось, что мы подменили порядок вещей -- с новыми и новыми правилами, регуляциями, и налогами. Правительство забирало все больше наших денег, возможностей и свободы. Я пришел в политику, чтобы сказать "стоп". Я был гражданским политиком, и мне казалось я делаю правильный шаг, как гражданин.
Я думаю, мы остановили многое из того, что надо было остановить. И надеюсь, мы напомнили людям, что человек не свободен, пока правительство не ограничено. Здесь действует ясный эффект, как в законе физики: где правительство расширяется, там свобода убывает.( Ours was the first revolution in the history of mankind that truly reversed the course of government, and with three little words: "We the people." "We the people" tell the government what to do, it doesn't tell us. "We the people" are the driver, the government is the car. And we decide where it should go, and by what route, and how fast. Almost all the world's constitutions are documents in which governments tell the people what their privileges are. Our Constitution is a document in which "We the people" tell the government what it is allowed to do. "We the people" are free. This belief has been the underlying basis for everything I've tried to do these past eight years.
But back in the 1960s, when I began, it seemed to me that we'd begun reversing the order of things — that through more and more rules and regulations and confiscatory taxes, the government was taking more of our money, more of our options, and more of our freedom. I went into politics in part to put up my hand and say, "Stop." I was a citizen politician, and it seemed the right thing for a citizen to do.
I think we have stopped a lot of what needed stopping. And I hope we have once again reminded people that man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.) http://old.nationalreview.com/document/reagan200406052132.aspМы же движемся в точности в обратном направлении, а вся эта сопроводительная патриотическая риторика чепуха, обман и прибежище негодяев(с)
7 Comments | Post A Comment | Add to Memories | Share | Link
Захотел продолжить тренировать мозг по методике N back. Для этого у меня была программа на питоне Brainworkshop и в начале лета я комфортно себя чувствовал на сложности "2 шага назад". Однако программа не запустилась выдала ошибку в инициализации окна. Нужно было поменять библиотеку pyglet в файлах игры. Ее можно взять тут: http://code.google.com/p/pyglet/downloads/listи просто поменять содержимое папки pyglet. Можно поставить пакет в систему и удалить/переименовать локальную папку: ~$ wget http://ftp.debian.org/debian/pool/main/p/pyglet/python-pyglet_1.1.4.dfsg-2_all.deb~$ sudo dpkg -i python-pyglet_1.1.4.dfsg-2_all.deb ~$ mv brainworkshop/pyglet brainworkshop/pyglet.old После этого шаманства запустилось. Но тренироваться уже некогда. Go to work...
1 Comment | Post A Comment | Add to Memories | Share | Link
Если Вы используете PHP-Storm и хотите синхронизировать файлы через sftp с dsa-ключем, нужно отдельно скачать и обновить библиотеку Java SSH. Отмечу быструю помощь разработчиков на форуме: http://devnet.jetbrains.net/thread/304891Тем не менее до 3.0 еще далеко и этот фикс все еще актуален. Кстати в последних релизах у них действительно сильно улучшена производительность. Продлил лицензию еще на год :)
1 Comment | Post A Comment | Add to Memories | Share | Link
Изрядно закопавшись в последовательное изложение хаскелла в учебнике, очень было приятно зайти немного с другой стороны, -- со стороны "что-нибудь уже сделать компилирующееся и работающее". Haskell Quest Tutorial, как раз то, что надо, когда что-то уже в голове сложилось. И основные конструкции понятны, и краем головы известно, что IO() -- это монада, в общем красиво, просто и занимательно. Прочел на одном дыхании. Еще один изящный пример работы с ленивыми списками оттуда: Числа Фибоначчи: fibs = 0 : 1 : zipWith (+) fibs (tail fibs) take 10 fibs фибс, -- это список, начальные елементы которого 0 и 1, а дальше получаем суммированием со сдвинутым самим собой, т.е. [0,1,1,2,3] и [1,1,2,3] И берем 10 первых чисел, так, что бесконечность списка совершенно не мешает: take 10 fibs И ведь, зараза, оптимизирует рекурсию, чтобы никаких лишних вычислений. А вы говорите, динамическое программирование!
Post A Comment | Add to Memories | Share | Link
 |
|
На рабочей машине стоит карточка NVIDIA Ge-Force GT. Из-за этого весенний релиз Кубунты 11.04 был для меня хоть и рабочим, но самым проблемным. Даже консоль при ресайзе висла и только самые cutting-edge драйвера позволяли с этим бороться. Но эти драйвера однажды обновившись и порушили мне систему. Сейчас вроде устаканилось все до относительной стабильности и работает. Тем не менее установиться из коробки не получается. Нужно всего лишь три пасса руками: 1. Установить Kubuntu 11.04 с дистрибутивного диска. Перед запуском установщика нажать F-6 и установить nomodprobe, иначе установщик упадет в экран с мусором. После уставки система не запустится, вывалится вэкран с мусором. Не паниковать! это нормально. При загрузки системы необходимо нажимать клавишу shift, для того, чтобы появилось меню загрузки Grub2. Выбрать загрузку в recovery mode. Выбрать выход в root shell. 2. Устанавливаем иструменты и видео-драйвер #add-apt-repository ppa:ubuntu-x-swat/x-updates #apt-get update #apt-get upgrade #apt-get install build-essntial binutils mc synaptic #apt-get install nvidia-current nvidia-settings #nvidia-xconfig #/sbin/reboot После этого система загрузится нормально. 3. Чтобы сплешскрин был человеческий нужно много мелких пассов, но проще скачать скрипт: # wget http://www.webalice.it/bernardi82/software/fixplymouth-natty# chmod +x fixplymouth-natty # ./fixplymouth-natty Описание скрипта4. До кучи можно добавить в репозитории ppa:kubuntu-ppa/backports И обновить KDE до 4.7
7 Comments | Post A Comment | Add to Memories | Share | Link
Обновил Оперу и обнаружил, что, написанная для раскрутки IE9 на чистом HTML5, игра Pirates love daisies теперь работает в Опере и под вин, и под лин. На самом медленном компьютере она подтормаживает, но все еще играбельна. На машинках по-новее вообще работает на ура.
Post A Comment | Add to Memories | Share | Link
В Libre Office вместо Visio используется Draw. Этим летом в рамках Google Summer of Code был создан фильтр для импорта файлов из Visio: library for parsing the visio file format structure, который включен в master-ветку Libre Office и те, кто собирает Офис из исходников могут пользоваться им уже сейчас. LibreOffice Visio Import filter - first steps of a new babyLibreOffice Visio import filter - shaping up the babyLibreOffice Visio import filter - round shapes are beautiful
Post A Comment | Add to Memories | Share | Link
Жизненное: Из больницы выписали, но таки больничный оформили не правильно, придется переделывать. Игровое 1. Оказывается создатели мега игры Patrician -- Ascaron уже банкроты и давно. 2. Оказывается Акелла бросила онлайновую игру Pirates of the burning sea, русский сервер закрыт, игроки понаехали к французам, которые не очень рады наплыву. Морская тема это какое-то проклятие для Акеллы. Удачно начали с Корсаров, а потом прямо злой рок напал. 3. Мы сейчас играем на официальном серевере WOW. Для этого я купил аж три экаунта. Тем не менее дети требуют отдельный сервак с режимом ГМа. Однако что-то пока ничего стабильного для Катаклизма найти не могу. Видимо прикрыли лавочку с населением мира с помощью информации, хранящейся в кеше игрового клиента. Все-таки мангос это, не только пиратство, - это интересная штука для тех, кто хочет поковырять игровой мир.
2 Comments | Post A Comment | Add to Memories | Share | Link
 |
|
Пока что я просто восхищен хаскельной декларативностью и мне в реальной жизни не надо на нем ничего писать, однако чувство того, что я не понимаю, что там внутри временами гложет. Вот на Си++ я примерно понимаю что происходит. Да, оптимизатор может сильно изменить мою программу при компиляции, но все же более-менее понятно как все работает. В интерпретируемых языках все менее прозрачно, например может быть такой эффект: В нашем движке, экспортированные из C++ для python 3d-вектора имеют методы length и lengthSquared. И в документации постулируется, что лучше вызывать lengthSquared когда надо сравнить длины векторов, типа это быстрей и корень не извлекается. Проверил это, и получил сюрприз - lengthSquared оказался на 5% медленней чем length. Объяснение простое - все поля/методы объекта в python это строки в хеш-таблице. Строка "lengthSquared" длинней чем "length". И суета с длиной идентификатора в хеш-таблице оказалась важней чем наличие квадратного корня. Вывод - в динамическом ЯП неважно что звать, вычисление "сложного" синуса или тупое сложение. Если хотим выжать сколько-то (десятков) процентов скорости не переписывая на C - стоит класть методы объектов в локальные переменные, ls = Point3d.lengthSquared; ls(dir1) < ls(dir2);Тем не менее можно докопаться, открыв исходники интерпретатора. Что происходит в недрах хаскелла моему мозгу пока непостижимо. Понятно, что есть книжка о том, как оно устроено внутри: The Implementation of Functional Programming Languagesно мне бы сначала с языком разобраться. В Си++ понимание того, что происходит приходило по мере изучения самого языка, а тут такого нет. Имеется набор инструментов для оценки производительности, но все же ответ на вопрос "где тормозит?" дать непросто. Вот тут, например, что тормозит? http://jdevelop.livejournal.com/1871816.html
6 Comments | Post A Comment | Add to Memories | Share | Link
О прощедшем заезде интервьюверов я узнал из журнала http://kitya.livejournal.com (по наводке itman). Оказывается регулярно информация о найме в MSFT бывает в блоге http://blog.not-a-kernel-guy.com (Алексей Пахунов), да и сам блог весьма интересный.
Post A Comment | Add to Memories | Share | Link
Интересная игрушка -- интерактивное обучение программированию на javascript. http://www.codecademy.comДолжно быть продуктивнее, чем чисто по книжке -- ведь в книжку можно теперь не смотреть - так степ-бай-степ и все получилось.
6 Comments | Post A Comment | Add to Memories | Share | Link
 |
|
В хаскелле первые элегантных конструкции, которые встречаются новичку -- это операции со списками значений. Например выделение из списка 1 (list comprehension, варианты перевода на русский разнятся): взять из множества значения, удовлетворяющие некоторому условию (предикату) и произвести некоторые действия. И правда, выглядит красиво -- предикат (x*2 >= 12), список ([1..10]), лямбда-функция (x*2): ghci>[x*2 | x <- [1..10], x*2 >= 12] [12,14,16,18,20] Красиво! Однако, оказывается, и в новом JS есть такие же конструкции: var range = function(start,end){for (var i=start; i<=end; i++) yield i} var s = [2*i for (i in range(0,100)) if (i*i>3)] Или даже, еще симпатичнее: Number.prototype.__iterator__=function(){for (var i=0; i<this; i++) yield i} var s = [2*i for (i in 101) if (i*i>3)] Обзор того, как делают такие операции имеется в википедии: http://en.wikipedia.org/wiki/List_comprehensionВ питоне такие конструкции называются генераторами. ( Очень печально этот прием выглядин на Си++ ) 1Термин происходит из аксиомы выделения из множества: Из каждого множества можно выделить [по меньшей мере одно] подмножество, высказав суждение о каждом элементе данного множества.
4 Comments | Post A Comment | Add to Memories | Share | Link
 |
|
Собеседование: соискатель наносит ответный ударИнтервьюер (И): Я вижу, что многого Вы не знаете и Вам еще много чему нужно учиться. Некоторые вещи, которые должен знать каждый, явно прошли мимо Вас. Я (Я): Во-первых, я всю жизнь учусь, во-вторых, все знать невозможно, ну а в-третьих, у каждого свое понимание, что должен знать каждый, а что нет. Уверен, что и Вы не каждый вопрос ответите сходу. (И) смотрит на меня с интересом. (Я): Вот например, простенький пример из жизни: почему в C++ нельзя перегружать функцию по const string& и bool? (И): Почему нельзя? Можно! (Я): Хорошо, язык это позволяет, но делать так не стоит. Почему? (И)(задумчиво): Неоднозначности тут не возникнет... Вы не правы! (Я): Хорошо, подумайте над этим. Вопрос на самом деле нуууу очень простой! Вежливо прощаемся. Через день звонит мне на трубку. (И): Здравствуйте, С.А., это Вас беспокоят из фирмы XXX. Мы тут подумали... Па-па-па-пам! Неужели берут? (И): Нам кажется, Вы все-таки заблуждаетесь, и никаких препятствий для такой перегрузки нет! Объясните, почему Вы так считаете, что этого делать нельзя? (Я) (еле сдерживаясь, чтобы не начать кататься от смеха по полу): А Вы меня берете, или нет? (И): Нет, Вы нам не подходите! (Я): Тогда подумайте над этим вопросом сами. Кладу трубку. ( почему )
12 Comments | Post A Comment | Add to Memories | Share | Link
С праздником twimc.
Бросил попытки сесть, поскольку я сильно намял место вокруг дренажной трубки, что и ходить стало фигово. Зато сделал себе лежбище на кровати из подушек и вещей, положил мыша рядом и стало ничего. В выходные в больнице полное затишье, -- все болезни отдыхают.
Кажется я схватил таки хаскеля за хвост, т.е. стал понимать, что с этой штукой что-то такое можно сделать. Возможно learn you a haskell более проста для понимания, чем real world haskell, возможно, со второй попытки легче, а может помогла статья ivan_ghandi про монады, т.е. стали понятны параллели с теорией категорий.
3 Comments | Post A Comment | Add to Memories | Share | Link
Прооперировали. Сидеть не могу пока. Вставать могу, но это требует сноровки. Пока что из меня торчит дренаж и штучка для капельницы, что мешает.
Так, что все, что пока могу делать это читать learnyouahaskell, ну оно и хорошо.
6 Comments | Post A Comment | Add to Memories | Share | Link
Первая попытка не удалась, будем пробовать еще :)
Thank you for taking the time to meet with all of us from the Microsoft Bing team in Moscow, it was a pleasure to get to know you a little more J Everyone enjoyed speaking with you and we all learnt something new from your interview and experience and are grateful for that opportunity.
We have made our final decision and I regret to inform you that we won’t be moving forward with an offer at this time; our decision was made based on the interview and team fit and while we don’t feel Bing will set you up for success right now, I would encourage you to try for other Microsoft opportunities because you do have the necessary background and skills for many teams in Microsoft and I am sure you can find the right position very soon.
3 Comments | Post A Comment | Add to Memories | Share | Link
|
 |
|
 |
 |