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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вместо base64 можно использовать условный base65.
    Он тоже "избыточен", но в любом случае всё упирается в ограничения тех текстовых систем, через которые должно проходить изображение в виде текста.
    Например, если все системы поддерживают ASCII, то можно расшириться до условного base127, например. Можно ли использовать спец. символы, какие именно - вам виднее, это будет конкретное ограничение конкретной проблемы, которую вы решаете.

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

    Однако у вас ведь информация не совсем произвольная. Поэтому зачем вам универсальное решение? Пусть решение решает конкретно вашу узкую проблему по пересылке именно изображений, а не любой информации. Можно попытаться сжать само изображение.

    Если это PNG, то можно перейти на палитру, 256 цветов достаточно для многих случаев, но можно взять ещё меньше. Если это фото, то JPG в низком качестве. Также есть векторный формат, который конечно не любую картинку заменит, но в некоторых случаях сильно выигрывает у других форматов, не говоря уж о побочном эффекте в виде неограниченной масштабируемости.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Декомпозиция
    Ответ написан
    Комментировать
  • Как работают переменные в низкоуровневом понятии?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если не вникать в регистры и тонкости адресации, то переменные хранятся в памяти по определённым адресам. В этом вся их суть.

    Имя переменной существует только на уровне языка программирования. Хотя это зависит от языка. В скриптовых языках, например, имя также хранится в памяти, но это уже нюансы. В компилируемом языке имя переменной нужно только для наглядности и понимания логики программы, и во время компиляции это имя превращается в адрес.

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

    К слову, языки программирования составлены так, чтобы быть удобными и читаемыми для человека. Машине такой формат не очень удобен. Поэтому текст программы переводится в машинный код (либо в байт-код в случае скриптовых языков), и только затем исполняется на более низком уровне. Таким образом, сам язык программирования ничего не делает и не понимает. Это просто набор правил того, как описать свои алгоритмы. Программист пишет программу, потому эту программу скармливает компилятору (или интерпретатору), переводя её в код, и затем уже с кодом работает процессор. Как-то так.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Возьмите Lua.
    Пожалуй, это самый простой скриптовой язык, да ещё и встраиваемый, то есть можно просто взять его готовую реализацию и встроить в своё приложение. Программисту для изучения синтаксиса понадобится около 15 минут. В то же время это довольно мощный язык, в котором есть практически всё, что может понадобится в плане синтаксиса. Встроенных функций не так много, но основные есть, ведь упор на простоту изучения (для ваших же пользователей). А если действительно нужен именно свой скриптовой язык, то на примере Lua можно понять, какой необходимый минимум должен быть в языке, можно изучить исходники и т.д.
    Ответ написан
    1 комментарий
  • Я учусь программирование на питон и хочу узнать можно ли создавать крупные игры на питон и библиотекой pygame или мне учить другой язык?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Строго говоря, механика и интерфейс игры могут быть описаны на любом языке, в том числе на скриптовом. Лично я предпочитаю Lua, как самый простой язык из довольно мощных. Он даже проще Питона, хотя и беднее по встроенным возможностям из коробки. Главный плюс в том, что логика игры может быть легко модифицирована обычными игроками, а это заранее даёт игре второе дыхание.

    Но вот ядро игры всё же лучше писать на другом языке, более быстром, где будут реализованы все части игры, критичные к производительности. Это может быть популярный движок, как таковой, либо движок + прослойка кода от разработчика игры.
    Ответ написан
    Комментировать
  • Что такое "Уровень абстракции" или "Слой абстракции"?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В реальной жизни начальник не забивает гвозди и не скручивает провода. Он говорит, какому отделу что делать.

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

    Ну и так далее.

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

    Ещё аналогия с компьютером. На верхнем уровне - это системный блок + монитор + клава + мышь. На этом уровне посредственный юзер его сможет собрать (подключить при переезде на новую квартиру). Следующий уровень уже включает начинку: жесткие диски, процессор, мат. плату, блок питания и т.д. На клавиатуре, например, можно рассматривать каждую клавишу отдельно. На этом уровне продвинутый юзер сможет пересборать комп под себя, починить, апгрейднуть и т.д., т.е. решать вполне реальные жизненные задачи. Ну а ещё глубже - это уже уровень микросхем и программирования (которое тоже имеет свои уровни, конечно же).
    Ответ написан
    1 комментарий
  • Какой принцип работы Fastconnect'а для samp?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно, если на игровом сервере присутствует несовершенство, которое можно эксплуатировать для быстрого подключения к серверу. Сложность в том, чтобы найти эту уязвимость и понять её. И ещё сложность в том, чтобы знать C++. Если две эти сложности преодолены, то не вижу проблемы в том, чтобы написать свой fastconnect на языке C++.
    Ответ написан
    Комментировать
  • Как автоматически транслировать любой готовый алгоритм с любого ЯП на любой другой ЯП без ущерба для скорости работы алгоритма?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Почему? Потому что мало кому нужна такая визуализация. Большинство устраивает, что есть локальная область видимости переменных, и считает, что лишняя приставка усложняет чтение. И крайне мало кому нужно конвертировать свой JS код на другие языки.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Отступы.

    Точнее, отступы в цепочке методов.

    Если и есть какое-то особое название, то оно не популярно. И употребив его, вы рискуете быть не понятым. К примеру, сказав слово "отступы", сразу понятно, о чем речь. А вот выражение "цепочка методов", хоть и практически однозначно, но всё же заставляет задуматься, потому что редко используется. Можно же сказать менее однозначно: "цепочка вызовов", "цепочка функций", "последовательность вызовов" и т.п., но эти выражения тоже используются с пояснениями, что они значат. Поэтому не стоит искать правильное название, лучше подобрать наиболее понятное для тех, кому вы хотите донести суть вашей мысли, и раскрыть его другими словами.
    Ответ написан
    Комментировать
  • Как сменить иконку в трее у программы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зависит от программы, иконку которой вы хотите сменить, и ее архитектуры. К примеру, тот же пунто свитчер меняет иконку, в зависимости от настроек и ситуации. И я не смотрел, как именно он это делает, не обязательно берет иконку из файла или ресурсов в exe, он может и на лету ее "рисовать".

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

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

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

    Возможно, вам стоит подучить архитектуру компьютера, в частности процессор x86 и память, и как они связаны. Наиболее близкий язык, чтобы во всё это окунуться - ассемблер, очевидно. Если интересует именно скорость языка (которая, к слову, для многих задач не критична), то нужно смотреть высокоскоростные компилируемые языки - С, С++, Rust, D, Go, а также близкие к ним по скорости через VM - C#, Java (Kotlin). Узкоспециализированные типа Swift можно не рассматривать, если они вам не нужны для решения задач. Но даже в скриптовых языках (JavaScript, PHP) сейчас очень хорошо со скоростью. Посмотрите также, что такое JIT, тоже удивитесь, если не слышали ранее.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В английском языке существительные в начале превращаются в прилагательные, а в конце - существительное, к которому они относятся.
    Сравните: "stone wall" (каменная стена) и "wall stone" (камень из стены).

    То есть первым делом нужно определиться с главным существительным, то есть ЧТО имеется в виду. Если это имя, то название переменной должно оканчиваться на _name (или Name в зависимости от стиля).

    Далее, если не придираться к правилам, то последовательность прилагательных лучше делать так: чем важнее, тем ближе к существительному.
    Шаг первый: product_name
    Шаг второй: homepage_product_name (при этом вам должно быть очевидно, что не home_page)

    Далее, ничего лишнего быть не должно, и должно максимально точно отражать суть. Например, настройка, говорящая о том, что уведомления можно посылать только если приложение неактивно.
    Не правильно: notify_if_inactive (вообще не понятно, не логично)
    Правильно: is_notify_if_inactive_only
    Приставка is_ в данном случае является соглашением в нашей команде, указывающем, что это булева переменная, можно также юзать b_ например для той же цели. Или, скажем, если это константа или меняется очень редко, можно записать капсом или добавить приставку c_

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вообще JavaScript. Как вариант - расширение для браузера.

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

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Так нельзя
    local a = t[1][1]
    local b = t[1][1][1]
    a = b

    Потому что a - это просто переменная. Вы ей присваиваете новое значение, пусть даже ссылку, но это никак не затрагивает другие переменные с другими именами.

    Но можно сделать, например, так:
    local a = t[1]
    local b = t[1][1][1]
    a[1] = b

    Потому что здесь мы уже не трогаем переменную a, а работаем с тем, на что она указывает, т.е. t[1], т.е. это аналог t[1][1] = b

    Отвечая на вопрос, вам нужно не только знать вложенную таблицу на определенном уровне, но и таблицу на 1 уровень выше (т.е. предка).
    Ответ написан
    Комментировать