← All posts tagged программирование

PoZitron
программирование Git Пытаюсь автоматизировать "скрытие" устаревших веток в git.
Когда я весь в работе, то создаю много временных веток которые потом на всякий случай не удаляю, а переименовываю в old/имя_ветки. То, что она "old" не означает что через месяц или год мне не захочется посмотреть какую-нибудь светлую идею которая не попала в основную ветку. Поэтому ветки копятся и непонятно куда их девать.
О "скрытии" веток подсмотрел идею здесь: stackoverflow.com
Написал такой скрипт:
git branch | grep old/ | sed 's/^*//' | awk -v date=$(date +%y-%m-%d) '{print "create refs/archive/" date "/" $1, $1}' | git update-ref —stdin
который ищет ветки содержащие "old/" и создаёт ссылки на них в refs/archive/<дата>/имя_ветки.
Затем оригинальные ветки "old/" удаляю так:
git branch | grep old/ | sed 's/^*//' | xargs -n 1 git branch -D

"Дата" в первой команде — тупой способ обойти проблему с одинаковыми названиями веток.

После этого "архивные" ветки по-идее нигде не отображаются, но на них по-прежнему можно перейти с помощью
git checkout refs/archive/<дата>/имя_ветки
PoZitron
программирование boost С++ Вот за что я люблю шаблоны, так это за
error: no match for 'operator=' in '((TimeBlock*)this)->TimeBlock::sec = boost::chrono::operator-(const boost::chrono::time_point<Clock, Duration1>&, const boost::chrono::time_point<Clock, Duration2>&) [with Clock = boost::chrono::steady_clock; Duration1 = boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >; Duration2 = boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >; typename boost::common_type<Duration1, Duration2>::type = boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >](((const boost::chrono::time_point<boost::chrono::steady_clock>)(&((TimeBlock*)this)->TimeBlock::prestart)))'

Это же очевидно как решать!
candidate is:
In file included from /usr/include/boost/chrono/chrono.hpp:11:0,
from /usr/include/boost/chrono/include.hpp:15,
from /usr/include/boost/chrono.hpp:17
/usr/include/boost/chrono/duration.hpp:453:19: note: boost::chrono::duration<Rep, Period>& boost::chrono::duration<Rep, Period>::operator=(const boost::chrono::duration<Rep, Period>&) [with Rep = long long int; Period = boost::ratio<1ll, 1000ll>; boost::chrono::duration<Rep, Period> = boost::chrono::duration<long long int, boost::ratio<1ll, 1000ll> >]
/usr/include/boost/chrono/duration.hpp:453:19: note: no known conversion for argument 1 from 'boost::common_type<boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >, boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >, void>::type {aka boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >}' to 'const boost::chrono::duration<long long int, boost::ratio<1ll, 1000ll> >&'
PoZitron
программирование Для построения графиков активно пользуюсь удобной программой SciDAVis. Однако в ней есть множество досадных багов. Один из них — нельзя открыть большой сохранённый проект. Залез в код, нашёл баг, исправил.
Пока занимался отладкой, почитал остальной код. С одной стороны, написано красиво и очень понятно. С другой — можно эту красоту выкладывать на говнокод.ру :)
Я не совсем понимаю почему опытные программисты допускают такие детские ошибки. Почему опытные? Очень уж ровно написан код. Почему детские? Очень уж всё втупую написано, жутко ненадёжно и медленно.
Например они заполняют vector последовательно читая данные из файла. При этом после каждой прочитанной ячейки, делают resize вектора О_о Что мешает сделать вектор нужного размера?? Количество ячеек известно!
Самая частая ошибка разработчиков — пихать всё в QString! Собственно, в этом и был баг. При открытии большого проекта, последовательно считывались строки, в которых подряд были записаны данные. Возникала ситуация, когда сотни мегабайт данных грузились в одну переменную типа QString. Естественно память от этого разрывало на части!
А чтобы распарсить файл, они зачем-то, блоками по 1024 байта, копируют его во временный файл, а потом уже парсят. Как будто про seek не слышали, хотя и пользуются им. Не понимаю.
Кстати если временный файл создать невозможно, они запихивают всё в QString! facepalm.tar.gz
Я уже молчу о том, что для хранения численных данных они используют обычный XML, что ЖУТКО избыточно. Поэтому если импортировать файл в 10 мб и сохранить, проект получится размером 100 мб.

Впрочем, хороший полигон для патчинга, с удовольствием поправлю всё. Хороший тренажёр для программиста.
PoZitron
программирование Qt Qt 5 на дворе, а qmake/QtCreator не умеет компилировать в несколько потоков! Добавил -j3 в параметры make на компьютере с двухядерным процессором — скорость компиляции возрасла в 1,6 раза.
Добавил -j5 на нетбуке — прирост в 2,2 раза.
Мелочь, а неприятно.
PoZitron
программирование Сделать переменную индекса буфера COM-порта типа unsigned char, это было шедеврально глупо с моей стороны! :) Сейчас я уже почти уверен что это та проблема, из-за которой на медленном компьютере большинство пакетов пропускалось, когда как на быстрых всё работало как надо. Просто нужно было пройти весь массив буфера, который за время выполнения цикла программы накапливался, но индекса хватало только на первые 256 байт, дальше он переполнялся :-/
Феерично.
PoZitron
программирование Qt Хотел статически слинковать программу с библиотеками MinGW, но меня ждал сюрприз — сами библиотеки Qt динамически с ними слинкованы, а значит мне их всё равно придётся класть в PATH :)
PHAIL
PoZitron
программирование Qt УРА! Состоялась моя первая кроссплатформенная сборка! Каких-то два дня секса... а стоп, наоборот... аж два дня без секса... ну в общем, 2 дня убил, и вот результат :) Надо его зафиксировать, замести костыли и размножить на все рабочие компьютеры. Надеюсь хватит потом сил написать инструкцию, в интернете все инструкции начинаются со слов типа "качаем Qt, собираем с флагами...." :) У меня всё из коробки. Вроде. Сегодняшний день целиком убил на mingw, я узнал (на практике) что собранные разными версиями компилятора библиотеки, оказываются не линкуются друг с другом О_о Точнее вот сейчас я собрал разными версиями, но близкими, и получилось. А по-сравнию со старой они что-то поломали, что всё не собирается с новыми компиляторами :-/
В качестве пруфа нечего предоставить к сожалению. Ну могу какой-нибудь Hello Wold побыстрому собрать для винды :)
PoZitron
программирование C++ arduino cannot into наследование? Очень печально если так, оно впервые к месту и я просто обязан добавить в уже готовый класс пару полезных методов.
Интернет на эту тему молчит, и выдаёт 1001 скопипастенную инструкцию по морганию лампочками.
Кто в теме?
PoZitron
? программирование Кто-нибудь знает библиотеку для запроса погоды на неделю? Не хочется свой велосипед изобретать, хотя уже начал, так как не нашёл решения. libgweather только текущую погоду получает с метеостанций.
PoZitron
программирование Как бороться с бардаком в mainwindow.cpp? Ведь главное окно программы, это сердце программы, какой бы другой модуль не выполнял основные операции. В главном окне куча меню, куча кнопок, куча действий различных. Попытка вручную двигать функции так, чтобы близкие по функционалу оставались рядом ни к чему не приводит. Может делить код на несколько файлов?
PoZitron
программирование В QtCreator под линукс какой-то баг, нельзя выбрать инструментарий. Хочу я компилять 32х-битные проги из-под 64х-битной системы, и всё необходимое есть, а выбрать нужный инструментарий нельзя!
Помогает вручную в поле "дополнительные параметры" qmake вписать
-spec linux-g++32
После этого ВНЕЗАПНО разблокируется и выбор инструментария.