Ответы пользователя по тегу Программирование
  • Почему в tiny-AES не могу скрыть ключ?

    @res2001
    Developer, ex-admin
    1.зашивать в бинарник зашифрованный пароль и программно его расшифровывать каким угодно алгоритмом.
    2.Вычислять пароль на лету любым способом, который придумаете.
    3.Запрашивать пароль у пользователя со стандартного входа - это был бы самый подходящий вариант - пусть пользователь сам думает как уберечь пароль от чужих глаз.
    Ответ написан
  • Как реализовать генерацию Ворд документа?

    @res2001
    Developer, ex-admin
    Сделайте форму в екселе, там можно достаточно просто все поля заполнить из заранее сформированных списков.

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

    @res2001
    Developer, ex-admin
    Можно и в одном файле.

    В файл пишете блоки определенного размера (например 2-4 Мб). В блок пишете:
    1.байт флагов записи (флаг удаления записи или признак конца блока)
    2.ID записи фиксированного размера
    3.длину последующей строки фиксированного размера
    4.строку данных
    так до конца блока, в конце блока в п.1 выставляете признак конца блока и смещение следующего блока фиксированного размера.
    Можно сделать так, что бы блок забивался до отказа, а остатки последней записи, которая не влезла в блок переносить в другой блок, можно оставлять пустые куски блоков. Кроме того этот механизм будет необходим, если 1 запись может быть размером больше 1 блока.

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

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

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

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

    PS: не стоит изобретать велосипед, возьмите готовую СУБД.
    Ответ написан
    Комментировать
  • Как запускать программу хоткеем однократно? Батник подойдет?

    @res2001
    Developer, ex-admin
    В батнике отловить запущен ли процесс можно с помощью фильтров tasklist.
    Ответ написан
    Комментировать
  • Какие языки программирования можно осилить без математики?

    @res2001
    Developer, ex-admin
    Да и если не веб - то же самое.
    Математика понадобится, если вы пойдете в область разработки, где нужна математика, в большей части прикладных задач математикой не пахнет. Само изучение языка программирования к математике отношения не имеет.
    Просто математический склад ума зачастую это то что предрасполагает к занятию программированием, при этом саму математику можно и не знать.
    Не суйтесь в науку, ЦОС, машинное обучение, компьютерную графику, криптографию - все остальное обходится без большой математики, на уровне максимум 7 класса школы, а чаще и 4 достаточно.
    Ответ написан
    Комментировать
  • Потоки Windows?

    @res2001
    Developer, ex-admin
    Это должно помочь:
    https://habrahabr.ru/post/73324/
    Ответ написан
    Комментировать
  • CGI это просто функция обработки данных из формы на сервере?

    @res2001
    Developer, ex-admin
    CGI это протокол (интерфейс), по которому общается веб сервер с программой обработчиком запросов.
    Ответ написан
    5 комментариев
  • Как удалённо настраивать сетевые параметры (ip-адрес и т.п.)?

    @res2001
    Developer, ex-admin
    Это возможно только если само устройство это умеет, иначе никак.
    Роутеры/коммутаторы обычно поддерживают управление по ssh, а это уже можно как-то автоматизировать. Но тут нужно плясать от конкретной железки, чего-то универсального нет.
    Ответ написан
  • Почему точность вычислений в float нарушается для чисел определённой степени двойки?

    @res2001
    Developer, ex-admin
    Да, точность чисел с плавающей запятой не гарантирована. Почитайте статью на википедии, она вполне адекватна.
    Не считайте деньги в плавающих числах :)
    Ответ написан
    Комментировать
  • Может ли фабрика генерировать коллекцию объектов?

    @res2001
    Developer, ex-admin
    Новая сущность то же будет фабрикой, которая создает коллекцию.
    Если вы используете только коллекции, то смысла в единичной фабрике нет, если же нужно создавать и единичные объекты, то сделайте 2 фабрики для коллекции и для 1 объекта.
    Ответ написан
    Комментировать
  • Как передать путь к ярлыку (*.lnk) в приложение?

    @res2001
    Developer, ex-admin
    Нет вариантов, имхо. Это поведение оболочки виндоуз.
    Ответ написан
    Комментировать
  • Что происходит при создании нового потока?

    @res2001
    Developer, ex-admin
    ОС выделяет память под структуры описывающие поток, выделяет стек потока, добавляет поток в планировщик.
    Все это отнимает и время ЦПУ и память, поэтому каждый поток - не бесплатен. Много или мало времени/памяти - это, конечно, относительно. Относительно тех задач, которые будет решать поток.
    Ответ написан
    3 комментария
  • Какая операция наиболее времязатратная на CPU?

    @res2001
    Developer, ex-admin
    Да что угодно, хоть пустой цикл - главное итераций по больше. И отключите опции оптимизации, а то компилятор может убрать цикл из исполняемого файла.
    Ответ написан
    Комментировать
  • Как создать массив или коллекцию объектов?

    @res2001
    Developer, ex-admin
    Сделайте иерархию классов, наследуйте свои классы от одного предка.
    Тогда в коллекцию можно добавлять классы преобразованные к общему предку.
    Обычно, если встают подобные вопросы, классы хорошо выстраиваются в иерархию с общим предком.
    Ответ написан
    1 комментарий
  • Для чего читать Таненбаума?

    @res2001
    Developer, ex-admin
    Для программирования сетей читайте Стивенса "Unix. Разработка сетевых приложений" 2007 год. Книга не новая, но лучшего описания программирования сетей я не встречал.
    Ответ написан
    Комментировать
  • Как научиться понимать как работает память на низком уровне?

    @res2001
    Developer, ex-admin
    Главное нужно помнить, что память - она плоская, т.е. представляйте ее просто набором байт следующих друг за другом. И не важно, какие структуры вы в плоской памяти городите, трехмерные или пяти - они все должны отображаться на плоскую память.
    Когда ОС загружает программу на выполнение она разделяет всю память, доступную процессу на 3 группы:
    1. область куда загружается код программы. Обычно эта память помечается ОС только для чтения. И если туда будет попытка записи, то это вызовет исключение в процессоре.
    2. Область стека. Адрес вершины стека записывается в регистр процессора. Когда в программе выделяются локальные переменные они помещаются именно в стек.
    Фактически для помещения переменной в стек не надо выделять память. Компилятор при сборке программы считает смещения относительно начала стека и обращение к локальным переменным происходит по указателю на начало стека + смещение.
    Со стеком интересная история: ОС выделяет под стек фиксированный размер памяти, но сам размер стека нигде не хранится (в явном виде не хранится, но его в можно узнать), хранится только указатель на начало. Поэтому всегда есть шанс переполнения стека. Например если сделать достаточно глубокую рекурсию.
    В современных ОС под стек выделяется достаточно большой объем памяти, поэтому переполнений как правило не происходит. Но иногда для программы требуется больший объем стека, тогда нужный размер указывается с помощью опций компилятора, этот размер зашивается в исполняемый файл и когда загрузчик ОС грузит программу он считывает размер стека и выделяет нужную область памяти.
    Если вы в своей программе столкнулись с переполнением стека, то не спешите выделять больший объем памяти для стека, возможно у вас программная ошибка из-за которой происходит переполнение.
    3. Куча. Там выделяется память для динамических переменных. Память выделяется ОС по запросу. Обычно в своей программе вы используете менеджер кучи стандартной библиотеки, который в свою очередь обращается за выделением памяти к ОС. Менеджер кучи из стандартной библиотеки можно поменять, есть бесплатные свободно распространяемые реализации. Или сделать свой или пользоваться вызовами ОС для выделения памяти.

    Как-то так.
    Ответ написан
    4 комментария
  • Как рассчитать сложность алгоритма?

    @res2001
    Developer, ex-admin
    Допустим при создании массива из 5 элементов можно добавить if и добавлять значение в начало или конец массива

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