Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Индусский код
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
juvf
Вброс .... на вентелятор.
Столкнулся с одним кодом.... предлагается в 5 шагов поднять обмен по LoRa чуть-ли не с нулевым порогом вхождения в программирование... есть проект LowCostLoRaGw.

Конечно всё шоколадно. На проводочках ардуино+рфм95 и распбери+рфм95, по 5 шагов и вот тебе готовая система сбора данных. На базе Sx1272.cpp даже есть библа для абдурино ардуино.

Решил велосипед не изобретать и портировать этот код себе, благо дело сырци есть. Компилятор дал тонну ворнингов. Я уже молчу за такой код
Код
bool SerialPi::find(const char *target){
    findUntil(target,NULL);
}
я уже молча испоравляю ворнинги где int сравнивается с unsigned int. Но не удержаляся после подобнойго кода (благо дело ворнинг показал)
Код
/* Prints data to the serial port as human-readable ASCII text followed
* by a carriage retrun character '\r' and a newline character '\n' */
void SerialPi::println(float f, int precission){
    const char *str1="%.";
    char * str2;
    char * str3;
    char * message;
    sprintf(str2,"%df",precission);             //ошибка
    asprintf(&str3,"%s%s",str1,str2);               //утечка памяти
    sprintf(message,str3,f);                     //ошибка

    const char *newline="\r\n";
    char * msg = NULL;
    asprintf(&msg,"%s%s",message,newline);              //утечка памяти
    unistd::write(sd,msg,strlen(msg));
}

Всё это великолепие есть тут
автор проекта какой-то индус CongDuc Pham
автор этого кода, судя по коментам в файле arduPi_pi2.cpp некая Libelium Comunicaciones Distribuidas

на сайте Libelium чего только нет. И для автомобилей что-то делают, и для сетей, и для МЕДИЦИНЫ!!! И такой говнокод пишут. УЖАС!!!

Весь arduPi_pi2.cpp исчерпан вызовами asprintf() и ни разу нет вызова free(). Конечно без free такой код будет работать, за каждый вызов будет утекать несколько байт памяти. Но сколько времени непрерывно проработает такой шлюз? неделю? Месяц? Год? Не удевляюсь, почему винда, после недели непрерывной работы начинает тормозить и съедает 8 Гб озу с закрытыми приложениями. А потом начинаются срачи на темы, типа "Почему до сих пор все сидят на древних языках вроде С и С++", и что с++ говноязык, а жава тру!!!
iosifk
Цитата(juvf @ Nov 7 2017, 15:05) *
Вброс .... на вентелятор.
Конечно без free такой код будет работать, за каждый вызов будет утекать несколько байт памяти. Но сколько времени непрерывно проработает такой шлюз? неделю? Месяц? Год? Не удевляюсь, ....

Вот задам Вам один вопрос: С какой целью Вы ходите на работу?

А с какой целью выкладывается "почти рабочий код"? Да с той же самой, чтобы продавать рабочий код... Почему Вы считаете, что кто-то будет выкладывать полностью рабочий код "за просто так"? А жить им на что?
Берется сайт "открытых проектов" и туда выкладывается "вот что мы можем".. И далее: "А хотите, чтобы работало на самом деле, а не в демо режиме, так вот почтовый адрес, обращайтесь"...
Вот кругом все умные, а индусы - дураки... Да вот только "умные, но бедные"... А у индусов - своя кремниевая долина...
AlexandrY
Цитата(juvf @ Nov 7 2017, 14:05) *
Всё это великолепие есть тут

Для github-а это просто идеальный проект.
Все познается в сравнении.
Покажите свой код на github.
juvf
Цитата(iosifk @ Nov 7 2017, 14:11) *
Почему Вы считаете, что кто-то будет выкладывать полностью рабочий код "за просто так"?
Ну выкладывают же. linux, gcc, много опенсорса. Например, чтоб продвигать технологию и продавать железо. Но врятли авторы этого кода хотели увеличить объем продаж микросхем Лора.
А зачем выкладывать такой код? Хочешь заработать на коде - пиши закрытый код. Хочешь заработать на построении системы сбора данных - занимайся разработкой системы под ключ используя дешевые чипы и самописный рабочий код.
Не очень понятно, зачем такие статьи, если там умышленно предлагается использовать нерабочий код?
AlexandrY
Цитата(juvf @ Nov 7 2017, 15:38) *
умышленно предлагается использовать нерабочий код?

Вы пока не доказали, что код нерабочий.
juvf
Цитата(AlexandrY @ Nov 7 2017, 18:51) *
Вы пока не доказали, что код нерабочий.

Это рабочий код чтоли?
Код
    sprintf(str2,"%df",precission);             //ошибка
    asprintf(&str3,"%s%s",str1,str2);               //утечка памяти
    sprintf(message,str3,f);                     //ошибка
AlexandrY
Цитата(juvf @ Nov 7 2017, 15:53) *
Это рабочий код чтоли?
Код
    sprintf(str2,"%df",precission);             //ошибка
    asprintf(&str3,"%s%s",str1,str2);               //утечка памяти
    sprintf(message,str3,f);                     //ошибка

Это код ни о чем. Может быть макрос, может переопределение, может либа специальная.
Какие ваши доказательства? ©
iosifk
Цитата(juvf @ Nov 7 2017, 16:38) *
Ну выкладывают же. linux, gcc, много опенсорса. Например, чтоб продвигать технологию и продавать железо. Но врятли авторы этого кода хотели увеличить объем продаж микросхем Лора.
А зачем выкладывать такой код? Хочешь заработать на коде - пиши закрытый код. Хочешь заработать на построении системы сбора данных - занимайся разработкой системы под ключ используя дешевые чипы и самописный рабочий код.
Не очень понятно, зачем такие статьи, если там умышленно предлагается использовать нерабочий код?

Давайте я напишу мой личный взгляд на это.
Рабочее время - это товар. Чтобы его выгодно продать, нужно показать характеристики этого товара.
Вот скажите, кто о Ваших рабочих навыках знает, кроме Вашего начальника? Кто может их подтвердить? Для большинства российских инженеров ответ будет такой: никто. И приходя на новое место работы Вы не можете подтвердить свои навыки и умения. И хорошо если интервьюер на новом месте работы попадется грамотный. А если нет?
А теперь представьте, что "индусы" со студенчества ориентированы на "продажу". Поэтому они бегают за "сертификатами", "публикациями" и пр. Чтобы попасть на фирму и получить возможность заработать, нужно уже что-то "показать"... И только потом "занимайся разработкой системы". Потому что "там" любая разработка "за деньги", подразумевает юридическую ответственность.
А конкретно в данном случае авторами могут быть и студенты или даже школьники. Им дали "попробовать", вот они и выложили результат. И ничего более. Скажем наш студент идет подработать в Макдональс или разносчиком пиццы, чтобы купить стартовый набор или оплатить дополнительные лекции. Австралиец - делает пяток стартовых наборов. Один - себе и остальные на продажу. Известна история, где девушка студентка открыла фирму и они продавали наборы деталей для батареечного питания смартфонов. Ну просто у них другой взгляд на жизнь. Наши преподы в универах плачут о невозможности и об отсутствии. А "ихние" преподы - создали Диджилент и сотни универов получили дешевые стартовые наборы для Ксайлинкса...
Вывод: "статья" пишется не для " если там умышленно предлагается использовать нерабочий код", а для "публичности"... И "статья" - не ЦЕЛЬ для "кода", а СРЕДСТВО получить работу.
Вот в этом - и есть вся разница...


juvf
Цитата(AlexandrY @ Nov 7 2017, 19:03) *
Это код ни о чем. Может быть макрос, может переопределение, может либа специальная.
Какие ваши доказательства? ©

Доказательства ссылка на гитхаб. Нет там макрасов и переопределений, нет там специальных либ. sprintf и asprintf из состава stdio.h
gcc из коробки.

Цитата
в данном случае авторами могут быть .... школьники. Им дали "попробовать", вот они и выложили результат.
с этим соглашусь, вполне возможно это поделки школоты. Но врятли школота будет писать в сырцах

Цитата
/*
* Copyright © 2012 Libelium Comunicaciones Distribuidas S.L.
* http://www.libelium.com


iosifk
Цитата(juvf @ Nov 7 2017, 17:36) *
с этим соглашусь, вполне возможно это поделки школоты. Но врятли школота будет писать в сырцах

Тут есть еще один фактор.
Первым через Ламанш перелетел Блерио.
https://ru.wikipedia.org/wiki/%D0%91%D0%BB%...%9B%D1%83%D0%B8
А второго никто не помнит.
Если есть ниша не рынке, то ее надо "засветить" и занять как можно раньше. Для этого годятся даже "полуфабрикаты". Так же, как и бесплатные Бета-версии продуктов. Вот купил я себе сетевой винчестр WD "белое облако". Один раз сдал в обмен железо, пару раз переустановил софт. И вот теперь работает нормально...
Ну а Либериум? Ну и что? Вот у нас в Питере "Метротек" и они набирают студентов и обучают их Верилогу и микроконтроллерам. Чтобы потом взять их на работу. Вполне возможно, что и у Либериума что-то похожее на это. Да, фирма получает "почти работающий код", который не жалко выложить. И под это получить первые контакты с клиентами и первые заказы. Будут заказы - будет и доработка кода до рабочего. Не будет заказов - займутся другим направлением.
А чисто по жизни... Не нравится, как пишут индусы? Ну так сами напишите статью - "как я разбирался с индусским кодом"...Или то, что считаете наиболее интересным. Если получится, то мы напечатаем. Сами же наши инженеры ленивые, потому и статей русскоязычных мало.
juvf
Цитата(iosifk @ Nov 7 2017, 19:54) *
Тут есть еще один фактор.
я вашу точку зрения понял. не соглашусь с ней. Можно написать демо-код и опубликовать результат. показать возможность этой системы. всё дёшево и сердито. Для непосвещённых это выглядит круто: на проводках скрестил малину с рфм95 и закинул в дропбокс за 15 баксов сделал шлюз, за 5 баксов конечное устройство. Даже сайт писать не нужно. С любой точки мира можно графики температуры смотреть. Если кому-то это нужно будет - будут заказы.
но писать такое и публиковать:
Код
     char * str2;
    sprintf(str2,"%df",precission);
эээээ.... ну хочешь продать себя как программиста - покажи результат, результат достаточно крутой. Хочешь продать систему - покажи результат. Ну такую лажу в сырцах зачем публиковать? Чтоб работодатель посмотрел исходник и оценил тебя как говнопрограммиста?

Цитата
Первым через Ламанш перелетел Блерио.
А второго никто не помнит.
не аргумент. первым (мс-)дос написал Тимом Патерсоном. Его ни кто не помнит. Зато Бил Гейтса и MS-DOS все знают.
Цитата
MS-DOS является переименованной версией 86-DOS, написанной Тимом Патерсоном
iosifk
Цитата(juvf @ Nov 7 2017, 18:12) *
я вашу точку зрения понял. не соглашусь с ней.

не аргумент. первым (мс-)дос написал Тимом Патерсоном. Его ни кто не помнит. Зато Бил Гейтса и MS-DOS все знают.

Так Вы сами подтверждаете мои слова. Выигрывает не тот, кто "написал", а тот, кто сумел "продать" эту тему....
kolobok0
Цитата(juvf @ Nov 7 2017, 15:05) *
Вброс .... на вентелятор.
...


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

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

я о чём - везде можно найти косяки. Где больше, где меньше. Где впарили, где работают на своё имя. Где лишь бы взлетело(кстати для продажников - это время, оборот, результат),
где приёмка для жизнеобоспечения...
И индусы тут увы не всегда худшее. Есть и на наших просторах деятели.

удачи усем
(круглый)
Эдди
Цитата(AlexandrY @ Nov 7 2017, 16:37) *
Для github-а это просто идеальный проект.

К сожалению, да: многие на гитхаб выкладывают совершенно нерабочие вещи. Но на то он и гитхаб: есть багтрекер, и все можно высказать автору.

Насчет printf: как по мне, так использование такой жути, как printf, malloc и т.п. оправдано лишь в "жирных" микроконтроллерах. В обычных (вроде STM32F0/1/2/3/4) им не место. Аналогично с плавающей точкой: если нет в камне их аппаратной поддержки, нечего их туда лепить! Иначе получается абдуринщество чистой воды!
x893
CongDuc Pham
может он и индус, но работает во Франции.
mantech
Цитата(Эдди @ Nov 7 2017, 23:10) *
К сожалению, да: многие на гитхаб выкладывают совершенно нерабочие вещи. Но на то он и гитхаб: есть багтрекер, и все можно высказать автору.

Насчет printf: как по мне, так использование такой жути, как printf, malloc и т.п. оправдано лишь в "жирных" микроконтроллерах. В обычных (вроде STM32F0/1/2/3/4) им не место. Аналогично с плавающей точкой: если нет в камне их аппаратной поддержки, нечего их туда лепить! Иначе получается абдуринщество чистой воды!


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

Насчет printf ничего плохого не вижу, есть собственная урезанная версия без всякой дин. памяти и пр. - очень удобная штука для отладки.
juvf
Цитата
Насчет printf: как по мне, так использование такой жути, как printf, malloc и т.п. оправдано лишь в "жирных" микроконтроллерах.
Этот пример для малины и линукса. Это как раз "жирный" процессор.

Цитата
В данном примере написан демо-код, его единственная цель - залить и проверить
Не совсем так. Есть мануалы, как в 5 шагов развернуть Lora шлюз и end-point устройства используя библиотеку SX1272, и как построить систему мониторинга температуры в инете. Рассчитан на "не грамотных африканцев", как можно недорого развернуть мониторинг с минимальными знаниями.

если вы сделаете демокод хеловорд, вы его сделаете ребочим, врят ли вы его напишите так

Код
#include <stdio.h>
int main()
{
char *str;
sprintf(str, "Hello world!")
printf(str);
return 0;
}


Более того... пусть даже это не релиз... а демонстрашка.... библиотеку SX1272 можно использоваьт и на малине, и на ардуино и в МК. Демонстрашка так же демонстрирует, как на ардуино легко создать шлюз/устройство, используя класс SX1272. Программист "Программист" ардуино запускает Arduino IDE, лезет в меню Sketch->Include Library->SX1272 и подключает эту библиотеку. Дальше создает объект SX1272, инитит, конфигурирует, и вызывает у него какие-то методы. Он не полезит дебажить саму библиотеку, тем более если кто-то программит "кубиками". А в библиотеке SX1272 баги. Зависнет ваш код в ардуино.... а в ардуино даже дебага нет. Будет в своих 3-х строчках искать ошибку, а она глубоко в подключённой либе.

Да и на C/С++ в линуксе.... подрубают готовую библиотеку SX1272 и используют её.... также как и wiringpi, stdio, как и всякие Qt и т.п.


Эдди
Ой, про абдуринщиков вообще не надо. У них из 10 "библиотек" 9 дырявых! А если разработчик "библиотеки" решит сделать что-то аппаратное не ногодрыгом, а как у людей, то еще и конфликт элементарно может возникнуть, когда один и тот же ресурс (скажем, таймер) используется двумя разными "библиотеками". Что, абдуринщик полезет код читать и будет править его, чтобы конфликта не было? Очень сомневаюсь.

Советую, кстати, почитать исходники "библиотек" adafruit, там тоже сплошь и рядом "индусский" код. А некоторые ведь пользуются, хотя правильней было бы переделать с оптимизацией. А еще лучше — с нуля аналог написать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.