Agon
04:35 01-09-2009
Div power
http://960.gs/ - пример того, что любую идею можно довести до абсурда при помощи упрощения.
Группы: [ Ай-Ти ] [ Работа ] [ Ссылки ]
04:44 18-08-2009
Стартап
Надо сделать сервис, который бы брал статус из Скайпа и сам постил его на Твиттер. Веб 2.0, все дела.
Группы: [ Работа ]
03:40 14-08-2009
Правило названия
Работников IT сферы различают так: глупые работники IT сферы по отношению к пользователям употребляют слово "юзвери". Нормальные говорят "юзеры". А те, кто на самом деле понимают, зачем они живут - говорят "клиенты".
Группы: [ Ай-Ти ] [ Работа ]
08:36 06-08-2009
Hint
Всем веб-разработчикам нужно в обязательном порядке включить режим совместимости в IE8 - это самый простой способ проверить свои скрипты на совместимость с IE7. К сожалению, для того, чтобы проверить скрипты на совместимость с IE6 - придется выполнить обычные танцы с бубном.
Группы: [ Ай-Ти ] [ Работа ]
11:45 23-07-2009
Django.models.object.get()
Играюсь с Django. Заметил, что при вызове Model.objects.get(pk=key) в случае, если в таблице вызываемый ключ отсутствует, поднимается исключение DoesNotExist, в то время как Model.objects.filter(pk=key) такого исключения не поднимает никогда. При этом, если посмотреть в коде, то сразу выясняется, что:

    def get(self, *args, **kwargs):
        """
        Performs the query and returns a single object matching the given
        keyword arguments.
        """
        clone = self.filter(*args, **kwargs)
        num = len(clone)
        if num == 1:
            return clone._result_cache[0]
        if not num:
            raise self.model.DoesNotExist("%s matching query does not exist."
                    % self.model._meta.object_name)
        raise self.model.MultipleObjectsReturned("get() returned more than one \
%s -- it returned %s! Lookup parameters were %s"
                % (self.model._meta.object_name, num, kwargs))


Т.е. get() - это просто алиас для filter(), который пытается вернуть первый элемент массива, а в случае если его нет - поднимает тот самый DoesNotExist. Из этого следует, что get() стоит использовать только в случае, если вы уверены что заданый ключ в базе есть, или если его отсутствие - это исключение, которое вы будете обрабатывать с try-except (хотя в последнем случае проще использовать get_object_or_404() или что-то вроде него). Во всех остальных случаях проще выполнить filter() и проверить len() самому. Хотя, возможно, я посто не привык использовать try-except - я стараюсь просто не допускать ситуаций при которых исключения могут возникнуть, сказывается PHP-наследие.
Группы: [ Ай-Ти ] [ Работа ]
12:27 16-07-2009
Зависть
Уже некоторое время играюсь с Django. Первое впечатление - черная и жгучая зависть. Сука, PHP на рынке уже лет десять, но за все это время никто не создал фреймворка даже с функционалом даже в половину таким-же простым и удобным. Любой из PHP-фреймворков сосет у Джанги с присвистом, что Cake, что Zend, что Code Igniter. И ведь эти идеи - в них нет никакой революции, все это придумано и используется уже годы. Но собрать это в одном PHP-фрейморке не удалось никому. А на Python - пожалуйста. Оцените простоту и мощь:

from django.db import models

class AbstractTable1(models.Model):
    field1 = models.CharField(max_length=150)
    class Meta:
        abstract = True

class AbstractTable2(models.Model):
    field2 = models.SmallIntegerField()
    class Meta:
        abstract = True

class MyTable(AbstractTable1, AbstractTable2):
    field3 = models.CharField(max_length=150)


Да, в Zend в последнее время появилось кое-что из этого. Но, во первых, по части ООП, объектам PHP до Питоновских как до Пекина раком. А во вторых - Zend, это все еще просто набор объектов без четкой структуры и документации, и даже самостоятельно разобраться в нем очень и очень не просто. В то -же время Django понятен чисто интуитивно. Похоже, на какое-то время Python станет моим основным языком программирования.
Группы: [ Ай-Ти ] [ Работа ]
14:43 14-04-2009
Идеальный PC
Задумался над тем, каким должен быть компьютер, претендующий на звание "идеального". Пожалуй, мой идеальный комп представляет собой что-то, вроде iPhone, но с диском, гигабайтов так на 60-120. К этому iPhone должен прилагаться набор разных док-станций, на все случаи жизни.

Дома будет стоять одна такая док-станция, с большим монитором, клавиатурой и принтером. У этой станции должен быть свой процессор, хорошая видео-карта, память, диск - словом это будет почти полноценный комп, с урезной и быстро загружающейся системой. Эта система будет использоваться для доступа к ресурсам компа, когда хозяина нет дома - музыку послушать, видео посмотреть, документ напечатать, торренты покачать и т.д. А рабочая система будет сидеть на коммуникаторе - если его вставить, то система должна загрузиться, синхронизироваться с "домашней", после чего коммуникатор превращается уже в полноценную рабочую машину, которая имеет доступ как к диску коммуникатора, так и к диску док-станции. Собственно работает "большой" компьютер док-станции, используя диск коммуникатора в качестве системного. Разумеется, система коммуникатора должна сама выяснить все про принтеры, сканеры и прочие устройства, которые подключены к док-станции.

В машине должна быть другая док-станция, которая одновременно является компьютером автомобиля. Вставленый в нее коммуникатор становится ее экраном и превращается в GPS-навигатор, аудио-видео плеер, телефон с хандс-фри и тд.

На работе должна стоять еще одна док-станция. Вернее, таких станций там будет много, по одной на каждое рабочее место. Станция будет предоставлять пользователям доступ к ресурсам сети. Тут есть куча вопросов насчет безопасности и прочего, но ничего такого, чего нельзя решить.

Кроме этого, можно придумать станцию, представляющую собой нормальный монитор, клавиатуру и батарею, и превращающую коммуникатор в лаптоп.

К сожалению, это все мечты и в реальном мире такая система появится врятли.
Группы: [ Ай-Ти ] [ Работа ]
23:29 25-02-2009
Заповеди
В блоге Носика когда-то появились "20 вещей, которые не нужно делать, открывая собственный бизнес" от Дэйна Карлсона:

Перед тем, как начать собственный бизнес:

1. не уходи с текущей работы
2. не создавай юридического лица
3. не заводи корпоративный банковский счёт
4. не снимай помещение
5. не нанимай адвоката
6. не нанимай главбуха
7. не бери кредиты
8. не нанимай сотрудников
9. не получай государственных лицензий и сертификатов
10. ничего не патентуй
11. не рисуй себе логотип
12. не придумывай имя для компании
13. не рекламируйся
14. не покупай офисных расходников
15. не покупай оборудования
16. не ищи партнёра
17. не вступай в торговую палату
18. не рассказывай всем о своём будущем бизнесе
19. не пиши бизнес-план
20. не заводи юридический адрес и телефон для бизнеса

Только попробовав, понимаешь на сколько это все правда...
Группы: [ Жизненное ] [ Работа ]
07:35 12-08-2008
Каптча
Увы, но тест CAPTCHA благополучно скончался. Вначале появилась программа, в которой хомячкам за деньги предлогалось тупо распозновать каптчи с сайтов, а теперь процесс полностью автоматизирован и уже почти не требует вложений. Каптчи с атакуемых сайтов показваются на подконтрольных спамерам порно-сайтах. Хомячки на этих сайтах видят каптчу, разгадывают ее, после чего бот пересылает данные на атакуемый сайт. Траффик у порно-сайтов довольно значительный, так что не удевительно, что даже самые сложные каптчи размалываются в пять секунд.

читать подробнее
Группы: [ Ай-Ти ] [ Работа ]
11:59 01-05-2008
Первомай
Вчера, в честь наступающих праздиков и перезда половины Вильнюсского офиса в новые помещения, на работе устроили мощную корпоративку. Были изничтожены копившиеся в офисном шкафу в течении послдних лет запасы алкоголя, съедена куча пиц и прочей закуски, после чего народ разползся по кабинетам - в одном играли в покер, в другом - в какую-то настольную игру (не помню названия, но играли азартно), ну а гвоздем стал проектор с подключенным к нему XBox - там зажигали в "Guitar Hero" в две гитары сразу. Надо сказать, что в таком формате (на большом экране и с хорошим звуком) эта игра действительно вставляет, гитару вчера подежали в руках почти все - даже бухгалтер и администраторша И, хотя, без практики, никто сразу не выдал результата, наподобие такого, концерт рок-музыки удался =)
23:09 15-04-2008
СУП
Любопытно наблюдать, как компания, состоящия из вполне вменяемых и адекватных людей, каждый из которых поодиночке способен выдавать гениальные идеи, собрав этих людей вместе, начинает конкретно тупить, и рубит совсем неплохой проект. А как хорошо все начиналось: покупка века, план "сто дней", обещания сделать всех счастливыми, и чтобы никто обиженным не ушел. И кончилось тупой отменой бесплатных аккаутов, бойкотом и уходами авторов к конкурентам. Да, конечно, ушло не так уж много, остальные пошумели и успокоились: всетаки друзья, сообщества, привычки - трудно это все изменить вот так сразу. Но ниша - вот она, предложи сторонний сервис, с некими гарантиями, с простой миграцией, с кроспостингом в ЖЖ, и соберешь неплохой урожай.

Читать мораль...
Группы: [ Работа ]
18:53 15-04-2008
Ужоснах!
А-А-А-А-А!!!!! "SELECT COUNT(*) FROM forum_posts GROUP BY author_id" На табилцу с миллионом записей!!! Убью!!!111
Группы: [ Работа ] [ Софт ]
18:22 11-04-2008
Вселенский заговор
Теги - это самая страшная тайна WEB2.0. И тайна эта в том, что никаких тегов не существует. Но челвека, который решится сказать это вслух, ждут большие неприя
Группы: [ Ай-Ти ] [ Работа ] [ Софт ]
09:16 10-04-2008
Кандидат
Вчера приходил тестрироваться новый админ. Внешний вид: классический бард - косуха, конский хвост, борода, не хватает только гитары. Но, судя по рекомендациям - спец не из последних, так что вопрос стоял не о том, подходит ли он нам, а скорее о том, подходим ли мы ему. Увы, в Литовских IT это все чаще становится обычной ситуацией - толковых работников тут маловато. Впору импортировать из Белорусии - по слухам, там еще осталась пара человек :)
Группы: [ Работа ]
17:54 04-04-2008
Ламеры
Только что, подходит наш маркетолог и просит меня помочь открыть вордовский файл. "Неужели!", подумал я, и оказался прав. Сотрудница (счастливая обладательница нового Microsoft Office 2007, которую уже просили не присылать файлов с расширением .docx) прислала ему документ, тупо поменяв расширение на .doc!

Всетаки, Микрософт - гениален
Группы: [ Работа ] [ Софт ]
23:47 02-04-2008
Синдром лешего
Когда-то, когда я только начинал осваивать компьютеры, моим первым ПК была литовская разновидность "Синклера", представлявшая собой подключенную к магнитофону и телевизору клавиатуру. Телевизор использовался вместо монитора, а магнитофон - в качестве дисковода, программы подгружались с кассет. И магнитофоны и кассеты качеством не отличались, по этому ситуация, когда загрузка неожиданно прерывалась после двадцать минут ожидания, увы была нередка. Сидишь, слушаешь шум, смотришь на бегающие по экрану полосы, и вдруг бац - начинай сначала. По этому, когда неожиданно появился новый формат загрузчика "ЛЕШИЙ", радости нашей небыло предела. Новый загрузчик, не только позволял при обрыве загрузки просто чуть-чуть отмотать обратно и продолжить с того-же места, но и грузился в полтора-два раза быстрее.

Увы, эта радость была недолгой
Группы: [ Ай-Ти ] [ Работа ]
12:40 28-03-2008
Офисное
Всетаки у нас веселый офис. На магнитных досках постоянно что-то рисуют - это понятно. А вот сейчас пошел за кофе, и заметил, что кто-то уже дорвался до PHP-шного слоненка и Лебедевских матрешек, которые до этого тихо стояли на шкафу в "приемной". Ничего святого у людей ;)
Группы: [ Работа ] [ Фотки ]
08:50 28-03-2008
Глаголом жечь
Повесил на работе купленный в лавке Лебедева плакат. Что любопытно, простую надпись "У нас не матерятся" пришлось переводить почти всем литовцам, а вот слово в знаке узнали все сразу. После чего, каждый второй доставал мобилу и фоткал стенку.
Группы: [ Работа ]
15:14 27-03-2008
Самоучитель
Неплохой туториал по XSL: http://www.zvon.org/xxl/XSLTutorial/ - запишу тут, чтобы не потерять.
Группы: [ Мемориз ] [ Работа ]
20:01 05-03-2008
Order by rand()
Очень неплохая мысль по поводу оптимизации запросов SQL. Обычно, когда хотят взять одну или несколько случайных записей из таблицы, использцуют конструкцию "select * from table order by rand() limit x", которая и возвращает x случайных записей. Однако, на больших таблицах, этот запрос заметно подтормаживает. И это не удивительно, ведь чтобы выполнить подобный запрос, СУБД должен сначала раздать случайные значения каждой записи в таблице, а потом еще и отсортировать таблицу по этим значениям, и все это для выбора одной-двух строчек. Собственно, если задуматься над этим вопросом, то ответ будет очевиден: вычислять rand() должен код программы. Для этого придется сделать лишний запрос "select cout(id) from table", но этот запрос выполняется очень быстро даже на больших таблицах. А потом останется просто взять случайное число y в диапазоне от 1 до x и достать нужную запись при помощи простого запроса "select * from table limit by y, 1". Немного сложнее это будет для нескольких записей (как минимум, придется контролировать уникальность выбраных ID), но даже такая конструкция для больших таблиц будет работать быстрее, чем "order by rand()", так что мысль дельная. Worth trying.
Группы: [ Работа ] [ Софт ]
Закрыть