Страница №2
1 April 2018, 22:20 MSK
Когда я нахожусь за границей в поездках, мне необходим мобильный интернет (смотреть карты, строить маршруты, гуглить инфу про места, читать отзывы, искать рестораны, отвечать на почту и т.д.), также мне необходимо оставаться на связи по телефону на своём номере.
Покупать каждый раз местную симку в каждой новой стране — плохая идея. Во-первых, местная симка решает только проблему с интернетом, но не с разговорами. Во-вторых, как правило, все они имеют предоплаченный тариф — то есть, надо заранее решить, сколько ты потратишь денег, неиспользованные средства сгорят. В-третьих, надо тратить время, специально куда-то ехать, чтобы купить эту симку. Не вариант.
Поэтому раньше я всегда пользовался дорогим роумингом. Недавно я был в Берлине и затестил новый способ оставаться всегда онлайн за границей, который гораздо бюджетнее.
Сначала решаем проблему с тем, как дёшево звонить и принимать звонки на своём номере за пределами России. Для этого нам нужен оператор Мегафон (увы, другие не подойдут). Я на нём уже более 15-ти лет, так что всё ОК. У Мегафона есть специальная услуга Мультифон (именно обычный Мультифон, а не Мультифон-Бизнес). Она бесплатная и позволяет совершать/принимать звонки, а также отправлять/принимать смски через интернет вместо GSM по своему домашнему тарифу (по сути, это превращает обычный телефон в IP-телефон). Для этого надо поставить специальное приложение Emotion (iOS, Android). Выглядит оно вот так:
emotion
Переключатель в правом верхнем углу позволяет выбирать между GSM-сетью и интернетом. На скриншоте выбран режим IP-телефонии (звонки и смс через интернет). В этом режиме, где бы мы ни находились, звонки и смски будут стоить столько же, сколько в домашнем регионе без всякого роуминга. Главное, чтобы был интернет. Звонить и отправлять смс нужно именно через это приложение, также в это приложение будут поступать входящие (на айфоне можно не бояться закрыть приложение — у меня всё отлично работало, звонки приходили даже с выключенным приложением, про андроид не в курсе). Если рядом есть вай-фай — больше ничего не нужно. Но, если не сидеть целыми днями в отеле или ресторанах, то вай-фая рядом не будет.
Теперь решаем проблему с дешёвым мобильным интернетом. Я перепробовал несколько вариантов и остановился на международной симке, которая называется Дримсим. Сама симка Дримсим с доставкой стоит 10€. Весь прикол в том, что во многих странах интернет через неё стоит очень дёшево (по сравнению с роумингом). Например, почти во всей Европе 1 гигабайт трафика будет стоить 10€. При этом, тарификация покилобайтная, и нет никаких ограничений (в том числе, на раздачу интернета на другие устройства в режиме модема). Одной симкой с одним счётом можно пользоваться в любой стране. У Дримсима есть своё удобное приложение:
drimsim
Работает это следующим образом. Вы заказываете симку, вам её привозят курьером (если заказать по специальной ссылке, то и мне, и вам дадут по 5€ на счёт). Далее пополняете счёт (это можно сделать любой банковской картой). Перед поездкой вынимаете вашу мегафоновскую симку и втыкаете дримсимовскую, включаете в мегафоновском приложении режим IP-телефонии. Профит. Если разговаривать по телефону через интернет через это приложение, трафика тратится очень немного. У меня получалось меньше 100 мегабайт за час разговора (это меньше 1€). Раньше я тратил минимум 10€ в день на роуминг, а теперь столько же трачу за целую короткую (4-5 дней) поездку.
Через Дримсим также можно совершать звонки напрямую, но это не имеет смысла. Во-первых, звонки будут идти с британского (+44) номера. Во-вторых, цены на звонки совсем не такие интересные, как цены на интернет.
Я пользовался связкой Дримсим+Мегафон в Германии и остался полностью доволен. Но у данного решения есть небольшой минус: Мегафон блокирует смски от банков в своём приложении. Частично это решается включением пуш-уведомлений, но не все банки так умеют. Плюс обычно подтверждения операций покупок по карте в интернете всё равно приходят в виде смсок. Также, к сожалению, далеко не во всех странах поддерживается LTE.
16 March 2018, 20:40 MSK
Дахау — один из первых концентрационных лагерей нацистов, находится недалеко от Мюнхена — столицы Баварии. Сейчас на этом месте открыт мемориальный комплекс в память о жертвах и узниках лагеря. Я побывал здесь во время поездки в Германию в августе 2017.
IMG_6393
11 March 2018, 03:40 MSK
Я долго думал, стоит ли публиковать в блоге не свой код, и решил, что иногда всё-таки стоит, потому что решение описываемой в этом посте проблемы в рунете мне найти не удалось.
Сразу к делу. В мобильном Сафари уже несколько Айосов подряд есть такая замечательная кнопка (вызывается по долгому нажатию на значок перезагрузки страницы в адресной строке):
request-desktop-site
Такая же кнопка есть в Хроме на Андроиде и Айосе. В английском интерфейсе называется «Request Desktop Site».
К сожалению, работает она по-дурацки: когда нажимаешь эту кнопку, браузер просто подменяет свой юзер-агент с мобильного на десктопный, и всё. Кто-нибудь верстает сайты так, чтобы подсовывать браузерам разные стили в зависимости от юзер-агента? Обычно нет.
6 March 2018, 00:20 MSK
Проблема подчёркивания ссылок в вебе стоит очень давно. Лично я согласен с Ководством Лебедева в том, что ссылки всегда должны быть подчёркнуты.
К сожалению, самый очевидный способ подчеркнуть ссылку — CSS-свойство text-decoration: underline; — имеет массу недостатков. Более-менее красиво такие ссылки будут выглядеть только у пользователей мака или айоса, причём, в любом браузере (спасибо, Эппл). Покажу на примере своего блога.
Внешний вид стандартных ссылок в ИЕ:
text-decoration-underline-ie
Это, конечно, никуда не годится. Линия очень жирная. Внешний вид стандартных ссылок на маке:
text-decoration-underline-mac
Уже лучше, линия тонкая (1 пк), но всё равно есть минусы. Во-первых, линия пересекает нижнюю часть буквы «у». Во-вторых, никаким образом кастомизировать (подвинуть по высоте, покрасить в другой цвет) линию не получится. В-третьих, работает только на яблочных девайсах. Таким образом, использовать свойство text-decoration — не вариант. Мы не будем рассматривать свойства text-decoration-style и другие, потому что их поддерживает полпроцента браузеров. Ищем другие пути.
4 March 2018, 01:10 MSK
— А погнали в Казань?
— Так зима же.
— Да пофиг.
— Погнали.
IMG_0527
24 February 2018, 18:30 MSK
9 августа, среда:
— Поехали в Нарву на машине на выходные?
— Может быть, тогда и в Таллин заедем ещё?
— Долго, давай лучше просто в Таллин самолётом.
— Давай. А что по билетам?
— В пятницу утром туда, вечером в воскресенье обратно.
— Отлично.
IMG_5850
20 February 2018, 20:55 MSK
История об ещё одном виде мошенничества в социальной сети ВКонтакте, с которым я столкнулся совсем недавно. Возможно, кому-то пригодится.
У меня есть один развлекательный паблик, который я веду в свободное время (веду не под настоящим именем, поэтому позвольте мне остаться анонимом и не приводить ссылок — на суть дела это не повлияет).
Недавно мне приходит сообщение с предложением продать сообщество:
диалог1
Выходит неплохая цена, учитывая несколько десятков тысяч человек в паблике. Я не собирался ничего продавать, но у меня закрались подозрения, что здесь не всё чисто, поэтому я продолжил диалог.
19 February 2018, 20:18 MSK
Представьте, что у вас возникла необходимость прямо с веб-страницы заказа в вашей CRM-системе открывать папку с файлами, которые к этому заказу относятся. Но не просто отображать содержимое папки, а прямо на компьютере открывать проводник с этой папкой.
К сожалению, сделать это «в лоб» не получится. Во-первых, браузеры умеют открывать только веб-страницы, а не программы на компьютере. Во-вторых, политика безопасности браузеров запрещает доступ ко всему, что явно не разрешено, тем более, доступ к файловой системе.
Вы можете резонно предположить, что есть протокол file:// (я позволю себе использовать здесь и далее слово протокол, хотя правильнее, конечно, схема URI), который позволяет браузерам открывать локальные файлы, но с ним также есть две проблемы:
  1. он не может отобразить список файлов в папке;
  2. такие ссылки нельзя открывать с внешних (не локальных) веб-страниц.
Чтобы решить данную проблему, мы будем использовать свой протокол с собственным обработчиком. Метод будет работать в Виндоус и потребует некоторых (очень простых) действий на компьютере. В ХТМЛ-коде это будет выглядеть как-то так:
<a href="myproto://C:/My Folder/123">открыть папку</a>
Можно из Джаваскрипта:
window.open('myproto://C:/My Folder/123');
Сначала необходимо придумать название протокола (у меня будет myproto) и зарегистрировать его в системе. Для этого в любом месте (хоть на рабочем столе) создаём файл с расширением .reg (например, myproto.reg) и следующим содержимым:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\myproto] "URL Protocol"="" @="URL:Myproto Protocol"
[HKEY_CLASSES_ROOT\myproto\shell]
[HKEY_CLASSES_ROOT\myproto\shell\open]
[HKEY_CLASSES_ROOT\myproto\shell\open\command] @="\"C:\\myproto.bat\" \"%1\""
Здесь myproto — название моего только что созданного протокола. Можете изменить на своё (но не используйте стандартные названия протоколов типа http, ftp, mailto и прочие).
Запускаем файл. Винда выдаст несколько вопросов и предупреждений, со всеми соглашаемся. Всё, больше этот файл на этом компьютере не нужен, можно удалять.
Далее в корне диска C: необходимо создать файл myproto.bat со следующим содержимым:
@echo off
set "path=%~1"
setlocal enabledelayedexpansion
set path=%path:myproto://=%
set path=%path:"=%
set path=%path:/=\%
set path=!path:%%20= !
set path=!path:%%5C=\!
C:\Windows\explorer.exe "%path%"
Здесь также меняем myproto на название вашего протокола. Это и будет его обработчик.
Всё готово. Теперь вы можете прямо из браузера (абсолютно любого) на данном компьютере открывать папки в проводнике в отдельном окне, просто открыв ссылку вида myproto://C:/My Folder/123.
К сожалению, данные действия придётся проделать на всех компьютерах, где необходима такая функциональность. Но, как правило, подобные вещи используются во внутрикорпоративных приложениях, где число пользователей известно и ограничено.
18 February 2018, 11:52 MSK
Потихоньку перехожу с PHP 5.6 на PHP7 (а точнее, сразу на 7.1). Ответ на вопрос «Зачем?» выходит за рамки данной заметки, поэтому сразу к сути. Если вы тоже решили обновить версию ПХП, вы можете столкнуться с рядом неприятных ошибок, одна из которых возникает из-за ужесточения правил работы числовых операторов, начиная с версии 7.1.
Новые ошибки уровней E_WARNING и E_NOTICE были добавлены при использовании некорректных строк с операторами, ожидающими числа (+ - * / ** % << >> | & ^) и их эквивалентами с присваиванием. Ошибка уровня E_NOTICE выдается, когда строка начинается с цифр, но далее содержит не цифровые символы, и ошибка уровня E_WARNING выдается тогда, когда строка вообще не содержит цифр.
В ПХП версии 7.0 и ниже следующий код будет работать без ошибок:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$a = 1 + '1text'; echo $a; // 2
$b = 1 + 'text'; echo $b; // 1
$c = ''; $d = 1 + $c; echo $d; // 1
В ПХП версии 7.1 и выше это код выдаст нотис в 5-ой строке, а также ворнинги в 8-ой и 12-ой:
Notice: A non well formed numeric value encountered in test.php on line 5
2
Warning: A non-numeric value encountered in test.php on line 8
1
Warning: A non-numeric value encountered in test.php on line 12
1
Первые два случая особых проблем не вызывают, потому что, если у вас в проекте встречается код, в котором математические операции выполняются над буквами, проблема явно не в ПХП.
А вот третий случай — числовые операции с пустой строкой — часто встречается в реальных проектах. Пустая строка в подобных случаях всегда считалась нулём. Так может быть, например, если вы берёте какое-то числовое значение из конфига, а оно не заполнено. Я заметил, что даже многие библиотеки подвержены данной проблеме.
Решение — одновременно простое и сложное. Нужно добавить явное приведение типа:
$c = '';
$d = 1 + (int)$c;
Проблема в том, что это приходится делать вручную, отследить все такие места автоматически, увы, не получится. И это ворнинг, а не нотис, поэтому отключить через error_reporting(E_ALL & ~E_NOTICE); не выйдет.
20 December 2017, 06:30 MSK
Это продолжение первой части рассказа про поездку в Доминиканскую республику.
Итак, продолжаем исследование острова и направляемся в место, которое называется Альтос-де-Чавон.
IMG_4254