Разработка на коленке

"тут должна быть красивая цитата о программировании"

Eclipse, Linux и wxWidgets from sources

2010-08-24 18:50

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

Установка wxwidgets на ubuntu 9.10 из исходников.

Нужна версия не ниже 2.8.11, так как только начиная с этой версии в виджетах есть необходимый мне функционал для работы с xml.

Ставим сразу из исходников.

  1. Устанавливаем библиотеки, необходимые для компиляции виджетов

    sudo apt-get install libgtk2.0-0 libgtk2.0-0-dbg libgtk2.0-dev
    
  2. Распаковываем архив с виджетами. Далее по пунктам.

    tar xzf wxGTK-2.8.11.tar.gz
    cd wxGTK-2.8.11
    mkdir build-gtk
    cd build-gtk/
    ../configure --with-gtk --enable-unicode
    make
    sudo make install
    sudo ldconfig
    
    cd ../
    
    mkdir build-gtkd
    cd build-gtkd/
    ../configure --with-gtk --enable-unicode --enable-debug --enable-mem_tracing --enable-debug_cntxt
    make
    sudo make install
    sudo ldconfig
    
  3. Устанавливаем wxPropertyGrid

    tar xzf wxpropgrid-1.4.12-src.tar.gz
    cd propgrid/
    mkdir build-release
    cd build-release/
    ../configure --enable-unicode --disable-debug
    make
    sudo make install
    sudo ldconfig
    
    cd ../
    
    mkdir build-debug
    cd build-debug/
    ../configure --enable-unicode --enable-debug
    make
    sudo make install
    sudo ldconfig
    
  4. Для сборки проектов с wxPropertyGrid в линкер нужно добавлять lwxcode_gtk2ud_propgrid-2.8 (отладка) или lwxcode_gtk2u_propgrid-2.8 (релиз)

  5. Нужно сделать симлинки на пути к инклюдам, чтобы эклипс их нормально ресолвил

    cd /usr/include/
    sudo ln -sv /usr/local/include/wx-2.8/wx wx
    cd wx/
    sudo ln -sv /usr/local/include/wx/propgrid propgrid
    

Streaming video и видео-чат

2010-06-28 12:12

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

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

  • RED5 + flash. Поставили, настроили, написали даже своё приложение
    для RED5. Запустили. Не влазим по ресурсам, так как флеш на линуксе жрёт немеряно ресурсов.
  • VLC. Делаем трансляцию потокового видео при помощи VLC, показываем
    собеседника им же. VLC запускаем как веб-сервер, когда приходит время показывать - дёргаем его сервер и передаём ему линк на видео. Снова не влазим по ресурсам, так как VLC при трансляции жрёт кучу памяти (вероятно, что из-за утечек).
  • ffmpeg, ffserver, VLC. Едем дальше :) На этот раз трансляцию делаем
    при помощи ffmpeg + ffserver, а смотрим на собеседника при помощи vlc, который также запускаем как сервер. Из всех форматов более-менее безглючную работу показал RealMedia. Одна проблема - огромная задержка при передачи данных. Т.е. собеседник услышит мои слова на пару секунд позже, чем я их произнёс. Пока что это считаем вариантом для релиза.

В качестве эксперимента начал тесты erlyvideo. По описанию вещь просто замечательная :)

Eclipse, wxWidgets и Linux

2010-06-21 12:25

Где-то пол года назад я подбирал себе среду разработки для С++ в Linux (C++ IDE for Linux developer). Как один из вариантов я выбрал Codelite. Но вчера решил снова попробовать Eclipse. Только на это раз для разработки проектов, в которых используется wxWidgets (в Codelite это не проблема, так как есть шаблоны для таких проектов).

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

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

Мануал прост до безобразия, нужно просто выставить флаги в трёх местах (кому не нужен чистый С, то и в двух)

Цитата мануала, чтобы не искать в следующий раз.

Eclipse CDT >3.0.0 and <4.0.0
The "All Options" Textfield is no longer editable in Eclipse CDT 3.0.0 instead you have to follow these instructions:
Create a new, managed C++ project.
Add a new file to the project (i.e. "main.cpp" ), and go to project properties.
Select "C/C++ Build" and then "Settings".
Select "GCC C++ Compiler" and the underlying "Miscellaneous" tab. Append "`wx-config --cxxflags`" to the "Other flags" edit field. Don't forget the `backquotes`!
Select "GCC C++ Linker" and again the underlying "Miscellaneous" tab. Append "`wx-config --libs`" to the "Linker flags" edit field. Don't forget the `backquotes`!
Optional: Select "GCC C Compiler" and the underlying "Miscellaneous" tab. Append "`wx-config --cflags`" to the "Other flags" edit field. You are not likely to need this
You may have to add /usr/local/lib to your LD_LIBRARY_PATH in the C/C++ Build->Environment tab (but you shouldn't since wx-config's cxxflags do that for you)

Изучаем Python

2010-04-29 18:17

Learning Python

В этой книге подробно и методично описывается язык Python. Описаны история языка, языковые конструкции, модули, использование библиотек, тестирование, документирование и многое другое.

"Изучаем Python" стала для меня книгой, которая восполнила многие пробелы в моих знаниях. В работе я уже давно применяю Python и использую его для задач разного типа, но вот на методичное изучение языка от А до Я как-то не доходили руки. Теперь же, когда я стал активно интересоваться Pylons, мне понадобились более полные знания по этому языку, чтобы иметь возможность не только использовать что-то готовое, но и разрабатывать свои библиотеки. Средством для пополнения знаний стала именно эта книга.

После прочтения возникло желание попрактиковаться в написании One-liner program на Python.

Сроки, планирование и точные оценки

2010-03-24 15:41

В работе программиста есть такая штука как сроки разработки, которые нужно определить заранее, и которые нужно выдерживать. Проблема планирования сроков есть у всех. У кого-то получается вложиться в срок, у кого-то нет. Часто планы меняются, но это не отменяет процесса планирования. И от программиста всегда хотят услышать заветные цифры, когда ж он сделает работу. Хотят все: заказчики, менеджеры, технические директора, в общем - начальство.

Выдать правдивые сроки, которые можно выдержать - самое сложное, потому что каждый проект - это что-то новое. Либо новые технологии, либо новая предметная область, либо алгоритмы, либо... Да мало ли этих "либо".

Для того, чтобы получить адекватную оценку работы я стал использовать разбиение на очень подробные задачи, вплоть до вызова функций.

Например, нужно написать редактор карт помещений на Flash для какой-нибудь системы наблюдения. Тогда я сажусь и пишу:

  • Шаблон приложения. 2 часа.
  • Загрузка картинок с сервера. 4 часа.
  • Загрузка данных о наблюдаемых объектах. 3 часа.
  • Создание картинок для наблюдаемых объектов. 2 часа на каждую разновидность. 5 разновидностей. Итого 10 часов.
  • Интеграция с HTML. 4 часа.
  • JavaScript-интерфейс для вызовы функция A, B и C. 6 часов, по два на каждый метод.
  • Ну и так далее.
  • ...
  • Анимация объектов. НЕТ ОЦЕНКИ. Нужны исследования. 4 часа.

Преимущества такого подхода:

  • очень мала вероятность обмануть себя самого и поставить маленький срок, которого не хватит;
  • у руководства нет манёвра для сокращения сроков, потому что расписана каждая задача, даже исследования неизвестных частей;
  • если сроки всё же сократят без объективных причин, а просто потому что так захотелось, то это уже не будет проблемой разработчика
  • такой план - более подходящий плацдарм для обсуждения проекта, чем "я сделаю всё за месяц", так как "всё" понятие расплывчатое;
  • такая подробная подготовка покажет и руководству и заказчику, что вы вникаете в работу и знаете, с какой стороны к ней подступиться.

Я несколько раз делал следующую штуку. Берусь за новую задачу. Делаю оценку путём прикидывания и медитирования (как делают многие программисты), причём оценку пессимистичную, и пишу необходимое время на листок бумаги. Потом оцениваю всё, расписывая каждую микрозадачу или микроисследование (не всё же можно точно предсказать) и пишу этот срок на листок бумаги. Второй срок всегда больше, даже если вторые оценки оптимистичные. При этом, в первом подходе всегда есть соблазн сократить срок, поддавшись оптимизму, а во втором случае, сокращать некуда, так как всё подробно расписано.