• Как разрабатывают сервис проверки грамматики?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Думаю, что подключать сюда ИИ нету особого резона, как мне кажется.


    ну да, конечно

    — В некоторых языках мира двойное отрицание означает согласие. В других, двойное отрицание так и остается отрицанием. Но нет ни одного языка в мире, в котором двойное согласие означает отрицание.
    Голос с задней парты:
    — Ага, конечно...


    ИИ и еще раз ИИ, гоняют корпуса
    проблема с тем же украинским и прочими казахскими и прибалтийскими - корпусов мало

    к слову, год так 2018й про переводчики - ИИ окончательно обошел правила, говорилось кажется о EN ES - эта пара проблем не испытывает,
    в целом все на уровне, это видно уже по всему - от Дипла до Лингвалекса

    а вот с иероглифами - бЯда, чайна еще +-, хотя всем видно что смИшно, а корея - вообще мрак

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

    Давным-давно, еще в советские времена, буфетчица из московского Дома литераторов жаловалась подруге: «Какие они все-таки безграмотные, эти писатели! Подходят и просят: «Дайте одно кофе, дайте одно кофе!». Один только Расул Гамзатов (народный поэт Дагестана — Л.В.) всегда говорит: «Мнэ адын кофе!». А потом добавляет: «И адын булочка!».

    а году в 2010-15м кофе разрешили быть одно, точнее, и один и одно

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

    ну и конечно есть набор правил, но у него полно ложноположительных срабатываний
    Ответ написан
    Комментировать
  • Как получить переданные данные методами PUT/DELETE через nginx?

    ruddy22
    @ruddy22
    Спасение утопающих — дело рук самих утопающих
    Комментировать
  • Как передать значение из тега H3 в модальную форму?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    функцию swa() забыли привести, как вы начали её писать?

    В неё перым аргументом попадёт объект Event, у которого есть свойство target – элемент, по которому кликнули. В данном случае это тег <a>

    Для этого элемента можно найти родителя (свойство parent) – это div. А в нём уже найти элемент H3:
    const title = event.target.parent.querySelector('h3').innerText;
    Ответ написан
    Комментировать
  • Как получить доступ к глобальной переменной из функции?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Всё дело во времени.
    Массив объявляется и сразу доступен, пустой.
    Запрос отправляете сразу.
    И ожидаете результатов тут же, сразу же — вот это ошибка.

    Ответ на запрос приходит не сразу, а (много) позже. Асинхронно. Обращаться к «глобальному» массиву есть смысл только после получения ответа.

    Поэтому откройте удивительный мир промисов!
    Ну, или просто вызывайте отрисовку таблицы redraw_table() в коллбэке по успешному завершению выполнения запроса.
    Ответ написан
    1 комментарий
  • Как правильно формировать AJAX запросы в Laravel в подключённых скриптах?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    1. Джаваскрипт ничего не знает о php и laravel. Пропишите его явно или каким-то образом прокиньте в js.
    2. Для регистрации нельзя использовать гет параметры. Регистрация меняет состояние, вы создаёте пользователя, потому надо использовать POST. Кроме идеологических причин, есть ещё причины безопасности и багоустойчивости. Гет запросы логируются и кешируются.
    3. Зачем в 2022 году продолжать для таких запросов тащить jquery, если браузеры поддерживают fetch https://learn.javascript.ru/fetch
    Ответ написан
    1 комментарий
  • Как в php сделать так чтобы по ссылке xml открывался php файл?

    @alexalexes
    Сделайте rewrite правило в конфиге nginx, чтобы при обращении к sitemap.xml вызывался php скрипт, который и обновит и выведет содержимое sitemap.xml. Только позаботьтесь о некой логики кеша, чтобы функция обновления файла запускалась не каждый раз, а по мере устаревания файла или его отсутствии.
    Ответ написан
    Комментировать
  • Чем можно заменить связку MS Excel + VBA в Linux?

    Adamos
    @Adamos
    Прекрасный повод пересмотреть парадигму "начинаем работать на компьютере с офиса".
    Не искать костылей, которые заменят привычные костыли Excel+VBA, а разрабатывать решения, которые не зависят от желаний левой пятки корпораций и правительств.
    Например, Javascript на HTML-странице позволяет не только корректно повторить весь расчет, который народ шаманит в Ёкселе, но и читать-редактировать его без чудовищного геморроя с прыжками по ячейкам и мучительными попытками вспомнить, в которой что считается.
    Нужно не только расчитывать данные, но и хранить их? База данных на Линуксе поднимается за 10 минут и не стоит вам ни копейки. Нужно обмениваться данными? JSON и XML не требуют никаких конкретных программ конкретной версии - ваша информация остается доступной, даже если вся M$-продукция объявлена вне закона...
    Нужны документы для печати? PDF - открытый формат, и документ в этом формате не перекосит от того, что вы открываете его не в той программе, в которой создали. Более того - полно библиотек, которые автоматически создадут вам этот документ из ваших данных.
    Нужно только сменить парадигму. Для будущего.
    Ответ написан
  • Зачем нужна инкапсуляция в ООП?

    DollyPapper
    @DollyPapper
    Инкапсуляция вообще является (ИМХО) главным принципом из 4. Инкапсуляция + абстракция. Вы не поняли её основную идею. Инкапсуляция это объдинение в одной сущности данных (не обязательно в общем-то) и действий которая эта сущность может предоставить. Инкапсуляция + абстракция представляю собой в общем более общий принцип - сокрытие информации/сложности, и один без другого не сильно то полезен. Не путать с модификаторами доступа (public, private и тд). Этот принцип идет скрозь всю историю развития языков программирования и собственно является главной движущей силой их развития. Вот пример из реальной жизни: есть у вас микроволновка. Она имеет +- 2 нопки: выставить время, выставить мощность. Это интерфейс микроволновки, который доступен конечному пользователю. Всё что вам нужно знать, чтобы приготовить себе похавать - 1)на какой мощности это хавать, нужно готовить 2) сколько это нужно делать по времени. При этом очевидно внутри микроволновки происходит та самая сложность, микросхемы гоняют электрический ток, магнетрон изучает электромагнитные волны, всякая разная физика происходит и вот это вот всё. Итого: вся эти физика и электротехника инкапсулирована в объект микроволновки (инкапсулирована так, что мы не можем добраться до её внутреннего устройства, это важно. Т.е. мы не можем сами соединить проводки, поменять электрическую цель, чтобы себе похавать сделать, разработчик этой электропечки не дал нам даже потенциальную возможность это сделать легально. Можно конечно разобрать устройство и проделать все эти манипуляции, но это уже это на совести того самоделкина, кто это делает). Итого: мы имеем интерфейс из двух кнопок и получаем от обьекта микроволновки услугу - приготовить пожрать. Как там внутри это реализовано, нам не важно. Это и есть инкапсуляция + абстракция = сокрытие информации/сложности.
    Более программистский пример: есть такая структура данных - Стек. Хотя по факту это не структура данных, а абстрактный тип данных. Советую этот термин загуглить, это важная составляющая в понимании ООП.
    Представим, что стек это такой обьект который предоставляет услуги, по типу как мы представляли себе обьект микроволновки. Что нам нужно знать про стек, чтобы им пользоваться? Публичный интерфейс. Т.е. есть класс Stack с публичными методами push(), pop(), viewTopStack() (посмотреть первый элемент стека, без его удаление из самого стека). Всё, можно пользоваться. Как он внутри эти элементы хранит, простой ли это массив, или связный список, на сколько эффективно он там внутри работает - нам не важно. Это важно тому, кто предоставил нам в пользование данный класс. Мы знаем, что вызвав viewTopStack мы посмотрим первый элемент стека, вызвав push - положим что-то в стек, вызвав pop получим первый элемент, удалив его из стека (по аналогии: мы знаем что чтобы притоговить пожрать, нужно выставить в микроволновке время и мощность, на выходе получив наше адово хрючево). Если подытожить - инкапсуляци + абстракция, (еще раз настою на том, что порознь их нельзя рассматривать, это две тесно связанные концепции которые имеют практический смысл только в синергии) это механизм борьбы со сложностью, не только в программировании, вообще везде, в любой человеческой деятельности. В этом их смысл. Если ваши абстракции плохие -> ваш код сложный -> ваш код плохой (говнокодом его еще называют в сообществе программистов).
    Почитать на эту тему можно следующее: Р.Мартин - Чистая архитектура (начать с глав про SOLID прицнипы), С.Макконел - Совершенный код (главу про классы обязательно, остальное желательно (очень желательно)), там в общем-то вам расскажут то что я вам сейчас рассказал, только более подробно, по больше примеров и дадут обоснование сложности, назвав борьбу с ней - Главным техническим императивом. Шлифануть это книгой банды четырех. Сами паттерны не обязательно начинать учить (да и рано вам еще), но вот введение и часть про программирование на основе интерфейса, а не реализации - самое оно, это дополнит картину.

    UPD: тот факт, что мы в классе стек собрали его функционал (функции pop,push,...) обьединенные одной общей темой и есть факт инкапсуляции.
    Ответ написан
    Комментировать
  • Зачем нужна инкапсуляция в ООП?

    Adamos
    @Adamos
    Инкапсуляция действительно защищает - мозг программиста от переполнения. И только.
    Машинный код после компиляции класса, в котором методы и члены объявлены private или public - один и тот же.
    Они нужны только для автоматической проверки компилятором - не ошибся ли программист.
    А инкапсуляция - это не столько собирание в одну кучу того, что работает вместе, сколько обрывание любых связей с остальным кодом. За исключением реально необходимых. После чего класс становится вещью в себе, и вам можно работать с ним, не задумываясь о прочем коде, и работать с прочим кодом, не думая о потрохах этого класса.
    Ответ написан
    4 комментария
  • Как заставить laravel-filemanager грузить изображения?

    ashfedor
    @ashfedor Автор вопроса
    Вобщем все решилось намного проще!
    Зашел скачал версию PHP
    VS16 x64 Thread Safe была VS16 x64 Non Thread Safe
    и все заработало!
    Ответ написан
    Комментировать
  • Где взять дорожную карту c++?

    Adamos
    @Adamos
    Какой именно интернет вы весь перекопали?
    Первая же строчка по запросу в гугле "unreal engine developer roadmap", например - не устраивает?
    Может, вам и не стоит в С++?..
    Ответ написан
    Комментировать
  • Как реализовать открытие PDF по ссылке в браузере с автоматическим появлением диалога печати?

    @Barmunk
    Файл должен лежать на том же домене, где запускается js

    <button onclick="print()">Файл PDF</button>

    function print() {
    w = window.open('https://africau.edu/images/default/sample.pdf');
    w.print();
    }


    https://jsfiddle.net/v3krezhw/
    Ответ написан
    2 комментария
  • Какая версия linux оптимальна для обучения?

    @res2001
    Developer, ex-admin
    Kentavr16, Ставь arch или gentoo - будет максимальное погружение в трудности практически с первого шага. Комьюнити в арче большое и мануалов то же хватает, в т.ч. и на русском. Будет трудно, но зато можно довольно быстро погрузиться в линукс.
    Ubuntu - для домохозяек - многое работает из коробки и много чем можно управлять из граф.оболочки. Задачи для обучения придется придумывать самому :)

    Вообще выбор дистрибутива не принципиален, на самом деле.
    Но есть некоторые нюансы.
    Сейчас во многих дистрибутивах системным менеджером является systemd. Но могут быть и другие варианты: systemv, upstart, ...
    В дистрах порожденных от debian пакетный менеджер обычно apt.
    В дистрибутивах от redhat - rpm.
    В arch - pacman.
    В gentoo - софт собирается из исходников, похоже на систему портов во FreeBSD.

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

    Еще один момент, отличающий разные дистрибутивы - политика обновлений. В некоторых дистрах перед релизом проходит период тестирования и т.п. (debian, ubuntu lts), в других - выдают на гора все самое горячее, не парясь о последствиях для пользователей (arch), есть и промежуточные варианты.

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

    hint000
    @hint000
    у админа три руки
    приходится говорить что-то типа: ну вот у тебя зависит от него, ты посмотри как у него сделано, поставь заглушки, потом объедините.
    Сначала пишутся все необходимые интерфейсы между кусками задачи. С обсуждением. На это много времени не требуется. Когда интерфейсы зафиксированы (ну как "зафисиксированы", в рабочем порядке никто не запрещает слегка корректировать), то куски можно спокойно разрабатывать независимо. Вроде же это классика. Я бы не сказал "ну вот у тебя зависит от него...", я бы сказал "ваши куски взаимодействуют - значит сразу договаривайтесь, как в точности они взаимодействуют".

    А так это надо на конкретной задаче разбирать, в чём затруднения. "По фотографии" такие проблемы не решить.
    Ответ написан
    Комментировать
  • Как хранить image и pdf в MySQL?

    ev_g
    @ev_g
    Web dev.
    Для удобства я предлагаю еще php-исходники залить в БД. А оставить только один index.php, который будет подключаться к БД, доставать все исходники и тут же их выполнять.
    Ответ написан
    Комментировать
  • Как научиться декомпозировать задачи?

    Adamos
    @Adamos
    Дробить задачу еще на более мелкие совсем не охота

    Ну и зря. Вообще-то технологиям планирования совместной работы уже не первый век, и важнейший этап - как раз выделение тех участков работы, которые критичны для начала работы на других участках, и подтягивание их на диаграмме Ганта как можно раньше, чтобы уменьшить простой. Потом уже менее критичные задачи ложатся на свободные участки и параллелятся относительно друг друга.
    Так, например, нас учили делать генплан строительства еще 30 лет назад. До популяризации в РФ всяких там Скрамов и Канбанов.
    Ответ написан
    8 комментариев
  • Как хранить image и pdf в MySQL?

    Adamos
    @Adamos
    Имхо, главный вопрос к этому ТЗ - на кой хер хранить PDF, который генерируется из картинки и текста, если его можно просто сгенерировать на лету из этой картинки и этого текста? Кейсы использования PDF обычно не подразумевают частого обращения, а вот заваливать генерированным контентом базу - довольно очевидная дурь.
    Ответ написан
    Комментировать
  • Реален ли риск взлома сайта?

    @rPman
    Есть относительно универсальный вектор защиты своего веб-хостинга (да и наверное всего)
    - это read only хранилище везде где можно (в догонку флаг noexec в маунте диска)
    - цифровые подписи файлов
    к сожалению php ограничен функционал в этом направлении и поддерживает цифровую подпись только у phar сборок, переделать проект на их использование может оказаться не просто (но не невозможно, в некоторых случаях и вовсе автоматом все будет)
    - максимально кастриарованное окружение (спасибо docker часто это так и есть) но все же, для работы сайта может совсем не нужны 99% утилит которые установлены в системе, которые мог бы использовать злоумышленник для запуска своего кода (грубый пример, ты запретил запускать неподписанный код, убил bash но злоумышленник использует awk)
    - разделяй на модули все, база данных отдельно от бакэнда, бакэнд отдельно от статичных веб файлов веб сервера и т.п.
    спасибо докер народ стал этим пользоваться не задумываясь
    - отключай интернет, там где он не нужен, буквально, никакого доступа в интернет бакэнду и веб сервисам не требуется, закрывай все фаерволом или даже отдельными сетями
    - нестандартное окружение, даже не так - раздавай фейки, метки версий утилит, отдаваемых как либо в паблик пусть будут неправильными
    пример - у тебя linux nginx, а ты в заголовках говори что ты windows apache, у тебя последняя версия wordpress, а ты возвращай версию от 2008 года и т.п. автоматические средства анализа хакеров могут на этом споткнуться, понятно что эта защита не идеальная но сильно уменьшает вероятность успешного обнаружения у тебя дыр.
    - мониторинг всего нестандартного, процессы с необычными именами и командными строками, добавь ловушку песочницу, как только код злоумышленника в нее попадет - сигнал или даже остановка сервиса и ручные разбирательства

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

    @rPman
    Ответ на этот вопрос можно получить либо экспериментально либо изучив серверную реализацию (в конечном счете тоже экспериментально).

    У тебя 2 основных узких 'горла' - скорость подготовки ответа сервером (процессор и диск) и скорость сетевого соединения до него... ну а медленный клиент можно распараллелить несколькими машинами (и соответственно провайдерами если проблема в сети на стороне клиента).

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

    В дополнении к скорости сетевого подключения есть скорость ответа (пинг), но при множественных подключениях клиента к серверу, его влияние на результат почти исчезает.

    Ну и вишенка на торте, транспортный уровень может внести корректировки, полистай статью

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

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

    Ну и нагрузка на процессор, если реализация однопоточная (асинхронная реализация сильно усложнит подсчет) то скорость ответа будет линейно зависеть от времени обработки одного и нагрузки на процессор (проще замерить сколько клиентов дадут 100% нагрузку). Но вот многопоточные реализации могут давать неожиданные ухудшения характеристики, т.е. 10 потоков могут не дать 10-кратное увеличение скорости, и с величением потоков будет много ресурсов уходить на поддержание этой работы (кажется теория вообще говорит о квадратном корне из количества потоков), и это еще про кеш процессора речи не идет, так как в зависимости от того, влезает ли алгоритм обработки (нужная ему память) в него или нет тоже можно получить кучу странностей, например 1-2 потока будут давать быструю скорость, но добавив третий, даже не нагрузив весь процессор, можно получить значительное понижение производительности, так как данные трех потоков не влезают в кеш. Кстати оперативная память хоть и называется Random Access memory но может давать разную производительность в зависимости от характера нагрузки (особенно это видно по вычислениям на GPU) что тоже не лучшим образом влияет на многопоточный результат.

    т.е. может так получиться что аренда большого количества слабых блейдов будет эффективнее небольшого количества мощных серверов
    Ответ написан
    Комментировать
  • Как лучше будет изучить php + mysql?

    ddv88
    @ddv88
    Binance Futures
    Как правило, те кто здесь отвечают, не ходили на "курсы", которые сейчас предлагают на рынке, скорее даже презирают их. Большинство самоучек читали книги и не строго по РНР, а более фундаментальные темы по программированию в целом, затем самостоятельно проходили различные сертификации, устраивались в ИТ компании, так и учились.
    Начни с фреймворков и пойми как они работают. Затем уже начинай создавать свои велосипеды на основе полученной информации. Массу времени сэкономишь.
    Ответ написан
    Комментировать