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


UPD от 17 августа Способ перестал работать, разработчики ВКонтакте наконец-то спустя 2.5 месяца прикрыли лазейку. Теперь больше нет поддомена new.vk.com, руководство мейл.ру запустило новый дизайн на основном домене vk.com. Очень жаль. Основная новость здесь

Оригинал статьи:

Сначала убрали рейтинг, потом убрали стену, потом убрали самого Дурова, а теперь и навязали уе*ищный новый дизайн вконтакте, в котором все просто нечитаемо. Если же раньше можно было опционально вернуть старый дизайн, то пару дней назад 10% пользователям навязали редирект на новый дизайн без возможности вернуться в старый. В итоге выглядит все примерно так:

— Cтарого дизайна нет, но вы держитесь там.

 Т.е. технически говоря, когда мы посылаем GET запрос на https://vk.com/feed, то нас через Location перебрасывает сразу же на https://new.vk.com/feed Но есть хитрожопая особенность, уеб-разработчики почему-то не делают редирект, если послать POST запрос на тот же адрес, поэтому для тех, кто больше не может держаться ВКонтакте с новым дизайном, я сделал волшебную кнопку
 

 

Не благодарите.

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

UPD2: Еще для пущего удобства я сделал страницу, которая автоматически шлет этот POST запрос, поэтому вам не обязательно сюда заходить что-то нажимать, а можете просто добавить вот эту страничку - http://bingosoft.info/vk/ в закладки (CTRL + D) и вывести ее на главную панель браузера. Расскажите всем, кто очень страдает от нового дизайна ВК

Вариант стартовой страницы для закладок
Подробнее




В стареньком Objective-C есть готовый сниппет в XCode, позволяющий выполнять блок на следующем тике в зависимости от установленной задержки. В Swift же появилась прикольная фишка, что если функция принимает последним параметром кложуру, то можно опустить этот параметр при вызове, а сразу же после функции открыть фигурную скобочку анонимной функции.

Выглядит все это как-то вот так:

func delay(seconds: Double, closure: () -> ())  {

dispatch_after(

dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))),

dispatch_get_main_queue(),

closure

);

}

 В итоге на практике все стало гораздо проще

print("Before");

delay(0.5) {

print("After delay");

}

print("After");

Подробнее




Раньше в стареньком 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

Подробнее