Friday, August 14, 2009

cafeteria refactoring

1. выручка


в РИА «Новости» есть столовая. не буду придираться к качеству питания, меня устраивает, но не фонтан, конечно же. сотрудники питаются со скидкой 15%; чеки у сотрудников и людей со стороны разные.

так как во время еды часто идет обсуждение всякой всячины, я однажды предложил обсудить суммы на чеках. как оказалось, на чеках есть сведения, достаточные для получения средней суммы

проанализировав чеки, оказалось, что у них есть два счетчика — сквозной для всех касс номер чека и уникальная для кассы сумма, на которую отобедали люди со скидкой. получилось, что в среднем за сутки столовая выдает 1300 чеков. если учесть, что не все люди ходят обедать (хотя, большинство все–таки ходит), некоторые ходят завтракать и вечером пить кофе, то, наверное, можно получить около тысячи чеков, которые входят в «обеденную» выборку. с учетом средней суммы чека в 100 рублей, выходит оборот в сто тысяч рублей в день.

вечернюю выборку чеков по всем кассам мы не делали.

2. рефакторинг


рефакторинг кухни я не рассматриваю, так как знаю про кухню понаслышке. например, возьмем очереди в столовой. они возникают на раздаче, где люди заказывают еду. заказ — положить на тарелку — отдать тарелку. вполне можно организовать на каждое блюдо одного человека, который просто следит за тем чтобы каждого блюда было достаточно для того, чтобы люди подошли и просто взяли тарелку (спасибо, tinsdale). очередь уменьшается, но при этом растет очередь на кассе. дажен разгрузив кассу, придется найти дополнительное место в столовой и так далее. то есть оказывается, что текущий подход оказывается выигрышным из–за того, что ожидая везде понемногу, человеку не приходится стоять перед занятыми столами.

3. маржа


столовая находится в здании с пропускным режимом. увеличение прибыли возможно при выполнении любого из двух условий: увеличение суммы чека или увеличение количества человек, которое прошли через столовую. второй вариант вследствие описанных условий сложен.

что же делать с суммой чека? увеличить стоимость основных блюд столовая (скорее всего) не может, поэтому за последние месяцы в ассортименте появилась паста и блины, мороженое и молочные коктейли. если даже это влияет, то не очень сильно, потому как блины берут не вместе с остальными блюдами, а вместо основного блюда.

4. все просто


потребности пользователей и получение прибыли редко работают в одной и той же плоскости. поэтому любой рефакторинг работающего механизма должен подвергаться глубоком осмыслению и всегда нужно понимать — у рефакторинга есть как минимум две плохие стороны:
а) отрицательный экономический эффект, который не всегда сможет быть покрыт доходами даже в дальней перспективе;
б) постепенное расширение узких мест может оказаться фатальным для какого–то узкого места, на котором зиждется вся система.

Sunday, August 9, 2009

HTTPOnly

это будет добрый пост.

почти без мата.

волшебный параметр для кук (cookies), который управляет отдачей их клиенту. например, скрипту.

документация: http://www.owasp.org/index.php/HTTPOnly

судя по поддержке, все нормальные/современные браузеры поддерживают. а вот чуваки из оперы сосут хуй.

вообще, исходя из поддержки всякого стаффа, нужно оставить только два движка — вебкит и gecko (и то, последний — только до тех пор, пока все не перетянутся на хром/сафари). потому что IE любой версии все хуево рендерит и вообще, для них приходится часто другие страницы писать, а опера — просто говно браузер.

Wednesday, August 5, 2009

colocation support

хостинг на три буквы, первая — m




я: нужно перезагрузить сервер
они: готово
я: что–то нет ответа. а не могли бы вы подключить kvm?
они: готово, логин, пароль
я: спасибо, kvm работает, но, к сожалению, сервер не мой



первый их сбой, кстати. все остальное — просто замечательно; лучший хостер из всех на моей памяти



хостинг на 6 букв, первая — m


сначала подвисала сетевуха с сообщением TX is hung и они не могли разобраться в проблеме


после перетыкания кабеля стало работать


обнаружив, что соединение half duplex вместо full duplex, предположил, что проблема у них в кабельной системе. ответа жду уже третью неделю



хостинг на 10 букв, первая — m



перевозили без предупреждения ночью сервер в другой датацентр


когда заканчиваются деньги, отключают dns. то, что он у некоторых клиентов в глубинке восстанавливается неделями, их не ебет



хостинг на 9 букв, первая буква — p


пиздец, никому не пожелаю.


служба поддержки способна разобраться с проблемами только в рабочее время по будням. в выходные нет даже дежурного админа.


при установке сервера выдали мне чужие ip адреса.


забыли оформить пропуск на внос сервера.


при расставании выдали не мои салазки.


на площадке сервер перед выносом всегда выключается по питанию.

Friday, July 24, 2009

svn

svn мне напоминает анекдот:

«
– я ж тебе говорил, что это говно, а ты — засахарилось, засахарилось.
»

возьмем, например связывание директории с другим репозиторием через svn:externals

во первых, это делается жутко неочевидным способом.
во вторых, в svnbook нет явного примера, как это сделать.
в третьих, для того, чтобы связать директорию внутри дерева файлов, связывать ее нужно в корне репозитория.

памятка:
$ cat >svn_ext_val.txt
dir_of_repo_one http://svn.my.com/path/to/repo_one
dir/of/repo/two http://svn.my.com/path/to/dir1/dir2/repo_two
svn propset svn:externals . -F svn_ext_val.txt

ЕЩЕ: все оказалось еще интереснее. оказывается, эти проперти нужно закоммитить, а у меня была куча файлов, которые коммитить не хотелось. определенно, разработчики svn какие–то хуеголовые

ЕЩЕЩЕ: они не умеют показать файлы, которые будут обновлены без реального update. это уже даже не пиздец

Monday, July 13, 2009

SD vs BluRay

мне сразу показалось, что победа BluRay над HD DVD была пирровой. размышляя пару дней назад с женой над будущим BluRay пришла в голову идея сделать небольшую табличку.


типSD/microSDDVDBluRayHDD
размер32 × 24 mm
11 x 15 mm
120 x 120 mm101.6 х 26.1 х 147 mm
емкость*8GB4.38 GB25GB1000GB
скорость доступа20 MB/s at 150x10 MB/s18 MB/s at 4x30 MB/s (USB 2.0)
стоимость оборудования, руб.100100090001000
цена носителя за гигабайт717213
цена за 1000 гигабайт**125 / 72500220 / 785040 / 302001 / 4200


* за номинальную емкость SD взята емкость, которая оправдана экономически, то есть лучше по соотношению емкость/стоимость

** включая стоимость оборудования, коим является кардридер, дисковод и коробка для hdd; цифра в числителе дроби — количество накопителей.

мораль всего этого такова:
  1. для домашнего консервирования дешевле и удобнее купить внешний жесткий диск;

  2. для переноса небольшого количества данных стоит использовать SD/microSD; для большого количества данных — внешний hdd

  3. диски BluRay по большому счету нафиг никому не нужны в дальней перспективе — SD очень активно дешевеют, чего за BluRay дисками не наблюдается. и применения им не видно, потому что для переноски данных они не годятся из–за высокой стоимости оборудования, для консервирования — из–за высокой стоимости;

  4. DVD — достояние истории. на них по прежнему можно хранить данные, но ощутимо проще (но не дешевле) купить SD на 8–16 GB и забыть про стопки DVD как про страшный сон;

  5. не стоит рассматривать SD как панацею — стоимость за гигабайт все еще слишком высока.

Monday, June 22, 2009

opensource

вообще, opensource забавная штука. вот я выкладываю свой код и получаю на него вполне себе feedback. opensource — это как социальные сети для разработчиков.

в большинстве своем opensource, конечно, на редкость уебищно — нет ни нормального интерфейса, ни нормального кода, но некоторые проекты, в которых есть некий заказчик и организатор или упёртый эниузиаст, выходят отличными. например, ничего лучше, чем evolution, для почты еще не придумали. или другой пример, я использую eclipse colorer plugin для подсветки синтаксиса многих файлов. оба — и eclipse и colorer — примеры качественного opensource.

и мне самому было бы тяжело без открытого кода. как бы я тогда поправил баги в DBD::Oracle, если бы не было исходников?

вообще все это я хотел написать после того, как пересоберу colorer под snow leopard. но не тут то было — colorer пересобрался, но при попытке открытия файла падает.


ХАХАХА: мы с создателем colorer нашли проблему и я таки собрал новую версию.

Thursday, June 4, 2009

miraculous oracle

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

допустим, в таблице есть поле VARCHAR2. максимальный размер поля такого типа — 4000 байт. теперь начинается fun. допустим, мы создаем поле типа VARCHAR2(100 CHAR). в реальности же будет создано поле размером x00 байт (где x — максимальное количество байт, которое потребуется для представления любого символа из UCS2 в UTF8). так, чтобы 100 любых символов из unicode поместились. хотя, возможно, внутри оно хранится в UCS2 и поэтому выделяется всего 400 байт.

отойдем от технических деталей и попробуем вставить 100 символов. у нас все получится, несмотря на кодировку. то есть вставится и 100 ASCII и 100 Kana.

теперь же попробуем выделить 4000 CHAR для этого поля. и что вы думаете? в такое поле может быть вставлено будет только то количество символов, которое в utf8 помещается в это количество байт. на другие значения будет выдано сообщение об ошибке.

совсем забыл: но это еще не все. для обхождения ограничения в 4000 байт нужно использовать CLOB. но просто так нельзя записать в CLOB более 4000 байт (меньше — можно). для записи нужно отказаться от


prepare ($$sql)
execute (@params)


и начать использовать


prepare ($sql)
foreach my $params (@params) {
if (sql_type_of ($param) eq 'CLOB') {
bind_param ($i, $param, {ora_type => 112})
} else {
bind_param ($i, $param)
}
}
execute


там, конечно, условия посложнее, но общее представление показывают