Мои мысли и ощущения


Раньше в стареньком Objective-С для локализации строк активно использовалась функция NSLocalizedString(@"myString", nil), которая затем мигрировала в свифт, но почему-то без optional параметра comment. Тягать такую конструкцию всякий раз стало крайне раздражительным и неуклюжим.

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

prefix func ~(s: String) -> String {
    return NSLocalizedString(s, comment: "");
}

Ну вот, теперь можно удобно определять, какие строки должны подвергнуться локализации

print(~"Hello world");

Список доступных операторов для перегрузки можно увидеть здесь
 

Подробнее




В этом посту я расскажу, как быстро настроить секьюрный доступ к вашему сайту по https с помощью самоподписанного сертификата. Минус такого подхода заключается в том, что пользователю придется постоянно добавлять в браузере в исключения ошибку "Ваше подключение не защищено". Но потом вы можете приобрести за деньги нормальный SSL-сертификат.

В общем, к делу. Создаем самоподписанный сертификат:

sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

После этого Вам будет задана порция вопросов, на которые надо бы ответить:

Подробнее




Т.к. в стране случился кризис (внезапно или совершенно закономерно), расходы на содержание хостинга (15 баксов между прочим), которым я пользовался раньше (NQHost), возрасли ровно аж в 2.5 раза, не смотря на то, что сервер вроде как находится в Москве. Если же 2 года назад 450 рублей было как-то терпимо, то выкладывать больше косаря стало, скажем так, как минимум нелогично, когда в стране на высочайшем уровне развито импортозамещение и Нанотехнологии®. Да и ведь плачу я из собственного кармана (лучше бы сходил попил пива с друзьями), т.к. денег за свои бесценные программы не беру. Немного, конечно, помогают редкие донаты от особо благодарных пользоваталей, и на этом спасибо) В итоге пришлось переехать на Firstvds, на котором за те же 450р получаем 1г оперативки, вместо 750, которой хватало совсем впритык, и виртуализация получше (вместо Xen - OpenVZ).

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

С наступающими праздниками и каникулами!

UPD от 30 августа 2016:

На сайте firstvds появилась акция, где можно летом преобрести сервер (тариф VDS-start) вообще за 250р в месяц с гигом оперативки. Это значительно уменьшает расходны на хостинг, только правда пришлось заново переезжать на новый сервер :(

Подробнее




Нашел тут завалявшийся скрипт на bash, позволяющий автоматически загружать файлы в свой аккаунт на DepositFiles.com. Зачем это нужно? Ну к примеру этот сервис дает 5 баксов за 1000 скачиваний, а там можно прикрутить что угодно под этим соусом, ибо ручками грузить крайне неудобно.

Обидно, что сам сервис не придумал никакого внятного api для загрузки файлов. Работоспособность проверялась в июле 2015 года, если верстка сайта поменяется - допиливайте сами :) На выходе скрипт отдает ссылку на залитый файл, чуть позже он появляется в списке в вашем аккаунте.

Подробнее




Как-то недавно заметил (спустя полгода), что отвалился модуль обратной связи, в котором использовалась php-функция mail, которая в свою очередь работала через ssmtp, прокинутого через Яндекс.Почту. А глядя в логи выяснилось вот что:

Server didn't like our AUTH LOGIN (530 5.7.7 Email sending without SSL/TLS encryption is not allowed. Please see: http://help.yandex.ru/mail/mail-clients/ssl.xml)

А потом почитал, что с 16 сентября 2014 года Яндекс.Почта ввела принудительное шифрование, поэтому стандартные порты для smtp стали рефьюзиться. Поэтому, если вы читали мою статью про настройку своего VDS-сервера самостоятельно, то соответствующий конфиг придется изменить:

/etc/ssmtp/ssmtp.conf
Подробнее




Обычно я собираю Qt4 из исходов, чтобы гарантировать работу с OpenSSL (т.е. Qt по умолчанию не слинкован с OpenSSL), а также поддержку Ubuntu 10.04+ путем сборки либ под gcc-4.4.3

Последняя версия Qt4 - 4.8.7, забрать ее можно отсюда

Установка зависимостей

sudo apt install libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev libssl-dev libdbus-1-dev

Сборка и установка

Необходимо распаковать архив, например, в домашнюю папку, перейти туда и сконфигурировать. Лично я использую следующие параметры, в которых модуль QtNetwork будет уже слинкован с OpenSSL, который из-за BSD лицензии не может сразу поставляться вместе с либами Qt под LGPL. Поэтому из коробки у вас не заработает https, пока вы с ней не слинкуетесь.

./configure -fast -nomake demos -nomake examples -no-libtiff -no-libmng -qt-libjpeg -qt-libpng -qt-zlib -openssl-linked -no-qt3support -opensource -no-accessibility -no-stl -no-declarative-debug -no-opengl -no-svg -confirm-license

После этого запустить саму сборку (примерно на часик) и затем установить в систему

make -j
sudo make install

Кстати, можно собирать Qt и статически с ключом -static, чтобы на выходе получался цельный бинарь, без динамически подгружаемых библиотек, однако если в вашем приложение используется Webkit, то сделать это не удастся, тк он не умеет собираться статически =(

Подробнее




Представим, что нам вдруг понадобился еще один столбец в таблице. Что ж, это просто:

ALTER TABLE table ADD newfield VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

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

CREATE TABLE table1 LIKE table;
ALTER TABLE table1 ADD newfield VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
mysqldump -c --no-create-info --skip-extended-insert --no-create-db -uroot -p database table > table.sql
DROP TABLE table;
RENAME TABLE table1 TO table;
mysql -uroot -p database < table.sql

Выходит очень даже бодро.

Подробнее




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

Откуда берем:

Ну можно например из мини-диалогов в самом вконтактике. Берем в firefox нажимаем правой кнопкой миши на смайлик и с помощью инструментов для разработчика выбираем пункт "Исследовать элемент".

Далее копируем длинную портяну кода вида

<a class="emoji_smile_cont" onclick="return cancelEvent(event);" onmousedown="Emoji.addEmoji(Emoji.shownId, 'D83DDD30', this); return cancelEvent(event);" onmouseover="return Emoji.emojiOver(2, this);">

 

Таких строчек у нас примерно будет 528 штук. Сохраним их в файл emoji.txt. Задача заключается в том, как быстро вытянуть utf-16 коды символов, используемых для смайлов по адресу http://vk.com/images/emoji/<код смайла>.png

Подробнее




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

Представьте, что вам вдруг во время программирования яблокодевайса понадобилось указать какой-либо цвет (ну там подхайлайтить что-то), то вы, определившись с цветом с помощью пипетки или на глаз (ну там ВЫРВИГЛАЗНОЖЕЛТЫЙ) пытаетесь создать объект класса UIColor. И тут начинается ступор. Я конечно понимаю, что компания Apple еще те извращенцы пытается быть не как все, но чтобы извратиться и придумать конструктор от объекта UIColor в виде покомпонентно разложенных каналов, причем не от нуля до 0xff (да-да, я чуть не охренел от эротической фантазии того, кто это придумал), — а от дробного числа в  интервале [0..1]!!!!

Блин, ну ребята, задавать цвет в rgb hex формате - это стандарт, который используется ну просто везде, начиная с самых древнейших версий HTML, CSS, Qt и так далее. Даже в андроиде не поленились написать метод Color.parseColor. Максимум, где я встретил такую нотацию - это при создании цвета в OpenGL. Т.е. примерно у каждого ui-разработчика есть представление в голове, что вот, противно- приятно-голубой цвет, который используется просто повсюду - это #0099cc, оранжевый - это наоборот надо поменять местами каналы, и так далее. И тут у тебя начинается разрыв мозга, как привычный цвет в голове быстренько перевести в систему счисления от нуля до единицы?)) не, ну я конечно заметил, что разработчики ПРОВЕЛИ ИССЛЕДОВАНИЯ и заметили, что 50 оттенков серого настолько популярны, что они сделали специальный конструктор для этого - colorWithWhite:alpha:

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

Подробнее




Представим, что мы хотим получать смску в определенное время каждый день, причем, где бы мы не находились) Конечно же, можно тупо поставить обычный будильник на телефон, но вся прелесть в том, что можно передавать какие-нибудь данные, которые периодически изменяются, например, курсы валют, погоду или какие-то свои технические данные с сервера. Для этого нам поможет сервис LittleSMS с открытым API, вся прелесть которого сводится к копеечным ценам за отправку смс (например, на номера российских операторов 0,5-0,9 рублей). Вам остается зарегистрироваться и получить ключ апи, для теста будет предложено несколько бесплатных смс.

Ну и сам код скрипта на bash

Подробнее