Ответы пользователя по тегу Программирование
  • Бывали ли случаи, что deprecated-код вновь объявляли актуальным?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Deprecated не так страшен. Для java экосистемы такой стикер может висеть по много лет. За это время вы успеете поменять проект.

    Более хуже ситуация когда разработчик завязался на недокументированное поведение а его (поведение) в новых версиях исправили. Шок трудно описать :)
    Ответ написан
    Комментировать
  • Оптимальный формат хранения изображения в текстовом виде?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Base64 и не создавался для сжатия. Он хранит примерно 4 символа на 3 байта. Вот такая формула.

    Есть другие кодировки наподобие base85 которые просто использую другую формулу укладки байтов в символы. Но все это фигня и экономия на спичках.

    Можно ли просто хранить произвольную бинарную информацию в текстовом виде? Да можно. Но при отображении на экране возникнут следующие проблемы. Есть символы которые имеют разные коды но одинаково отображаются на экране. Это искажает наше восприятие информации. Какова цена ошибки - решайте сами. Есть символы которые имеют некий магический эффект для терминала linux (это диапазон от 00 до 1F (control)). При печати их на экран курсор может начать двигаться в разных направлениях. В некоторых терминалах может быть сбой или зависание. Или терминал может издавать писк. Есть символ 00 который имеет зарезервированное значение например для C++/C - ASCIIZ строк. Он маркирует конец строки. И любая попытка передать такой файл "строкой" вызовет неожиданное поведение для вас.

    При хранении произвольных символов внутри XML или JSON строк могут работать ESC последовательности или экранировка которая увеличивает размер строки. Тоесть эффект может быть обратный в зависимости от того какие байтики будут сохранены.
    Ответ написан
    Комментировать
  • Допустимо ли "хардкодить" глобальные константы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да, можно. Вот константа Math.PI захардкожена в библиотеке математики и ни у кого не возникает с этим вопросов.

    По поводу констант в Dagger2. Я с ним 1 раз поработал на проекте Java/AWS/lambda стека. Для простых проектов где требуется инжекторный двигатель, но Spring затаскивать - лениво, Dagger - самое то.

    По поводу допустимо или нет - да допустимо. Тем более что ты пишешь что "один раз на проект". Вот к примеру имя таблицы. Ну кому в голову придет его менять? Это объем работ на самом деле в сто крат более тяжелый. И даже не в Даггере дело а в том что таблица к тому времени станет слишком родной для environment и дешевле будет поднять новую таблицу чем переименоввать старую. Уж повертье так оно бывает.

    Передавать через конструктор или нет? Смотри если для модульных тестов тебе надо их менять - то передавай через конструктор. Если тесты не нужны на эту компоненту - то делай как проще.

    Про константу PI конечно была шутка но в проекте есть два зла. Первое зло - заиграться в конфигурации и любой пустяк через них протаскивать. И второе зло - сделать проект неконфигурируемым. Я думаю что хороший проект - стоит где-то посередине.
    Ответ написан
    Комментировать
  • Использовать методы или самому писать функции?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно писать программу так чтобы она была легко читаема для человека. И чтобы другие читающие
    быстро поняли что имелось в виду. Методы против функций - это холивар. В нем нет смысла.
    Лучше приведи свой код и попроси сделать code-review.
    Ответ написан
    Комментировать
  • Почему современные языки отказываются от ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Они не отказываются. Скорее происходит отказ от "парадигмы" разработки. Языки стали мульти-парадигменные. Посмотрите на С++20 или Scala. Их невозможно положить в коробочку ООП или ФП. В них есть почти полный набор фич и оттуда и отсюда. И с каждым годом число фич растет и граница размывается. Нашим потомкам будет вообще непонятно где идет раздел.

    По поводу golang. Это язык ограниченной разработки. Его создавали специально чтобы порог вхождения был низкий. Фактически делали лайтовый С++ которому можно обучить школьника за 14 дней. Но с перформансом выше чем у Питона. Поэтому выражать какие-то сложные конструкции на типах там скорее всего не получится. У golang есть свой манифест. Я забыл как он называется и где он. Вобщем там довольно четко обоснованно почему такие принципы и почему такая идеология.
    Ответ написан
    1 комментарий
  • Существуют ли онлайн - соревнования по программированию?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Соревнования и Олимпиады помогают для поступления в университет. Но они они не способствуют поступлению на работу в большую корпорацию. Скорее наоборот. Олимпиадник - опасен и создает проблемы для проектов которые работают по 20-30 лет. Олимпиадник также будет раздражать других командных игроков. Его оценки (эстимации) задач будут слишком отличаться от других. Олимпиадник плохо понимает необходимость эстетики программного кода и SOLID-философии. Дай бох что за 5 лет учебы в университете этот гений слегка поостынет и начнет думать как team-player.
    Ответ написан
  • Указываются ли комментарии в листинге кода?

    mayton2019
    @mayton2019
    Bigdata Engineer
    К сожалению комметарии всегда не формализованы. И разработчик не являясь техно-писателем не может их написать настолько грамотно чтобы они представляли интерес для заказчика. Поэтому для заказчика пишутся отдельно сопроводительные документы по софту. А комментарии в коде разрабы пишут для самих себя типа "todo: оптимизировать".

    Более того если насильно заставлять разрабов писать комментарии то получается как в той поговорке где заставили дурака богу молится. Будет тонна безсмыслленного текста которая тоже заказчику будет неинтересна. Кроме того у комментариев в коде есть другая беда. Обычно код эволюционирует быстрее и независимее от комментариев. Поэтому часто бывает ситуация когда коммент не соотвествует коду или просто устарел.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сделано это для быстрого чтения кода программой.

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

    Сегодня нет вообще никакого смысла сокращать переменные. Здесь есть хороший афоризм от великих. Что-то типа "программы пишут люди для людей и лишь в редких случаях для компиллятора". Минимизаторы для JS у меня вызывают удивление. Браузеры поддерживают gzip-сжатие контента и я думаю надо очень сильно постараться чтоб была какая-то ощутимая разница.
    Ответ написан
  • В чем преимущества процессов над потоками?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно зачем в теме вопроса добавлено уточнение про GIL. Это специфика Python?

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

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Любая библиотека с поддержкой arbitrary-precission подойдёт.

    Но мне кажется что автору это не надо. Физические величины (расстояния) невозможно менять настолько точно чтобы уже 40 младших знаков имели смысл.
    Ответ написан
    1 комментарий
  • Как система понимает какие глифы шрифта нужно вывести на экран для представления двоичного числа?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно зачем автор обсуждает глифы и шрифты? Данная задача состоит из двух частей.
    1) Преобразование двоичного числа (например int) в строковое представление двоичного числа.
    2) Печать этой строки на экране используя (или не используя) явное указание шрифтов и прочее.

    И мне кажется что автор не решил пункт (1) этой задачи. Этот пункт является обязательным на первых уроках информатики. Он называется "Системы счисления". Позиционные. Непозиционные. Перевод из одних систем в другие и прочее. Вот с этого надо начать обсуждение.
    Ответ написан
    Комментировать
  • Как преобразовать любой файл в картинку png?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Автор пытается делать стеганографию. Тоесть в картинке скрывать информацию. Здесь выбор PNG полезен тем что инфа лежит плотно и в случае "гладкого" характера информации сжимается. Наподобие архиватора.

    SVG - не подходит т.к. векторный и расточительный.
    JPG - тоже не подходит т.к. повреждает информацию. Ее потом нельзя будет извлечь из файла без потерь.

    По поводу дополнения файла до размера кратного длине строки (padding). Там не 00 не FF не подходит. Так как в оригинальном файле тоже могут быть эти константы и алгоритм даст сбой. Надо почитать как делается в криптографии. Там есть специальный workaround. Если его не реализовать правильно то при обратном декодировани картинки в файл мы можем получить ложное удлиннение файла на размер хвостика последней строки пикселов. Насколько это большой дэмедж для исходного файла - ХЗ. Но лучше конечно его не нелать чтоб обратное декодирование было надёжным с точки зрения длины файла.
    Ответ написан
    6 комментариев
  • Часто задумываюсь о смене стэка программирования, это плохо?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Изучение Go, Rust я поддерживаю. Это развитие. Это хорошо.

    Во фриланс особо не рвись. Я за свою жизнь не видел качественных продуктов в основе которых стоял бы фриланс.
    Ответ написан
    Комментировать
  • Как программирование связано с информатикой?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Информатика и вычислительная техника и ЭВМ это немного архаичное название современных it наук таких как собственно программирование, FP, GA, NN, MV.

    Старые слова можно много где встретить в старых книгах. У того же Дональда Кнута есть отсылки к алгоритмам сортировки на магнитных лентах.
    Ответ написан
    Комментировать
  • Как написать функцию пересчета значений одной шкалы в другую?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это в школе называется - построить уравнение прямой по двум точкам.
    Ответ написан
  • Как разбирать чужой код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В 99% случаев программисты являются пользователями чужого кода. А для этого им не нужно погружаться в имплементацию. По хорошему нужно понять назначение библиотеки. Ее API. И посмотреть модульные тест-кейсы как она тестируется. Там будет очевидно применение.

    Поэтому автору не нужно разбирать код. Тем более что для современных проектов код перевалил за сотни мегабайт (на минуточку Война и Мир занимает едва-ли 5 мегабайт) и изучать его весь безсмысленно.

    По конкретно формату mkv. Это аналог xml только бинарный. Его не надо крякать или ломать или реверс-инжинерить код. Это совершенно открытый формат. Его спецификация опубликована. И чтение ее даст больше пользы чем ковыряние кода. Поймешь спеку - и сразу будет понятно что код делает.
    Ответ написан
    Комментировать