Как стать автором
Обновить
33
Карма
0
Рейтинг
Sam Protsenko @skb7

Пользователь

  • Подписчики 4
  • Подписки

Реализация Model-View-Presenter в Qt

Интернет термометр на TP-Link MR3020

Перезалито на Github: https://github.com/joe-skb7/bmcontrol

Реализация Model-View-Presenter в Qt

Примеры перезалиты на гит-репозиторий: https://gitlab.com/joeskb7/qt-mvp

Есть ли жизнь после кода?

Давно заметил, что на всех вменяемых проектах используется связка: Git, Jenkins, JIRA, Gerrit, Mailing Lists. Хотя можно заменить Gerrit через review в Mailing Lists. Еще можно посоветовать использовать cgit в качестве веб-интерфейса для git.

Джо Армстронг об инструментах разработчика

точно, не так понял. но и для такого случая можно что-то придумать. например как делает это Eclipse? по таймеру? ну так наверняка и в vim можно завести обновление базы по таймеру.

Джо Армстронг об инструментах разработчика

Поймите, я не против IDE как таковых, мой месседж в другом:

1. vim настраивается до уровня IDE с помощью плагинов и настроек

2. мне не понравилась категоричность и нигилизм ваших высказываний:
— в сторону «дедушек» с 40-летним опытом разработки реально крутых проектов типа Джо Армстронга, польза одного проекта которых превосходит пользу от всех энтерпрайзных поделок на C#/Java вместе взятых. да и сложность я уверен тоже
— в сторону инструментов типа vim и make, которые ну никак не устарели. да, на них нельзя тягать кнопочки на формочки, но что касается работы с кодом — они с ней справляются на 100%. ПО не портится и не гниет само по себе. задачи программирования почти никак не изменились за последние 50 лет, и способы писать программы тоже.

3. IDE даже по сравнению с простым блокнотом + консольные тулзы (grep, find и т.д.) дают ВЕСЬМА малый выигрыш по времени, я имею ввиду суммарное время разработки проекта. я думаю это и был основной посыл Джо Армстронга, и я с ним согласен

Джо Армстронг об инструментах разработчика

Для этого даже cscope не нужен:

$ find. -name '*.[ch]' -exec grep -H 'struct socket ' {} \; | sed 's/:.*//g' | sort -u >cscope.files
$ for i in $(cat cscope.files); do grep -PHn '\.flags\b|->flags\b' $i; done

Если вам не нравится, что не все flags здесь будут именно из структуры socket, желаю удачи в отладке ситуаций когда синтаксический анализатор не «словит» присвоение типа такого:

struct socket a = {
.flags = 0x8,
};

или другое хитроумное, коих полно в сложных проектах на Си (например с использованием void*, container_of() и т.д.).

С другой стороны, если у вас постоянно возникают такие ситуации (вот у меня за 2 года еще ни разу такого не нужно было, иначе бы я уже полазил и нашёл бы, как такое сделать, или сам дописал бы в тот же cscope), то никто не мешает в качестве синтаксического парсера (не IDE!) использовать парсер из Eclipse или clang, которые намного мощнее (но и намного дольше) чем cscope:

eclim.org/
lists.cs.uiuc.edu/pipermail/cfe-dev/2013-March/028452.html

Джо Армстронг об инструментах разработчика

1. cscope строит базу ядра по времени намного быстрее Eclipse
2. cscope делает быстрое перестроение при уже построенной базе

Джо Армстронг об инструментах разработчика

«функции в принципе… не применительно к какому-то языку» не бывает и быть не может. у каждого языка своя семантика, и ни один IDE не умеет парсить абсолютно все языки.

Джо Армстронг об инструментах разработчика

Первое что нашлось:

> I can't rebuild a database automaticly.

If you really want to do that each time you save the changes to a file,
you can use an autocommand something like this:

au BufWritePost * call system(&csprg. " -R -b") | cs reset

That's untested but uses pieces of commands I'm using currently, so it
should work as is or with some minor tweaks.

See

:help 40.3 " Autocommands
:help BufWritePost
:help :call
:help system()
:help :bar

Джо Армстронг об инструментах разработчика

Никто не мешает намапить обновление DB cscope в виме на сохранение файла. cscope второй раз и далее не переделывает DB, а обновляет. Из мана:

cscope builds the symbol cross-reference the first time it is used on the source files for the program being browsed.
On a subsequent invocation, cscope rebuilds the cross-reference only if a source file has changed or the list of source
files is different. When the cross-reference is rebuilt, the data for the unchanged files are copied from the old
cross-reference, which makes rebuilding faster than the initial build.

Джо Армстронг об инструментах разработчика

Не теряйте контекст разговора. Говорили именно про Си, вот изначальная цитата «eyeofhell», на которую я отвечал:
> Я очень хорошо владею VIM, Emacs, ctags, grep и прочим легаси — так вот, с помощью них это сделать невозможно

Раз был упомянут ctags — очевидно разговор шёл именно о Си.

Пользоваться IDE я умею — 3 года просидел за QtCreator и KDevelop. В QtCreator на тот момент знал 95% функционала, т.е. все менюшки и настройки, и почти все комбинации клавиш. Да, такого парсера C++ как в KDevelop для вима я не видел, хотя на офф. сайте cscope пишут что он и C++ тянет, но опять же, разговор шёл про Си.

Джо Армстронг об инструментах разработчика

Про J2EE не знаю, пишу только на Си/Си++. Для того что я делаю, — да, есть. sudo aptitude install cscope vim, и всё по сути, в самом виме уже есть плагин для cscope, подсветка синтаксиса, автодополнение (omni-completion), браузер файлов (:Sex, хотя я использую NerdTree), поддержка make (:make). Дальнейшие настройки, плагины — каждый себе по вкусу ставит и настраивает. Наверняка нет визуальной поддержки gdb по-умолчанию (уверен, что есть плагин), но ядро не так дебажат, так что не задавался вопросом.

Если вам нужно только h/j/k/l — может проще в вашей IDE поискать Vim режим или Vim-плагин? Потому что если вам кнопочки тягать на формочки — наверняка такого в vim нет и не будет, это ж вообще чисто консольный редактор.

Джо Армстронг об инструментах разработчика

да, linux это и есть kernel. если подробнее — то я индексирую только файлы, существенные для используемой архитектуры (arm64) и нужной мне платформы, но это детали — по .config файлу вообще можно оставить только файлы, которые собираются для заданной конфигурации, но кому-то нравится чтобы были проиндексированы все файлы, чтобы можно было искать в них примеры кода. Всё тоже самое нужно делать в Eclipse — выбирать, какие файлы индексировать.

Джо Армстронг об инструментах разработчика

> Я не спешу

Нет, вы спешите.

> Возможности VIM, Emacs и Visual Studio я знаю похуже авторов

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

> но все равно очень, очень хорошо

Нет, очевидно что очень-очень плохо, по крайней мере что касается vim.

> Повторить в Vim или Emacs функциональность «Find All References» как она реализована в Visual Studio для C# или в JetBrains IDEA для Java имеющимися средствами невозможно.

Нет, не просто возможно, а она уже есть например в cscope и я её использую каждый божий день.

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

Не только можно, но уже написано. cscope называется и плагин для вима одноименный. Уже лет как… надцать. Уже для PDP-11 было, но вы же всего 15 лет разрабатываете, тем более судя по всему только в виндовс и вижуал студии и только на c#, — откуда же вам про это знать.

> Но на данный момент указанное сделать невозможно.

Можно, cscope/ctags. Всех устраивает вроде, если уметь использовать.

> Так что по моему скромному мнению, заслуженный разработчик эрланга лжет, когда утверждает что современные средства работы с исходным кодом «ничем не лучше тех, что были 40 лет назад».

Лучше, но это дает настолько несущественный выигрыш в производительности, что им вообще можно пренебречь. Я могу побыть примером тут. Работаю с кодовой базой Linux. Использую для навигазии vim+cscope. Рядом работает парень, который использует Eclipse. То что я вижу — у меня уходит столько же времени на то чтобы раскрутить аналогичный код. Так что да, все эти монструозные навороченные IDE с претензией на удобство, на самом деле суть те же редакторы кода, и не дают абсолютно ничего по сравнению с vim. Единственное — это что у них порог вхождения ниже.

> Возможно, ему просто никто не показал как сейчас выглядит большой и сложный коммерческий проект, сколько в нем строчек кода, какие задачи каждодневно решаются и какие для этого используются инструменты?

Ох, вспомним про слона и Моську. Подозреваю что он поболее вас видел, и опыта у него явно поболее чем 15 лет в си-шарпике на венде, со «сложными большими коммерческими поделками».

> И они намного лучше тех, что были 40 лет назад.

Смотрел Eclipse — ни нашёл для себя ни одной возможности, которая была бы полезна и которой не было бы в vim в виде плагина или известной надстройки конфига.

Опыт создания робота. Часть 1

> А в перспективе, когда исполнительные устройства будут слишком мощными и процессор будет сбоить от коммутации тока
> как такового, нужно будет использовать оптроны для создания 100% гальванической развязки.

Двигатели постоянного тока действительно дают ВЧ помехи, из-за чего у меня например портились транзакции по SPI (но может и проц заглючить от этого). Я их давил с помощью саппресоров:

[1] reprap.org/wiki/GM3_Noise_Suppressor_1_0
[2] reprap.org/wiki/Nophead%27s_Extruder_Tweaks#Interference_suppressor
[3] www.beam-wiki.org/wiki/Reducing_Motor_Noise
[4] www.kerrywong.com/2012/01/26/a-short-guide-on-motor-electrical-noise-reduction/

Интернет термометр на TP-Link MR3020

Сделал клон оригинального репозитория с версией 1.1, улучшив немного код:
— починил задержки
— починил выход за границы массива
— починил остальные ворнинги от "-Wall" и cppcheck
— сделал код полностью кросс-платформенным (теперь и на венде и на линуксе собирается одним и тем же мейк-файлом)
— перевел из C++ на чистый Си (там C++ не нужен абсолютно), чем уменьшил размер бинаря в 2 раза
— много других мелких улучшений

Получить код можно тут:
code.google.com/r/joeskb7-bmcontrol/source/checkout

Инструкции по сборке в README файле.

Посмотреть коммиты можно тут: code.google.com/r/joeskb7-bmcontrol/source/list

Также интересную инфу можно посмотреть из этой переписки: www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=show_thread&om=9804&forum=vsluhforumID9&omm=0&m=1l

Linux везде. Планета Open Source

> В линуксе для этого должен быть разработан единый для всех некий нерушимый стандарт пакет-инсталлеров и библиотек который бы железно соблюдался всеми без выпендрежа и допилок. Что явно невозможно при такой анархии

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

> Собственно массовая безопасность линукса держится не на качестве системы как таковой, а на более высоком уровне квалификации ее пользователей и их малочисленности

Нет.

Она держится в первую очередь (на уровне обычных пользователей) на доверенном репозитории, из которого ставятся все программы и где по идее (да и на практике) нет никаких вирусов, бекдоров и т.д. Если у приложения нет меинтейнера, обычно им является разработчик и выкладывает пакет в своем репозитории (как вариант, PPA). Существование такого репозитория возможно в первую очередь благодаря свободному коду программ (про non-free ветку промолчим), во вторую очередь — бесплатности программ. В противном случае, думаю, не нашлось бы столько желающих быть меинтейнерами. Это кстати то, почему в мире Windows это практически нереально сделать и не сделано до сих пор.

Во вторую очередь безопасность держится на открытости кода (что означает возможность его верификации третьими лицами как минимум, ну и сразу же убавляет желание разработчика запихнуть туда какую-то дыру).

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

Информация

В рейтинге
Не участвует
Откуда
Краматорск, Донецкая обл., Украина
Дата рождения
Зарегистрирован
Активность