Ответы пользователя по тегу Программирование
  • Как узнать свой уровень в кодинге?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Комментировать
  • Есть ли книги по истории развития парадигм программирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Мне интересно изучить историческую часть, что пы понять куда будет двигаться отрасль в дальнейшем.

    Это у вас вряд ли выйдет. Отрасли двигаются за счет развития бизнес требований. Парадигмы программирования возникают по той же причине.
    Хотите знать будущее: следите за трендами, ходите на конференции.
    Ответ написан
  • Как учить что-то новое и быстро не забывать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    что-бы всегда было перед глазами пока не запомнится

    Пустая трата времени. Программирование - это НЕ зазубривание стишков. Программирование - это понимание.

    Даже больше скажу: лучше научиться быстро забывать.

    Но часто сталкиваюсь с тем, что новые технологии не хотят вливаться в рабочий процесс

    Сделайте себе скриптик с демонстрацией того, что узнали на gist.github.com например. Когда понадобится - примените.

    и следующий раз сталкиваясь с этой проблемой - опять лезу в гоогл

    It's ok.

    Как учить и не забывать

    Крыша поедет, не надо этого хотеть.

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

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Простейший пример: логгер. Все, что он делает - передает дату и сообщение в N мест: консоль, файл, очередь, udp,...

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

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

    Вариант В: используем шаблон adapter. Реализация для каждого транспорта с общим для всех интерфейсом. При этом взаимодействовать будете с адаптером, а не реализациями. Роутинг реализуется (в зависимости от сложности) либо в отдельном классе, либо как часть адаптера, фильтрацию - точно так же и т.д. В этом ваша главная плюшка - независимость разных частей системы.
    Ответ написан
    Комментировать
  • Почему goto зло?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Потому, что сложно читать и дебажить так как ваш код выполняется в хрен знает какой последовательности. Ваш метод на 6 строк, как пример - так себе. Если метод на 300-400, и этих goto штук 15? Не запуская код с таймером, выпишите на бумажку что будет выведено на экран в таком примере (там всего 50 строк).
    Код с goto пишется один раз, а дальше выбрасывается.

    З.Ы. Конкретно ваш пример стоит делать в цикле и рекурсия вам тут тоже не нужна.

    func () (id string) {
    	for id = generateString(32); unique(id); id = generateString(32) {
    	}
    
    	return id
    }
    Ответ написан
    3 комментария
  • Как открывать приложение если нет выделенного домена?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    vagrant
    Ответ написан
    Комментировать
  • Как реализовать обратную совместимость пользовательских данных в программе?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ответ написан
    Комментировать
  • Как правильно реализовать авторизацию между сервисами?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    По простому: hash = someFunc(secret + message) добавляется в запрос/ответ. При этом секретный ключ должен присутствовать и на сервере и на клиенте.

    Есть альтренативный вариант: https://ru.wikipedia.org/wiki/Сервер_криптографиче...

    Как вариант можно посмотреть в сторону OAuth2, так же не обделите вниманием LDAP
    Ответ написан
    Комментировать
  • Какую технологию выбрать веб сервиса и БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Под БД можете Elastic заюзать. Забивать адреса можно в полу автоматическом режиме: если адрес стандартный
    (ул|пр-т|пр|...). (Адрес улицы/проспекта/...), д. (буквы/цыфры), кв. (буквы/цыфры) - разбивать регуляркой, и вбивать автоматически, в противном случае в ручную.

    Есть альтернативный вариант - пытаться искать адрес через гугл, далее пытаться получить адрес через его API
    Ответ написан
    Комментировать
  • Как мы вы или они никогда не разберутся в жизни страусцовых улиток и французских булок?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если умеете в самообучение - универ вам уже не нужен. Самый быстрый рост в "бодишопах", это крупные it компании, работающие в основном на аутсорс. После того, как подрастете до уверенного мидла - можно идти в продуктовую компанию (та, что реализует некий собственный проект).
    Ответ написан
    3 комментария
  • Где найти паттерны "правильных" частей системы?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вы ищите то, чего нет. Нет понятия "правильных" частей системы, или "правильных" паттернов.
    Вот вам пример: OAuth, что вы привели имеет 2 версии, это что получается, первая была не правильная?))
    RBAC - это подход, который далеко не всегда уместен, часто его проще и лучше заменить ACL (безусловно, это не всегда так).

    PSR-3 - это не совсем паттерн, это скорее рекомендуемое соглашение.

    Конкретно по php миру: рекомендую реализовывать следующие требования, проникнуться Symfony way, активно использовать паттерны: DTO, VO, код писать вместе с тестами (вот это капец как критично для крупных систем).

    Что касается более высокоуровневых паттернов, в стиле OAuth, RBAC - они вам потребуются только в случае, если это требуется бизнесу, для которого вы пишете систему.
    Ответ написан
    Комментировать
  • Нормально ли проверять одни и те же данные по десять раз?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Проверять данные в каждом методе - это вполне отличная практика, по сути это соблюдение интерфейса метода.
    Но возвращать при этом null/false - практика хреновая, если ваш метод на вход требует int, а получил array - надо бросать исключение. Так вы будете знать, что внешний код, который использует ваш метод работает не корректно.

    Для объектов настоятельно рекомендую использовать type hinting:

    public function test(MyObject $object, $id)
    {
        if (!is_int($id)) {
            throw new \InvalidArgumentException('Argument "id" must be int');
        } elseif ($id < 0) {
            throw new \InvalidArgumentException('Argument "id" must be positive');
        }
    ...


    Если пишете на семерке, то и для скаляров и на вывод - тоже стоит указывать type hinting. Правда с выводом не всегда это можно делать, например возврата null, или что-то еще.

    public function checkPositive(int $intData): bool

    Для сокращения проверок можете мой пакет заюзать https://packagist.org/packages/ko-ko-ko/assert, он спроектирован под максимальную производительность и использование в каждом методе.

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

    Да. За счет этого вы выигрываете в безопасности, надежности и времени поиска багов.
    Ответ написан
    8 комментариев
  • Какую литературу по back-end посоветуете?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Сэм Ньюмен «Создание микросервисов»
    Ответ написан
    Комментировать
  • Как исключить из регистрации временную почту?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Комментировать
  • Какие способы релизации шаблонов и хуков есть в PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Хуки можете сделать так: получаете список всех зарегистрированных функций, фильтруете их по названию, те что подошли - выполняете.

    Но это путь в никуда и так делать не стоит.

    На счет кода до и после - очень странный кейс и тоже оооочень хреновый, так делать нельзя.

    Получаете список токенов через token_get_all далее находите вызов конкретно вашей функции то, что до и после конкатенируете. Далее выполняете то что вам надо и в eval.

    Но еще раз это пример ужасного подхода и так писать нельзя.
    Ответ написан
  • Какой язык выбрать для "системного" программирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Golang
    Ответ написан
    Комментировать
  • Каково состояние дел у PHP на фронте?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Перефразирую ваш вопрос: каково стояние дел у молотка по забиванию гвоздей?))

    Где можно ознакомиться с состоянием дел у PHP?

    php.net
    habrahabr.ru
    opennet.ru

    Какой рантайм брать?

    7-ка только-только вышла, пока что опасно. Берите 5.6

    Какой фрейворк юзать?

    Смотря какой проект.

    Что с интернационализацией?

    Если используется реализация из фреймворка - то, что в фреймворке. Если самопис - как напишите так и будет.

    Люблю функции высшего порядка

    В php их конечно можно использовать, но только там, где это необходимо. Вообще говоря это отличная практика по отстреливанию яиц.

    он создан чтобы умирать

    Все верно, это stateless язык, он так спроектирован, под свои задачи лучше пока не придумали.

    А мне бы желательно запланировать на фронте возможность ещё и с вебсокета раздать уведомления.

    Планируйте на здоровье, но на бэкенде под это лучше пойдет nodejs. Демоны на php конечно пишут, но это не целевое применение языка, такие дела.
    Ответ написан
  • Что скажете о моей реализации логирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Магические текстовки нужно заменить на константы.

    В итоге я могу хоть 800к логов загнать в бд без большой нагрузки на неё.

    Круть. За какой период времени? Какое железо? Нагрузка и на редис и на БД постоянная?

    Чем ваш логгер лучше https://github.com/Sirupsen/logrus ?

    -- --

    Посмотрел статью на хабре, увы там комментировать возможности не имею.

    Кровь из глаз((

    0. Посмотрите logrus и переименуйте статью на "еще один логгер". Ваш логгер не гибкий, примите за исходную.

    1.
    Данные в редисе

    вы правда думаете кто-то будет это читать?))

    2.
    Я долго бился голов об клавиатуру искал багу в коде...

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

    3.
    1 000 000 записей в мускуль добавилось за 25мл.сек

    Что-то слабо верится(( Сколько выполняется запись просто из файла, такого же объема данных. Интересует сравнение времени.

    4.
    правда в редис эти данные писались около 6 минут

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

    5.
    конфиг

    Кровь из глаз, конфиги если уже json делаете - хотя бы делайте человеко понятными, не используйте массивы там, где должны быть объекты!!!

    6.
    библиотека

    То, что вы делаете в init - это как минимум богомерзко((( Ваш логгер абсолютно не управляем. Его настройка приколочена 100-тыми говздями и заварена арматурой, как у вас вообще возникла мысль говорить о гибкости?))

    7.
    //Путь к файлу с конфигами
    config_file string = "/home/v-smerti/localhost/api/src/microService/config/log.json"

    1440x900_484850_%5Bwww.ArtFile.ru%5D.jpg

    8.
    демон

    Вы хоть сами смотрели?))

    9. Вы нигде не обрабатываете ошибку отправки почты, это вообще как? Если связь с сервером нарушено - логов не будет?))

    10. SQL:
    `id` int(11) NOT NULL AUTO_INCREMENT,
    Я надеюсь вы осмысленно допускаете отрицательные id.

    11. SQL:
    `type` text NOT NULL,
    эт пи*дец.

    12. SQL:
    KEY `type` (`type`(191))
    Если не секрет - почему не 192?
    Ответ написан
    1 комментарий
  • Перспективы для глупых людей?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    работать я там не планирую, так как и текущая работа устраивает

    Смысла нет. Это будет пустая трата времени.

    Как к таким будут относиться коллеги?

    Как к тыж программисту
    post-92-0-55961700-1398672718.jpg
    Есть ли вообще какие-то перспективы в программировании у не очень умных, медленных людей?

    Если вы не планируете этим заниматься - вряд ли. Профдеформация приобретается за довольно длительный промежуток времени))

    Программирование не делает людей умнее. Структурирует мышление - это да.
    Почитайте статейку: megamozg.ru/post/10126
    Ответ написан
    Комментировать