Pull to refresh
155
0
Дмитрий Науменко @SilverFire

Yii Framework core developer

Send message

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


Искренне не понимаю, как можно было обнаружить ошибку, поискать ее причину в своём проекте, посмотреть diff'ы кода фреймвока, найти там предполагаемую причину и потом перечеркнуть все потраченные усилия, не открыв issue.

Если у вас есть публичные проекты, в которых разрешены email'ы по всем канонам RFC — поделитесь, пожалуйста, количеством пользователей, адреса которых не проходят валидацию по регулярке из EmailValidator в Yii.

Да, это так. В реальной повседневной жизни этот RFC интерпретируется всеми по-своему, что приводит к разным реализациям валидаторов.


Учитывая, что пользователей с вычурным адресом по RFC ничтожно мало, нам проще пожертвовать ими в пользу безопасности.

Кроме того, название MultiLang мне не кажется само-описывающим. Пока не откроешь код, сложно однозначно сказать, что делает этот класс. Что-то про мультиязычность, но что именно?
Я бы его назвал LanguageSwitcher. Согласитесь, сразу понятно, что это переключатель языков, не так ли?


Если всё таки использовать composer и подключить оригинальное расширение, можно еще больше упростить себе жизнь. Структуру директорий можно свести до такой:


frontend\
    widgets\
        LanguageSwitcher.php
        views\
            languageSwitcher.php

И я бы еще упомянул, что вызов этого виджета нужно добавить куда-то в layout, чтобы переключатель где-то отобразился.

Спасибо за ваши старания, позвольте высказать свою критику по поводу архитектурных решений.


'frontend\widgets\MultiLang\components\UrlManager'

Предложенная иерархия директорий (и неймспейсов) не укладывается в хорошие практики. Виджеты — это виджеты, а компоненты — это компоненты. Если у вас есть компонент, а рядом с ним — виджет для работы с этим компонентом, при этом существует общая предметная область, с которой ведется работа — это больше похоже на расширение.


Я бы предложил выделить это в отдельный репозиторий, или (если не планируется переиспользование) — разместить код в вашем проекте таким образом:


frontend\
    extensions\
       MultiLang\
      Components\
        UrlManager.php
      Views\
        View.php
      Widgets\
            MultiLang.php

содержание файла взято отсюда, можно следовать инструкции разработчика и использовать composer, но мы то делаем виджет, по этому просто скопируем UrlManager.php в наш виджет

Копируя UrlManager.php в свой проект, вы лишаете себя чудесной возможности получать обновления с улучшениями и исправленными ошибками из оригинального репозитория. Отказ от использования composer в пользу копи-пасты — один из самых вредных советов для PHP разработчика в 2016 году.


Что касается кода виджета:


use yii\helpers\Html;

class MultiLang extends \yii\bootstrap\Widget
{
    public $cssClass;
    public function init(){}

    // ...
}

Класс \yii\bootstrap\Widget находится в отдельном репозитории yii2-bootstrap и наследуется от yii\base\Widget, добавляя некоторые методы для работы с Frontend-фреймворком Bootstarp. Вы не используете никаких возможностей этого класса, достаточно будет наследования от yii\base\Widget.
Кроме того, вы указали лишний use и без какого-либо смысла предопределили метод init().


В коде представления вы указали use Yii;, но каждый раз при обращении к Yii явно указываете namespace:


\Yii::$app->request->get()

Да и если следовать правилам распределения ответственности в MVC, представление не должно "добывать" данные самостоятельно — данные должен собрать тот, кто вызывает рендер представления. Было бы уместно избавится от обращения к компонентам request, controller и свойству language из представления, а перенести это в виджет.

На уровне обработчиков событий XHR запросов. Код тут

На странице https://www.leakedsource.com/blog/vk в разделе Passwords написано следующее:

Passwords were stored in plaintext with no encryption or hashing. The methods VK used for storing passwords are not what internet standards propose because hackers can now see all 100 million passwords used on the site.


Пароли хранились в открытом виде без шифрования или хеширования. Эта стратегия хранения паролей позволила хакерам получить все 100 млн паролей, используемых на сайте.


Не хочется верить, что в таком крупном и относительно взрослом проекте применяются столь небезопасные подходы. Хотя все подробности указывают на то, что сказанное выше — жесть и правда :(

На странице https://www.leakedsource.com/blog/vk в разделе Passwords написано следующее:


Passwords were stored in plaintext with no encryption or hashing. The methods VK used for storing passwords are not what internet standards propose because hackers can now see all 100 million passwords used on the site.

Пароли хранились в открытом виде без шифрования или хеширования. Эта стратегия хранения паролей позволила хакерам получить все 100 млн паролей, используемых на сайте.

Не хочется верить что в таком крупном и относительно взрослом проекте применяются такие небезопасные подходы. Хотя все подробности указывают на то, что сказанное выше — правда. Как-то совсем тупо получается :(

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

Истину глаголите, сударь :) ORM — инструмент, а любой инструмент нужно использовать с умом

Тогда мы вынесли этот функционал в виде глобальной фунцкции в отдельный файл includes/sms.php и спокойно использовали в разных модулях в таком виде

На дворе 2016 год, уже 5 лет как существует Composer. Тут вам и избавление от include 'sms.php', и запуск функционала по необходимости.


В вашем примере с СМС вместо глобальных функций неплохо было бы сделать Helper-класс со статическими методами. А еще лучше — компонент приложения, зарегистрирован в Service Locator и доступный из экземпляра приложения — тогда будет и действительная гибкость настройки, и возможности для тестирования. А если заглянуть еще глубже, то отправку SMS сообщений нужно делать отложено через очереди, чтобы пользователь не ждал, пока ваше приложение сходит в чужое АПИ.


В Diafan.CMS всего один шаблон для построения ссылок: /строковоеЧПУ/числовойпараметр3/другойчисловойпараметр25

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


Минимизируйте количество запросов к БД

А еще можно попробовать использовать ORM и решить многие описанные проблемы архитектурно. Кстати, все ваши примеры кода в этом блоке синтаксически неверны и жутко отформатированы (загляните в PSR).


Вещи говорите местами правильные, но пора переходить на следующий уровень. PHP уже давно не такой, каким вы его показываете ;)

Нормальных магазинов по нашему хобби в России и Украине можно пересчитать на пальцах одной руки, так что насчет больших городов — не согласен.

У нас в Украине во всех городах и СГТ с населением больше 5-8 тысяч есть отделение Новой Почты и товар можно получить за день из любой точки Украины за $1. Если Новой почты нет, то Укрпочта за 3-7 дней довезет за $0.5. Цены за маленький пакет.

В России есть EMS, TopDelivery, DPD и Почта России, так что тоже вполне реально. Цен не знаю.
Сломаться может всё, а ждать, к примеру, новый контроллера полёта вы будете месяц


Вижу смысл взять сразу только запасной регулятор оборотов, мотор и много пропов. Если все делали заказывать с запасом — сильно раздувается бюджет, а толку немного. Почти любой компонент можно купить у местных продавцов (выйдет на пару баксов дороже) и получить уже на следующий день.
Я тоже немного попараноил и пару дней после установки снифал весь трафик. Пролистал дампы, ничего интересного не нашел.
Все, что стоит на малине есть на GitHub в репозиториях организации: https://github.com/flightaware
Нет, не пробовал. Согласно условиям FlightAware, я не имею права разбирать их коробку и что-либо делать с малинкой. Доступа по SSH нет, получить можно через Single user mode, но для этого нужно разобрать и достать флешку.
Все работает из коробки без каких-либо проблем, а софт Flightradar24 стоит на домашнем компе, получает по локальной сети RAW данные от dump1090 и рестримит их на fr24. Конфиг:
fr24feed.ini
receiver="avr-tcp"
fr24key="paste your key here"
host="192.168.1.2:30002"
bs="yes"
raw="yes"
logmode="1"
windowmode="1"
mpx="no"
mlat="no"
mlat-without-gps="no"
Расход трафика мизерный
График с порта (5 кбайт)

Я свой комплект получил от FlightAware
Отличный пост! Сам недавно стал принимать ADS-B данные. Хорошая антенна, будучи установленной на высоте около 30 метров, она дает 250+ морских миль покрытия (460+ км), что впечатляет.
Антенна на 1090 MHz, 200 кб


Сейчас на flightradar24 идет кампания по расширению покрытия и есть возможность запросить ADS-B оборудование бесплатно. Присылают антенну для 1090 mHz, GPS антенну для синхронизации времени, коробку с электроникой (Plug and play), 5 метров кабеля для GPS, 5 метров Ethernet кабеля и 5-10 метров коаксиального для ADS-B антенны. Запрос удовлетворяется на основании необходимости организации дополнительного покрытия местности, где вы планируете установить антенну. Вам нужно будет хорошо это все дело установить с обзором в 360 градусов, дать круглосуточный интернет и питание. Подать запрос можно тут.
Кроме flightradar24 есть еще один похожий проект FlightAware. Сейчас они также заинтересованы в расширении сети сбора данных, потому готовы бесплатно прислать комплект очень хорошего оборудования, а именно: антенну для 1090 MHz; коробку с Raspberry PI и качественным ADS-B приемником (также Plug and play); 5-15 метров приличного коаксиального кабеля, 5 метров Ethernet, футболку и премиум на их сайте. Запросы принимаются тут.
Кроме того, FlightAware не против, если вы будете делиться получаемыми данными с любым другим сервисом. Это значит, что вы можете запустить клиент flightradar24, сливать данные и иметь премиум еще и на flightradar24. Политику flightradar24 по этому поводу не знаю, потому работает ли в обратную сторону — не скажу.
Так что если кто-то загорелся идеей и может установить антенну на хорошее место с отличным обзором без препятствий, накормить интернетом и электричеством — вы знаете что делать :)
Yii первой версии (о котором вы пишете) уже очень отстал от современных трендов PHP, потому прием улучшений прекращен, а датой End of life объявлен конец 2018 года. Если вы пишете новый проект — обязательно посмотрите на Yii2, там вы найдете гораздо более гамотные и современные архитектурные решения.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity