• Как правильно составить функцию наибольшего числа на php?

    muhammad_97
    @muhammad_97
    PHP-разработчик
    <?php
    
    $numbers = [1, 15, 3, 9800, 9, 76, 45, 9];
    $arr = [];
    
    $maxLength = max(array_map('strlen', $numbers));
    
    foreach ($numbers as $number) {
        $key = str_pad((string) $number, $maxLength, $number);
    
      $arr[$key] = array_key_exists($key, $arr) ? $arr[$key].$number : $number;
    }
    
    ksort($arr);
    
    $arr = array_reverse($arr);
    
    var_dump(implode('', $arr));


    Алгоритм:

    Сравниваем цифры в числе одно за другим. При первом же несовпадении число с большей цифрой ставится влево:

    45 36 => 4534
    
    4 > 6  // первое число ставится влево 
    
    928 998 => 998928
    
    9 = 9
    2 < 9 // второе число ставится влево


    Это если их длины равны. Если нет, то просто начинаем сравнение с начала:
    456 4
    
    4 = 4
    5 > 4 // начинаем сравнивать с начала, первое число ставится влево 
    
    928 92
    
    9 = 9
    2 = 2
    8 < 9 // начинаем сравнивать с начала, второе число ставится влево


    Думаю непонятно объяснил, но что поделать
    Ответ написан
  • PyPy медленнее чем node.js?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    А на реальных проектах с использованием uvloop и asyncpg даже обычный Python теперь быстрее Node.JS
    8db70ba07836f94fefbcbb8c17e3a886.png
    performance.png
    Ответ написан
    3 комментария
  • Как развиваться начинающему web-разработчику?

    jacksparrow
    @jacksparrow
    Истина в одной фразе, что бы делать сложные проекты надо делать сложные проекты. Научится их делать кроме того как скрепя зубами решать трудности возникающие при создание нельзя. Либо будет, как в школах где учат рисовать за 1 день, пока над твоим плечом стоит мастер ты вроде неплохой художник, но по итогу ты сам ничего не научишься рисовать.
    Ответ написан
    Комментировать
  • Как развиваться начинающему web-разработчику?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я в начале 2000-х писал приложение для учета некоммунальных услуг ЖКХ для местного МУПа. Начинался этот проект как тестовое задание для приема на работу.

    Писать можно было на чем угодно, но на тот момент для меня лучшим инструментом казался Clipper 5.x, которым я, как мне тогда казалось, более-менее владел.

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

    Забегая вперед скажу, что автоматизация, в конце концов, удалась, из режима работы 3 человека по 8 часов в день 6 дней в неделю, за 6 месяцев после начала внедрения, вышли в режим 1 человек 2 часа в день 5 дней в неделю... Т.е. 3*8*6*4 = 576 человеко-часов превратилось в 2*5*4 = 40 ч/ч, КПД был увеличен в 14.4 раза.

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

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

    Далее я реализовывал эти пути как разумел и предоставлял тётушкам.

    И о чудо, обычно на этом этапе прорезался дар речи (тётушки, как все нормальные люди, обожают критиковать то, что по их мнению "не так"), и на меня начинал сыпаться поток весьма конкретных и ёмких ЦУ (ценных указаний), которые я подробно документировал и впоследствии претворял в жизнь.

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

    Первые месяцы они вели двойной учет, по старинке в своей огромной бухгалтерской книге, и в программе, и программу проверяли по книге. Через 2-3 месяца они убедились, что в программе "цифры" точнее, ошибки отлавливаются быстрее, меньшими усилиями, и стали уже свою книгу проверять по программе. Через 5-6 месяцев я написал им модуль расчета и распечатки месячного отчета, и они перестали вести свою книгу, просто печатали ее каждый месяц на огромном матричном принтере.

    Теперь о том, как строилась архитектура приложения. Конечная версия носила номер 4, и 4 раза пришлось переписать приложение с нуля. На 4-й раз я понял, что либо я как-то грамотно организую архитектуру, либо это будет провал, т.к. мне до чертиков надоело каждый раз переписывать одно и то же.

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

    Ввод/редактирование данных осуществляется посредством форм, которые, в общем случае, повторяют структуру таблицы БД, за исключением случаев, когда присоединяются поля из справочников.

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

    Первейшая проблема программ на Clipper 5.x это банальное отсутствие таблиц БД, либо слетевшие индексы. Это первое, чем я озаботился. программа при запуске проверяет наличие или отсутствие таблиц и индексов, и чего не хватает - достраивает на лету. Таким образом можно потерять данные, но программа, все равно, работать будет. Чтобы это стало возможным, потребовалось в программе прописать структуры таблиц БД и индексов.

    Вторым этапом, дико устав копипастить на 95% совпадающий код для построения форм, а, потом, когда надо что-то поменять, добавить или исправить, шариться по тоннам на 95% идентичного кода в сотне мест, я решил прибиться к стану метапрограммирования.

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

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

    Причем генератор грамотно отрабатывал множественную вложенность, и каждый вызываемый справочник имел полный функционал CRU (Create, Read, Update), включая фильтрацию по столбцам и сортировку.

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

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

    Для реализации этого функционала пришлось пропатчить стандартный грид TBrowse (он применяется для просмотра таблиц).

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

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

    P.S.: когда я мигрировал в веб, через некоторое время я снова вынужден был пройти аналогичный путь, в результате которого родился простенький AJAX-фреймворк на стеке PHP+Smarty+DBSimple+jQuery. Сегодня я всеми силами стараюсь от него уйти, хотя для своих задач он достаточно хорош. Был опыт, когда на шареном хостинге за 5 баксов проект на этом фреймворке со скрипом но держал 30-40 тысяч уников в сутки (после ряда оптимизаций) и достаточно хорошо был защищен от топорного взлома через SQL-инъекции благодаря DBSimple...
    Ответ написан
    1 комментарий
  • Как развиваться начинающему web-разработчику?

    @chronic86
    Ruby on Rails junior
    Хотите научиться решать сложные задачи берете (или придумываете) проект и делаете его.
    Хотите научиться проектировать проекты берете листочек и ручку и рисуете, потом в течении недели подходите к листочку и редактируете.
    Хотите научиться писать код чтоб потом не смотреть на него и не плакать, пишите много кода.
    На истину не претендую, таков мой путь ниндзя. =)
    Ответ написан
    3 комментария
  • Как развиваться начинающему web-разработчику?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Сложные системы делают с помощью php framework-ов (yii,laravel,symphony и т.д.), сегодня мало кто пишет голым php.
    Если речь о типовой задаче, как "интернет магазин" то иногда есть смысл использовать готовые sms для этого. Их множество и подбирать стоит под конкретное ТЗ. Например bitrix, shop-script, magento.
    Но используя CMS о развитии речь идти не будет, так что я бы на Вашем месте плотно занялся изучением какого-нибудь php framework и сопутствующих технологий.
    Ответ написан
    Комментировать
  • Лучшие книги для изучения JavaScript в области разработки интерфейсов (Frontend)?

    evgeniy8705
    @evgeniy8705
    Повелитель вселенной
    Для чего составлять такую подборку? Вы просто перечислили практически все книги на русском по JS. При чем однотипные.
    Большинство из них описывают одно и тоже. Я прочитал почти все из этого списка. По опыту могу сказать, что читать всю подборку не нужно.
    Посоветовал бы прочитать книгу Ильи Кантора и книгу "Javascript для профессиональных веб-разработчиков", автор Николас Закас вроде.(Вместо второй можно прочитать Фленагана. Подробное руководство., но Заказ мне больше нравится, по моему мнению гораздо лучше объясняются многие вещи). Две эти книги, достаточно объемные и информативные, всю основу прекрасно преподносят.
    Также посоветовал бы книгу по оптимизации производительности, автор также Николас Закас и любую книгу по регулярным выражениям, но это уже после некоторой практики. А также книгу "Веб-приложения на JavaScript". Сам ее только вот начну читать, но по содержанию и отзывам достаточно хорошая.

    Достаточно будет чтобы довольно хорошо освоиться в языке.
    Не нужно читать однотипные книги. С 3 по 6 включительно пункты не стоит читать. Только зря потратите время.

    ООП объясняется в первых двух книгах которые я упомянул. Также книга про паттерны - largescalejs.ru/.

    Но главное не просто читать а повторять все примеры и выполнять все задания, попутно придумывания задания для себя самому. Чем больше практики, тем лучше будет откладываться информация в голове и будет намного лучшее понимание что да как.
    Я читать некоторые книги по несколько раз, потому что не сильно парился сначала о практике, просто читал, выполнял некоторые задания, по ходу было понятно, но через главу, уже все забывалось... Поэтому практикуйте, практикуйте и еще раз практикуйте.
    Удачи в обучении!
    Ответ написан
    Комментировать
  • JS скроллинг с не мгновенной остановкой?

    @GreatRash
    Ответ написан
    Комментировать
  • Как организовать обмен данными между приложениями в Qt?

    maaGames
    @maaGames
    Погроммирую программы
    Если не хотите сокеты, тогда пайпы. В пределах одной машины пайпы даже побыстрее будут.
    И сокеты и пайпы - кроссплатформенные.
    Ответ написан
    4 комментария
  • Налоги для начинающего фрилансера?

    opium
    @opium
    Просто люблю качественно работать
    до любой
    нарушение есть нарушение вне зависимости от суммы.
    то есть если вы не палитесь с копейками то и с большими суммами будете не палиться
    Ответ написан
  • Как скомпилировать библиотеку для Qt на Windows?

    Вот только не стоит прописывать путь к папке bin. Надо запускать студийный *.bat-файл, который настраивает все студийные переменные среды.
    0) Запускаете *.bat-файл студии с нужной вам платформой (x86/amd64).
    1) Запускаете *.bat-файл Qt, который настраивает переменные для Qt.
    2) Запускаете после этого cmake-gui. Выбирайте лучше "Nmake Makefiles", чтоб потом не запускать студию.
    3) Осуществляйте сборку.

    ______________

    2f5b49ffc4e74c2f8a3f5f24c50005ea.JPG
    На скриншоте показаны пути, связанные с Qt. Так вот, они определились автоматически только от того, были назначены переменные среды.

    UPD: сборка удалась. Только что проверил. Даже nmake install работает.
    Ответ написан
  • В чем недостатки сайта на чистом php?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    Изучать что-то новое - необходимо и полезно.
    Если есть работа, которая требует здесь и сейчас - пишите как можете.
    Если есть работа, занимаясь которой можно парралельно изучить новое - изучайте обязательно.

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

    Ну а писать на чистом PHP конечно можно, в этом есть и свои преимущества.
    Ответ написан
    2 комментария
  • В чем недостатки сайта на чистом php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Многие говорят, что для разработки нормального сайта(а я хочу сделать многостраничный сайт с авторизацией, комментированием, админкой итд.) нужно использовать какой-нибудь фреймворк, например yii2.
    Это те, кто считает, что лучше, чем сделали они - вряд ли кто-нибудь сделает.
    Это обычное продвижение проекта через "своих" евангелистов.

    Пока сами не напишите - так и будете вечно надеяться на "пряморукость" фреймворкеров (ну там ежедневные патчи и исправления безопасности, слышали наверное :) и Ваш прогресс, как профессионала в PHP, остановится.
    Мой совет: учитесь - на исходном коде фреймворков (архитектура, модульность, проверка данных, защита от SQL-инъекций, кэширование и прочее), а пишите - сами.

    PS: Если нужно сделать быстро - берёте популярную CMS (я обычно работаю с CMS Joomla!), учите пару строк фреймворка и "запиливаете" функционал.
    Ответ написан
    6 комментариев
  • В чем недостатки сайта на чистом php?

    @vashaaa
    Юх с горы
    Если хотите писать свое родное.С самого начала нужно наработать алгоритмическую базу, что бы при уходе вашей любимой технологии или фреймворка в небытие, вы не были выгнаны на мороз с голой жопой. А уже потом брать сначала язык программирования (притворимся что вы взяли не php) и напилить костылей своих с велосипедами, по общим задачкам (строки, данные, графы, хэш таблицы и т.д.), пробуете сортировать без встроенных функций. Вы спросите, а нафиг оно мне нужно? Я крутой прогер хочу сайты клепать, а не ваши алгоритмы учить. Сделано это для того что бы быть программистом а не кодером , и при надобности скакать по технологиям которые вам нужны (как по пикам, или что там вам по душе) с минимальными затратами на изучение. После этого вы пишите своего франкенштейна с руками из сфинктора и глазами на них же(свой MVC фреймворк) костылям позавидует трвмпунк, потом смотрите на чужие костыли в виде фреймворков(в отличии от ваших костылей, эти отлажаны как нужно и протестированы не одну сотню раз, а так же признаны и используються в широком кругу) и допилить свои костыли до вменяемого состояния. Но не советую, используйте отлажаные и протестированые костыли. Время на изучение, с лихвой окупятся и не только временем но и деньгами.
    Ответ написан
    Комментировать
  • Как выгнать ботов из анонимного чата?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    запретить постинг через прокси. 2ch к примеру так работает. через прокси и всякие frigate расширения нельзя отправлять сообщения
    Ответ написан
    Комментировать
  • Почему я не могу использовать такой адрес?

    alsopub
    @alsopub
    Берите 8.8.8.8, чего мелочиться ;)
    Ответ написан
    Комментировать
  • Что должно быть в сайте для портфолио django разработчика?

    urtow
    @urtow
    *nix, python, QA, bagpipe, folk music
    На собеседовании будет интересен код - так что выкладывай в открытую на github, а на своем сайте давай ссылку.

    На фрилансе - если это сайт "под ключ" заказчику будет глубоко пофиг, на чем написан сайт :) Если на фрилансе ищется исполнитель на Django - опять же важнее код.

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

    SergeySL
    @SergeySL
    Системный администратор
    Я бы усомнился в адекватности заказчика :( 100% просьбы на этом не закончатся ;)
    Ответ написан
    Комментировать
  • Как можно узнать свой уровень в конкретном ЯП?

    @mik222
    Что то полезное сделать можете?
    А так чтобы в этом можно было потом разобраться через пол года?
    А чтобы была возможность расширяемости?
    И минимальный набор багов?
    А если это что-то новое(алгоритм хитрый из academic paper)?
    Разобраться за вменяемое время в незнакомой области сможете?
    ===================
    Если на все ответы ответ да, то вы знаете достаточно для коммерческой разработки.
    Confidence: 86%
    Ответ написан
    5 комментариев
  • Почему не меняется заголовок окна Qt?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Нельзя передавать параметры в connect. Попробуйте новый синтаксис сигналов и слотов + замыкание:
    connect(act, &QAction::triggered, [=]() { 
        wgt.setWindowTitle("sasdfasdf"); 
    });
    Ответ написан
    7 комментариев