Pull to refresh
138
0.2
Андрей Дмитриев @AndreyDmitriev

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

Send message

@AndreyDmitriev попробовал все, о чем он "подозревал", изложить именно на LabVIEW.

Теоретически можно и на LabVIEW гильотину измыслить, там в общем есть визуальные инструменты для создания автоматов. Хотя я вообще больше по части пром обработки изображений, ну вот к примеру, сортировка и проверка лего деталек:

Или проверка пинов:

Там довольно примитивно всё - есть состояния и есть транзакции-переходы между состояниями, которые срабатывают при наступлении определённых условий. Я притормозил немножко исполнение, чтоб нагляднее было.

Дело вкуса, но мне тоже кнопки удобнее. У меня есть Kindle Oasis с кнопками и Onyx Boox Nova 3 Color c Kaleido Plus а также reMarkable, оба без кнопок, так вот свайп на обоих читалках иногда спонтанно не срабатывает и это при вдумчивом чтении достаёт неимоверно. То ли у меня пальцы слишком сухие, если послюнявить, то заметно лучше получается. Так что читаю в основном на оазисе и каждый раз пользуясь другими, думаю "ну что вам стоило вкорячить сюда пару копеечных кнопок для перелистывания"?

А вы точно ничего не путаете? Туда ставятся патроны LC422, они вообще говоря чипованные и вроде для перезаправки не предназначенные, чтобы "Отвинтили крышечку, долили чернила, закрутили" надо купить соответствующие пустые патроны с чипами. Чипы к ним отдельно тоже продаются (и всё это неоригинал, естественно). А неоригинальные наполненные LC422XL тоже в районе 25 евро за комплект, так что так на так и выходит.

А, понял. Ну тут отчасти личные предпочтения — я пользуюсь hp уже больше 25 лет и в техническом плане меня пока эта техника не подводила. Раньше я вообще заряжал картриджи шприцем из бутылки, потом достало, сейчас toner kingdom покупаю, я б не сказал что барахло, ни внешне ни по качеству печати они от оригинала не отличаются. Не, я честно попытался переползти на другую марку, и купил то ли Эпсон то ли Кэнон, но он довольно быстро отказал, да и конструктивно мне не очень понравился. Из струйников А3 вероятно brother mfc-j6540dw можно было рассмотреть, но и там оригинал патроны комплект 60 евро, а XL комплект под сотню, и вот мы снова смотрим в сторону неоригинальных.

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

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

Это из разряда "как отъять максимально возможное количество денег у покупателя, притом так, чтобы он был свято уверен, что ему это выгодно".

Вот смотрите, у меня дома МФУ HP Office Jet 7720, куплен осенью 2019, ему почти пять лет (53 месяца, если быть точным). Отдал я за него 180 евро по какой-то акции-распродаже. Картриджи 953XL оригинальные нынче на амазоне стоят 180(!) евро. Я беру неоригинал за тридцать (он их вполне принимает после даунгрейда). Сейчас установлен пятый комплект картриджей, суммарно расходы 180+30*5 = 330 евро за пять лет. Отечатано на нём по счётчику 3718 листов, это в среднем 70 страниц в месяц. Мне предлагают план за 17 долларов, и это будет 17*53 = 901 доллар, почти втрое дороже. Кроме того, нагрузка у него очень неравномерная, он может пару-тройку месяцев вообще почти не использоваться, а может неделю интенсивно (в основном он нужен детям-гимназистам и супруге - она учитель рисования). Доставка картриджа на следующий рабочий день — вообще смешно, если надо что-то срочно напечатать, а у меня всегда лежит запасной.

Кстати, а в чём смысл оборачивать циклы for в фигурные скобки?

Бывает, некоторым платят именно за количество строк кода. ;) В данном случае можно теоретически даже как-то так уплотнить:

void Walls()
{
SetColor(Blue , Black);
for(int m = 6; m < 14; m++){SetXY(15,m);cout<<"*"; SetXY(30,m); cout<<"*";}
for(int m = 15; m < 31;m++){SetXY(m,5); cout<<"*"; SetXY(m,14); cout<<"*";}
}

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

Только я хотел написать, что бабочка - это насекомое, а не животное, а оказалось — таки да, animals.

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

Монорепозиторий - это в том числе про управление зависимостями. Насколько он применим - зависит в общем от структуры проектов. Я использовал такой подход ещё с конца девяностых, где-то до 2007 года. Тогда мы хранили код, используя Microsoft Visual SourceSafe, была такая штука (ни TFS ни Git в то время не было, они где-то в 2005 появились). Так вот в SourceSafe была такая фишка, которая называлась "Линки". У меня проекты были основаны на плагин-архитектуре. В монорепозитории эти плагины хранились все скопом, а вот для каждого отдельного проекта заводилась виртуальная папка, куда необходимые модули линковались из монорепозитория. Если там были файлы, специфические для конкретного проекта, то в монорепозиторий они не попадали. Это было очень удобно. Я мог посмотреть как историю по отдельным проектам, так и по монорепозиторию целиком. Когда я забирал из репозитория код проекта, то на диске у меня появлялиь лишь файлы, исполользованные в проекте и ничего лишнего. Важно было то, что отдельные модули были вообще никак не связаны, технически все вызовы отправлялись в микроядро, а межмодульные вызовы были строго запрещены. Общались модули между собой, устанавливая соединение в рантайме через именованные очереди. Модулей было около трёхсот, а проектов -где-то полтора десятка, какой-то проект мого использовать 50-70 модулей, а какой-то - 20-30, из из модулей проекты собирались как из кубиков Лего. Ну и когда добавлялся новый функционал, то это само собой автоматом распространялось на все проекты, в которых этот модуль использовался. Всё бы ничего, но MS VSS проект был закрыт, на смену пришёл TFS. И компания решила напрочь выпилить линки, потому что мало кто их использовал и вообще это "плохая практика". Это действительно может быть плохой практикой, устроив ад из зависимостей, но при слабой связанности - было самое то. Короче, была куча дискуссий, и в ответ производитель TFS лишь писал - ну нет проблем, сделайте линки на вашем диске, на клиентской стороне. Так можно, конечно, но это абсолютно неудобно. Мы перебросили код в TFS и как-то выкрутились, но линки жаль, у меня теперь весь монорепозиторий валяется на диске и при работе с конкретными проектами я постоянно натыкаюсь на "ненужные" мне в данный момент артефакты. Конкретно сейчас мы переезжаем с TFS в Git, надо будет разобраться, как там.

Ещё в качестве примера программирования без переменных можно привести графическое программирование, основанное на парадигме потоков данных (Data Flow).

Предположим я хочу вычислить (x+y)*z. Можно сделать вот так, заведя переменные (так обычно не делают, но тем не менее), в LabVIEW вот так:

Но можно выкинуть все переменные, оставив лишь потоки данных (так обычно и делают)

Ну и поскольку имена переменных имеют лишь номинальное значение, а мы всё равно в хабе "ненормальное програмирование", а с фантазией у нас не очень, то можно обойтись одним именем "а", и сделать вот так:

И если в вашем мозговыносящем примере, слегка поднапрягшись, таки ещё можно сказать о результате выполнения кода, то в данном случае, глядя на код, уже невозможно наверняка утверждать, какой получится результат, не запустив его. Конечно, статический анализатор вывалит кучу предупреждений, но формально этот код вполне себе валиден. По большому счёту при программировании на "потоках данных" переменные — вообще зло, они "разбивают" потоки данных и в этом смысле сродни оператору GoTo.

Я не являюсь профессиональным вирусологом или микробиологом, чтобы утверждать это наверняка, без сомнений, хотя я полюбопытствовал, даже скачав геном этого вируса и био софт и стараясь разобраться в статьях про белки и всё такое (в карантин было нечем заняться) но там требуется поднять довольно большой пласт знаний, а я физик по образованию. Для себя я сделал вывод, что эта штука похожа на маленького робота, в её устройстве в общем неплохо разобрались. Меня зацепили два факта - это началось очень резко, и хотя коронавирусы известны давно, но ярких вспышек там и сям я как-то не припомню, а они, вероятно, с постепенными мутациями, должны были предшествовать большой пандемии. Ну и помимо того, что это столь лавинообразно началось, так это случилось прямо возле биолаборатории, вот ведь как им с местом не повезло. А с летучими мышками-носителями заражёнными места там тоже есть, да, но вроде чуть отдалённее. Так что я за пробирку, хотя это просто моё ничем не подкреплённое субъективное мнение, которое тем не менее имею право высказать. Тесть мой, ещё не старый, этой штукой заразился - полторы недели в реанимации и нет его.

у людей, у которых хватает интеллекта чтобы работать в 1 из 2 лабораторий в мире и собрать вирус по техзаданию, не хватает интеллекта, чтобы отъехать в другой населённый пункт дабы поселить его in vivo.

Я считаю, что кто-то просто грохнул пробирку по неосторожности, не соблюдая ТБ, потом сходил на рынок купить покушать и приехали. Но истины мы скорее всего уже не узнаем.

Спасибо! У меня, правда есть некоторые специфические требования, типа проекты с идентификаторами и "активность" (так как я это в SAP потом забиваю), но это всё решаемо. Я сейчас просто в Excel учёт веду, и далеко не всё мне нравится.

У меня, читая это, сразу родился план тайм трекера. Надо будет попробовать, там допилить всего ничего. Тайм трекеров куча, в том числе для Обсидиана, но что-то в этом подходе есть.

А в каких сценариях реального использования может пригодится такой функционал?

Как пример — предположим у меня есть ПЛК, наружу из него торчит Modbus TCP, и я разрабатываю десктопное приложение, которое с ним общается. Держать ПЛК на столе неудобно, соответственно программа выступает "заглушкой", к которой я и подсоединяюсь вместо настоящей железки. Ну и когда я что-то пишу, то сразу вижу чего и в какой регистр записалось (на самом ПЛК это смотреть опять же не всегда удобно), ну и вручную могу какие-то регистры установить и их читать. Логики там не надо, просто статические регистры. Этакий примитивный "эмулятор". Ещё вот был случай, когда соединение разрывалось по таймауту, и чтобы определить, какая сторона "глючит", такая "независимая" программа была бы кстати.

В принципе, конечно, разные, хотя это не мешает и их сравнивать. Modbus с Profibus тоже в общем сравниваются с некоторой натяжкой. Я просто общий тренд в промышленной автоматизации имел ввиду.

Навскидку проверил с библиотекой NI Modbus, и оно работает, спасибо!

А сервером (в смысле слейвом) ваша программа может выступать? Ну чтобы она просто слушала 502-й порт, а я бы к ней подключился?

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

Баг как есть:

Profibus обеспечивает более скоростную связь, чем Modbus.

К этой фразе можно придраться, тем более вы сами ниже про Modbus пишете, что "До 19,2 Кбит/с в последовательном режиме, выше в TCP/IP". В теории фреймы Modbus можно и через гигабитную сетку гонять, лишь бы устройства с обеих сторон поддерживали.

Вообще я в данный момент наблюдаю массовый переход на Profinet и OPC UA, уже много лет ни в одной новой системе мы что Profibus, что Modbus не использовали.

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

Любопытно, а просто зарегистрироваться как Selbständig (что занимает 20 минут в Ратуше и 20 евро) было в данном случае недостаточно (теоретически ведь могло бы прокатить из разряда "Freie Berufe" со всякими wissenschaftliche бла бла бла) или нет?

Information

Rating
2,317-th
Location
Ahrensburg, Schleswig-Holstein, Германия
Date of birth
Registered
Activity