Sunday, March 19, 2017

PureJS -> ALight -> Vue.js -> ???

Дорабатывая (наконец то!) приложение для мобильных платформ на базе связки Framework7 + Vue.js, я нахожусь в некотором замешательстве...

Как я пришел к Vue.js? Сначала был чистый Framework7, потом я познакомился с Alight (Angular Light), но меня останавливало использовать его слишком большое количество "магии". Т.е. я не знал, как сделать то или это без помощи автора этой штуки, а автор выдавал такие примеры, которые приводили (и приводят до сих пор) меня в замешательство. Впрочем это не помешало мне сделать несколько рабочих прототипов, которые ждут своего часа для продакшена.

Та же история с магией был и с Vue.js 1.x, к тому же дело осложнялось состыковой Vue.js с Framework7.

И тут выходит Vue.js 2.0. И в Framework7 появляется поддержка Vue.js, точнее обертка над F7.

Ура?! Ура. Но будучи человеком довольно консервативным для начала решил испробовать подход из опыта с Alight т.е. интеграция Vue.js с Pure F7 приложением. И сразу скажу - получилось не очень. Решением было или отказ от Vue.js или использование Vue.js обёртки в полную силу.

Но почему речь пошла про отказ? Ведь Vue.js называют чуть ли Лучшим Фреймворком 2017 года!

Причина банальная и проста - тормоза. На мобильных платформах появляются фризы при работе с интерфейсными элементами. И подозрение падает на Vue.js. Потому что это "черный ящик", что он делает внутри, какие циклы и таймеры гоняет, я не знаю. Но подозреваю, что гоняет метод digest, проверяющий изменения реактивных данных. И если этих данных немного - до сотни полей, то это не заметно, но если их 1000 и больше? Задержки уже могут стать существенными.  А так я уже "споткнулся" с v-for, когда связанная функция установки css вызывается для каждого элемента отображаемого массива, но не для только изменившихся элементов. А если передавать еще и index элемента в эту функцию, то тормоза становятся просто существенными и совершенно не объяснимыми.

Скорее всего я выбрал для этой задачи не совсем правильный инструмент (большое количество обрабатываемых данных) -- можно делать всё на PureJS, иметь полный контроль и горя не знать. Но так хотелось прикоснуться к мейнстриму.





Sunday, March 12, 2017

Amazon > Shopfans > Нея - результаты и выводы

Посылку получил. Покупка была сделана 4 февраля, получил 6 марта.
Доставка по США со склада продавца до shopfans заняла 2 дня.
Далее были некоторые процедурные работы на стороне shopfans, ожидание оплаты, фото заказа и т.п. И посылка была отдана на доставку AirMail 13 февраля. Вот её дальнейший путь:

После 17 февраля посылка попала в сумеречную зону - Российская Федерация. Где она, что она ничего не известно. Только одна есть надежда - придёт. И пришла, в целостности и сохранности. Но за 17 дней по РФ, против 4 дней с другого полушария.

Выводов делать ни каких не хочется. Уже устал.

Thursday, March 09, 2017

nginx != nginx истина или ложь? Не всё так просто...

На Хабре встретилась статья, которая начинается подобной картинкой:
Казалось бы очередной программисткий пёрл, который часто цитируют из индуисткого кода. Но мне что-то не давало спокойно пропустить содержательную часть этой картинки...

И вот что! Выражение на картинке вполне может быть валидно и иметь глубокий смысл.
Пример:
Во первых, nginx это getter, т.е. по факту функция вызываемая без параметров и возвращаемая некое значение. Что в мире объектного программирования встречается сплошь и рядом.
А во вторых, возвращаемое значение может зависеть от времени вызова функции или от последовательности вызова функции, как говорится, фор эзампл: функция может возвращать количество своих вызовов. Т.е. в левой части неравенства будет результат вызова nginx = 1, а во второй уже 2.

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

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

Выражение примет вид nginx(NOW) != nginx(NOW) и выражение истинно, так как для каждого вызова функции получается свой NOW (при определённой степени точности в пределе стремящейся к планковской постоянной времени).

Как же получить значения функции в один момент времени.
Надо время завиксировать!
Псевдокод:

var nowTime = DateTime.Now();
if(nginx(nowTime) != nginx(nowTime))  .....
по идее должно вернуть ложь для заданного времени

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

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


Wednesday, March 08, 2017

Тайны следствия: Кто и как рассылает спам через Skype.

Вчера поздно вечером, когда я уже находился в полудрёме под мурлыкание телевизора, не_помню_по_какой_теме, а все девайсы были оффлайн, по моим контактам Skype были разосланы спам сообщения с cсылкой-редиректом через Baidu.

Хронология событий была примерно такая, события может быть связанные, но может  быть и нет:
- на WindowsPhone с 10кой была установлена одна игра из Магазина приложений
- в скайпе появился контакт Skype с каким то рекламным предложением
- выключился Flash и потребовалось его обязательное обновление
- разослан спам
- обновился скайп
- проведено доп сканирование на предмет вредоносов, но ничего не было найдено, как и ожидалось
- проверка  активности аккаунта ничего подозрительного не показала
- сделал объединение Skype и Microsoft аккаунтов (почему мне помнится, что я подобное уже делал)

Поиски похожей ситуации в интернетах конкретного ответа не дали. Да, ситуация такая происходит с завидной регулярностью у разных пользователей Skype. MC отрицает свою причастность. Пользователи проверяют свои устройства (в том числе и macOS ные) и никаких вредоносов не находят.

Версия о дырке в протоколе skype позволяющей рассылать сообщения от имени другого пользователя или дырка в самом skype имеет право на жизнь, возможно обновление приложения, как раз связано с рассылкой спама и закрывает её.

Thursday, March 02, 2017

Enhance или Appodeal?

Недавно узнал про Enhance от FGL , так впечатлился, что уже пиарю в разных местах. Однако простой интерес к вопросу "когда же будет поддержка Cordova приложений" вызывает реакцию (я бы сказал) "отторжения" в виде "ждите, скоро" и это "скоро" длится уже не меньше полгода, а то и год.

В то же время поддержка Cordova есть у Appodeal, в принципе со всеми теми же плюшками, что и на enhance, может только без zero code встраивания, который как раз и не нужен, а нужно управление состоянием показа баннеров.

Так что можно и не ждать.