Ответы пользователя по тегу Программирование
  • С чего начать написание своего софта(парсера)?

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

    Если речь о браузере, то языки - это javascript, html и css.

    Ну и помним про два отличающихся подхода - простой но ресурсоемкий с использованием готового браузера (инжект своего javascript плагином браузера или что то типа selenium) либо сложный но эффективный - симуляция http запросов из своего приложения. Оба подхода на противоположных сторонах, но в конечном счете оба будут использованы, где то один где то другой.

    p.s. сообщество полюбило python и javascript (node), я часто использую php, в т.ч. как часть комплекса, так как на питоне и javascript код получается многословнее. Кому то нравится java или c# (использовал когда можно было браузерный компонент легко в свое приложение вставить)
    Ответ написан
    Комментировать
  • Актуален ли ассемблер на сегодняшний день?

    @rPman
    Ассемблер это больше философия чем язык программирования. Понимать что это такое и как минимум быть готовым хотя бы читать и понимать листинги, сгенерированные компилятором и отладчиком, нужно для решения низкоуровневых проблем, в т.ч. производительности, когда другие способы уже не помогают.

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

    Области - реверсинженеринг, низкоуровневая оптимизация и низкоуровневая отладка unmanaged кода (т.е. к примеру c,c++). Все это можно встретить и в разработке для микроконтроллеров, и в оптимизации кода для gpu и поиске причины, почему простой цикл кратно работает медленнее из-за вот этой 'безобидной строчки'.

    Но повторюсь, без ассемблера живется неплохо.
    Ответ написан
    9 комментариев
  • Какой инструмент может превратить схему БД в панель управления или админку?

    @rPman
    Что то мне говорит, что в общем случае это невозможно, как помощник можно использовать chatgpt и аналоги.

    Прямо хочется назвать этот инструмент - называется фрилансер
    Ответ написан
    1 комментарий
  • Как автоматизировать работу с .xcf GIMP-шаблоном?

    @rPman
    в linux установка пакета gimp-plugin-registry добавляет в т.ч. пакетную обработку, возможно она тебе подойдет
    Ответ написан
    Комментировать
  • Можно ли написать скрипт/автотест с подсчетом действий на странице?

    @rPman
    Да, есть два подхода - либо встраиванием javascript на страницу с помощью расширения (свое или tempermonkey или упрощенный вариант для SPA приложений - просто вставить его в отладочную консоль браузера) который будет все делать либо стороннее приложение, управляющее браузером, например известный всем selenium (само приложение пишешь на любимом языке программирования). Оба варианта подразумевают что страница открывается в настоящем браузере.

    Свой javascript скрипт выглядеть будет так - ищем нужный эелемент (например document.querySelector('css-selector') и к нему вызываем .click() или что тебе нужно (можно смотреть текст .innerText или так же искать querySelector....) а чтобы между действиями была пауза, используем setTimeout. Если нужно собирать информацию, ее можно складывать в localStorage/web storage либо http запросами отправлять на свой сервер (осторожно, если страница https то и твой сервер тоже должен быть https, так же в браузере должны быть разрешены CORS)
    Ответ написан
    Комментировать
  • Как версионировать на начале разработки?

    @rPman
    Оба варианта.
    Номер версии меняется с каждым релизом, даже если это багфикс.
    Но релиз может содержать сразу несколько фич так и одну.

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

    @rPman
    Первое, не издевайся над человеком, собери стационарный компьютер. Ноутбук нужен потому и только для тех, кому жизненно необходимо 'работать' вне дома (без розетки с электричеством).

    По факту - ноутбук для дома это устройство потребления контента и развлечения. Ноутбук как и планшетник это 'второе устройство', а не основное.

    Чисто технически ущербная клавиатура (а производители 99% ноутбуков ее делают таковой) неудобна для активного использования. Соотношение цена/производительность у ноутбуков в разы выше чем у стационарных компьютеров, и если ваш ценовой диапазон ниже 1к$, там все еще хуже - куча компромиссов.

    Теперь по теме - собирая стационарный компьютер для ребенка для обучения и развлечения (вы же не изверг да?), выбирай
    + максимально быстрый и емкий диск (ssd nvme от 512Gb, не экономь и не бери самые дешевые, бери все что имеют гарантию 3года минимум)
    + любой HDD (пусть будет даже дешевая тошиба 3Тб, лучше 2 для использования в RAID mirror на случай смерти диска)
    + максимально большой объем RAM (минимум 16Gb, но разработчику лучше максимизировать до упора, 32Gb облегчит работу с виртуалками, а 64Gb+ откроют доступ к тем же языковым нейронкам LLM, да медленно, но бесплатно и у тебя на руках)
    + видеокарта от nvidia 3060 12Gb VRAM (цены на нее от 33т.р., да медленная, но это младшая серия из тех видеокарт что дают возможность и играть в топовые игры на средних и играть с современными нейрогенеративными моделями, да и просто свои нейронки, VRAM там очень нужна).

    Про процессор там или выбор материнской платы - это уже не так актуально, выбирать по совместимости. Дело в том что различия в производительности процессоров с разницей в цене 2х будет считанные проценты, да за 5к$ можно собрать топовое железо которое будет раза в 2 быстрее железки за 500$. И я говорю не про цифры бенчмарков, а реальную производительность и отзывчивость на 99% задач, которые требует single thread производительность. Современный софт/игры обычно ориентируются на 6-ядерные процессоры (12 hyperthreading) и вполне нормально будут работать и с меньшим их количеством, когда как топовое железо будет содержать десятки ядер, которые нагрузить сможет только очень небольшое количество специфических задач.
    Ответ написан
    8 комментариев
  • Как создать мессенджер?

    @rPman
    Почти любой пример websocket (например на javascript и nodejs) это простейший чат без авторизации.

    Так как речь идет о курсовой, т.е. это вопрос обучения, настоятельно не рекомендую брать готовую инфраструктуру (коих не мало в опенсорсе, и не дай бог полезешь во что монструозное то типа jabber) а реализовать все самому, чтобы прочувствовать.

    Тем более задача не такая уж и сложная.
    * тебе нужен интерфейс пользователя и возможно администратора
    * тебе нужна серверная часть, поддерживающая: авторизацию пользователей, хранение и доставку сообщений

    Используя браузер в качестве платформы пользовательского интерфейса можно значительно сэкономить на разработке (отображение любой мультимедиа и даже простой апгрейд до аудио/видео чата, например на основе webrtc).
    Ответ написан
    Комментировать
  • Шаблонный код: Чем можно удобно генерировать код для автоматизации сборки по шаблону?

    @rPman
    Я использовал php для генерации кода, в т.ч. других языков программирования.
    Это очень простой, легко читаемый, поддерживаемый редакторами (раскраска, автодополнение,...) изначально создаваемый именно как генератор (текстов и html) на основе программируемого шаблона. Поддерживается всеми популярными ос и платформами (различия минимальны, в задачах шаблонизации не существенные)
    Ответ написан
    3 комментария
  • Является ли Не перенос строки синтаксическим сахаром?

    @rPman
    Я соглашусь с отписавшимися с небольшой оговоркой, для питона (а тут явно он) переносы и отступы - важная часть синтаксиса, поэтому я бы считал такую возможность - синтаксическим сахаром
    Ответ написан
    1 комментарий
  • Какая библиотека лучше всего использовать для голосового ассистента (бесплатно без регистрации) на C#?

    @rPman
    Хорошее и бесплатное не совместимы, можешь попробовать 'воровать' у Гугла, запилив веб приложение и запускай его в google chrome, на сколько я знаю оно использует облачное распознавание, тебе можно то же самое использовать от Яндекс браузера, у этих обоих лучший движок распознавания русской речи
    Ответ написан
  • Какой язык программирования выбрать для изучения основ работы с алгоритмами и структурами данных?

    @rPman
    Язык программирования выбирают под наличие инструментов, написанных для этого языка, для решения поставленной задачи.

    Только в этой последовательности и не наоборот.

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

    Если говорить про структуры данных в смысле - сетевые пакеты, сериализация данных на диске и хранение переменных в памяти, то изучать лучше прямо с низов, с С, затем С++ std, который основательно поломает мозг, но без основ си это будет сложнее.

    Почему си? потому что когда начнешь ковыряться с отладчиком в дампах памяти (программ на любых языках программирования), именно эти знания тебе понадобятся, а не наслоения синтаксического сахара и абстракций высокоуровневых языков.

    Если же тебе это не нужно (а бывает не нужно), то и не заморачивайся
    Ответ написан
    Комментировать
  • Какую область программирования выбрать PHP или Java?

    @rPman
    в данном случае язык определит направление дечятельности

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

    java - если смотреть на рынок, это в первую очередь мобильный гейминг android,.. не потому что язык такой, просто так звезды сложились.
    Если спросить меня, какой язык выбирать для создания крупного проекта с долгой поддержкой для бизнеса, java я бы выбрал ну очень в последний момент. Очень многословный язык, да код получается красивым, меньше мест где можно выстрелить себе в ногу и т.п... Из бонусов - кроссплатформенность (как железа так и ОС), уже не такая уж и уникальная опция.

    то о чем в вопросе не было спрошено:

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

    javascript - занял очень интересную позицию в мире, благодаря nodejs он может быть как web бакендом, так и способом разработки браузерного интерфейса на стороне клиента, так и десктопные приложения (electron, чтоб его...) и даже как язык для unity игрового движка, т.е. получается язык получает статистический прирост с нескольких областей а не одной как остальные.
    У языка есть недостаток - как и у php (но он старается избавиться от этого) - свободная типизация, странная реализация ООП и другой синтаксический сахар типа асинхронности (это кстати его плюсы) увеличивают шансы выстрелить себе в ногу и усложняют поддержку проекта на долгосрок (там вообще много где проблем найти, как пример, берешь любой проект с гитхаба с датой последнего комита 3-4 года и пробуешь его обновить и поддержать, советую посмотреть что аудит безопасности npm будет вам писать).

    c# - надо ставить рядом с java (он и .net и создавался майкрософтом как главный конкурент), так же благодаря unity движку, захватывает часть статистики из геймдева. К сожалению, выбор языка гвоздями (да есть способы освободиться, но за все приходится платить и чего то лишаться) прибивает разрабатываемый продукт к майкрософтовской экосистеме, за который бизнесу приходится платить неплохой 'налог', поэтому если у тебя не unity то скорее всего ты либо поддерживаешь какое то легаси либо... ну мне нравится на .net формочки к базе данных делать, нигде такого легкого инструмента который дает ms visual studio и .net - нету, но, если прямо так хочется, там можно и на python.net писать, и на c++.net, и вообще какая разница какой язык программирования, в мире разработчика главенствуют фреймворки и среды разработки.
    Это я к чему - найти деньги с этими знаниями можно только по везению.

    Все остальные языки типа R, Rust, go и прочая экзотика - это издевательства над работодателями.. т.е. если ты найдешь по ним работу, это значит работодатель стал заложником не шибко умного системного аналитика (или его отсутствие/совмещение с разработчиком, который для самообразования решил приколоться), т.е. еще большее везение, делать ставку на это я бы не стал. Хотя для самообразования учить Rust или go очень даже неплохо, много открытых проектов пилят именно на go, вполне возможно, когда в мире количество разработчиков наберется до некоторой критической массы, это станет таким же мейнстримом как сейчас php или javascript.

    Так что еще раз - выбор языков программирования в порядке убывания оценки рекомендации (выше-вероятнее найти работу, кстати оценить уровень оплаты тут сложнее)
    php - и он теряет позиции, потому что SPA приложения захватывают мир
    javascript
    python
    - если не нужен вебдев - то это на первом месте
    java/c# (точнее .net)
    go

    если хочешь быть в вебе то php/javascript
    если хочешь в геймдев java/c#
    если хочешь датасайнс то python
    Ответ написан
  • Нужен совет опытных WEB разработчиков?

    @rPman
    Самый неправильный способ обучения - с конца. Это очень неэффективно если не бессмысленно, изучать программирование непоследовательно.

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

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

    Советую изучать с низов, самостоятельно, чтобы было понимание каждого шага, всего что происходит.
    * операционные системы, процессор и многопоточность, сети,...
    глубоко изучать это не требуется но базовые понимания нужны чтобы не получать медленное приложение только потому что не знал что каждый твой запрос в tcp это 'туда-сюда', и это медленно (десятки миллисекунд), что одновременно два человека пытающиеся что то изменить на сайте нужно разруливать чтобы не было конфликтов и т.п.
    * бакэнд и фронтэнд
    буквально что значит запрос и генерация ответа, какие бывают способы организации этого бакэнда (http rest и к примеру websocket), не понимание разницы между бакэндом и фронтэндом у новичков рождает абсурдные вопросы как из javascript изменить переменную php (и наоборот)... в чем разница между генерацией страницы на сервере и в браузере.
    * html, css,..
    верстка и дизайн, отдельный мир браузерных стандартов, исторических наслоений,. когда стоит применять фреймы, почему шрифты по разному выглядят, разные устройства и размеры экранов, разные способы взаимодействия (сенсорный экран, мышь, клавиатура)...
    * базы данных
    еще более огромный мир атомарных транзакций, индексов, нормальных форм и прочего
    * девопс
    без умения выбрать инструмент, настроить тулчейны, среду разработки, среду исполнения (веб сервер), настроить бакапы и прочее пытаться что то разрабатывать это как в слепую гулять по лесу, будешь постоянно на ветки натыкаться
    ...
    это я еще про системную аналитику не сказал, обычно прежде чем что то создавать, нужно продумать как это все делать, что такое технический долг и т.п., а еще есть тестирование, обслуживание, работа с отказами (сервер сдох, база упала, как все восстановить), обновление на живую и прочие веселья

    без понимания всего этого, даже поверхностного, будешь натыкаться на огромные дыры в разработке.
    Ответ написан
    7 комментариев
  • Как заставить код сравнивать ведённую информацию с базой данных?

    @rPman
    Все очень зависит от запросов.

    Самые простые запросы - поиск по конкретному значению, в sql запросе это выглядит select ... from ... where ПОЛЕ = 'значение'
    Как частный случай этого, выбор значения справочника (это такой список значений, обычно выделяют в таблицу с полями id,name а в целевой таблице оставляют идентификатор а не значение) в фильтрации where пишешь ПОЛЕ = идентификатор_из_справочника (в интерфейсе же ты можешь показывать не id а значения из справочника)

    Чуть по сложнее, это запрос по подстроке, как ни странно sql для этого подходит плохо, но если что есть запросы вида where ПОЛЕ like '%подстрока%', в зависимости от наличии % в начале и выбора типа индекса, такой запрос может перебирать все поля в базе или только те что нужно по индексу.

    Сложнее, когда в самой базе, создав соответствующие таблицы и поля, создается собственный 'индекс', некий набор данных, заполняемых либо периодически либо автоматически при обновлении данных (например тригерами), в этом случае ищешь уже не по самим данным а по этим искусственным индексным. Тупой пример - тебе нужен поиск по словам в строке, но база данных это делает плохо (на самом деле есть инструменты чтобы было хорошо но я только ради примера), ты при обновлении базы создаешь записи в соседней таблице на каждое слово с указанием, в какой записи (по id) оно встречается, теперь тебе достаточно искать уже по этим словам а не в исходной таблице.

    Само собой есть еще поиск по дате, агрегатные функции (например поиск по сумме), сортировка, постраничная навигация и прочее прочее, на каждый момент есть свои способы реализации.
    Ответ написан
  • Какого уровня мои познания о пк должны быть, чтобы понять эту статью?

    @rPman
    Понимать внутренности на низком уровне необходимо если твоя программа потребует работу с графикой или звуком, в общем там где нужно выполнять сложные для этого слабого железа вычисления в максимально сжатые сроки.

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

    p.s. если у тебя программа не требует какой либо графики, скорости и код и ее данные умещаются в десяток килобайт, то можешь хоть на бейсике написать
    Ответ написан
    Комментировать
  • VM vs native, какие плюсы и минусы?

    @rPman
    Если рассматривать конкретно llvm то эта инфраструктура может дать оптимизацию на основе выполнения, т.е. собирая статистику работы кода на лету может оптимизировать циклы на столько что итоговая скорость выполнения может стать выше аналогичного кода, скомпилированного нативно (например у меня так llvm код соптимизировал 'почти' не используемые блоки).

    Да, для компиляторов c++ есть анализаторы, собрающие данные путем прогона алгоритма на специально собранных версиях, но маловато кто этим занимается, уж точно 99.99999% проектов что есть этим не заморачиваются (да и сложно это)

    p.s. с другими виртуальными машинами такие тесты сложно провести, а то что я слышал jvm или clr работают медленней нативного, ощутимо
    Ответ написан
  • Хочу писать приложения под Win10, что учить?

    @rPman
    microsoft visual studio, среда разработки, фреймворк и пакет языков c# (плюс managed c плюс vb# и т.п.), мощный комбаин, которого по уму будет достаточно для создания приложения люббого типа, от клиент-серверных до десктопных и мбоильных

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

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

    @rPman
    Реверсить протокол, судя по тому что говорящий сумел узнать url, и он http (не шифрованный), значит сделать это можно не занимаясь отладкой приложения (а это сразу понижает требования к уровню исполнителя), т.е. поставив любой снифер трафика или прозрачную прокси между приложением и сервером.

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

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

    upd. там помимо windows приложения, есть android apk версия, ее декомпиляция проще
    я натравил на него jbart и вижу что приложение написано на lua или очень активно его использует, их тоже можно декомпилировать (но пропатчить уже не получится), просто поиском указанных api http endpoint не увидел (возможно используется иной или как то не тривиально сокрыто)

    код огромный, под сотню мегабайт декомпилированных исходников, плюс полторы тысячи файлов luac
    Ответ написан
    Комментировать
  • Можно ли внутри дэсктопного приложения отследить был ли сделан скриншот?

    @rPman
    В общем случае это сделать невозможно, точно помню с помощью directx (наверняка и opengl/vulkan) можно получить прямой доступ к содержимому экрана или буферам видеокарты.

    На stackexchange посоветовали повеситься на события и анализировать память, буквально всю, в т.ч. на наличие хеадеров jpeg/png/....

    Т.е.запрет возможен только административными способами.
    Ответ написан
    Комментировать