Category: it

Category was added automatically. Read all entries about "it".

О профессиональном росте

Я часто задумываюсь о том, как понять, что ты вырос в профессиональном плане. Раньше это было легко - вот ты пишешь HelloWorld и проект на тысячу строк код для тебя является поводом для гордости, а сейчас не обращая внимания на проекты с десятками и сотнями тысяч строк кода. Но вот с какого-то определенного момента перестаешь понимать растешь ты или нет. Хотя может это и есть показатель того, что ты перестал расти? Помню когда-то мне сказали, что код студента от кода опытного программиста отличается только количеством проверок. Может это тоже показатель. Я уже 2 года работаю в своей конторе и недавно задумался - расту ли я. Задачи, которые я решаю, не требуют сидения месяцами за книгами с изучением предметной области или чего-то подобного. Берешь задачу и решаешь ее. Погугли пару функци, обнаружил, что они есть, использовал. Да, определенно есть ощущение, что вырос, потому что освоил некоторые техники, которых раньше не знал, стал писать лучше код, больше частей буста попробовал на практике, изучил всякие новые штуки и поработал с ними, но эти вещи слабо связаны с самим программированием, повысил свои скилы в дебагинге и всяком таком. Но такого роста, как от HelloWorld к первому большому проекту уже нет. И складывается ощущение, что немного топчешься на месте.
Во многих конторах есть формализованные ревью и схожие с ними вещи, позволяющие понять тебе как ты вырос. У нас такого нет, так что я не смог ничего придумать лучше, чем прошвырнуться по всяким конторкам и конторам на собесы, повспоминать всякие глупые вопросы, а-ля исключения в конструкторе, посмотреть, чем сейчас вообще занимаются в Минске плюсовики и что им предлагают.
На данном этапе все выглядит не очень весело - практически одна ембейдщина, да еще и упоротая - как в том известном рассказе о потерянном бите. А мне хочется писать на плюсах и желательно на новых, ибо старые тулчейны - это боль и слезы. Хорошо, что у меня есть свои проекты, чтобы хотя бы в них практиковаться в новых стандартах.
Еще и на работе начинаются какие-то стремные телодвижения, которые делают меня грустным и заставляют задумываться о том, что наверное стоит подготовиться к собеседованиям чутка основательнее.

Собеседования

А вот давайте я Вам расскажу за собеседования.
Через 2 месяца у меня заканчивается контракт и я ухожу в запас. В связи с этим я начал искать себе работку по профилю: программистом на богоизбранных плюсах. В принципе не настолько востребованная технология сейчас, как, например, жава или пхп, но предложения все равно есть в Минске. Хоть и не так много, как в России, например.
Задолбав вопросами всех и вся составил резюме и закинул на rabota.tut.by. Плюс меня уже несколько лет ждали несколько эйчаров с предложениями сотрудничества. Но там в итоге не сложилось.
Итак, перейдем к собеседованиям. Их было у меня 4.

1. ISSoft

Аутсорс и этим все сказано. Пошел туда, так как нужен был хотя бы какой-то опыт собеседований. Хотя знакомый нахваливал их контору очень сильно, я все равно не горел желанием работать в аутсорсе. Стандартное собеседование: эйчар, пм, программист на плюсах. Девочка эйчар все рассказала. Позадавала стандартные вопросы. ПМ поспрашивал по проектам моим. Спросили про зарплатные ожидания. Пытался склонить меня к содомии вакансии C# программиста. Когда пришел плюсовик ему сказали погонять меня на 8 из 10. Думаю, что попросил практически потолок з/п. Вопросы по плюсам были очень простые. Стандарные исключения в к-торах и д-торах. Зачем приватные виртуальные функции. Просто ну очень простые вопросы. В принципе все. Сказали, что перезвонят.

2. Intetics

Тоже аутсорс, но там проект был упоротый: пилить проект на языке, который придумал автор этого проекта. Что-то фунциональное в haskell-style. Зато не было никаких собеседований: 2 этапа, один от intetics и второй от заказчика. Тестовые задания. От интетикса была задачка из Euler Project, а именно Largest polindrome product. Посидел, сделал. Подумал над оптимизациями. Отправил. 1ый этап прошел успешно. Второй этап должен был быть у них в офисе и занимал по времени весь рабочий день, 8 ЧАСОВ, КАРЛ, 8 ЧАСОВ! В итоге я отказался.

3. Yandex

Собеседование в Я состоит из двух этапов: скайп и очное, если прошел скайп. По скайпу позадавали нормальные вопросы по stl, по плюсам. Задачку про монетку и 3 результата. Тоже прошел этот этап успешно. Пригласили на очное. 4 - 5 часов на очное. 4 секции: математика, алгоритмы, плюсы, тестовое задание. В Я я шел, когда уже не только имел оффер, но и принял его. Так что особо не готовился.
Математика
Тервер, мат статистика, и все вот это. Я нихрена не помнил, так как последний раз с подобным сталкивался лет 8 назад, а повторять мне было лень. Задали опять задачку про монетку, но теперь уже 7 значений надо было получить и всякие вероятности и мат ожидания вокруг этой ситуации. Скажу сразу, что завалил я эту секцию почти полностью.
Алгоритмы
Тут было уже интереснее. Вопросы были не столько по классическим алгоритмама, сколько по предложению решению разных проблем. Был стандартный вопрос про определение зацикленности односвязного списка. Потом были вопросы про поиск точки слияния двух односвязных списков, вероятности событий в зависимости от веса. Не думаю, что завалил эту секцию В принципе был не идеален, но не ответил только на последний вопрос.
С++
Тут сначала была теория, потом куски кода, которые надо было скомпилировать в уме и выдать ответ. Все как обычно. Считаю, что тоже отстрелялся достойно. Были вещи, которые не совсем знал или в которых путался, но их было очень мало.

Четвертый этап я не застал, так как продолжать собеседование со мной отказались. Думаю, что все из-за матана, так как на ту специальность он был наиболее важен, кмк.
Порадовал эйчар. Девочка молодец. Много всего рассказала. Рассказывала интересно. Если бы еще некоторые собеседующие не торчали в ноутах во время интервью - было бы вообще классно. В принципе мне понравилось собеседование. Вопросы были грамотные, интересные и общее впечатление у меня положительное.

4. TCP-Soft

А вот и наш финалист. В принципе из всех вариантов было 2 конторы, которые мне были интереснее всего: tcp-soft и logic now. У первых по всем отзывам была отличная плюсовая команда, хороший код и отличный начальник, а у вторых был проект на С++/Qt. Вторые меня прокинули и без собеседования, так что в глубине души я хотел попасть в tcp-soft.
Эйчар у них просто великолепен. Мало того, что я чуть не влюбился с первого взгляда, так еще и очень профессионально все рассказала, пояснила, ответила на вопросы. Вообще, чувствуется разница в уровне эйчара в аутсорсе и продуктовой конторе (хотя она как бы аутсорс, но аутсорс одного проекта, так что считаю это удаленным центром разработки, лол).
Пришел лиддев и начал задавать вопросы не про какие-то абстрактые вещи, а более реальные задачи: как бы реализовал то и то, а как вот это. Стоит тут многопоточность заюзать или нет. Вот это все. Такие вещи куда интереснее сухих алгоритмов. Потом дали тестик на плюсы и паттерны. НИчего сложного, но я что-то невнимателен был и зафейлил один вопро, но сам же исправил, а один зафейлил так жестко. Еще немного поговорили, рассказали мне про проект и я понял, что большинство вопросов из первой части были по архитектуре их приложения: как бы я реализовал ту или иную часть их ПО. И я во многих вещах ответил или правильно, или был на правильном пути. В общем собеседование мне очень понравилось. В принципе, больше всех остальных, хотя у Яндекса тоже годное было.

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

Вот как-то так.

Статическая сборка nmap

Понадобилось мне тут собрать статически nmap. Дело оказалось совсем нетривиальным.
Для начала нам необходимо решить проблему линковки с libc. Я ее решил просто - собрал статический glibc.
Конфигурил я его с такими флагам:

--prefix=/path/to/glibc/build/dir --disable-shared --enable-static-nss --disable-build-nscd --without-bugurl --without-gd

glibc статически собирается без всяких сложностей. Теперь можно перейти к сборке nmap.

Важно помнить, что при статический сборке результирующий бинарник не должен дергать вызов dlopen. Я прогрепал сорсы nmap и нашел вызов этой функции только в liblua. Поэтому первым нашим флагом будет --without-liblua. Так же отключим все дополнительные утилиты, типа ndiff и ncat. В итоге получим такую строку для configure:

./configure --without-ncat --without-nmap-update --without-nping --without-zenmap --without-ndiff --without-liblua --disable-nls

Но это еще не все. Тут мы только отключили ненужный функционал, а нам еще надо указать тип сборки и слинковать все со статической glibc.
Добавляем CFLAGS и CXXFLAGS. Они будут одинаковы, поэтому я приведу только CFLAGS:

CFLAGS="-static-libgcc -L. -L/path/to/glibc/build/dir/lib -lc"ц

Не стоит забывать про флаг -static-libgcc - он отвязывает нас от libstdc++ (отсюда)

На последок нам осталось прописать правильные параметры линковки LDFLAGS:

LDFLAGS="-static -static-libgcc -L. -L/path/to/glibc/build/dir/lib -lc -Wl,--no-export-dynamic"

Вы конечно же видите тут избыточность. Параметры повторяются в CFLAGS и LDFLAGS - но так оно работает, а разбираться подробнее где и что можно убрать мне лень.

Но это еще не все. Главной проблемой в сборке nmap является libpcap, которые встроен в nmap. Эта зараза никак не хочет собираться статически, когда все остальные собирается так. Поэтому тут я просто ударил в лоб:
после конфигурации nmap я переконфигурировал libpcap со следующими флагами:
./configure LDFLAGS="-static -L. -L/path/to/glibc/build/dir/lib -lc -Wl,--no-export-dynamic"CFLAGS="-static-libgcc -L. -L/path/to/glibc/build/dir/lib -lc"CXXFLAGS="-static-libgcc -L. -L/path/to/glibc/build/dir/lib -lc" --without-gcc

Ключевой параметр тут - -Wl,--no-export-dynamic - его необходимо выставить обязательно, иначе мы получим ошибку сборки а-ля:
/usr/bin/ld: dynamic STT_GNU_IFUNC symbol '...' with pointer equality in '...' can not be used when making an executable; recompile with -fPIE and relink with -pie"
Далее make и затем make в директории nmap. 
Затем его можно strip'нуть и upx'нуть, что бы не занимал столько места. Для работы nmap'а Вам так же потребуются фалйы, из исходников nmap, а именно nmap-os-db (для опеределения оси), и несколько других текстовых файлов (nmap-service, nmap-rpc)

Теперь у Вас есть рабочий статически собранный nmap =)
Posted via LeechCraft Blogique.
  • Current Music
    "Сереге шили дело" by Жека
  • Tags
    ,

Программирование в Windows: Создание VNC подключения cредствами RAS API.

Я уже давно хотел написать парочку статей о RasAPI, но все как-то не находил времени или было лень это сделать. Сегодня я все таки решился на это. Это будет первая часть, в которой я приведу примеры кода и некоторые особенности создания и управления VNC подключениями в Windows.
Для начала давайте разберемся: что вообще такое RasAPI и с чем его едят.
Collapse )
Posted via LeechCraft Blogique.

Настройка Qt Creator для работы с Meego/Harmattan


Я уже 2 года почти пользуюсь N900 и так ни разу ничего для нее не написал, хотя всегда хотел. На днях я решил, что хватит откладывать на будущее, а просто надо брать и писать.
И тут очень удачно я начал пользоваться goodreads.com и мне было бы очень удобно иметь для этого приложения для телефона. Вот на него и пал мой выбор. За одно еще и qml решил на  этом проекте осилить. Вы можете спросить зачем создавать приложение под никому не нужный телефон? Но мне пофигу. Оно нужно мне. А значит уже нужно.

В этом посте я опишу как связать QtCreator с N900, а так же покажу как выглядит симулятор в нем (в QtCreator).


Collapse )

Плохо быть программистом: Goodreads vs LiveLib

Сидел убивал время, выбирая какой из двух сервисов юзать для отметки прочитанного: livelib.ru или goodreads.com. Первый - русский, что удобно, так как читаю на русском. Второй - буржуйский, что не удобно по причине чтения на русском. Приходится добавлять овердохуя книг на русском. Добавлять лень, а нужно. А livelib русский с соответствующей проблемой - много школоты и прочего. В итоге только сейчас решил однозначно, что буду юзать. Это будет goodreads, потому что у него API есть октрытый, в отличие от и, я просто, в итоге, (наверное, когда-нибудь, может быть) запилю себе приложения под телефон и не буду юзать вебморду (это моя мечта - не юзать браузер вообще, максимум для поиска информации). Так что останусь на goodreads. Кто есть: постите в комментах свои профили - зафренжу.

Мой профиль: Я на goodreads.com

LeechCraft: сборка под Windows с MinGW. Попытка №2

   Как-то ранее я уже пытался собрать личкрфаты с мингв. Но, столкнувшись с непреодолимыми трудностями, бросил это дело. Теперь пришло время для второй попытки.
  В этот раз я решил подойди к делу более ответственно.
  В этом посте я опишу процесс сборки окружения для личкрафтов. Начиная от компиляторы и заканчивая всеми необходимыми библиотеками, которые удалось собрать под windows. Вся сборка происходит на OС Windows 7x64.
  Для удобства описания, структуру каталогов я сохраню аналогичную моей. Все необходимое для сборки личкрафтов будет находится  в C:\DEVLIBS.
Так же не забудьте установить CMake.

Collapse )

Сборка Lechcraft под Windows с помощью MinGW. Part 1.

  Собственно с выходом последнего 11 стандарта C++ появилась проблема сборки билдов из мастер-ветки личкрафтов под windows, потому что MSVC не поддерживает последний стандарт в том объеме, в котором он используется в личкрафтах. Альтернативным вариантом является использование порта GCC под Windows - MInGW. Это мы и попробуем совершить.

1. Подготовка среды сборки.
Для сборки нам потребуется некоторое число библиотек и программ. Качам следующие компоненты:
  1. MInGW ;
  2. Git for Windows ;
  3. Boost 1.48 ;
  4. Qt 4.8.0 for MinGW ;
  5. OpenSSL-1.0.0g;
  6. CMake-2.8 ;
  7. NSIS-2.46 ;
  8. Speex-1.2 ;
  9. QJson-0.7.1 ;
  10. Libtorrent-Rasterbar-0.15.9;
  11. Qwt-0.6.1
  12. QCA2
Этот почти все необходимое для сборки личкрафтов.
  Collapse )

std::transform

В этом посте я расскажу об использовании std::transform c контейнерами  Qt и методом класса в качестве функтора.
Надо было мне тут из списка файлов с именами в виде дат (dd-MM-yyyy) получить список дат из этих имен. Самое простое решение напрашивается следующее
Collapse )

Аналог Mars Notebook

Пришла мне тут в голову идея написать аналог Mars notebook под Linux, потому что там я не нашел достойного аналога. Собственно даже нашел человека, которые не прочь тоже помочь. Вчера с ним даже созвонились и обсудили кое-какие моменты. Думаю в воскресение начнем уже воплощать.