Задать вопрос
  • Где скачать список зарегистрированных доменов?

    mihavxc
    @mihavxc
    По .ru доменам уже привели хорошие ссылки выше.
    Для других зон или получения списка вообще всех доменов в интернете пару раз использовали - https://domains-monitor.com/
    Ответ написан
    Комментировать
  • Какую литературу можно найти по golang?

    @programrails
    Я бы рекомендовал изучение в такой последовательности:

    Beginner level (синтаксис языка):

    1. Начать с golang-book.ru . Это на русском и довольно неплохо для начинающего.

    2. https://golang.org/doc/effective_go.html - это уже на английском, но всё равно толково и хорошо заходит после 1-го пункта. Кратко, по делу, без воды, достаточно понятно.

    После прочтения этих 2 пунктов у Вас уже будут базовые понятия о языке.

    Intermediate level (concurrency - многопоточность):

    Как ни пытался, не смог определить какую-то конкретную универсальную книгу. На этом уровне много плохих книг, сложно выделить что-то хорошее. Относительно неплохими для этого уровня (пока что) показались:

    (продолжаем последовательность изучения Go по пунктам):

    3. Базовый веб сервер на Go Статья, без которой дальнейшее трудно заходит (книгоавторам всем дружно лень такое нормально объяснить).

    4. M. Curtis - Level Up Your Web Apps With Go
    Читал - и не понимал - что происходит? Чувак явно пишет рельсы на Go! Всё такое до боли знакомое... Что такое? А потом смотрю в профиле https://www.linkedin.com/in/mal-curtis/ - так он же пишет на работе на Ruby on Rails! Так что книжка отлично зайдёт рельсовикам, осваивающим Go. Книга неплохая, автор явно старался. Автор, ты хороший человек.

    5. K. Cox-Buday - Concurrency in Go. Tools and Techniques for Developers. Книга не очень удачная, но пока я не успел найти что-то получше. Автор - женщина, и глупая. Книга читается мучительно и крайне медленно. Охват материала неплох - но объяснения косноязычные, с водопадом лишних слов и эмоций, примеры кода неоправданно переусложнены, ряд тем вообще остались бы непонятыми, если бы не гугление. Читаю и матерюсь на каждом шагу.
    PS Последние 2 главы пошёл уже такой горячечный бред, что я просто не смог заставить себя читать этот ужас. Бросил. В общем, далее параграфа Queuing читать не стоит. Книга прекрасно иллюстрирует тезис, что, какими бы умными ни были женщины, они всё равно дуры, и нечего им в программировании делать (кроме разве что 1С).
    К сожалению, книгу прочесть всё-таки надо, ибо охват хорош - а заменить книгу особо нечем (в смысле другой книгой, продаваемой за деньги - разве что статьями).

    Есть ещё книга N. Kozyra - Mastering Concurrency in Go - но у неё ужасные отзывы - да и я пытался читать другую книгу по Go у этого же автора - и мне также крайне не понравилось.
    Смешно сказать - но по Go нет ни одной путёвой книги про Concurrency (единственное, ради чего Go был создан)!

    6. Лучшее объяснение Go Context, что я пока видел. Оно даже лучше официального (написанного индусом, и оттого плохого).

    7. M. Tsoukalos - Mastering Go - но только Chapter 10: Concurrency in Go – Advanced Topics - и исключая параграф Worker pools (он ошибочный - там ничто не сдерживает размножение горутин - какой же тогда это пул).
    Средне-удовлетворительная глава, звёзд с небес не хватает, интереснее всего был параграф Sharing memory using goroutines - частный пример Катькиного Confinement'а.

    Advanced level (микросервисы на Go):

    Я пытался читать N. Jackson - Building Microservices with Go - это оказалось невозможным, книгу написал какой-то сумасшедший безумец, находящийся в состоянии наркотического опьянения. Отзывы на Амазоне это подтверждают.

    Также я попытался читать M. Ryer - Go Programming Blueprints (2 ed) - только главу Chapter 10: Micro-services in Go with the Go kit Framework - не понравилось. Примеры кода сложноваты (автор пытается построить реальную систему - ну и дурак - вместо того, чтобы ограничиться демо-примером), объяснения сопутствующего материала никакие (по сути, их нет). Бесполезная глава. Несколько тем свалены вместе - но ни одна толком не объяснена. Очень слабенький автор.

    Вердикт: нормальной книжки по теме "Go микросервисы" пока не обнаружено. Придётся изучать эту тематику из статей и инструкций по использованию микросервисных Go-фрэймворков - вот списочек фрэймворков:


    Я начал с gRPC. Сначала прочёл официальную доку по protobuf (включая раздел о Go). Дока оказалась достаточно вменяемой. Но зато официальная дока по gRPC уже оказалась совершенно паршивой. Там 2 примера - попроще и посложней. Писали доку явно последователи тех, кто писал доку к первому ангуляру (т.е. те, кому я бы отрубил обе руки по самые плечи). Понять что-либо без исходников (к статье) - нереально. Но - исходники ещё надо найти, ибо в статье ссылки на них ... нет. Оказалось, исходники тут: https://github.com/grpc/grpc-go/tree/master/exampl... . Но даже с ними - всё довольно непросто понять - даже в простейшем примере. Потому что авторы умолчали о многих важных моментах. Т.к. им в падлу шевельнуть задницей лишний раз. В общем, есть нужда в нормальном авторе, кто опишет, что такое gRPC. Попробуйте почитать статью от Шизы - это слегка окультуренный сокращённый пересказ сложного случая.

    Рассмотрим Go Micro. Продукция очередного кретина (да ещё и спорного качества). Что, скажите, можно понять из таких "объяснений"? Кстати, ищите в Яндексе термин "Service Discovery" - здесь нужно понимать, что это. Посмотрите и Consul. Вот ещё разумная статья о Go-микросервисах. И ещё я понял - без предварительного изучения protobuf и gRPC понять Go Micro будет затруднительно (если вообще возможно). Желаю вам никогда не встретить на работе продукцию этого дегенерата. Go Micro показался мне китайским фонариком со встроенными компасом, радиоприёмником, часами, зарядкой, отвёрткой, точилкой для карандашей, ногтерезкой, и т.д.

    Идём дальше. Go kit производит намного более лучшее впечатление. Правда, документация не полная - автору не хватило терпения её закончить. Но всё же разобраться можно - есть исходники-примеры, снабжённые подробными комментариями. Автор мне понравился.

    Почитайте полезную статью-сравнение.

    Приложение:

    Гоняться за русскоязычными книгами по Golang не рекомендую. Я прочёл на русском:
    - А. Донован, Б. Керниган - Язык программирования Go
    Это совершенно отвратительная бездарная книга.
    и просмотрел оглавление русскоязычной книги:
    - М. Саммерфильд - Программирование на языке Go
    Хотя я её не читал, но беглый просмотр её оглавления создаёт самое негативное впечатление о книге. Такое ощущение, что это целенаправленная диверсия против изучающего golang, с целью развести его на время (прочтения) и деньги (при покупке). Марк Саммерфилд - это профессиональный графоман, посмотрите сами на его карьерный путь: https://www.linkedin.com/in/qtrac/

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

    М. Батчер, М. Фарина - Go на практике - на русском языке - эта книга вроде бы достаточно неплохая, но она для опытного разработчика - и она не излагает системно - а отрывисто.

    Пытаться читать спецификацию языка также не рекомендую - ничего не поймёте:
    https://golang.org/ref/spec

    Заключение

    Нормальной литературы по Go практически нет (кроме азов). Все микросервисные Go-фрэймворки плохо документированы, вынуждая разбираться в них по примерам с исходниками (!).

    Англоязычных книг по Golang в электронном виде бесплатно - много, более 30 (а то и под 50). Многие написаны индусами, или оторванными от жизни вузовскими преподами, или какими-то левыми любителями Go (у таких "книг" даже нет ISBN). Есть даже книги, написанные неграми! Все такие книги требуют осторожного выбора. Почему именно Go вызвал у окружающих непреодолимые позывы к графоманству? Такое впечатление, что многие авантюристы решили "срубить баблишка" на "хайповой" теме. Действительно, найти хотя бы нормальную книгу (не говоря уже о хорошей) - оказывается по факту крайне непросто - почему-то именно к Go примазались многочисленные негодяи и бездари - как ни в каком ином языке программирования.

    Всё, о чём я рассказал в этом посте, доступно бесплатно онлайн в электронном виде (Либген, к примеру).

    В общем-то, основное внимание при изучении Go следует уделить его возможностям по многопоточности (concurrency), которые включают низкоуровневые механизмы (как в C++) типа мьютекса и высокоуровневые механизмы типа каналов. Собственно, это как раз то самое, зачем Go вообще понадобился. Вторая по значимости тема в Go, как мне кажется, это микросервисы.
    Ответ написан
    Комментировать
  • План подготовки для поступления в Яндекс ШАД?

    @Mercury13
    Программист на «си с крестами» и не только
    Алгоритмы. Немного олимпиадного программирования ОЧЕНЬ не помешает. Алгоритмы там предлагают несложные, но очень нетривиальные, надо чувствовать, как решить задачу. Элементы сложности алгоритмов. Две задачи из восьми гарантированно будут.

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

    Интегралы (не слишком «злые», но приёмы «подстановка», «по частям» и «тригонометрический интеграл» всё же освоить стоит). Интеграл средней сложности — постоянный гость в ШАДý. Может быть и ещё одна задача из мутьанализа — но это как повезёт и задача будет гарантированно нетривиальная, но решающаяся на «том, что помнишь с института» — дифференцирование, ряды Тейлора, основы топологии, простейшие пределы, правило Лопиталя. Вспомни, как берутся простейшие двойные интегралы, может попасться, например, на теории вероятностей.

    ФКП. Самое начало. Аналитических функций и рядов Лорана точно не будет. А вот то, что в комплексном поле многочлен n-й степени имеет n корней, знать надо.

    Теория вероятностей. Непрерывные и дискретные вероятности. Нечто несложное, почти что на уровне кубиков и карт, но одна-две из восьми будет. Хотя статистика — важная часть ШАДа, на экзамене не требуют. И пекла типа белых шумов и интегралов Ито не будет. Хотя что-то типа дискретной марковской цепи — а вдруг, хотя знакомые мне три экзамена не было.

    Школьные олимпиадные задачи. Возможна одна.

    Итого.
    Две — алгоритмы.
    Одна-две — вероятность.
    Одна — интеграл.
    Две-три — что угодно из школьной математики, дискретной математики, матанализа, алгебры, ФКП…

    P.S. Очень хороший приём, который мне помог. Конечно, вам придётся держать скан какого-нибудь справочника или распечатку Википедии (это не возбраняется, но электроника запрещена — впрочем, калькулятора задачи не требуют). Печатайте на одной стороне, вторую — на черновик!
    Ответ написан
    4 комментария
  • Как настроить mysql в Docker?

    kumaxim
    @kumaxim
    Web-программист
    Начинаешь разрабатывать проект #1, создаешь под него каталог с двумя вложенными подкаталогами src и db
    Ты уже установить docker-compose? Если нет, то сделать этого. Мой docker-compose.yml:
    version: '3.1'
    
    services:
      db:
        image: mariadb:10.2
        restart: on-failure
        ports:
          - "3306:3306"
        volumes:
          - ./db:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: your_root_pass_here
          MYSQL_DATABASE: db_name_here
          MYSQL_USER: db_user_here
          MYSQL_PASSWORD: user_pass_here
      nginx:
        image: nginx
        restart: on-failure
        ports:
          - "80:80"
        links:
          - wordpress:php-fpm-server
        depends_on:
          - wordpress
        volumes:
          - $HOME/DDK/nginx-default.conf:/etc/nginx/conf.d/default.conf:ro
          - ./development/src:/var/www/html:ro
      wordpress:
        image: php:5.6-fpm
        restart: on-failure
        links:
          - db:mysql
        depends_on:
          - db
        expose:
          - "9000"
          - "9900"
        volumes:
          - /mnt/bindfs/fire-cacher-dv1:/var/www/html


    Далее у тебя встанет проблема, файлы на твоей хостовой машине будут создаваться от пользователя www-data. Единственный вменяемый способ пофиксить это без сильных танцев с бубном - bindfs. Я использую следующую строку в fstab для монтирования:
    /home/user/Project/fire-cache/development/src	/mnt/bindfs/fire-cacher-dv1	fuse.bindfs	force-user=www-data,force-group=www-data,create-for-user=user,create-for-group=user,perms=0000:u+rwD:g+rD:o+rD	0	0


    Все создал? ОК, запускай docker-compose up -d и останавливай после окончания работы docker-compose stop. Проект закончен? Значит docker-compose down -v

    Вот это ты повторяешь каждый раз при старте нового проекта. Если есть еще какие-то вопросы по существу - пиши в комменты.
    Ответ написан
    5 комментариев
  • Стоит ли писать свой php-фреймворк с целью улучшения знаний в области ООП и изучения шаблона MVC?

    @romeo7
    Читая Ваш вопрос,вспомнил себя 5-ей летней давности:) На тот момент мой бэкграунд состоял из дюжины сайтов на различных CMS и одного стартапа,который ясное дело не взлетел. Я к тому моменту долго вынашивал план по реабилитации одного замороженного проекта (спортивный портал),который разрабатывал со своими товарищами ещё в студенческие годы. Изначально задачи написать свой движок не было,но... всё началось с разработки шаблонизатора с синтаксисом а-ля CMS MODx. Много читал о том,что данная реализация выделяется на фоне остальных конкурентов,по сути являясь визитной карточкой последней. На поверку оказалось, что это всего навсего синтаксическая абстракция над Smarty,со всеми вытекающими по производительности. К примеру,моя реализация имеет альтернативную поддержку нативного php-шаблонизатора
    <?=$this->getSnippet('List', $params)?>
    для тех, кто терпеть не может синтаксические абстракции (Smarty, Twing, Fenom и иже с ними.) из-за их низкой производительности и иным религиозным соображениям.
    Шло время, кодовая база росла. От паттерна Singleton до DI (Dependency Injection), к Service Locator-у. Много чего выпилено в угоду существующих решений. За последние 2 года,не без помощи Composer,стало в разы больше готовых решений,причём несколько на реализацию конкретно задачи. К примеру,из последнего - был заменён собственный файловый менеджер (манипуляция с файловой системой) на библиотеку Flysystem, ибо последняя помимо всего прочего, умеет "бегать" в облака. Круто же ;) Единственное,в моей реализации была возможность поиска по regexp-паттерну,пришлось писать абстракцию.

    Совет: Для программиста хорошим тоном является умение в своём коде наметить точки роста,а именно,чтобы другой разработчик при использовании текущего решения мог легко абстрагироваться,к примеру,через наследования от базового класса.

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

    Совет: Иногда сталкиваешься с тем, что не все возможности какой-либо библиотеки задокументированы,даже если она достаточно популярна и имеет свой красивый "твиттеробутстраповый" сайт. Загляните в unit-тесты,возможно,откроете для себя что-то новое;)

    Если всё же надумаете писать свой фреймворк,то опирайтесь на существующие решения. Выберите для себя один-два популярных фреймворка и изучите,как реализован в них тот или иной функционал,хотя бы визуально,благо документации навалом. Начните с модели MVC. Посмотрите как реализованы actions,а именно доступ к ним,фильтрация на входе и выходе в action. Я,к примеру,не сторонник реализации псевдо-аннотаций,как в Symfony,ибо в PHP поддержки нативных аннотаций пока нет,а всё остальное - это жалкое подобие через медленные Reflections,даже если всё это кэшируется. Вот и автор АОП парадигмы для PHP всё это понимает, но всё равно продолжает разрабатывать свой проект Go!. Реализация конечно интересная,но я обойдусь событийной моделью (Observer или PubSub).
    Взгляните как устроен роутинг, ибо это основополагающая для реализации SOAP и REST. К примеру,моё решение испытало влияние Lavarel Routing по части использования групп. Нынче в силу распространённости мобильных платформ всё чаще используется REST не только на основе url-а,но и на основе кастомных заголовков (X-<имя прагмы>).
    Обратите внимания на то,как осуществляется обработка ошибок/exceptions. К примеру,Yii давно ругают на то,что нет возможности верной идентификации того или иного исключения. Лучше для каждой отдельной задачи (к примеру, FileManager) свой класс Exception,который наследуется от базового:
    class Exception extends BaseException
    {
        const FILE_EXISTS = 'File exists: {path}';
    
        public function __construct(
            $level = self::ERROR,
            $msg = null,
            array $dataReplace = null,
            \Exception $handler = null
        ) {
            return parent::__construct($level, $msg, $dataReplace, $handler);
        }
    }

    Тогда в базовом классе BaseException можно легко реализовать логирование (к примеру, воспользоваться Monolog) и красивую визуальную выдачу в режиме дебага (к примеру, Whoops).
    Желательно сразу избавить себя от привычки делать "жирные" контроллеры/actions. В этом может Вам помочь различные реализации валидации,фильтрации данных,а также задания дефолтовых значение на уровне модели. Обратите внимание на метод rules. Тогда в Вашем контроллере будет лишь метод отправки уже обработанных данных на вьюху.
    Что касается ORM и DBAL (синонимы: DAO и Query Builder), то в этом случае уж точно не стоит изобретать свой "велосипед". Написать по возможности единый интерфейс для различных реляционных и нереляционных решений (СУБД, Систем полнотекстового поиска/индексаторов (Sphinx, Elasticsearch)) - более чем нетривиальная задача. Я в своём фреймворке взял за основу AR (ORM) и Query Builder Yii2. Да,в Yii отсутствует модульность,а потому всё достаточно зависимо друг от друга,но если захотеть, то можно.
    Чувствуете этот момент. Вы препарируете почти готовое (прим. Yii2 еще в состоянии беты),одно из самых выдающихся на текущий момент решений и тем самым разбираетесь во всех тонкостях, попутно проявляете активность в исправлении ошибок.
    Научитесь писать unit тесты. Множество ошибок всплывут на поверхности,да и сон Ваш тогда будет более крепким.
    Вы наверно могли для себя заметить на том же stackoverflow или иных ресурсах, задаются достаточно тривиальные вопросы по фреймворкам. Вот и сейчас пока пишу Вам этот большущий ответ,в разделе "Похожие вопросы" красуется такой вопрос "Как реализовать правильно авторизацию с сессиями ... Отсутствует элементарная дисциплина к самостоятельности. И я даже догадываюсь почему так. Фреймворков стало больше,фреймворки стали лучше. Programmer Frendly,а не страшный зверь для избранных,как было когда-то. Правда,некоторые и по сей день недружелюбно скалятся;) Так или иначе,если есть желание задать вопрос из серии каким образом в JQuery сравнить две переменные,то стоит задуматься,а надо ли тебе всё это.
    Не в коем случае не нужно уверять себя в том,что Ваш инструмент взлетит. Он не уникален,и в конечном счёте скорее всего будет состоять из множества готовых библиотек (прим. в моём случае 60 против 40% вендорного кода. Если учитывать значимость,то в этом случае, уже счёт будет не в мою пользу). К сожалению, не могу найти ссылку на англоязычную статью, где автор сетует на полный отказ от фреймворков в пользу packagist. Даже если в уникальности вашего решения нет сомнения,это ничего Вам не гарантирует. Необходимо грамотное продвижение - множество статей на тематические ресурсах,а также участие в конференциях. К примеру, PHPDaemon хоть и стартовал первым, но пока вчистую проигрывает ReactPHP, а всего-навсего необходимо было уделить внимание написанию документации. Автор PHPDaemon, Василий Зорин,как-то на вопрос чем отчается его проект от React,указал на то,что последний использует его идеи. Конечно печально за нашего соотечественника,но его проект попахивает откровенным эгоизмом.
    Делайте Ваш инструмент прежде всего для себя,и возможно,когда-нибудь он станет интересен кому-то ещё. Так или иначе,Вы получите бесценный опыт. Главное,постараться довести это дело до конца. Отличительной чертой нашей ремесленной профессии является терпение. Вот Вам и проверка этого замечательного человеческого качества:) Кстати,чтобы интерес не угас,стоит свои наработки применять,если не в продакшене,то хотя бы небольшой проект для экспериментов.
    Заметил за собой,что пока занимался разработкой инструмента,гораздо больше получил опыта,чем на предыдущих двух работах. Но это субъективно. Можно с самого начала устроится в такое место,где замечательный отзывчивый коллектив и не менее интересные проекты/стартап, а не "натяни шаблон на Wordpress". Считаю,что пусть CMS-сника - это путь в никуда, и Кипелов здесь не причём:) Чем раньше, тем раньше;)
    Мне, как и sWinDos тоже забавно смотреть на свои исходники годичной давности:)) Вам знакомо такое понятие,как "Тезаурус"? В трактовке теории информации,это экспоненциальный рост знаний/опыта до какого-то предела, после которого, эффективность полученных знаний/опыта заметно падает. Получается этакая кривая Гаусса или что-то вроде жизненного цикла знаний/опыта в отдельно взятой предметной области.

    Совет: Запомните,Ваши проекты на github-е и контрибьюторская активность - это твёрдое, незыблемое портфолио. На собеседовании в большинстве компаний вы вправе выбрать свой сценарий поведения и темы для бесед.

    P.S. Я специально не стал затрагивать моральную и финансовую сторону вопроса. Opensource или заработок? Вечные поиски свободного времени между семьёй,работой и отдыхом. Смотрю здесь уже кто-то отметился:) Если Вы ещё студент и не обременены чем-либо,то дерзайте. Вполне возможно уже по окончанию университета или даже раньше, Вы выйдите уверенным таким коренастым мидлом:) К слову,в первой организации, с которой я начал свой профессиональный путь проповедовали процедурное программирование,ибо ООП никем не понималось должным образом.
    Ответ написан
    6 комментариев