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 с нуля находится полностью в актуальном состоянии.
С наступающими праздниками и каникулами!
На сайте 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