раскрыть ветку (46)
dll-ку надо было на днях отправить заказчику. Т.к. у него платы нет, то я сделал так, что она выдаёт липовые значения в коллбэки, из желаемого диапазона. Когда отправим плату, уже в каждой функции будет к ней обращение, и вывод реальных результатов.
раскрыть ветку (2)
Чувак... пожалей гуманитариев( Объясни русским языком что ты сделал, для чего оно и почему это очень круто?
раскрыть ветку (42)
раскрыть ветку (40)
окей, гайз
исходник:
https://gist.github.com/63cdc8893d3ddbbdb021.git
хидер:
https://gist.github.com/199e736f465c9ca64e4b.git
гуи-программку для теста этой балды тоже выложить?)
исходник:
https://gist.github.com/63cdc8893d3ddbbdb021.git
хидер:
https://gist.github.com/199e736f465c9ca64e4b.git
гуи-программку для теста этой балды тоже выложить?)
раскрыть ветку (39)
раскрыть ветку (25)
не слышал. вряд-ли запутаюсь, в самом верху всякие объявления, ниже функции, поток, а дальше уже проверки, которые идут на экспорт, и перед каждой небольшие комментарии. В последних их нет, т.к. времени не было
раскрыть ветку (24)
Когда-нибудь точно запутаешься. Оформлять код сложно только на первых порах, потом станет привычно. В нормально оформленном коде сразу видны отдельные блоки, невозможно запутаться в скобках, да и просто приятнее смотреть на него. Сам глянь, я одну из твоих функций переписал: http://pastebin.com/6t6vbZW1
Алсо, у тебя там sizeof(str) - лучше не делай так, тоже когда-нибудь запутаешься. Если задавать строку как char str[20], то тогда sizeof(str) вернет 20, как нужно. А если как char * str = new char[20], то вернет sizeof(char *). Если размер фиксированный - задай его какой-нибудь константой, типа
const size_t STR_SIZE = 20;
char str[STR_SIZE];
...
memset(str, 0, STR_SIZE);
Алсо, у тебя там sizeof(str) - лучше не делай так, тоже когда-нибудь запутаешься. Если задавать строку как char str[20], то тогда sizeof(str) вернет 20, как нужно. А если как char * str = new char[20], то вернет sizeof(char *). Если размер фиксированный - задай его какой-нибудь константой, типа
const size_t STR_SIZE = 20;
char str[STR_SIZE];
...
memset(str, 0, STR_SIZE);
раскрыть ветку (9)
а, красивое оформление скобочек) слышал, на парах программирования пользовался)) в коде просто иногда забывается, особенно в потоке, я его вчера на скорую руку кропал. Да, надо будет оформить)
Насчёт массивов - сверху в дефайнах есть lendatain и lendataout, но так получилось, что ими я особо не пользуюсь. Спасибо тебе большое, чувак, сделаю динамическое выделение памяти) ну или через вектор. Я ещё с bytedynarray не совсем разобрался... странный он)
Насчёт массивов - сверху в дефайнах есть lendatain и lendataout, но так получилось, что ими я особо не пользуюсь. Спасибо тебе большое, чувак, сделаю динамическое выделение памяти) ну или через вектор. Я ещё с bytedynarray не совсем разобрался... странный он)
раскрыть ветку (1)
А также:
Куча глобалок
Дефайны и magic number'ы
std::thread ???
std::async ???
std::future ???
Хотя задача неизвестна, может я и ошибаюсь.
Куча глобалок
Дефайны и magic number'ы
std::thread ???
std::async ???
std::future ???
Хотя задача неизвестна, может я и ошибаюсь.
раскрыть ветку (2)
судя по хидерам и прагмам, это С++ Builder, так что никакого С++11 и прочих плюшек :)
но да:
1) Глобальные переменные приводят к тому, что функции non-reentrant. Плюс, судя по коду, позвал два раза одну и ту же функцию -> былинный отказ.
2) Использование указателей на функций в декларациях шлют лесом FFI большей части языков. Так что утверждение "совместимую с любым языком программирования" очень уж самонадеянное.
3) Использование UDP для контроллёра с pull моделью является странным решением. Он же не засыпает нас сообщениями, а мы просим у него значения.
но да:
1) Глобальные переменные приводят к тому, что функции non-reentrant. Плюс, судя по коду, позвал два раза одну и ту же функцию -> былинный отказ.
2) Использование указателей на функций в декларациях шлют лесом FFI большей части языков. Так что утверждение "совместимую с любым языком программирования" очень уж самонадеянное.
3) Использование UDP для контроллёра с pull моделью является странным решением. Он же не засыпает нас сообщениями, а мы просим у него значения.
раскрыть ветку (1)
Человек пишет на плюсах, ответил ему в стиле плюсов. А от замены new char[20] на (char *)malloc(20) смысл не поменяется.
Классическая ошибка: "Уж я-то разберусь в своём коде!" Спустя пару-тройку месяцев понимаешь: либо писал не ты, либо писал под алкоголем ))
раскрыть ветку (11)
Истину глаголишь. Писал я где-то полгода-год назад лабу на сишке по opengl, написал сдал. через месяц захотел подправить. В итоге - мама-мия! несколько часов сидел разбирался какая функция за что отвечает и каким макаром эта хрень вообще работает...
раскрыть ветку (4)
Когда только начинал кодить (программированием это было сложно назвать) в коммерческом проект - черз пол года появлялись задачки на изменения функционала. Открываю код - первый вопрос всегда - что за мудак это писал? Смотрю комменты - а тем мудаком был я.
раскрыть ветку (5)
раскрыть ветку (4)
Да, а что не так?
Вначале файла шапка, кто, когда и зачем писал.
Изменения указываются либо прямо в коде (епсли это одна строка с каким-то фиксом) или в шапке.
Если прям очень интересно кто и что именно правил - можно конечно поднять историю чекинов, но никому это нафиг не нужно.
Мы авторство указывали только лишь для того, что бы какие-то исправления и доработки делал тот же человек, что и начал. Как правило вспомнить свой код пусть даже годичной давности проще, чем вникать в него по-новой. Особенно, если учесть невысокое качество кода, выдаваемого парой студентов физиков/электронщиков.
Вначале файла шапка, кто, когда и зачем писал.
Изменения указываются либо прямо в коде (епсли это одна строка с каким-то фиксом) или в шапке.
Если прям очень интересно кто и что именно правил - можно конечно поднять историю чекинов, но никому это нафиг не нужно.
Мы авторство указывали только лишь для того, что бы какие-то исправления и доработки делал тот же человек, что и начал. Как правило вспомнить свой код пусть даже годичной давности проще, чем вникать в него по-новой. Особенно, если учесть невысокое качество кода, выдаваемого парой студентов физиков/электронщиков.
раскрыть ветку (3)
git и нормальная IDE в помощь - при желании напротив каждой строчки появится кто, когда и зачем менял
раскрыть ветку (2)
Когда-нибудь точно запутаешься. Оформлять код сложно только на первых порах, потом станет привычно. В нормально оформленном коде сразу видны отдельные блоки, невозможно запутаться в скобках, да и просто приятнее смотреть на него. Сам глянь, я одну из твоих функций переписал: http://pastebin.com/6t6vbZW1
Алсо, у тебя там sizeof(str) - лучше не делай так, тоже когда-нибудь запутаешься. Если задавать строку как char str[20], то тогда sizeof(str) вернет 20, как нужно. А если как char * str = new char[20], то вернет sizeof(char *). Если размер фиксированный - задай его какой-нибудь константой, типа
const size_t STR_SIZE = 20;
char str[STR_SIZE];
...
memset(str, 0, STR_SIZE);
Алсо, у тебя там sizeof(str) - лучше не делай так, тоже когда-нибудь запутаешься. Если задавать строку как char str[20], то тогда sizeof(str) вернет 20, как нужно. А если как char * str = new char[20], то вернет sizeof(char *). Если размер фиксированный - задай его какой-нибудь константой, типа
const size_t STR_SIZE = 20;
char str[STR_SIZE];
...
memset(str, 0, STR_SIZE);
Код адовый пиздец, вы судя по всему классный процедурщик, но видимо с архитектурой и проектированием по хуево дело обстоит.
А чего жесты, а не репа?
Ну замечания:
1. Стиль и табуляция.
2. Мэджики.
3. Адовая смесь C и C++. Неплохо было бы выбрать что-то одно. Поскольку, тут хардвар, то советую переписать всё на С.
4. Буфер сообщение\й в обе стороны потенциально незащищён от ошибок чтения. В случае UDP это критично.
Вот видишь, все оценили.
Ну замечания:
1. Стиль и табуляция.
2. Мэджики.
3. Адовая смесь C и C++. Неплохо было бы выбрать что-то одно. Поскольку, тут хардвар, то советую переписать всё на С.
4. Буфер сообщение\й в обе стороны потенциально незащищён от ошибок чтения. В случае UDP это критично.
Вот видишь, все оценили.
раскрыть ветку (2)
1. исправляю.
2. што?)
3. замечательно, но на с сложновато что-то в параллельный поток выкинуть. Ну, для меня, по крайней мере) И udp я реализовал с помощью инди-клиента, а это возможно только в плюсах. Изначально хотел через winapi и winsock, но там всё как-то замудрено, и у меня не получалось настроить таймаут. А в инди api, таймаут указывается прямо в функции приема пакета, что очень удобно)
4. чем лечится? я ещё не на столько силён в прогании :)
спасибо :)
2. што?)
3. замечательно, но на с сложновато что-то в параллельный поток выкинуть. Ну, для меня, по крайней мере) И udp я реализовал с помощью инди-клиента, а это возможно только в плюсах. Изначально хотел через winapi и winsock, но там всё как-то замудрено, и у меня не получалось настроить таймаут. А в инди api, таймаут указывается прямо в функции приема пакета, что очень удобно)
4. чем лечится? я ещё не на столько силён в прогании :)
спасибо :)
раскрыть ветку (1)
2. Магические числа, константы прямо в коде. Например, в большом кейсе-обработчике. Следовало бы сделать что-то типа "case MT_HELLO" (сокращение он message type) вместо "case 4" (пример).
3. Винапи не надо, винсок хорошо должен зайти, но всё ограничивается сам понимаешь какой системой. Тогда переписывай на С++, избавляйся от макросов, используй энамы, используй буфферы с потоками вместо принтов и т.д. Хотя бы я порекомендовал переписать всё под чистые сокеты. Это не так сложно, как кажется на первый взгляд. И не надо никакого ИНДИ.
4. Ну как привило, всё написано в туториалах по сокетам. Ты ждёшь, от клиента 8 байт, ты должен проверить, что пришло 8 байт. Ты ждёшь строку, а действительно ли пришла 0-строка? И т.д. и т.п.
3. Винапи не надо, винсок хорошо должен зайти, но всё ограничивается сам понимаешь какой системой. Тогда переписывай на С++, избавляйся от макросов, используй энамы, используй буфферы с потоками вместо принтов и т.д. Хотя бы я порекомендовал переписать всё под чистые сокеты. Это не так сложно, как кажется на первый взгляд. И не надо никакого ИНДИ.
4. Ну как привило, всё написано в туториалах по сокетам. Ты ждёшь, от клиента 8 байт, ты должен проверить, что пришло 8 байт. Ты ждёшь строку, а действительно ли пришла 0-строка? И т.д. и т.п.
ЕБАНУТАЯ ЛОГИКА ПИКАБУ?
Почему эта херня набрала уже под тысячу плюсов, а эти мои посты тупо слили?
http://pikabu.ru/story/moyo_studencheskoe_khobbi_1945761
http://pikabu.ru/story/moyo_poststudencheskoe_khobbi_1946019
Почему эта херня набрала уже под тысячу плюсов, а эти мои посты тупо слили?
http://pikabu.ru/story/moyo_studencheskoe_khobbi_1945761
http://pikabu.ru/story/moyo_poststudencheskoe_khobbi_1946019
раскрыть ветку (7)
Ничего ебанутого. Человек выложил исходный код в комментариях, поделился так сказать реализацией а ваших исходников я не видел. То что вы классно разбираетесь в аналитической геометрии и дифф/интегральном исчислении это конечно круто, но ничего нового в этом вообще нету. Все уже давно придумано за нас. И да переходите на сторону зла пишите на Haskell.
ещё комментарий
ещё комментарии
если хочешь чтобы оценили, помоги мне на конструкторе сайтов запилить поиск туров, а то колонки не двигаются, а модуль больше рамок.


