Ответы пользователя по тегу Программирование
  • Как настроить окружение Linux что бы основным компилятором был кросскопилятор?

    leahch
    @leahch Куратор тега Linux
    Я мастер на все руки, я козлик Элек Мэк :-)
    Для сборки есть утилита make. Рекомендую изучить, причем настоятельно!
    Ответ написан
  • Как тестировать драйвера?

    leahch
    @leahch Куратор тега Linux
    Я мастер на все руки, я козлик Элек Мэк :-)
    С копмиляцией вам уже посдказали. Давайте я про отладку расскажу. Во первых очень желательно иметь две машины - одну для компиляции и отладки, вторую - таргет, куда все грузим и где тестируем и проверяем
    1) используем printk, в 95% случаев этого достаточно
    2) если аппаратура позволяет, используем jtag - это аппаратный модуль для отладки - 100% успех!
    3) можно использовать kgdb - не всегда это работает.

    Ну и совсем сильная магия - использовать статическую область памяти, где реализуем кольцевой буфер и туда пишем своими средствами отладочную информацию напрямую. Но для этого статическая память должна быть на каком-то из устройств, я обычно пишу в статику в часики реального времени, но не везде они есть и имеются. За то таким образом можно отлаживать абсолютно все, от NME, до драйверов высокоскоростных устройств.
    Ответ написан
  • На каком контроллере можно реализовать HID устройство (при нулевом опыте общения с аппаратной частью:)?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Например на STM32. Практически любая отладочная плата подойдет, например STM32F4DISCOVERY. Кстати, там демо-прошивка как раз этулирует компьютерную мышку и мыргает диодиками.
    www.st.com/en/evaluation-tools/stm32f4discovery.html
    Ответ написан
  • Как синхронизировать дочерние процессы?

    leahch
    @leahch Куратор тега Linux
    Я мастер на все руки, я козлик Элек Мэк :-)
    Вам нужно проверять количество реально прочитанных байт, так как read может прерываться сигналами.
    len = read(fd, buff, SIZE);

    man read

    On success, the number of bytes read is returned (zero indicates end of
    file), and the file position is advanced by this number. It is not an
    error if this number is smaller than the number of bytes requested;
    this may happen for example because fewer bytes are actually available
    right now (maybe because we were close to end-of-file, or because we
    are reading from a pipe, or from a terminal), or because read() was
    interrupted by a signal. See also NOTES.

    Да и что-тот работа с семафорами мне не очень нравится... Я привык через
    1) shmget - получить общую память для семафора
    2) sem_init - проинициализировать семафор
    Для каждого процесса
    3) sem_wait/sem_timedwait - ожидаем семафора
    4) sem_post - отпускаем семафор
    Ответ написан
  • Как сделать курс "протоколы и интерфейсы информационных систем" интересным?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Начните с простого, с протокола RS-232, его как минимум можно смотреть осцилографом, причём - самым простым.
    Далее - сделайте распределенную сеть на RS-485, введите маркеры и адресацию.
    Поговорите про аналоговые модемы, потом расскажите по DSL (ADSL/HDLS).
    Переходите к кодированию ТВ-сигналов, вот здесь уже можно и на телевизоре крестик рисовать через STM32 например,
    Далее - технология цифровой передачи DVB-S (-C), тоже достаточно просто. Тут же помехозащищенное кодирование RS (Reed-Solomon), перемежение. Факультативом - пишем восстановление блоков данных, рассказываем про массивы RAID.
    Рассказываем про параллельные линии, начиная от параллельного порта, через Centronics, SCSI-8/16, всяким шинам данных типа VME, переходим к современным протоколам работы памятью.
    Дальше - коммутация, начиная от телеграфа к телефонии и заканчивая каким нибудь Infiniband и мультисервисными сетями типа ethernet 10/40Gb со всеми вытекающими.

    Ну и возвращаемся к последовательным высокоскоростным линиям SATA/Ethernet/PCI-e.

    По интерфейсам, начинаем с терминалов RS-232 и заканчиваем WEB, наверное, как ни парадоксально.

    PS. Хорошо бы учесть специфику слушателей... Если это будущие "бухгалтеры", тогда, что я написал - для них overflow будет...

    PPS. Вынесу наверх...
    Увы, на мой взгляд, нельзя вот так просто объяснить как этот ftp/gopher/http/GUI работает, без хотя бы введения в "а что у нас есть такое протокол, и почему он возник..." (А возник как раз из-за симплекса и телеграфа, еще до телефона, а то и раньше, начиная с сигнальных костров и тамтамов).
    Также, наверное, бестолково объяснять дизайн современных интерфейсов без истории сигнализации лампочками, технологий ввода информации (да перфокарта, клавиатура, мышь, дисплей)
    Ответ написан
  • Перспективы embedded разработки?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Но многие говорят, что время низкоуровневого программирования прошло, сейчас только веб, C#, Java и т.д.

    Весь вопрос не в том, что время прошло, а в том, где больше всего железок выпускают и строят фабрики/заводы с автоматизацией.
    Что касается низкоуровнего программирования, то время совсем не прошло и специалисты требуются постоянно. Вопрос в другом, что эти специалисты практически не нужны (увы) на наших просторах. Я знаю десяток фирм, в которых есть отделы разработок (сам когда-то возглавлял такой), там специалисты нужны постоянно. Еще знаю с десяток предприятий, которые делают свои железки, там тоже нужны программисты. И всё! Если вы живете в городе-миллионнике, то работу по программированию железок вы найдете в легкую, и очень хорошо оплачиваемую, и интересную (что не всегда)!
    Но если вы родились в городе с меньшим населением, задумайтесь о переезде, возможно и совсем туда.
    Ну и еще немного сменились акценты, если раньше все пытались разработать свою железку, и написать под нее ПО, то теперь для подавляющего числа задач можно взять любой ПЛK и просто посадить инженегра, который на языках МЭК составит вам блок-программу.
    Но тем не менее, область низкоуровневого программирования цветет и пышет.
    Возможно, с выпуском отечественных CPU/SOC и нацеленностью на это нашего законодательства, ситуация как-то и будет меняться в лучшую сторону.
    Ну а пока, в основном хорошо живут те, кто занимается аутсорсом ПО на чужие железки (в основном забугорные).
    Ответ написан
  • Для чего читать Таненбаума?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    А вот я Таненбаума не читал. Сети можно изучить и без него, например
    "Компьютерные сети. Принципы, технологии, протоколы. Учебник для вузов", Олифер & Олифер.
    Ответ написан
  • Как научиться понимать как работает память на низком уровне?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)

    Интересует момент начиная от. Вот объявляем мы переменную и что происходит дальше и как дальше структуры и классы располагаются в памяти.

    Все сильно зависит от используемого языка программирования, типа архитектуры, и извратов программистов, исследователей и математиков.
    Рекомендую прочитать вот это, все очень понятно и в картинках - www.cs.virginia.edu/~evans/cs216/guides/x86.html
    Ответ написан
  • В каком формате ТВ приставки (ростелеком / т.п.) принимают сигнал? Как его можно программно сымитировать?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Сигнал принимается потоком мультикаст в формате MPEG2TS с кодеком MPEG4 или MPEG2. Сымитировать по простому можно через плеер VLC. Протоколы RTP или UDP для мультикастовой рассылки.
    Вот так это можно сымитировать - https://wiki.videolan.org/Documentation:Streaming_...
    Но скорее всего у вас не получился принять этот поток на приставку, так как она наверняка привязана к провайдеру и у вас не получится ее переключить на собственный канал.
    Ответ написан
  • Как передать выполнение программы на сервер?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Здесь есть несколько вариантов.
    1) сделать свой софт на основе какой нибудь message queue. Вариантов масса, начиная от rabbitmq и заканчивая hadoop.
    2) использовать что-то типа библиотек mpi.
    3) поставить систему PBS типа sungrid, torque или htcondor.

    Как раз с htcondor мы сейчас и развлекаемся, переводим кластер с сангрида на него.
    Система не из тех, что "установил и поехал". Но вменяемая дока и хелпы.
    Ответ написан
  • Как протестировать программу на совместимость с разными ОС и архитектурами?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Собственно да. Обычно так теперь и делают, разворачивают парк виртуалок и в них тестируют. Очень удобно. Устанавливаете один раз, делаете копию чистойсистемы и аждый раз с чистой системой. Более того, если у заказчика какое-то специфичное окружение, то его очень просто развернуть и в виртуалке, вплоть до проброса туда соответсвующего оборудования ( но не всегда оно пробрасывается, увы).
    Ответ написан
  • JDBC всегда стараться использовать PreparedStatement?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Лучше всего использовать именно PreparedStatement, если не используете какой нибудь ORM.
    1) Это безопасно, так как исключает позможность SQL-injection
    2) Это типо-безопасно - java-way.
    3) Это быстро, в некоторых типах jdbc-драйверов они компилируются в хранимые процедуры на стороне базы (например в sybase/mssql и oracle) или в псевдокод на стороне java, а также они кешируются.

    Пользуйте везде, где можно именно PreparedStatement - javarevisited.blogspot.ru/2012/08/top-10-jdbc-best...
    и javarevisited.blogspot.ru/2012/03/why-use-prepared...
    Ответ написан
  • Каковы перспективы программиста МК? Как обстоят дела на рынке Embedded?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Ассемблер не нужен! Учите С!
    Ассемблер нужен только в очень редких случаях, например поменять регистры при переключении контекста при разработке мультизадачной RTOS, написании критической секции IRQ до вызова обработчика или при портировании на новую платформу для заполнения таблицы таймингов, или поправить регистры при вызове C-кода. Да и во всех этих случаях все уже написано, нужно будет исправить только пару-тройку мест, да и то, если новый чип с новой архитектурой. Да, еще знание ассемблера нужно, если разработываете свой компилятор языка высокого уровня на совершенно новую архитектуру.
    Во всех остальных случаях ассемблер не нужен, никогда. Так как он прекрасно генерится практически любым современным компилятором с любого языка высокого уровня.
    Наверное единственное исключение, совсем уж маленькие микропроцессоры, да и здесь я бы сильно поспорил.
    Времена, когда драйверы, операционки и программы писались на ассемблере, прошли безвозвратно.

    Что касается рынка программирования для микропроцессоров - он огромен. Только в здании, где мы арендуем площади, с десяток фирмочек заняты разработкой собственных железок под всяко разно. Начиная от электронных замков, и заканчивая обработкой радарных данных.
    Ответ написан
  • Почему модуль socket в python обрезает данные при приеме независимо от параметра в функции recv?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Просто вы неправильно эти данные принимаете. Если посмотреть описание функции recv, то она возвращает реально принятые данные, которые могут быть порезаны. В вашем случае нужно в цикле принимать данные, пока не будет достигнута нужная длина. А еще лучше, сделать заголовок, в котором будет храниться длина пакета, сначала принимаете заголовок, потом в цикле принимаете данные на нужную длину. Tcp гарантирует, что данные не перемешаются и будут приходить последовательно, но протокол не гарантирует, что данные будут приходить ровно теми же самыми кусками, которыми они были отправлены.
    Ответ написан
  • Как сделать систему безопасности виртуальных машин?

    leahch
    @leahch Куратор тега Linux
    Я мастер на все руки, я козлик Элек Мэк :-)
    Хорошо, а если я под виртуалкой буду запускать net/freebsd, windows, dos, os/2 прости господи? Увы и ах, контролировать виртуалку можно только косвенными путями, если у нас нет полного представления что гость назапускал:
    - по файловой системе и/или дисковому обмену, да и то, если гость не использует криптографию на диске;
    - сетевому трафику, и опять же, если гость его не шифрует, или там tor не запускает.
    - конечно же можно с помощью vd-x и vd-t смотреть содержимое регистров и памяти, отлавливать всякое I/O.
    Но это же все начинает напоминать игру в ревресинжиниринг кода с получением ключей доступа к какому нибудь платному приложению. Вроде бы приложение и запущено у нас в системе, только ключей требует для совего запуска. Вроде бы как и наш компухтер, а не мы хозяева-то приложения. И дебагеры вроде как можем запускать и менять регистры всякие, только хрен там...
    Что-то не нравится мне такая тема диплома...
    PS. Я вот тут намедни запускал Windows NT4.0 SP3 в виртуалке. Запустилось, грустное это занятие, скажу я вам... Драйверов нет, проброс старых PCI-плат - ужас. Новые не работают, драйверов нет, да и ПО их не поддерживает. Сама NT еще та девочка с косичками из фильмов Хичкока...
    Ответ написан
  • Чем отличается JDBC от ORM?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    JDBC- интерфейс для sql-запросов. Работаете с голыми sql-запросами и оперируете таблицами, строками, колонками и значениями. Если результаты запроса нужно положить с объекты, то сами их туда распихиваете.
    ORM - интерфейс для мапинга классов на таблицы, строки, колонки и значения базы данных. Работаете с java-объектами, sql-запросы за вас формирует ORM. Другими словами, не задумываетесь (почти), каксоставить sql-запрос, вытащить из него данные и раскидать значения по своим классам.
    Предпочтительнее конечно работать с ORM, так как все за вас будет оптимизировано и закешировано. Конечно, нужно будет знать, не только как работает ваша база данных, но и как работает ваш ORM.
    Ответ написан
  • Какую структуру данных выбрать для хранения данных в памяти?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    А зачем непосредственно в приложении это делать? Возьмите, к примеру, redis.io, в нем и храните. Там не только sortedset, но и hash и и сounters и еще кучу всего реализовано. Работает быстро, лежит в памяти, кластеризуется и шардируется.

    В вашем случае удобней было бы держать ваши атрибуты в sortedset, где имя коллекции = атрибут, а значениями - id пользователей.
    Ответ написан
  • Где хранят вызовы функций нормальные люди?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Товарищ VoidVolker очень правильно все расписал.

    В просторечье это выглядит, у меня, так:
    - пишем код,
    - видим, что часть кода повторяется
    - выносим повторяющийся код в функции
    - этих функций становится много
    - выносим эти функции в модуль
    Тоже самое делаем и с классами.
    Про декомпозицию - логические куски кода раскладываем по разным деревьям-модулям.
    Ответ написан
  • Как открывать файлы txt в программе на python?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Что тут может не работать?
    Встать в каталог, где есть файл
    with open("Sante-1.csv") as f:
        r = f.read()
        print(r)

    Ну или кому как нравится. И да, можно указывать полный путь
    f= open("/Users/leah/Documents/Sante-1.csv")
    r = f.read()
    print(r)
    Ответ написан