Ответы пользователя по тегу Программирование
  • Как разрабатывать красивые интерфейсы в Desktop-приложениях?

    Вас какая платформа интересует вообще? И как конкретно ДЛЯ ВАС коррелирует красивость с нативностью для платформы? Для меня например это важно, но может для вас - нет.

    Для дотнета есть Avalonia UI и Uno Platform, это если кроссплатформенно. Если нативно под Винду, то актуальной технологией считается WinUI 3 (статейка на Хабре).

    HTML/CSS в десктопных приложениях я люто ненавижу, поэтому про Electron/Tauri ищите сами :D Не буду подталкивать ещё одного человека к такому технологическому решению.
    Ответ написан
    Комментировать
  • Как лучше вносить изменения в стороннюю библиотеку С?

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

    Ответ на ваше уточнение.
    а соединять куски программ или целеком в зависимости от ТЗ уже кем то написаные?

    На сегодняшний день это и есть основная работа большинства разработчиков. Они берут "куски программ", т.е. сложные, отлично написанные библиотеки, и соединяют их в зависимости от ТЗ. Если задача типовая - под неё уже наверняка кто-то написал или пишет библиотеку (вот такие программисты ленивые и изобретательные), если задача НЕтиповая, т.е. её решение нужно и ценно только ВАМ - ну тогда логично, что за вас её никто ещё не успел написать. Огромное количество задач в разработке ПО уже решено с помощью библиотек. По сути в каждом новом проекте вы пишете лишь небольшой кусочек кода, который решает именно вашу задачу. ОСОБЕННО это касается всяких стартапов и PoC, которые по сути и есть склеивание библиотек плюс небольшой кусочек бизнес-логики для демонстрации идеи.

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

    Ну да, его много. Это всё - библиотеки.

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

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

    Существует много готовых кодов, частей программ или целиком

    Вам нужно понять, что фрагмент готового кода, особенно если он достаточно крупный (не 10 строк, а, допустим, 10 тысяч строк) ценен тогда, когда у него есть хорошо описанный интерфейс (API) и хорошо поставленные требования к нему, который этот код выполняет. Это всё и есть часть определения понятия "библиотека".
    А если у вас в распоряжении трёхстраничный gist на гитхабе, то фиг вы его куда прикрутите, пока не разберётесь, что там написано. А с учётом того, что идеально этот кусок кода всё равно вам не подойдёт, то ещё и выяснится, что проще с нуля написать.
    Ответ написан
    1 комментарий
  • Есть ли сайт, где собраны общепринятые практики программирования?

    но про что обычно не пишут в книжках

    Что вы, в книжках как раз такое и пишут. Вот например, ваш вопрос про хранение хэшей паролей, а не их plain-text представления, наверняка прекрасно рассмотрен в книге https://www.amazon.com/Web-Application-Security-Be... . Это первое что мне попалось в поиске, но судя по индексу и содержанию, там это всё 100% будет.

    прочитав учебник, начинает чтото писать и только потом случайно узнает

    Да, возможно такое, учебник ведь не один нужно прочитать.

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

    Вы по большому счёту спрашиваете - где я могу найти сайт, чтобы пройти этот путь за N дней/недель. Вы не одиноки - все так хотят. Более того, многие думают, что "тот чувак" когда-то нашёл такой "сайт" и поэтому такой молодец теперь.

    Если бы был такой "сайт", сеньорам с 10-летним опытом, которые лет 15 (10 лет полноценного стажа ПЛЮС лет 5 обучения и подработок) собирали информацию из тысяч истоничков и испытывали её на себе, не предлагали бы зарплаты в сотни тысяч рублей.
    Ответ написан
    1 комментарий
  • В какую область копать, чтобы создать программу - "мини драйвер"?

    Nipheris
    @Nipheris Куратор тега C++
    Ну возьмите boost::asio и сделайте Windows Service или демон, который установится вместе с драйвером устройства. С помощью boost::asio прочитаете и COM-порт (см. библиотеки для устройств puloon-cxx и ccnet-cxx для примера) и по TCP/IP сможете передать (примеров в сети тоже достаточно). Стоит ли использовать для этого плюсы - вам решать.
    Ответ написан
    Комментировать
  • В чём причина постоянного переделывания кода?

    Заказчик хочет чтобы разработчик сделал сложное приложение.

    Причина 1: обычно заказчик хочет, но не знает чего конкретно. Фишка в том, что разработка приложения, у которого ещё нет аналога - это... не только разработка приложения. Это ещё и выяснение того, что действительно нужно, начиная с пожеланий по UX, и заканчивая оптимизацией бизнес-процессов во всей компании (это когда заказчик внезапно говорит "слушайте, и правда, на кой чёрт мы печатаем эту накладную каждый раз").

    КПД получается крайне низок.

    Причина 2: вы не учитываете причину 1 при расчёте КПД и думаете, что проделали мало работы. Да, приложение ещё не готово или делается очень долго, но это не потому что вы мало работаете, а потому что работы намного больше, чем казалось.

    но идёт на удаление или переделку из-за того, что что-то не так.

    Причина/особенность 3: иногда это неизбежно: бизнес меняется, потребности - тоже.
    Иногда этого можно избежать, не заводя требования слишком "далеко" - очевидно, нет смысла реализовывать то, что УЖЕ СЕЙЧАС кажется неподходящим под требования, НО это далеко не всегда вовремя замечают. Над проектом работает много людей, у всех немного разные представления о задаче, или ещё хуже: не все и далеко не всегда говорят о проблемах с системой, которые уже виднеются "на горизонте", говоря что "в ТЗ всё написано, а мы делаем по ТЗ". Можете погуглить статьи о стоимости ошибок на разных этапах разработки.

    Причина 4: заказчик, разработчики или и те и другие не умеют останавливаться и выбирать необходимый и достаточный функционал для первого или очередного релиза. Я в последнее время убеждаюсь, что это целая наука - вовремя остановиться и не расширять список "супернужных" фич, из которых треть окажется почти невостребованными. Особенно часто это бывает, когда бизнес уже работает как-нибудь (например, на экселевских табличках или Access-овских базах), а теперь пришла пора автоматизации, но релиз постоянно откладывается, потому что "и это хочется, и то бы сразу сделать". Иными словами, иногда нужно решиться на гарантированные переделки в будущем ради релиза сейчас. Оценка возможности и стоимости таких "переделок" - т.е. подождать и переделать сейчас или зарелизиться и переделать потом (соответственно, с удорожанием "переделок") - и есть та самая наука. Разработчик обычно видит только архитектуру, и раньше понимает её недостатки/ограничения, ему сложно решиться на релиз того, что не будет идеально решать поставленную задачу.
    Ответ написан
    Комментировать
  • Как получить список методов, свойств, полей, событий, классов, структур, интерфейсов в C#?

    Nipheris
    @Nipheris Куратор тега C#
    Ваши два способа - это решения совершенно разных задач. С помощью рефлексии можно получить информацию о сущностях (методах, свойствах, классах, полях, ... ) в уже скомпилированных сборках. Рефлексия не работает и не может работать с исходным кодом никак. С помощью "самописаного парсера" (вообще я бы советовал вам взять Roslyn-компиляторы) вы можете обработать исходный код и получить из него всё что вам необходимо, но тогда вам нужен собственно исходный код.

    Вы какую задачу решаете-то?
    Ответ написан
    Комментировать
  • На каком уровне системный архитектор должен знать технологии?

    Дисклеймер: я не системный архитектор, и даже не знаю, кто конкретно должен так называться, наверное это что-то вроде технического директора.

    Или у меня чрезмерно идеалистические представления о роли архитекторов в разработке?

    Да, чрезмерно. Архитекторы (как вы их называете) не боги и даже не "вторые после бога".

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

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

    Опять же, отрасль очень бурная - когда успевать работать и следить за всем, что в ней происходит?

    А надо уметь главное выделять. Ну к примеру, вот позавчера анонсировали докер на винде на нативных контейнерах. Что нужно знать хорошему техническому директору? Что в 2016-й винде есть контейнеры (причём двух видов, настоящие и поверх hyper-v), что докер теперь будет их использовать со всеми вытекающими. Само собой нужно представлять что такое контейнер и чем от отличается от ВМ. Вот и всё что нужно знать, ну и посматривать за отзывами первых, кто осмелится опробовать технологию в деле.

    Ну или вот возьмём TypeScript. Не обязательно писать на нём или знать его досконально. Достаточно понимать, что такое статическая типизация в языке, и уже можно будет представить разницу между использованием в большом проекте ES5/ES6 и TypeScript. Достаточно принять решение опробовать его у себя (как сейчас делаем мы) на небольшом куске проекта, и сделать вывод о дальнейшем использовании.

    Возьмём, наконец, базы данных. Не думаю, что хороший "архитектор" обязан знать, что в какой-нибудь Монге какие-нибудь запросы с агрегацией по двум свойствам работают в 5 раз медленнее, чем по одному свойству. Однако то, что в Монге нет атомарной записи сразу нескольких документов, знать очень полезно, я бы даже сказал, критично (иначе можно пытаться написать какой-нибудь биллинг на Монге вместо какой-нибудь реляционной базы, и сорвать пучок проблем).

    Техническому директору проекта ("архитектору") гораздо важнее уметь правильно обрабатывать информацию, уметь снимать маркетинговую шелуху (вроде той, что была и есть с NoSQL от всех проблем и несчастий), спокойно реагировать на модные баззворды, и собирать библиотеку доверенных людей и информационных ресурсов. И важно знать о вещах, которые с течением времени не меняются, или меняются медленно и неохотно:
    • для каких задач подходят функциональные языки, а для каких - ОО;
    • что графовая СУБД как правило быстрее обрабатывает запросы на поиск с большой длиной цепочки;
    • что утверждение из предыдущего пункта неплохо бы проверить на практике с конкретными СУБД;
    • что веб-фреймворки бывают толстые и тонкие;
    • какие сегодня есть вариации паттерна MVC;
    • что сборка мусора это всегда накладные расходы и иногда не вполне предсказуемое поведение;
    • что данные от пользователя нужно фильтровать, иначе в вашей системе найдут машину Тьюринга не там, где надо;
    • что в информационной системе есть компоненты с разным уровнем доверия, равно как и сотрудники;
    • что транзакции в СУБД придумали не для того, чтобы учебники стали толще.
    Ответ написан
    4 комментария
  • Чем разбирать на составляющие аудиофайлы?

    Nipheris
    @Nipheris Куратор тега C#
    Ответ написан
    Комментировать
  • Программирование с ноля. Не студенческий возраст. С чего начать?

    Итак, раз для домашнего пользования, то Java лучше отложить. В принципе они примерно равны с C# по весовой категории и областям применения, но ИМХО на Шарпе проще набросать какое-нибудь десктопное приложение. Для написания десктопной карточной игры вполне подходящий вариант.

    Для Ардуино понадобится C/C++, это вам правильно говорят. По сравнению с C# синтаксис похож, но различаются многие концепции, C++ и тем более Си значительно ближе к железу.

    Играю семь бубей!
    Ответ написан
    1 комментарий
  • В чем разница между многопоточностью, многозадачностью и многопроцессовостью?

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

    2. Многопоточность - вариант реализации вычислений, при котором для решения некоторой прикладной задачи запускаются и выполняются несколько независимых потоков вычислений, причём выполнение происходит одновременно или псевдоодновременно. В операционных системах, где термины "поток" и "процесс" различаются, под "потоком" понимают именно поток выполнения (ресурсами же владеет сущность, называемая "процессом"). Обычно применяется для распараллеливания вычислений на несколько вычислителей (процессоров и ядер процессора).

    3. Многопроцессность - вариант реализации вычислений, когда для решения некоторой прикладной задачи запускается несколько независимых процессов. В системах, где под процессом понимается сущность, владеющая ресурсами (памятью, открытыми файлами, сетевыми подключениями), несколько процессов запускаются с целью повышения отказоустойчивости приложения а также с целью повышения безопасности. Т.к. ОС выполняет разделение памяти и прочих ресурсов именно между процессами (в то время как потоки работают в едином адресном пространстве), то а) внезапно упавший (читай - убитый ОС) процесс не уронит остальные; б) если в процессе начал выполняться чужеродный код (например, из-за RCE уязвимости), то он не получит доступ к содержимому памяти в других процессах. Многопроцессность сегодня можно увидеть в браузерах, когда отдельные вкладки выполняются в разных процессах, и упавшая вкладка (из-за js или из-за кривого плагина) тянет за собой не весь браузер, а только себя или еще пару вкладок.
    Ответ написан
    1 комментарий
  • Как читать и записывать xlsx стандартными средствами .NET?

    Nipheris
    @Nipheris Куратор тега C#
    Если вас интересует xlsx, можете стандартными средствами его распаковать (т.к. это обычный ZIP), и поработать с содержимым. Основное содержимое книги будет в XML (не помню имя файла), так что сформировать его особых проблем не составит. Если вариант подходит, расскажу подробнее, что можно сделать.

    А вообще EPPlus тащит.
    Ответ написан
    1 комментарий
  • Где найти готовые шаблоны баз данных?

    Если речь идёт о реляционной БД, то вот шаблон правильной базы данных: нормальная форма. По мере наработки опыта по проектированию БД, эти формальные правила превратятся в интуицию. Сейчас вам достаточно понять, от чего вас оберегает соблюдение нормальных форм.
    Ответ написан
    Комментировать
  • Как информировать сообщество о новой библиотеке?

    Nipheris
    @Nipheris Куратор тега C#
    1. Делаете хороший README, разумеется на английском, где указываете, как ей пользоваться, и что ей требуется.
    2. Делаете несколько примеров (именно рабочий код в подпапке examples) для основных кейсов применения библиотеки.
    3. Льете на опенсурсный хостинг, если еще не сделали.
    4. Настраиваете CI (например на AppVeyour), это не обязательно, но желательно.
    5. Заливаете готовые пакеты на NuGet. Разумеется, вы должны научиться упаковывать свою библиотеку в нормальный пакет. В nuspec ставите годные правильные теги.
    6. Покрываете тестами, хотя бы частично.

    После этого к вашей библиотеке начнут относиться более-менее серьезно.

    7. Можете попробовать на CodeProject рассказать, там часто рассказывают именно про библиотеки.
    Ответ написан
    4 комментария
  • GIT как правильно пользоваться?

    Нужно и ли ставить git на VPS-Сервер?

    Не обязательно, зависит от того, какой вариант доступа вы выберете - через SSH, по HTTP или вообще поставите какой-нибудь Gitlab или Stash (только тут уже зависит от мощностей вашего VPS, не факт что хватит). Гуглите инструкции по установке (git over ssh, git over http), и смотрите, что вам нужно на сервере.

    Учитывает ли GIT изменения в MySql?Если кто то допустим добавит новую таблицу

    Git к реляционным СУБД прямого отношения не имеет, и непосредственно учитывать изменения в БД он не может в принципе. Git работает с файлами и файловой системой, фактически это многоверсионная файловая система поверх обычной ФС, с ветвящимся версионированием. Для ветвящегося версионирования непосредственно в БД сейчас нет распространенных решений (существует пара реализаций, но вы не захотите с ними иметь дело). Поэтому разработчики решают задачу версионирования и обновления данных и схемы с помощью специальных скриптов - "миграций", которые хранят в обычных текстовых файлах в Git. Это могут быть как обыкновенные SQL-скрипты, так и скрипты под конкретный фреймворк/библиотеку для работы с БД. При разработке проекта каждый раз когда необходимо изменить схему или начальные данные в БД, пишется миграция, которая обновляет схему или данные в БД при деплое проекта. Гуглите "PHP migrations" и обрящете.

    Нужен ли github?Или другие подобные сайты

    Вам решать. Если у вас есть VPS и вы готовы настроить там Git для совместной работы, то гитхаб вам не обязателен. Если не хотите париться, и вам проще заплатить за приватную репу - пожалуйста. Если приватность репозитория вам не нужна - можете прямо сейчас создать организацию на гитхабе и пользоваться.

    Как вообще все это организовать?

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

    В интернете толком не нашел примеров использования с нуля на боевых проектах

    Использования чего? Git? А что вам осталось непонятным?

    Т.е можно какоую-нибудь пошаговую инструкцию, типа

    1. Ставите на рабочих станциях клиент Git.
    2. Настраиваете доступ к общему репозиторию на сервере.
    3. Совместная работа организуется путём выбора существующей или выработки своей методики версионирования проекта и ветвления состояния репозитория. Git Flow обычно советуют как достаточно простую и универсальную модель, с которой лучше всего начать. Как поймёте, что такое Git на самом деле, поймёте и что вам от него нужно и как это получить (и выработаете эту модель сами).
    В любом случае так или иначе всё сводится к ветвлению/слиянию веток, а как конкретно это делать - см. выше. Гит лишь предоставляет концепцию ветвления и концепцию локальных/удалённых веток, т.е. децентрализованный репозиторий.
    Ответ написан
    2 комментария
  • Разработчик языка программирования создает только стандарт?

    Язык ведь определяет его транслятор?

    Вообще, это плохо. Конечно, у некоторых языков есть популярные стандартные реализации, на которые все равняются и которые как бы задают стандарт языка де-факто, но записанный стандарт всегда лучше стандарта-по-реализации. Потому что всегда есть, куда посмотреть, и бага реализации не превратится в фичу языка: почитайте про typeof null === 'object' в Джаваскрипте, это отличный пример, когда в стандарте языка закрепилась бага реализации.

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

    Когда говорят, что Страуструп создал ЯП, это значит он создал стандарт и рекомендации для компилятора или еще и сам компилятор?

    Точного определения понятия "создать язык программирования" мне не известно. Те же плюсы сначала были Си с классами, и классы, ЕМНИП, были реализованы с помощью макросов. Можно уже тогда было сказать, что был создан C++ или еще нет? А может, C++ был создан когда была написана первая программа на нём? Или когда был разработан первый стандарт? Поэтому лучше говорить конкретно - "была создана формальная спецификация языка" или "была создана первая реализация".

    Для некоторых эзотерических языков (например, Malborge), первые программы были написаны гораздо позже создания самого языка, причём в автоматическом режиме. Это конечно извращенный пример, но он (как и сам вышеупомянутый язык) показывает относительность понятия "создание языка".
    Ответ написан
    9 комментариев