Ычан: [d | au / b / bro / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Первые 100 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 25965)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5120 кБ.
  • Ныне 3638 unique user posts. Посмотреть каталог
  • Предельное количество бампов нити: 500
junior_developer_nene.png - (648.30KB, 720×720)
25965
No. 25965  
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

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

Другие тематические нити (иногда обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

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

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

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

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html
http://410chan.org/dev/arch/res/19666.html
http://410chan.org/dev/arch/res/21641.html
http://410chan.org/dev/arch/res/23830.html

Прошлая нить пока тонет тут: >>/dev/23830
No. 25966  
>>25965
В процессе систематизация прошлой нити для пополнения базы знаний.
No. 25968  
>>25965
Из прошлой пока собралось вот такое:

>REPL и их подобия без регистрации и смс
>>/dev/23844

>Помогите, директивы mod_rewrite не наследуются на уровне <Directory> виртуалхоста!
>>/dev/23886

>Как выбрать между обобщенной и специфичной реализацией?
>>/dev/23911

>Форматируем код онлайн
>>/dev/23935

>Как засендбоксить скрипт на странице через iframe?
>>/dev/23949
>>/dev/23950
>>/dev/23955

>Я начинающий программист, как сделать чтобы взяли на работу джуниором? (2020)
>>/dev/23977
>>/dev/23980

>А как попасть на собеседование? (2020)
>>/dev/23982

>Особенный способ получить вечный бан на Upwork (2020)
>>/dev/23999

>Введение в модульную архитектуру приложений
>>/dev/24255

>Посоветуйте хорошую книгу по Python
>>/dev/24261
>>/dev/24263
>>/dev/24916

>Посоветуйте учебники по Python с задачами
>>/dev/24302

>Поясните за NodeJS, Angular, и вот это все
>>/dev/24381
>>/dev/24384

>Как управлять зависимостями в Go?
>>/dev/24461

>Помогите подавить вывод ошибок при загрузке DLL через LoadLibrary (Win32)
>>/dev/24465

>Существует ли плагин на WordPress который позволяет преобразовать PDF в форму?
>>/dev/24586

>Играемся с нейросетями в COLAB
>>/dev/24670

>Гайды по консольным языкам
>>/dev/24673

>Хочу пересобрать готовый .exe файл под конкретные инструкции процессора
>>/dev/24953
>>/dev/24955

>Как парсить сайты с JS и динамическим контентом?
>>/dev/24982
>>/dev/24987

>Как спроектировать мобильное приложение по канонам ООП?
>>/dev/25051

>Помогите понять разницу между поверхностным и глубоким копированием в Python
>>/dev/25082

>Особенность оптимизации литералов в Python
>>/dev/25086

>Хочу гайды по Boost.Graph
>>/dev/25165

>Как в Python отличить ввод/вывод из файла от stdin/stdout?
>>/dev/25189

>Как в Python использовать одно локальное окружение везде, где оно нужно?
>>/dev/25318

>Рекламируем игровой движок Godot
>>/dev/25353
>>/dev/25393

>Роадмапы для разработчиков, настоящих, прошлых и будущих
https://roadmap.sh/roadmaps

>Бесплатные видео-курсы всем и каждому, чтоб никто не ушел обиженный
https://www.youtube.com/c/Freecodecamp/videos

>Гайды по кластерному анализу и дата-майнингу в целом
>>/dev/25708

>Как быстро изучить Python для пользования openCV?
>>/dev/25719

>Помогите понять разницу между прикладным и аналитическим созданием алгоритма
>>/dev/25720

>Как в LaTeX / XeLaTex сделать греческий алфавит шрифтом Times New Roman?
>>/dev/25863

>Стоит ли будущему специалисту делать упор на функциональные языки программирования? (2021)
>>/dev/25878

>Что нужно уметь, чтобы парсить сайты?
>>/dev/25905

>Как примерно хранятся пользовательские ресурсы и тексты на форумах?
>>/dev/25962
>>/dev/25963
No. 25970  
Umaru-chan 061.png - (1.67MB, 1920×1080)
25970
С новым тредом! Вы молодцы.

А как на форумах обычно организуют защиту паролей и записей в базе данных? Ведь злоумышленнику достаточно получить доступ к записи модератора или администратора, чтобы редактировать/удалять записи других пользователей и их посты, простые хеши с соленьями теряют смыл. Для важных записей наверное делается какое-нибудь отдельное шифрование?
No. 25971  
>>25970
>Ведь злоумышленнику достаточно получить доступ к записи модератора или администратора, чтобы редактировать/удалять записи других пользователей и их посты
Да. А ещё, если у тебя доступ к руту, то ты можешь делать что угодно в системе.
No. 25972  
>>25971
Лучше промолчать если у тебя там ничего кроме эмоций.
No. 25973  
>>25970
В общем и целом форумы достаточно примитивны в плане кибербезопасности, отчасти именно поэтому они часто становятся целью для угона аккаунтов.

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

>Как на форумах обычно организуют защиту паролей и записей в базе данных?
Защита паролей на форумах обычно достигается хранением исключительно хеша от иногда посоленного пароля в колонке пароль. Сама соль, естественно, не должна лежать в базе данных. Еще соли лучше бы быть подлиннее.

По задумке, это должно защитить от ситуации когда у форума крадут бэкап базы данных и потом подбирают пароли к хешам. Но вычислительных мощностей сейчас хоть отбавляй, и даже длинные соления не всегда спасают. Чтобы усложнить задачу злоумышленнику, администраторы настраивают шифрование БД и бэкапов, называется это в общем случае Data at Rest Encryption.

>защиту записей в базе данных
Под записями, ты имеешь в виду данные учетных записей? Логины, и прочее?
Если да, то обычно форумы таким не заморачиваются, потому что не хранят много данных.
Это могло измениться с приходом GDPR, если здесь кто в курсе, подскажите пожалуйста.

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

>Злоумышленнику достаточно получить доступ к записи модератора или администратора, чтобы редактировать/удалять записи других пользователей и их посты
То о чем ты говоришь, на самом деле широко обсуждаемая в среде кибербезопасности проблема - как знать, что админ действительно ваш админ, и как знать что у пользователя Х действительно должны быть админские права, которые он получил. Пока ничего лучше мониторинга событий типа админ вдруг залогинился не оттуда, откуда раньше и пользователь вдруг стал админом не придумали. Еще стараются уменьшать возможный ущерб - делать мягкое удаление, хранить версии при редактировании, и т.д.

Надеюсь, смог хотя бы чуть-чуть прояснить ситуацию.
No. 25974  
>>25973
В догонку допишу, что двухфакторная аутентификация по задумке снижает риск успешного использования угнанного аккаунта, но это и отдельная банка червей, и опять же, мало кто пользуется ей на форумах.
No. 25975  
>>25972
Примните свой совет к себе лично. А никаких магических второстепенных защит, когда хакер уже в системе, нет. См >>25973
No. 25976  
KonoSuba 028.png - (2.07MB, 1920×1080)
25976
>>25973
>>25974
Спасибо за такой развёрнутый обзор. Тема безопасности это такая интересная кроличья нора. Но простому рабочему программисту ведь достаточно иметь общие представления? Дизайном таких систем наверное должен отдельный специалист с образованием заниматься.
No. 25977  
>>25976
И да и нет. По-хорошему, безопасник должен быть и регулярно проводить аудит систем. На практике, это твоя задача понимать, какие данные обрабатывает система, кто может получить к ним доступ, не использовать мд5 и слать людей как минимум к юристам когда они захотят хранить в БД имя фамилию человеков. Да и разница между вами наверстывается за полгода чтения литературы на старте.
No. 25978  
>>25976
>Но простому рабочему программисту ведь достаточно иметь общие представления? Дизайном таких систем наверное должен отдельный специалист с образованием заниматься.
В целом солидарен с >>25977
Не всегда есть человек на которого можно это сгрузить / положиться.
Особенно остро проблема стоит в стартапах, где данные уже хранят, а никакого безопасника пока в планах нет. Поэтому важно иметь достаточно знаний просто чтобы не наделать глупостей и заведомо уязвимых мест, а где надо - настоять на введении элементарных мер безопасности и защиты информации. Да, формально это не твоя ответственность, и не твоя головная боль, но если ваш софт работает с чувствительной информацией или не дай бог с деньгами, лучше не ждать пока вы окажетесь в центре крупного скандала и начнут искать крайних, лучше или внедрить самостоятельно, или поднять вопрос повыше / отправить людей к юристам.

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

>Да и разница между вами наверстывается за полгода чтения литературы на старте.
Более того, есть возможность самому стать специалистом в этой сфере с фактическим опытом работы. Что позволит продолжить карьеру в этом ключе, если тебе будет интересно.

>Спасибо за такой развёрнутый обзор.
Рад, что смогли помочь, заходи если что.
No. 25982  
Umaru-chan 037.png - (1.81MB, 1920×1080)
25982
>>25977
>>25978
Интересности!
No. 26007  
k-on! 163.png - (1.19MB, 1920×1080)
26007
А объясните, почему так редко можно использовать пробелы в именах и паролях, кому так мешает жить 00100000? Зачем другие символы исключают? Вроде же нет разницы из чего состоит последовательность бит.
No. 26008  
xkcd_exploits_of_a_mom.png - (31.16KB, 666×205)
26008
>>26007
>Зачем пробелы и другие символы исключают?
Одна из причин - санитайзинг вводимых данных "на всякий случай".
Например, чтобы не переживать как обработаются или закодируются сервером символы отсутствующие в стандартной ASCII таблице. Еще исключают символы, которыми можно воспользоваться, чтобы превратить ввод в исполняемую команду, вызвать переполнение, или воспользоваться другой уязвимостью, или просто вызвать ошибку в неграмотном коде. Это всё, естественно, полумеры которые не должны заменять грамотной работы с вводимыми данными.

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

>Вроде же нет разницы из чего состоит последовательность бит
До того как данные станут последовательностью бит, они пройдут много мест в коде и запросов к БД. Именно в надежде избежать проблем в этих местах используют такую меру предосторожности.

Пикрелейтед иллюстрирует.
No. 26009  
>>26008
Блин, я подумал что это из-за каких-то технических проблем, или остатки древности может быть. Я так хорошо запомнил правило, что никакому вводу нельзя доверять, и не подумал что кто-то может просто ограничивать ввод вместо проверки.

Вижу что фреймворки делают чистку чуть ли не автоматически, или тыкают носом в нужные функции и библиотеки.
No. 26017  
Булочки, извините если политика безопасности банка не пускает на 410chan.ru, теперь буду только очень иногда заходить через 410chan.org что бы и его не забанило. Сумимасен!!
No. 26039  
>>26017
А сейчас разбанили.
No. 26042  
Есть задача сделать сайт-каталог по типу World-art'а. Ну или MAL'а на минималочках.

То есть, т.з. примерно следующего плана:
  • в первую очередь нужно "красиво" во фронтэнде выводить данные из БД, с возможностью поиска/сортировки по полям БД;
  • нужна регистрация пользователей. Пользователи могут добавлять публичные комментарии и добавлять записи БД себе в избранное;
  • важное замечание: редактировать или создавать новые записи в БД пользователи не могут, это прерогатива администратора сайта, т.е. меня. Личных сообщений тоже не предполагается;
  • опционально для зарегистрированных пользователей в дальнейшем можно прикрутить простейший публичный форум, но это задача с наименьшим приоритетом;
  • нужны обязательно кукисы, т.к. сайт предполагается мультиязычным (eng/рус) - нужно хранить хотя бы языковые настройки.
БД сама по себе небольшая, меньше 1000 записей. Наполнять БД я могу хоть через phpmyadmin или импортом CVS, для этого мне фронтэнд особо не нужен (т.е. иметь его хорошо, но не обязательно).

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

p.s. готовых CMS, по крайней мере со свободными лицензиями, для этих целей не нашёл, но если таковые имеются, то подскажите.

Заранее домо аригатоу.
No. 26043  
>>26042
Clojure
ClojureScript
No. 26044  
>>26042
Раз уж у тебя есть БД, то логично было бы и пользовательские данные с комментариями хранить в той же самой БД (хоть это и нарушает пункт про то что пользователи не могут редактировать БД)

>стек актуальных технологий
Актуальные технологии в смысле не тухлые или в смысле требуемые на рынке?

алсо https://learnbchs.org/
No. 26045  
>>26044
>https://learnbchs.org/
Evil as is.
No. 26046  
>>26044
> Раз уж у тебя есть БД, то логично было бы и пользовательские данные с комментариями хранить в той же самой БД
Да, это понятно. Про редактирование я немного не то имел в виду. Я имел в виду, что пользователи не могут редактировать/изменять основной контент сайта.

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

В связи с этим, разумеется, всякая экзотика вроде >>26043 мне не кажется хорошим выбором. Мне нужно что-то прямо очень распространённое ультра-популярное, вроде Python/Node.js/Ruby on Rails. Потому что по этим инструментам давно есть все гайды, есть сообщество, где можно спросить совета, etc. Но я не могу выбрать что-то конкретное исходя из своих задач. Понятное дело, что лучшей стратегией было бы попробовать каждый вариант, и затем уже решить, с каким больше всего понравилось работать. Но это потребует много времени и усилий в пустоту (без видимого результата).
No. 26047  
>>26046
Пишу тут я помогу на кложе.
No. 26053  
Подскажите как принять инпут пользователя в Жабаскрипте. Знаю что есть prompt(), но он только для браузеров, а мне нужно все сделать через терминал VSCODE.
No. 26056  
>>26053
Ты делаешь с использованием Node.js? Если да, то:

1. Переключи console указанную в launch.json на integratedTerminal, как советуют тут:
https://stackoverflow.com/a/66850526

2. Подключи модуль readline:
https://nodejs.org/api/readline.html

3. Воспользуйся модулем как-то так:
>const readline = require('readline');
>const { stdin: input, stdout: output } = require('process');

>const rl = readline.createInterface({ input, output });

>rl.question('What do you think of Node.js? ', (answer) => {
> // TODO: Log the answer in a database
> console.log('Thank you for your valuable feedback: ' + answer);

> rl.close();
>});

Должно сработать.
No. 26060  
image_2022-03-27_21-30-16.png - (149.36KB, 757×863)
26060
Вскрыл новеллку от Nitro+, файлы с кодом имеют расширение .nss, при открытии их через VS получается пикрил, комменты и определенные фрагменты кода заменились кракозябрами.
Посоветуйте, что сделать/скачать, чтобы можно было спокойно и без лишних проблем просматривать код в этих файлах.
No. 26063  
1648013947045.jpg - (220.28KB, 960×720)
26063
>>26060
Тот файл в кодировке euc-jp, скорее всего. Если редактор поддерживает работу с файлами в ней, укажи использование именно этой кодировки. Если нет, сконвертируй файлы в utf-8.
No. 26065  
>>26063
Спасибо за наводку в нужное русло. Кодировка Shift-JIS.
Хочется убивать за переменные на японском.
No. 26074  
>>26065
Когда имеешь дело с японским кодом, названия переменных в Shift-JIS — меньшая из проблем. Индусы по сравнению с ними — гении от программирования.
Вполне можно ожидать чего-то такого:

if(a == 1) return 2;
if(a == 2) return 3;
if(a == 3) return 4;
if(a == 4) return 5;
... и так далее 100500 раз.

А return а+1 — это позорное гайдзинкое читерство, свидетельствующее о том, что гайдзины не способны проявить настоящее усердие!
No. 26077  
А у меня порнография с немецкими комментариями.

Может кто-то знает готовую C++ библиотеку для работы с устаревшими .doc файлами? А то я уже готов хищнически вырвать ее из кода опенофиса.
No. 26079  
>>26065
>>26074
>Shift-JIS
Палю годноту:
https://github.com/vickyorlo/SHIFTJIS-B-Gone
No. 26081  
>>26077
Пропатченная (так как upstream проект с SourceForge давно заброшен) wv2 https://sources.debian.org/src/calligra/1:3.2.1 dfsg-5/filters/words/msword-odf/wv2/, используемая в Calligra Suite, не подойдёт? Ещё есть чисто сишная libwv из AbiWord.
No. 26083  
>>26081
> wv2, используемая в Calligra Suite
Бро, благодарю, это самое то.
No. 26085  
Привет, Стивы.
На работе стал довольно часто попадаться Питон, поэтому надо бы его выучить в дополнение к основному языку. Посоветуйте хорошую книгу по нему. Желательно, чтобы ее можно было купить в бумажном виде, у меня книги плохо получается с экрана читать.
No. 26091  
>>26085
Из бумажных книг что советовали в прошлой нити
>Посоветуйте хорошую книгу по Python

Думаю стоит начать с
>Билл Любанович
>Простой Python. Современный стиль программирования
>>/dev/24916
https://books.google.com/books?id=9dW8DwAAQBAJ&lpg=PP1&dq=inauthor:"Bill Lubanovic"&pg=PP1#v=onepage&q&f=false

Или с Лутца
>Марк Лутц
>Изучаем Python, том 1
>>/dev/24263
https://books.google.com/books?id=4pgQfXQvekcC&lpg=PA1&dq=inauthor:"Mark Lutz"&pg=PA1#v=onepage&q&f=false

c:python
No. 26092  
>>26091
Спасибо.
No. 26093  
>>26092
Надеюсь, подойдут. Заходи, если что.
No. 26096  
Стив, посоветуй бумажных книг по юнит-тестированию для самых маленьких. Я ими никогда не занимался, ничего о них не знаю, приходится на работе отказываться от связанных с ними задач. Надо устранить недостаток.
No. 26097  
По Питону вообще надо нам анонимные контесты с конкурсами устраивать и обсуждать. Если три человека будут писать - уже будет весело. Все это от лица комьюнити "разработка 410", разумеется.
No. 26099  
>>26096
>книг по юнит-тестированию
Ты тот же аноним, что в >>26085 просил книг по Питону? Тогда может:

>Гарри Персиваль
>Python. Разработка на основе тестирования
https://books.google.com/books?id=2CgvDwAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false

Книга про Test Driven Development и проходится по тому как все поднимается, настраивается, пишется и запускается. Что по идее как раз то что ты хочешь в плане тестов. Или тебе надо что-то более академичное?

опять c:python лул
No. 26102  
>>25973
> Сама соль, естественно, не должна лежать в базе данных.
Простите, а где она должна лежать?
No. 26103  
>>26102
Проясним параноидальность.

Пароли солят, чтобы украденная база с хешами этих паролей была бесполезна для подбора паролей к хешам.

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

Представим, что пароли посолили очевидно, по туториалу, SHA256, 1 раз, от пароля + соли в конце. Тогда если соль находится прямо в соседней колонке в БД, польза от ее применения под большим вопросом, если не нивелируется вообще. Потому что такой алгоритм будет одним из первых который попробует злоумышленник.

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

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

Для систем с закрытым кодом подобная информация может быть получена от инсайдеров.

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

Как-то так.
No. 26104  
maxresdefault.jpg - (157.17KB, 1280×720)
26104
Жив ли Delphi? Вопрос, как ни странно , серьезный. Возможно ли без профильного в/о устроиться в какую-либо контору? Может быть есть фриланс варианты какие-то? Интересно.
No. 26106  
>>26099
Да, я тот анон.
Спасибо за совет. А есть что-то аналогичное для плюсов?
No. 26108  
>>26106
>А есть книга по юнит-тестированию для плюсов?
Тут бы знать, какие тестовые фреймворки в ходу у плюсов.
Например, вижу книгу нужного тебе содержания (кажется, издавалась только на английском):

>Джефф Лангр
>Modern C++ Programming with Test-Driven Development
https://books.google.com.ua/books?id=GA9QDwAAQBAJ&lpg=PA1&pg=PA1#v=onepage&q&f=false

Но тут всё строится на базе Google Test + Google Mock.
А я не знаю, насколько они широко распространены в плюсовом сообществе.

Подозреваю, ты её уже видел сам, скажи подходит или нет.
No. 26110  
>>26108
> Google Test + Google Mock
> А я не знаю, насколько они широко распространены в плюсовом сообществе

Очень распространены, считаются нормой.
No. 26113  
Учу питон. Начал читать про flask. В книжке на каждом этапе в примерах новые сторонние библиотеки. В итоге к концу книги будет овер 900 зависимостей от кучи библиотек. Так и должно быть или лучше сменить книжку?
No. 26114  
>>26113
Не знаю на счёт книжки, но вообще для питона это нормально.
No. 26115  
>>26113
А что за книга?
No. 26116  
>>26115
No. 26121  
Привет, Стив. Решаю простенькие задачки и встретился с некоторыми, которые не могу решить.
Вот такая, например.
Непонятно, что желает эта функция. Нужно найти, какие в ней дефекты и как ее можно улучшить.
https://onlinegdb.com/EWoRTQ9rI - онлайн-компилатор с этой функцией

int myfunc(int* a)
{
    int x = 0;
    for (size_t i = 0; i < MASS_SIZE; i++)
    {
        for (size_t j = i; j < MASS_SIZE; j++)
        {
            if (a[j] != a[i])
            {
                if (j - i > x)
                {
                    x = j - i;
                }
                i = j - 1;
                break;
            }
        }
    }
    return x;
}

No. 26123  
>>26121
Еще вот такая задача. Надо написать функцию, которая принимает массив строк, и возвращает массив, в котором из исходного массива удалены все строки, которые встречаются четное число раз. При этом, функция должна быть оптимизирована по скорости работы.
У меня получилось такое - https://www.onlinegdb.com/TWTCxMZCi . Непонятно, оптимально ли это? Если нет, как оптимизировать?
std::vector<std::string> remove_even_strings(std::vector<std::string> & ref)

{
    std::vector<std::string> result;
    std::map<std::string, size_t> srch;
    
    for (auto & r : ref)
    {
        auto t = srch.insert(std::make_pair(r, 1));
        if (t.second == false)
        {
            srch.at(r) = srch.at(r) + 1;
        }
    }
    
    for (auto & r : ref)
    {
        if (srch.at(r) % 2 == 1)
        {
            result.push_back(r);
        }
    }
    
    return result;
}

No. 26124  
>>26121
Было бы хорошо в pastebin всё это. и ссылку дать.
No. 26125  
>>26124
А зачем Пастребин, если есть ссылки на онлайн-компилятор?
No. 26126  
>>26123
Строки с 49 по 53 можно заменить простым ++srch[r]; Это ускорит тебя в два раза.
No. 26128  
>>26125
Да лишь бы не прямо сюда.
No. 26129  
>>26126
Не понял. Как это должно работать? Как можно сделать инкремент по индексу, если элемент с этим индексом еще не создан?
No. 26130  
Есть у кого на примете курсы или тренинги по сетям и по многопоточке? Желательно на плюсах. По многопоточке я нашел вот это https://stepik.org/course/149/syllabus Но это очень сложный курс, хотелось бы чего попроще.
No. 26131  
>>26129
Существуют два метода для получения значения по ключу: .at() и оператор [].

Метод .at() константный и в случае отсутствия нужного элемента кидает исключение.

Оператор [] неконстантный, при отсутствии необходимого элемента он создает сам с дефолтным значением - в нашем случае с нулем.
No. 26133  
>>26131
> Метод .at() константный
Может использоваться как константный - при вызове у константной мапы он возвращает константную ссылку на значение, при вызове у неконстантной - неконстантную.

В противоположность ему оператор [] может вызываться только у неконстантной мапы, а при работе с константной создает ошибку на этапе компиляции.
No. 26134  
>>26131
> Оператор [] неконстантный, при отсутствии необходимого элемента он создает сам с дефолтным значением - в нашем случае с нулем.
Интересная особенность, не знал о ней. Спасибо, буду теперь этим пользоваться.
No. 26135  
>>26103
Можно ссылки на источники, в которых можно об этом всем почитать? Про бесполезность соления известным алгоритмом из соседней колонки и про использование отдельного сервера особенно интересно.
No. 26138  
>>26130
>Есть у кого на примете курсы или тренинги по сетям и по многопоточке? Желательно на плюсах.
Вот тут одновременно и сети, и многопоточка, и на плюсах, на примере сервера и клиента для MMO, с доступными рабочими примерами по ссылкам из описания.

>Часть 1
https://www.youtube.com/watch?v=2hNdkYInj4g
>Часть 2
https://www.youtube.com/watch?v=UbjxGvrDrbw
>Часть 3
https://www.youtube.com/watch?v=hHowZ3bWsio
>Часть 4
https://www.youtube.com/watch?v=f_1lt9pfaEo

Скажи, насколько это сложнее / проще чем бы тебе хотелось.
No. 26139  
1495071594281.png - (652.42KB, 660×888)
26139
Привет, Чио–чан!

Как сделать так, чтобы в программке на C++ время было не в секундах от сотворения Unix, а в более человекочитаемом формате? Чтобы пользователь его мог вводить, а потом оно так же выводилось. А если сделать тупо строкой, то сортировка не будет работать же.

Вот мой код: https://files.catbox.moe/ysw18s.cpp
No. 26141  
>>26139
Весь ввод на самом деле является набором символов, просто для числовых переменных у оператора >> реализовано преобразование в нужный тип под капотом.
Соответственно, для даты/времени нужно преобразовать ввод в нужный формат вручную (опционально реализовав перегрузку operator<< для используемого типа).
При выводе пользователю естественно придется преобразовывать все обратно.

Судя по всему функция, которая парсит поток в структуру даты-времени, есть в стандартной библиотеке: https://en.cppreference.com/w/cpp/io/manip/get_time
No. 26144  
>>26141
Спасибо за ответ!

> опционально реализовав перегрузку operator<<
Видимо, мне тут не хватает знаний.

Допустим, пользователь вводит время в формате hh/mm или hh:mm, а далее требуется провести сортировку по времени. Отсюда следует, что логичнее всего время перевести в формат от сотворения Unix, а потом снова в строку. И вот само преобразование типов я немного не понимаю — в том же VBA при сравнении времени можно вообще не париться, ЕМНИП.
No. 26145  
Хотя, наверное, в случае времени можно попробовать сначала посимвольно считывать строку и, исходя из этого, прибавлять что-то к переменной времени, где один час будет равен 3600 секундам. Аналогичным образом потом из времени сделать строку. Наверное, это будет несколько циклов и куча условий.

Только данные, наверное, лучше вводить не в строку, а в массив символов? Вроде так проще будет.
No. 26146  
>>26144
Если честно, не очень понял, в чем проблема. Хранишь у себя время в виде числа, преобразуешь в строку/из строки при выводе/вводе. Пользуешься готовой библиотекой как указал >>26141 по ссылке. Там даже с примерами.
No. 26148  
>>26146
> Там даже с примерами.
Тяжелочитаемо, из-за всяких std::

И почему, кстати, в примерах не используется using namespace std?
No. 26151  
>>25965
Одна дѣвочка ставить ; после закрытия фигурных скобок в C++. Правильно или гладить кота?
No. 26152  
>>26151
Есть случаи, когда точка с запятой после фигурной скобки необходима - например, при определении класса или структуры. Без нее код не скомпилируется. В других случаях гладь кота.
No. 26153  
>>26148
Есть мнение, что using namespace нельзя использовать в заголовочных файлах из-за возможных конфликтов. В .cpp файлах такая проблема стоит не так остро, но я все равно не видел таких примеров в работе.

Зато часто используют что-то такое:

using DocumentId = std::int32_t;
No. 26154  
Привет, Стив.
Есть такая задача, не знаю, как к ней подступиться.
На вход подается очень большой текстовый файл, в котором на каждой строке по слову. Надо найти в этом файле 10 наиболее часто встречающихся слов. Загвоздка в том, что надо при этом использовать не более 1 Кб памяти, то есть, не получится хранить массив всех слов со счетчиком сколько раз одни встретились. Есть у этой задачи какое-то решение, кроме как использовать еще один файл как буфер или внешнее хранилище данных? Писать надо на Си, без плюсов, но это не особо важно, мне именно алгоритмически непонятно как решать.
No. 26155  
>>26154 Если честно, странное начальное условие
использовать не более 1 Кб памяти
, это 8-битный embedded? Сейчас более-менее стандартный bootstrap будет больше 1кб.

Если здесь все таки ошибка, и памяти немного побольше, то уже наверно проще будет предложить варианты.
No. 26156  
>>26155
Да, почти так и есть. Ошибки никакой нет, 1 КБ памяти. Если собирать голым gcc без сторонних библиотек, то должно вместиться.
При чем тут bootstrap? Это не под веб разработка.
No. 26157  
>>26156
P.S. Возможно, стоит начать с вариантов, которые в принципе не потребляют много памяти, а потом попытаться их оптимизировать.
И, да, нельзя использовать сторонние библиотеки. Только стандартная, только хардкор.
No. 26158  
>>26152
Понял, спасибо. Наверное, лучше тогда ставить их везде при закрытии фигурных скобочек — компилятор пропускает же. На читаемость кода это вроде особо не влияет.

>>26153
Понял, спасибо.

P.S.

Могу читать ранобэ в анлейте, но если зайти на какой–нибудь англоязычный программерский форум, то становится тяжело. Хотя та же справка по Python'у читается легко. Почему так?
No. 26159  
space_saving_frq_algorithm.png - (14.90KB, 284×273)
26159
>>26154
>Есть у этой задачи какое-то решение, кроме как использовать еще один файл как буфер или внешнее хранилище данных? Писать надо на Си, без плюсов, но это не особо важно, мне именно алгоритмически непонятно как решать.

Да, есть. Это на самом деле очень популярная задача, и для неё периодически предлагают новые алгоритмы. Вот в этой статье рассматривают все основные алгоритмы, которые можно для этого использовать:
http://dimacs.rutgers.edu/~graham/pubs/papers/freqcacm.pdf

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

>Не знаю, как к ней подступиться.
Лично я бы представлял эту задачу как подсчет слов в бесконечном потоке, где заведомо не хватит ни памяти, ни диска, и воспользовался бы алгоритмом 3, Space Saving пикрелейтед. Если в двух словах, там тебе надо иметь буфер на k слов, и когда он заполнится - начать вытеснять из него самые редкие слова.

Скажи, получится ли разобраться и правильно ли я понял проблему.
No. 26160  
>>26159
Да, это именно то, что нужно. Обязательно почитаю статью в ближайшем времени, когда освобожусь немного.
>погрешность
Там вероятностные алгоритмы что ли?
No. 26161  
>>26160
Среди прочего есть и вероятностные, если я тем местом читал. Но вообще там погрешность по идее есть у всех алгоритмов, которые не сохраняют все данные.
No. 26162  
Яхалло, стотт читать "искусство программирования" Кнута?
No. 26163  
Чии, насколько хорошо можно жить в какой–нибудь стране и работать в сфере IT, не зная местного языка, только английский? Тем более, что айтишники просто обязаны знать английский — это как немецкий для шахтёров XIX-го века.
No. 26164  
>>26163
Я в Израиле так 4 года жил.
No. 26165  
>>26164
Но в Израиль вроде сложно переехать, если не еврей.
No. 26167  
А поясните, как работает сишный fgets. В спецификации сказано, что он считывает строку или num-1 символов. Но нигде не написано, что он он делает, если num-1 меньше длины строки. Допустим, в файле строки по 60 символов. Мы говорим считать 50 символов. Следующий вызов будет работать уже с новой строки или с 51 символа?
No. 26169  
>>26167
Следующий вызов будет с 51 символа, в твоём примере.
Раз ничего не написано про оставшиеся символы в строке, то он ничего с ними и не делает.

Можешь написать простенькую программку да проверить самостоятельно, так-то (или даже исходники почитать)

А вообще сишные волшебники вроде бы рекоменуют не пользоваться всеми этими fgets'ами, а оперировать fread/fwrite и выковыривать потом строки из буфера самостоятельно.
No. 26170  
Привет, Стив.
Я хочу стать разработчиком компиляторов. Не просто потому, что за это много платят, а потому, что мне хочется быть достаочно редким и востребованным узким специалистом.
Тем не менее я открыл вакансии связанные с разработкой компиляторов и в большинстве случаев там обязательно указан бэкенд компиляторов LLVM.
С сайта llvm.org можно узнать[1], что llvm написан на С++ с STL.
Откуда вопрос: надо ли знать C++ для того, чтобы заниматься разработкой компиляторов (как любительски, так и профессионально) ?
Второй вопрос: нужно ли специальное образование для того, чтобы этим заниматься ?
Спрашиваю скорее про магистратуру, потому что бакалавриат на специальности инженер по радиоэлектронике мне ещё предстоит окончить.

[1]: https://llvm.org/docs/FAQ.html#in-what-language-is-llvm-written

>>26167
У меня работает со следующего символа, а не с новой строки. Код[2], файл[3], вывод:
12222222222
OpenBSD 7.0 , clang 11.1.0
[2]: https://termbin.com/8o0w
[3]: https://termbin.com/xv3v
No. 26171  
>>26154
Если нужно точное решение в крайних случая (все кроме одного слова разные) и соответственно варианты из >>26159 не подходят, можно делать много проходов по файлу, считая за каждый проход количество только для одного/нескольких слов и обновляя после каждого прохода список самых частых.
No. 26173  
>>26170
за это много платят?
No. 26174  
>>26170
парой параграфов ниже в llvm FAQ'е пишут:
>https://llvm.org/docs/FAQ.html#i-d-like-to-write-a-self-hosting-llvm-compiler-how-should-i-interface-with-the-llvm-middle-end-optimizers-and-back-end
-code-generators
>1. Call into the LLVM libraries code using your language’s FFI (foreign function interface).
>2. Emit LLVM assembly from your compiler’s native language.
>3. Emit LLVM bitcode from your compiler’s native language.

Т.е. для пользования LLVM знать C++ не обязательно. Менее известный компилерный бэкенд QBE работает примерно так же. А можно вообще весь тулчейн самому написать с нуля на коленке (golang вроде бы так делают).

Но раз уж ты собрался писать компиляторы, то наверное надо бы знать не только C++, но и вообще как можно больше всего представленного в мире языков программирования, хотя бы поверхностно.
No. 26175  
>>26173
Ну, судя по тем вакансиям, которые я видел, да. Но я же уже упомянул, что причина моего интереса не в этом.
No. 26177  
>>26174
Справедливо, спасибо за ответ.
Про QBE слышал. У его автора — mpu, был ещё список литературы для компиляторщиков любителей.
https://c9x.me/compile/bib/
No. 26178  
>>26170
Нужно знать yacc, виртуальные машины и очень, очень много байтоебли.
>нужно ли специальное образование для того, чтобы этим заниматься?
Если ты задаёшь этот вопрос, то тебе да.
No. 26179  
Чии, как я понимаю, указатели в C++ лучше использовать везде, где только можно? Ведь они же память экономят.
No. 26180  
>>26179
Они могут инвалидироваться в самый неожиданный для тебя момент. Указателями и ссылками нужно пользоваться очень внимательно, следить за временем жизни объектов, перестройкой контейнеров и так далее.
No. 26181  
>>26180
Но ведь они всё равно прилично экономят ресурсы компьютера.
No. 26182  
>>26181
Еще посмотри на std::string_view, эта штука позволяет экономить при работе со строками, но подвержена тем же проблемам, что и указатели.
No. 26183  
>>26159
> получится ли разобраться
Нашел для этого алгоритма презентацию с объяснениями для самых маленьких. https://imoumoulidou.github.io/SpaceSaving_Presentation.pdf
Но и с ее помощью я не смог разобраться с одной мелочью, без которой ничего не работает.
В алгоритме есть overestimations, которые как-то используются для того, чтобы счетчики правильно увеличивались. Как это реализовать, я не очень понимаю.
Мои наработки (некорректно работающие) - https://github.com/sltrs1/space_saving_alg_data_stream
No. 26184  
>>26182
Спасибо.
371 сообщений пропущено. Показаны 100 первых сообщений.
Удалить сообщение []
Пароль  
[Mod]