• Как спроектировать архитектуру большого проекта с начальным знанием программирования?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Как мне кажется, архитектуру логичней разделить на микро-сервисы.

    Вам кажется. Но вы — не Google.
    Ответ написан
    1 комментарий
  • Что делать веб разработчику, если уже всё придумано?

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

    Самый верный путь к рабочей идее:
    1. Проработать в какой-либо сфере достаточное количество времени;
    2. Познать её изнутри на собственной шкуре;
    3. Выявить в ней боли/проблемы/недостатки;
    4. Решить их с помощью прикладного навыка (программирования);
    5. Обкатать в собственной работе;
    6. Упаковать решение и реализовать коллегам по сфере;
    ...
    7. PROFIT!

    Далее...даже если завтра в голову залетит рабочая идея, готов ли ты её реализовать? У тебя есть команда, готовая работать минимум полгода-год бесплатно на время создания беты, тестов, обкатки, раскрутки? Она сможет действительно реализовать всё как надо? Если нет команды, имеются ли у тебя средства на зарплатный фонд хотя бы для 5 человек на эти полгода-год? А с учетом налогов и отчислений (+30% к зарплате на руки)? У тебя есть условия для работы этих 5 человек? Есть ли у тебя сумма на маркетинговое исследование твоей идеи (или лучше облажаться на авось)? Есть ли у тебя хотя бы миллион на первичный трафик из директа? Или надеешься донести свой стартап до пользователей путём емэйл-спама?)) Я не указал и доли того, что потребуется для реализации небольшого web-сервиса, даже при наличии действительно рабочей идеи. Может быть, идеи не прут именно потому, что ты просто не готов к их реализации, и неча порожняка гонять?)

    Как выглядит стартап глазами романтичного юноши, начитавшегося глянцевых историй успеха:
    1. Придумать гениальную идею;
    2. Закодить в гараже в одну харю или в паре с дружбаном;
    3. Разместить на сервере и получать от мира благодарности, признание и мешки денег.

    Как выглядит стартап на самом деле:
    1. Пахота минимум 10 лет в одном направлении/сфере;
    2. Наработка профессионализма, идей, контактов, связей, клиентской базы, понимания всех нюансов сферы;
    3. Угон базы, угон клиентов на себя, переманивание лучших коллег/сотрудников, оформление юрлица, открытие "своего дела" на рабочей идее)))

    К примеру, "икона стиля" стартаперов - Павел Дуров, он идеолог? Нет! Прикол в том, что он именно стырил рабочую идею (также, как тырят клиентскую базу у работодателя), собрал команду, создал для неё условия, привлек корешей-евреев с еврейскими ресурсами, бюджетами и влиятельной питерской крышей, и обеспечил этому всему грамотный проект-менеджмент и маркетинг. Дело в идее? Нет, дело в реализации:)

    А если серьезно, сайт - это просто промо-материал, как билборд, только интерактивный и в интернете. Языки веб-разработки - такие же инструменты, как молоток для изготовления билбордов. Веб-разработчик - нифига не носитель уникальных знаний (который просто обязан повторить успех Цукерберга, иначе не тру), и всего-лишь современный слесарь, изготавливающий технологичные интерактивные промо-материалы. А теперь представь слесаря, который завидует предпринимателям, которые заказывают у него билборды, и вскидывает руки к небу с криком "Доколе??")) Смешно? Смешнее только реплики других слесарей на тему "если нет идей, значит меняй профессию"))

    P.S. Понимаю, что вряд ли отметишь мой ответ решением, ведь тебе хочется подбадриваний вида "Не сдавайся! Ищи и обрящешь! Не опускай руки и всё получится! Вот тебе ссылочки, вот тебе инструкции!", а не режущей глаза суровой реальности. Но в некоторых случаях действительно полезно осознать своё место в пищевой цепочке - антилопа или гепард, слесарь или архитектор, промо-изготовитель или промо-заказчик и т.д. И исходя из этого уже взращивать свои амбиции, комплексы и фрустрации. Повторюсь - в стремлении стать самым крутым слесарем нет ничего постыдного, и даже в финансовом плане может оказаться куда выгоднее и стабильнее других амбициозных вариантов.
    Ответ написан
    4 комментария
  • Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
    26 комментариев
  • Как передать ошибку пользователю в MVC?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    не использую костылей подобных сувания ошибки в сессию

    это и есть единственный расово верный способ.
    Использовать flash сообщения через сессию.
    Ответ написан
    1 комментарий
  • Как передать ошибку пользователю в MVC?

    @McBernar
    Пробрасываете из модели ошибку. Именно модель работает с компонентами валидации.
    Ловите ошибку в контроллере.
    Рендерите эту ошибку вместе с вьюшкой.
    Ответ написан
    1 комментарий
  • Как передать ошибку пользователю в MVC?

    @MadridianFox
    Web-программист, многостаночник
    передавать через контроллер, но при этом придется совершать в нем множество проверок, типа проверка на уникальность пользователя, пустоту полей, идентичность паролей

    Этим вы делаете толстый контроллер. На самом деле форма - это модель. Это страница на которой есть своя логика, и в зависимости от действий пользователя она меняет своё состояние, которое и отображается пользователю.
    И вот логика формы реализуется в модели формы, которая в свою очередь может дёргать более глубокие слои приложения.
    Таким образом задачей контроллера становится только получение данных из http запроса, засовывание их в модель и вызов у модели одного-двух методов.
    Ответ написан
    Комментировать
  • Как создать такого бота в вк?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Я делал через Яндекс SpeechKit, просто «для попробовать». Для боевого использования он дорогой становится через месяц.

    Принцип такой. Ловите сообщения пользователей через callback api, настроив его для вашего сообщества. Cтавите входящему сообщению метку, что оно прочитано и запускаете в очередь задание – объект, содержащий текст и id юзера.

    «Рабочий» процесс отправляет запрос Яндексу перевести текст в звуковой файл. Получив файл, загружает его в ВК через docs.getWallUploadServer(), указав помимо параметра group_id ещё и (недокументированный) параметр 'type' => 'audio_message' и названием 'title' => 'audio_message.mp3'. Сохраняет загурженный файл docs.save() и прикладывает его к сообщению пользователю в messages.send() в поле attachment.

    Очередь задач желательна, чтобы не возникло ситуаций, когда сервер задыхается при одновременном визите 100 школьников отправляющих короткие реплики. Я всё это реализовывал на Laravel 5.4 – удобно.
    Ответ написан
    1 комментарий
  • Как создать такого бота в вк?

    vitcorp
    @vitcorp
    Можно использовать Yandex SpeechKit.
    Ответ написан
    Комментировать
  • Как создать такого бота в вк?

    @MrGaunt
    Есть готовый конструктор ботов с массовой рассылкой, фильтрами, ответами на команды.
    Ответ написан
    Комментировать
  • Как повысить уровень программирования?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    Хорошие разработчики постоянно развиваются и никогда не стоят на месте. Любое развитие состоит в делании дел, в решении конкретных задач и в обратной связи, которую ты получаешь от других или в результате рефлексии.

    TL;DR: Читайте книжки, делайте дела, читайте чужой код.

    Что можно начать делать прямо сейчас, чтобы стать программистом лучше?

    1. Изучайте базу. Алгоритмы, сети, криптографию, архитектуру, ос, устройство браузеров, компиляторы и т.д. Изучение подобных вещей дает понимание какие задачи бывают в реальном мире и как "большие дядьки" решают возникающие проблемы. Это кладезь инсайтов.

    2. Устройтесь на фултайм-работу с сильной командой даже если джуниором. Я считаю, что есть только один способ расти как разработчик: работать фултайм над одним бизнес-продуктом. Такой подход учит решать проблемы масштабируемости, думать заранее, работать над процессом, которому вы следуете в разработке, решать задачи, возникающие с длительной эксплуатацией, решать проблемы с удобными окружениями и вообще учиться планировать свою работу в связи с нуждами бизнеса.

    3. Написание кода - не самая большая часть работы сеньор-девелоперов, я бы сказал. Но когда речь заходит о самом коде, нужно понимать что ты пишешь и зачем. Есть классические книжки, которые можно найти, например, в матрице компетентности программиста, есть современные, но полезные типа The Art of Readable Code, которую я очень рекомендую. Нужно читать книжки. На собеседовании я всегда спрашиваю какие книжки читал или читает соискатель и если ответ отрицательный, то это большой минус.

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

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

    Neznayka1979
    @Neznayka1979
    Интересы - IT, психология...
    6c7e635425e24eda90fd4ac9d80c9adb.gif

    Маргарет Гамильтон стоит рядом с написанным ей исходным кодом бортового компьютера «Аполлона»
    Ответ написан
    11 комментариев
  • Как учиться писать не говнокод?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Попробуйте следовать требованиям.
    Что касается вашего подхода - вполне норм.
    Ответ написан
    Комментировать
  • Как учиться писать не говнокод?

    Sanes
    @Sanes
    Если только для себя и время не поджимает. Как правило, особенно на крупных проектах, приложения стоят в ракоряку, подпертые со всех сторон костылями.
    Ответ написан
    Комментировать
  • Как учиться писать не говнокод?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Мне кажется это бессмысленное занятие - говнокод слишком субъективное и ситуационное явление. Иногда архитектура решения позволяющая изменять бизнес-логику приложения под ежедневно меняющиеся требования бизнеса является говнокодом, несмотря на то что она реализует все требования ( а вот слаженная и четкая архитектура не позволяющая быстро и относительно безболезненную смену бизнес-логики не является говнокодом).
    Насчет последнего (про архитектуру), я конечно мог бы преувеличить, однако я еще не встречал продукта с идеальным кодом или архитектурой. Посмотрите с highload доклад Аксенова (надеюсь правильно фамилию написал) - Снесите это немедленно. Он там достаточно подробно и доступно излагает.
    Ответ написан
    Комментировать
  • Как учиться писать не говнокод?

    @KuzmenkoArtem
    Ответ написан
    Комментировать
  • Как учиться писать не говнокод?

    @FoxInSox
    Как учиться писать не говнокод?

    Устройтесь на работу к людям которые пишут не говнокод.
    Ответ написан
    4 комментария
  • Как конвертировать текст в речь на php?

    kentuck1213
    @kentuck1213
    Не плохая библиотека
    duncan3dc.github.io/speaker
    Там есть маленький бажок правда:
    vendor/duncan3dc/speaker/src/Providers/AbstractProvider.php

    В методе sendRequest нужно кое что добавить в начале:
    protected function sendRequest($hostname, array $params)
        {
            $params['client'] = '13';
            $url = $hostname . "?" . http_build_query($params);
            $response = $this->getClient()->get($url);
    
            if ($response->getStatusCode() != "200") {
                throw new Exception("Failed to call the external text-to-speech service");
            }
    
            return $response->getBody();
        }

    И тогда все будет работать.
    require_once __DIR__ . "/vendor/autoload.php";
    
    use duncan3dc\Speaker\TextToSpeech;
    use duncan3dc\Speaker\Providers\GoogleProvider;
    
    $provider = new GoogleProvider;
    
    $tts = new TextToSpeech("Hello World", $provider);
    $tts->save("hello.mp3");
    Ответ написан
    Комментировать
  • Как конвертировать текст в речь на php?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    Есть https://tech.yandex.ru/speechkit/
    Как то попробовал api изучить, дел наволилось, так тестовый период закончился. Заборосил. Но вообще штука мощная
    Ответ написан
    Комментировать
  • Как конвертировать текст в речь на php?

    @ckr
    onedev.net/post/244
    Устанавливаете на сервер один из tts-движков
    Потом можно пользоваться:
    shell_exec('espeak  -vru -s130 -w espeak.wav "Я  хреново говорю по-русски.."');

    потом через php отдаете файл espeak.wav клиенту
    Ответ написан
    Комментировать