Как стать автором
Обновить
0
0
Виталий Жук @ZhukV

Пользователь

Отправить сообщение
Относительно собеседований, еще заметил одну не мало важную вещь: если у Вас нормальное положение в OpenSource, а также не мало нормально написаных библиотек/пакетов, то после предоставлении ссылки на них, часть технических вопросов практически исчезает, что очень приятно радует, как одну сторону, так как другую.

После передачи ссылки на GitHub Последние собеседования в OroCRM и Tonic-Health проходили с вопросами уже более общего характера — какая технология?, зачем?, плюсы/минусы?, какие грабли?
Ранее тоже стояла задача для определения языка.

Первая версия была очень простая, аналогично Вашей: используя каждые алфавиты, вычислять количество символов принадлежащих к определенному алфавиту, и у кого будет больше, тот и победитель.
На практике эта система хорошо работала на «до 5» языках, в которых нету пересечений. Пересечений, я имею ввиду пересечений символов в алфавитах. К примеру, если посмотреть на украинский и русский языки. Разногласия в алфавитах очень маленькие. И таких алфавитов очень много (если взять европу, то там вообще почти все такие, которые используют в основном английский алфавит + некоторые свои дополнительные символы). Как пример (очень хорошо помню), это краткие фразы «привет Вася и Петя» определялись как белорусский и русский.

Далее, когда поняли, что по частоте букв будет не очень то хорошо, пришли к другому решению. А что если загнать все слова с каждого словаря в конечный автомат? В результате, мы имели наборы множества слов для каждого отдельного языка. Точность определения кратких словосочетаний была намного выше да и текстов с большой длинной тоже. Но, есть очень большой минус для такой системы: очень много места занимают все эти словари + обработка.

В итоге, решили использовать два подхода одновременно, но при этом, комбинировать. Если текущая буква есть в алфавите, то давать более высокий приоритет (сразу даст выше приоритет для языка, в котором есть «уникальный» буквы). А далее прогонять по словарю, и давать за каждое слово более низкий приоритет, так как слова могут встречаться.

P.S. Пиарюсь:
Паралельно со все этой задачей, запили пакет github.com/ZhukV/LanguageDetector
Проверяли на прогоне текста приложений с Apple iTunes для одного из наших проектов. Точность была очень высока.
За реализацию «пода» спасибо.
prntscr.com/7cjkpz — не покрашилось. Тем более, при отправке ответного сообщения такого же содержания, сообщение удаляется автоматически.
Большое спасибо! Я то решил проблему путем удаления всех смс-ок (сообщений).
При «поделиться заметкой», у меня открывается модальное окно в этом же приложение (Заметки), наверное потому и не помогло.
iPhone 6, iOS 8.3 — не помогло…
На хабре тоже уже это светилось: habrahabr.ru/post/259007

Попытался сам себе на iPhone 6 отправить с Mac OS. Отправить получилось, но потом был капец. Телефон включился, но зайти в приложение «Сообщение» я так и не смог. habrahabr.ru/post/259007/#comment_8439321
В общем, отправил сам себе, ради «забавы». Полетело все. В сообщение уже зайти не мог, сразу вырубало. Лекарство тоже не помогло.
Помогло следующие: полная очистка сообщений, при помощи PhoneClean. Он требует PRO доступ, но там же на 4PDA и ключик есть для актуальной версии. Минус один, он тупо очищает всю историю сообщений. Если у кого-то там важные данные, но не используйте.
Вот Unicode коды всех символов:

Unicode codes
Line #1: 80, 111, 119, 101, 114, 10
Line #2: 1604, 1615, 1604, 1615, 1589, 1617, 1576, 1615, 1604, 1615, 1604, 1589, 1617, 1576, 1615, 1585, 1585, 1611, 32, 2403, 32, 2403, 104, 32, 2403, 32, 2403, 10
Line #3: 20887


Что очень интересно, как я понял, это опасно только для iOS/Mac OS подобных систем…
Что очень странно, что даже при копировании текста в PHPStorm, приложение тупо вырубило. Crash log: gist.github.com/anonymous/4bb78a72a930ad12561a

UPD: аналогично положило и терминал: gist.github.com/anonymous/32bdf8257fa250423d63
Да, покупали. Скажим, финансы просто позволяли купить. Если бы не было возможности, наверное бы искал точно такого же энтузиаста. Но что-то очень сильно сомневаюсь, что качество тогда бы было в хорошее.
Ну, у меня аналогичная картина. Сам программист PHP c 6-ти летним опытом, активно пишу на Symfony2. Год назад залез в iOS, и понеслась, точно то же, что и написано. Здесь я бы сказал, что сама проблема в подходе.
PHP — «инлайновый» скриптовой язык, при разработке на котором, все привыкли что процесс потом умирает. В результате, кто же смотрит за ссылками на объекте, их количество и прочью ерунду, которая должна активно удалятся при неиспользовании. Сломать этот стереотип может ReactPHP, где все крутится на том же одном процессе (libevent).

P.S. Пиарюсь: вот что получилось после PHP — itunes.apple.com/ru/app/zolotaa-kollekcia-skazok/id972444801?mt=8
Ну, это наверное потому что это PHP ;)

на самом деле, можно очень много чего такого придумать, что потом разработчик будет один час на 5 строчках голову ломать, и при этом, код вроде нормальный ;)

Отличная статья.

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


Аналогично, пол года назад родилась дочь, и понеслась…
Но, на выходе также что-то есть: itunes.apple.com/app/id972444801

От меня лично совет: делать можно, и нужно, хоть даже и уже есть такие же приложение. Ведь Вы можете придумать такую «фичу», ради которой только и будут скачивать/покупать приложения.

P.S. С удовольствием жду вторую часть!
Мне казалось это логичным, тем более это работало у меня на телефоне. Хотя тут сравниваются два разных объекта.
А вот на iPhone 5S и новее это уже не работало и появлялись пустые ячейки. Странная история, которую я до сих пор не понимаю. Но решается просто:


Дело в том, что Objective-C — объектный язык, и уже NSNumber, это ни какой не int, не float и другая фигня. В частности, эта скажим некоторая обертка, над цифровым типом данных, с которого Вы можете получить уже любое значение.

В результате, Ваше сравнение получилось что-то вроде (сравнения числа и объекта):

int == NSNumber (id)


На самом деле, я считаю это очень верным подходом в объектном языке. Вы не паритесь, какая архитектура (32, 64), ну если Вы не пишете там «большущие» вычисления, а также получаете большое количество helper-ов, с помощью которых Вы сможете многое сделать, не напрягаясь.

Аналогичным образом работают и NSString и другие обертки над типами.

В частности, я много видел людей, которые используют базовые типы: int, float, unsigned int… Лично я бы советовал использовать типы объявленые в Objective-C — NSInteger, CGFloat, NSUInteger… При таком подходе Вам пофигу будет, что там потом придумает Apple (ну не прям пофигу, но совместимость наверное таки будет).

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


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

К примеру:

+ (BOOL)isRetina;
+ (BOOL)isIos8
+ (BOOL)isIos7
// .....


Вот как один из примеров: github.com/ericjohnson/canabalt-ios/blob/master/flixel-ios/src/Flixel/FlxG.m

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

А почему не использовали GoogleAnalytics для статистики? Как по мне, очень даже хороший вариант, да и еще в связке с AdMob-ом.
Да, уж, сорри, ошибочка, сам не знал.

zeromq.wdfiles.com/local--files/intro%3Aread-the-manual/Middleware%20Trends%20and%20Market%20Leaders%202011.pdf

Указано, что они хотели бы его поддерживать, но он сильно громоздкой, по их мнению, и пока что они решили его не внедрять. Но опять же, документ датирован 2011 года (http://zeromq.org/intro:read-the-manual Comparisons)

Да, они не используют этот протокол, но методология (pattern) один и тот же.
ZeroMQ достаточно хорошая вещь, но это все равно реализация AMQP, всего лишь за исключением нескольких плюшек.
Если же говорить о AMQP, а именно о этом подходе, то здесь наверное для простых задач и кролик справиться на 5+, учитывая, что из-за exchange (точка обмена, что Вы «обосрали»), есть куча разных возможностей, в том числе и обработка одного и того же сообщениями разными воркерами.
Также, следует посмотреть в сторону Gearman, у него большая плюшка в том, что можно просмотреть статус выполнения задачи, что очень даже не хватает.

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


Откуда Вы это взяли? Посмотрите сколько форков и звезд на репе реакта (не так то и много, но и не мало, чтобы не дать этому уважение).

P.S. В общем, ожидал от статьи больше. Это как на конфах часто видно название доклада «Ассинхроность в PHP», а начинают рассказывать там о разных RabbitMQ, ActiveMQ, etc…
Да уж, «будущее уже наступило»…
Три года тому назад (2012) покупал Mac Book Pro 2012 за 1200$ (4 GB, 512 Gb), и спокойно за 150$ (или 200$, уже и не припомню) проапгрейдил до 16 Gb, SSD 128GB. И того, общая стоимость примерно 1350, и родной с такими же параметрами более 1700$ (точно не помню, может даже и дороже).
Сейчас же, выбирать только топовую комплектацию, чтобы получить те же параметры, но это уже перебор по цене (> 2000$ новые модели).
С одной стороны, все верно. Впяли детали, в результате решили проблему веса и размера. Добавили хорошую гарантию (но не во всех странах есть), сразу замена. Все круто. Но с другой стороны, почему тогда вилки цен космические?
Бренд… Монополия… Будущее…
Вообще-то Symfony я только и использую для всякой мелочи


Вы уж простите, но мне кажеться, это и есть самая главная проблема. Так как Симфони совсем не для мелочей. Имхо.

Описанные вами компоненты кроме FireWall Listener я не использовал. DI я использую чтобы получать нужные мне сервисы. В кишках фреймворка не копаюсь. Использую стандартные 2 environment.


Не пожалейте время, и все таки попробуйте их заюзать. Тот же самый DI в разрезе Compiler Pass. Готов заверить, впечетления улучшаться.

Про DDD и EDA впервые слышу, наверное это очередные общие концепции, которые каждый понимает как хочет и притягивает за уши к своему опыту.


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

Symfony обобщает опыт разработки Фабиена и его взгляды на то, каким должен быть фреймворк.


Мне кажется, что Вы здесь ошибаетесь. Очень много на Packagist пакетов, с очень даже похожими архитектурами.

P.S. Лично мой Вам совет: покопайтесь в нем на большом проекте, а не пилите какие-то «мелочи». Для мелочей есть совсем другие подходы. Имхо, Симфони это монстр, и Ваша попытка прировнять Льва к мыши, думаю недопустима.
Очень даже интересное высказываения.
Все верно, Symfony2 очень плохо подходит для мелких сайтов, таких как блоги, сайти визитки. Но уж здесь простите, тогда только WordPress Вам сможет помочь.

Очень интересны высказывания автора, а именно:

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


Есть пара паралельных вопросов:
1. Работали ли Вы с компонентами (как Вы пишете с абстрактными) RoutingLoader, FirewallListener, ControllerParser, AsseticLoader, etc..., которые очень хорошо грузят динамеческие ресурсы? Или Вы предпочитаете по старинке все это грузить с одном файлике (environment.php)?
2. Использовали ли Вы DependencyInjection на всю его мощь (Extension system, Compiler Pass)?

Избавиться от этого нет никакой возможности — отход от стандартной идеологии крайне не одобряем сообществом.


Да, здесь с этим не поспоришь. Ну ведь верно. Или Вы хотите получить точно тоже, что было с Zend, когда берешь проект, а там… вообще не понятно, что где, и как оно вообще работает. Здесь же есть жесткие правила, и если мне дадут новый проект на СФ, то я точно буду знать, где что находиться.

Если вы захотите выкинуть Doctrine из своего проекта, то вам придется потом долго и нудно объяснять каждому встречному, почему вы это сделали под укоризненное качание головы


Откуда Вы это взяли? На самом деле, очень много кто выпиливает ее в своих проектах. Да и объяснять не надо. Вы бывали на конференциях по Симфони (SymfonyCampUA к примеру)? Лично я могу сказать, что нет, так как этот вопрос там очень часто обсуждается и все только уши раскроют и будут слушать как Вы это сделали!

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


Хм… Если все для Вас так плохо, тогда наверное надо посмотреть на ряд других фреймворков, которым нужно только указать названия поля и тип, и а то, что там объект, вас абсолютно пофигу… А не задумывались на счет того, зачем это сделано?

Ну и напоследок:
Я знаю, что мне сейчас здесь просто… будет, и куча минусов, НО! Автор, дайте ответ пожалуйста:
1. Какой самый большой проект на PHP Вы сделали за всю свою жизнь? Фреймворк значения не имеет.
2. Работали ли вы с DDD? Именно вот здесь очень круто ляжет и формы, и свои типы в доктрине которые Вы так «обосрали» в своем посте.
3. Использовали, или даже «Изучали ли» EDA А ведь практически вся СФ на нем устроена, и Вам нет необходимости влезать в «ядро», чтобы добавить свою логику на любом этапе.

P.S. Эта тема скорее принесет куча холивара, который можно услышать на каждой PHP конфе, чем реально какую-то пользу определенным людям, да и принесет куча негатива начинающим в СФ, которые еще пока стоят на распутье дорог. Автору ресспект за столько текста, а вот к сожалению, реального смысла статьи я так и не увидел…

Информация

В рейтинге
Не участвует
Откуда
Луцк, Волынская обл., Украина
Дата рождения
Зарегистрирован
Активность