Grammarly, ищем Natural Language Processing Engineer

С тех пор, как мы переехали в Киев, я работаю в компании Grammarly. Это частная продуктовая компания с офисами в Киеве и Сан-Франциско. Продукты компании нацелены на улучшение англоязычных текстов (spelling-grammar-plagiarism checker, English Q&A community, English Handbook).

Читать дальше →

Сложности обучения

Учиться тяжело

Хорошее обучение - это выход за границы возможного, делание того, чего не делал раньше. Можно каждый день бегать 3 километра в комфортном режиме и не особо прогрессировать (иногда это нормально, если цель - расслабление после дневной “вахты” за компьютером), а можно каждый раз стараться пробежать немного быстрее и это непросто - не хватает дыхания, силы ног, техники. Можно писать день за днем одни и те же сайты, что и год-два назад, а можно “влезать” в новые проекты, для которых приходится читать кучу книг, изучать новые подходы, новые разделы науки. Результаты и сроки малопредсказуемы, неопределенность - высокая. Можно читать статьи на Хабре и Hacker News (и считать что ты учишься), а можно - прорабатывать упущенные раньше фундаментальные области (например, разделы математики и computer science), читать код ведущих программистов и решать сложные задачи.

Читать дальше →

Продуктивно ли считать себя самым умным и как решать действительно сложные задачи

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

Читать дальше →

Про стэнфордские онлайн-классы

Этой осенью я обычно просыпаюсь в 5-6 часов утра, чтобы учиться в ai-class.com и ml-class.org. Позади 6 из 10-ти учебных недель. Уже десяток раз я восклицал “Ну почему же я не начал так учиться год назад?!”. Эти курсы изменили меня - открыли новые интересные предметные области и помогли вспомнить как сильно я люблю математику. Я изменил отношение к университетскому образованию и расширил набор принципов эффективного самообразования, которые собираю на протяжении семи лет.

Читать дальше →

Programmers at work (1989)

С большим удовольствием читаю книгу “Programmers at work”, выпущенную в 1989 году. Думаю, что она понравится всем тем, кому понравилась книга “Coders at work” (также известная как “Кодеры за работой”). Ниже - некоторые цитаты, которые я уже подчеркнул (а я еще в самом начале книги).

Читать дальше →

Django Dash 2011, мои впечатления

Понедельничной ночью 1-го августа, примерно в 03:30 пять человек потихоньку укладывали ноутбуки в свои рюкзаки и выходили из офиса чтобы разъехаться по домам. Кто-то на такси, кто-то на своей машине. Еще трое ушли несколькими часами раньше. Закончились двое суток напряженного труда над созданием проектов в рамках конкурса Django Dash 2011.

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

Напишу несколько важных мыслей, которые я сформулировал на основе полученного в конкурсе опыта.

Читать дальше →

Лев Валкин про Силиконовую долину

Вчера Лев рассказывал про то, что отличает Силиконовую долину от России-Украины и что нам делать чтобы появилась среда, благоприятная для стартапов.

Горизонтальная коммуникация

Первым большим сдерживающим фактором на постсоветском пространстве является остутствие горизонтальной коммункации.

Вертикальная коммуникация: разработчик - менеджер - сейлз - клиент.

Читать дальше →

Лев Валкин про ФП и Erlang

Вчера ходили с @vseloved и @matveym на выступление Льва Валкина про функциональное программирование в целом и Erlang в частности. Кратко запишу основные тезисы, которые мне очень актуальны.

Новый набор инженерных принципов, непривычных для императивных языков

Функциональные языки дают возможность поработать с другими способами построения программных систем. Эти новые способы позволяют писать лучше даже на императивных языках. Это очень важный для меня тезис. Я немного поработал с Эрлангом, когда мы работали над Рисоваськой, теперь по совету Льва я изучу Haskell.

Читать дальше →

Стоит ли мне работать руководителем?

Меня давно интересует вопрос “Стоит ли мне работать руководителем?”. В прошлую пятницу я был в Москве и разговаривал там с моим одноклассником Костей Кузнецовым. Много лет назад он был для меня проводником в мир компьютеров. Костя сам является отличным программистом, а сейчас руководит командой из 20 человек и скоро станет руководителем собственной компании. Ему это нравится. Есть хорошие руководители-предприниматели в Grammarly, кто-то с программистским опытом, кто-то без. Им тоже нравится то, что они делают. А вчера я прочитал комментарий Алексея Колупаевахороший программист и хороший менеджер - это совершенно разные люди”, который стал последней каплей в этом вопросе.

Читать дальше →

Неопределенность и страх

Вчера начал работать над новым большим проектом. В нем понятно что нужно получить на выходе, но совершенно не понятно как это сделать. Очень много нетехнических задач, исследований, экспериментов. И я чувствую страх. Страх, что “вот, блин, непонятно что-именно программировать, нужно самому все придумывать”.

Но у меня есть опыт таких проектов, и я помню, что они становятся очень интересными, когда появляется драйв и личная заинтересованность в том, что ты создаешь. Неинтересно устранять неопределенность в той области, которая тебя не интересует. Потому что в этом случае эта неопределенность становится безразличностью. А неопределенность в любимой области называется свободой!

А еще заинтересованность и горящие глаза обычно помогают находить единомышленников.

Django Dash 9-10 июля

Django Dash - международный конкурс, в котором компактные спецназ-команды за 48 часов создают полноценный проект. Правила простые:

Читать дальше →

Интерактивная консоль для pyuno + django

Недавно я писал про то, как работать с документами LibreOffice из питона. Я сейчас работаю над исследовательским проектом, в котором django application обращается к LibreOffice через pyuno. В этом проекте натолкнулся на неприятную ошибку - ./manage.py shell при выполнении любых связанных с pyuno методов выдает сообщение “SystemError: pyuno runtime is not initialized, (the pyuno.bootstrap needs to be called before using any uno classes)”. При этом если запустить python и сделать в нем import uno, а потом вызывать те же методы, что и в ./manage.py shell, то все работает отлично, за исключением того, что не получается обращаться к своим моделям (потому что не инициализировано окружение django).

Читать дальше →

Рабочий процесс как поход

Вчера в разговоре с коллегой пришел образ гармоничного движения к большой цели. Утром каждого дня нужно находить/создавать интересный маршрут на сегодня. Такой чтобы:

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

Особенно это касается таких тонких целей как “повышение энергии/мотивации (passion)”, “повышение производительности”.

Использование Markdown

В проекте Grammarly Handbook, про который я писал вчера, грамматические карточки из формата MS Word нужно было конвертировать в какой-то внутренний формат, чтобы в этом формате было легко добавлять новые карточки и редактировать существующие. Кроме того, нужно было ограничить функционал редактора карточек, чтобы не было чрезмерного разнообразия форматирования и, как говорит наш дизайнер, “верстка была семантической”.

Читать дальше →

OpenOffice + Python, pабота с файлами MS Word

Пару недель назад для проекта Grammarly Handbook понадобилось импортировать много форматированного текста из документов MS Word. Текст находился в 40 файлах размером от одной до двадцати страниц. Первые несколько страниц я перенес вручную и несколько утомился - механическая работа меня не очень радует. Начал искать возможность читать вордовские документы из Питона.

У меня был очень позитивный опыт с библиотеками xlrd, xlwt. Первая читает документы Excel, а вторая - записывает. Но подобных библиотек для документов *.doc я не нашел. Зато нашел возможность обращаться из Python к OpenOffice. Эту возможность я успешно использовал, успешно импортировал весь грамматический материал и даже наткнулся на интересную идею для нашего основного продукта - инструмента проверки грамматики Grammarly.

Читать дальше →

В Python 3.x работает старый способ форматирования строк

А старый добрый способ форматирования строк с помощью % в Python 3000 всё-таки оставили!

~ > workon python3
(python3)~ > ipython    

Python 3.2 (r32:88445, Feb 28 2011, 11:06:14) 

In [1]: 'Good old %s still works in Python 3!' % 'string formatting'
Out[1]: 'Good old string formatting still works in Python 3!'

По наводке www.boredomandlaziness.org

Python - на 4-м месте

Python - самый популярный язык программирования после Java, C, C++ (именно в таком порядке).

таблица

график

Источник - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

if request.method == 'GET'

Наконец-то я понял, почему пишут так

def item_view(request, id):
    item = get_object_or_404(Item, id=id)
    if request.method == 'POST':
        form = ItemForm(request.POST, instance=answer)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(item.get_absolute_url())
    else:
        form = ItemForm(instance=item)
    return render('item.html', {'item': item, 'form': form})

и не пишут вот так

def item_view(request, id):
    item = get_object_or_404(Item, id=id)
    if request.method == 'GET':
        form = ItemForm(instance=item)
    elif request.method == 'POST':
        form = ItemForm(request.POST, instance=answer)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(item.get_absolute_url())            
    return render('item.html', {'item': item, 'form': form})

Второй вариант хоть и более выразительный, но не учитывает такие http methods как HEAD. А HEAD частенько шлются всякими программами и фейсбуками про постинге ссылки (чтобы проверить, что ссылка действительно рабочая).

Блоги программистов

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

Не выражают свои эмоции, не самовыражаются, не зарабатывают, не продвигают, не продают. А продолжают традицию обмена новыми идеями, полученным опытом. Раньше ученые писали друг другу бумажные письма, а теперь удобно писать одно электронное “письмо” всем, кто подписан на Atom/RSS.

По крайней мере это справедливо для блогов, которые читаю я.

Upd. “Обсуждения через блоги” Ивана Сагалаева

2010 - итоги года

Блог

Читать дальше →

Страница: 2 из 5