Подписаться на блог

Фрирайтинг, заметки, шитпостинг и все подряд (18+)

Позднее Ctrl + ↑

Настройка ZSH в Mac OS

С недавних пор начал использовать Mac OS, почти сразу подумал, что стандартный терминал не очень-то и удобен.

В качестве оболочки будем использовать ZSH, о нём, думаю, не слышал только любитель красивых UI, а вместо стандартного терминала я использую iTerm2.

В Mac OS ZSH предустановлен, поэтому сразу устанавливаем его в качестве оболочки по умолчанию с помощью команды `chsh -s /bin/zsh`. После перезапуска терминала оболочкой должен быть уже ZSH, если попросит начать настройку, то прервём сей процесс, нажав q.

Ручками мы писать конфиги, разумеется, не будем, пусть это сделает “Oh My Szh”. Переходим в домашний каталог и выполняем:

curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

Следующим шагом откроем для редактирования файл `~/.zshrc` и изменим значение параметра ZSH_THEME на agnoster, сохраняемся и перезапускаем терминал. В этот момент вы, скорее всего, увидите криво (никак) отображаемые символы, всё это происходит из-за некоторых отсутствующих шрифтов в системе, исправим это:

Скачаем архив  —  вот здесь.

  1. Перейдём в “fonts-master/UbuntuMono/” и установим все шрифты в этой директории.
  2. В настройках терминала выставляем шрифт “Ubuntu Mono derivative Powerline”.
  3. После перезапуска терминала вы, наконец, сможете узреть нормально работающую тему “agnoster”.

Для правильной работы темы во встроенном терминале VScode в конфиг нужно добавить:

"terminal.integrated.shell.osx": "/bin/zsh",
"terminal.integrated.fontFamily": "Ubuntu Mono derivative Powerline"

Jekyll & Poster

Немного о блоге

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

Вчера сегодня в связи с некоторыми обстоятельствами я бодрствовал глубокой ночью и, как обычно, смотрел в монитор. Думал, чем бы заняться, лишь бы не скучно было. Проекты писать не могу, ибо заказчики скидывают ТЗ уже несколько недель, а другие только пишут его, писать лабы — точно не моё.

В этот момент я снова наткнулся на папочку с Jekyll.
Таким образом мне в голову пришла идея взяться и, наконец, точно доделать свой блог на GitHub Pages + Jekyll, ибо уж очень нравится мне эта связка.

Снова я начал с поиска тем. За весь процесс “сборки” этого блога большую часть времени я тратил именно на поиск тем. Обязательными условиями для меня были поддержка всех особенностей md-разметки GitHub и лаконичная главная страница.
Подходящих тем было несколько, в итоге я остановился на “Arctic Fox”, подправил немного разметку и стили и… всё.

Вроде бы на этом всё, однако я опять-таки начал думать о том, как бы всё это пооблегчить, ведь каждый раз создавать новый файлик, закидывать в папку, push’ить это на git — не особо-то и приятно, плюс ко всему для того же twitter я написал консольную постилку, чтобы в случае необходимости если вдруг захочется, запостить что-то из терминала. Почему бы не написать подобное и для Jekyll-блога?

Jekyll-poster

Язык для сего “творения” я выбирал не долго. Хотя правильнее сказать, что я его и не выбирал, кроме Python я ни на что и не смотрел.

Единственная “левая” зависимость в скрипте — termcolor, т. к. люблю цветастые выводы скриптов и делаю их цветастыми где можно и нужно, и где нельзя.

Здесь можно разводить дискуссии о том, что это небезопасно, что пароль вытащат, но скрипт чисто для личного использования на домашнем компьютере, да и… вот так вот.

Все необходимые данные, что нужны скрипту:

  • dir — директория с блогом;
  • username — логин от github;
  • password — пароль от github;
  • repository — репозиторий с блогом на github.

Первым делом для поста генерируем имя файла нашего поста, согласно структуре Jekyll, дата — сегодня, разумеется.

def fileNameGen(title):
    now = datetime.datetime.now()
    date = str(now.year) + "-" + str(now.month) + "-" + str(now.day)
    fileName = date + "-" + title + ".md"
    return fileName

“Шапка” поста тоже — необходимость Jekyll, о которой я всё время забывал, “закидывая” посты с телефона.

def headerGen(title):
    headerGen = "---\nlayout: post\ntitle: " + title + "\n---"
    return headerGen

Сохранения файла в дерикторию нашего блога элементарное (как и весь скрипт, да).

def saveFile(fileName, fileHeader, fileText):
    os.chdir(dir+"/_posts")
    postFile = open(fileName, 'w')
    postFile.write(fileHeader + '\n' + fileText)
    postFile.close()
    pass

На самом деле у меня просто не получилось.

Самая важная, но в тот же момент кривая функция — ввод текста. Я на Python делал только элементарное, и многострочное редактирование текста не входит в этот список. Сделал максимально “костыльно”. В самом начале, конечно, думал, что можно будет nano вызвать как подпроцесс, но, увы, так нельзя.

def postTextGet():
    postText = ""
    print(colored("Post text: ","blue"))
    text = input(colored("(input \"%%END%%\" for close input)\n","red"))
    while (text != "%%END%%"):
        postText += "\n" + text
        text = input()
        pass
    return postText

На GitHub всё засылаем тут же.

def gitPush(repository, username, password):    
    os.chdir(dir)    
    #commit    
    commit=os.popen('git add . && git commit -m "New post"')    
    print(commit.read())    
    commit.close()    
    #push    
    push=os.popen('git push https://' + username + ':' + password + '@' + repository + ' --all')    
    result=push.read()    
    push.close()    
    return result

Затем всё объединяем.

def main():
    print(colored("Create new post to your Jekyll-blog!","cyan"))
    postTitle = input(colored("Post [page]-title: ","blue"))
    postLink = input(colored("Post [link]-title: ","blue"))
    fileName = fileNameGen(postLink)
    postText = postTextGet()
    saveFile(fileName, headerGen(postTitle), postText)
    gitPush(repository, username, password)   
    print(colored("Posted!","green"))
    pass

Заключение

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

В качестве наиболее удобной альтернативы моей поделки можно использовать Prose.io.

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

Jekyll

Сегодня я уставший пришёл из универа, пары до 9 вечера даются с трудом, но что ж…
Открыл Twitter-ленту и увидел небольшую дискуссию о Jekyll.

Тут я вспомнил, что давно хотел затестить эту систему для “блоговедения”, да и хостинг на GitHub довольно удобен, плюсом к этому меня очень радовала (и радует) Markdown-разметка, поэтому было решено немедленно попытаться сделать хоть что-то.

Полез в репозитории, форкнул шаблон, подправил, что нужно и разместил уже у себя.
К моему удивлению, ничего не вызвало каких-либо сложностей, всё оказалось довольно удобным и понятным.

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

Каналы Телеграма

Введение

В общем этот огромный (нет) пост опишет моё мнение о различных сервисах, можно сказать, мини-блогов.
Для тех, кто не особо шарит, поясню:

  • Блоги — обычно характеризуются огромной кучей всяких наворотов для форматирования текста, большими и содержательными постами. LiveJuornal, Blogger, etc. — типичные сервисы для ведения блогов.
  • МикроБлоги — коротенькие записи, немного информативности, никаких наворотов, кроме прикрепления несокльких медиафайлов. Сервисов микроблогов тоже не мало, вот только популярность обрел только Twitter.
  • Про МиниБлоги — ниже.

“Историческая” справка

Далёким летом 2006 года появился Twitter. Не тот Twitter, что есть сейчас. Тогда нельзя было ни картинки прикрепить, ни людей на фоточках отметить, да что там… функции “Ретвит” не было. Все “ретвитили” так: “RT @username Tweet-text”. Конечно, зависать в социалочке, где один текст не особо весело, поэтому начали появляться разные вспомогательные сервисы, типа TwitPic (картиночки чтобы постить), TweetLonger (посты поболее 140 символов писать), сервисы геолокации, ретвитов и подобного. Сейчас половина из них закрыта, ибо посещаемость у них нулевая из-за ненужности, всё же уже есть в самом Twitter.

Далековато меня унесло, разговор-то совсем не о Twitter.
Спустя год существования Твиттера некоторые особо активные сёрферы интернета поняли, что многим людям совсем не нужны громоздкие блоги, типа LiveJuornal, но и Twitter с его небольшим функционалом им не хватит. Так зародилась идея чего-то промежуточного — МиниБлога.

Tumblr

Идея замечательная, теперь неплохо бы её реализовать. В процессе реализации появился Tumblr.
Такой формат блогов пришёлся многим по вкусу, так ещё и во времена Web 2.0 (хоть и в переходном моменте), огромное количество блогеров перекатили свои блоги на Tumblr. Популярность росла очень быстро, в некоторых странах Tubmlr стал популярнее FaceBook (да, даже такое было).
Огромную популярность Tumblr приобрёл у подростков и школьников (а у кого же ещё?). Интересной особенностью Tumblr является то, что это одна из немногих публичных социальных сетей, куда можно лить контент порнографического содержания, по этой причине одни из популярных блогов с порнографией (очень много задумок там, типа 30sec2fap).

Я сам некоторое время, в далёком 2011, пользовался Tumblr. Мне нравилось, это было удобно. Многие мои знакомые пользовались им. В SMM и Блог -сообществах блоги на Tumblr имели успех.

Итог

Итак, что мы имеем? Крутая блоговая система, простая реализация.
Что происходит дальше? Простую реализацию начинают пичкать лишним функционалом, в итоге теряется одна из фишек сервиса — простота. В этот момент происходит переход в нижнюю часть спирали развития — блогеры массово сваливают из сервиса. Тут начинаются попытки всё разрушенное восстановить, выкатывают новые фишки (которые, ясное дело, только усугубляют ситуацию), в итоге — продаются Yahoo!.

Таким образом, имея идеальный концепт и реализацию МиниБлога, Tumblr её порушили.
Огромное количество сервисов пытались повторить успех Tumblr с подобной концепцией, но пошли по тому же пути усложнения.

В мире web’a почти всякий путь усовершенствования ведет к усложнению, примеров этому огромное количество:

  • Twitter;
  • Tumblr;
  • Instagram;
  • FaceBook;
  • ВКонтакте;
  • etc.

С ВКонтакте это вообще отдельная история, стоит вспомнить только последнее обновление дизайна, отмена системы рейтинга, удаление стены.

Даже, если рассматривать какие-то мелкие проекты, то путь от простого к сложному прослеживается и здесь.
Стоит только взглянуть на мою CMS EasyBlog, он просто на глазах превращался из МикроБлога в обычный Блог.

Вывод

Казалось бы, всё потеряно? Однако, реализация этой концепции МиниБлогов отлично отразилась в Telegram-каналах. Толпы SMM-щиков сразу поняли это. Я думаю, никто до конца не понимает, что это значит, но, если каналы сделают открытыми для просмотра просто через браузер, то будет полная реализация как раз той самой системы, что все ждали.

Дуров и его команда точно понимают, что надо пользователям.

EasyBlog — начало

Итак, в процессе подготовки к дискретной математике я ничего не делал написал простую блоговую CMS.
Всё элементарно.
Код на GitHub.

Абуз TowerAtack

“Абуз” летней распродажи и TowerAttack в Steam идет успешно.
Накупил кучу игр чисто на карточки этой замечательной мини-игры от Valve. Спасибо, Gabe Newell и uLLeticaL.

ВКонтакте как основа

Пару дней назад я планировал вывести один пет-проект в свет, т. е. дать на тест своим друзьям знакомым, но внезапно остановился на системе аутентификации пользователей. Мне не нужны были лишние регистрации, не нужны были лишние таблицы в БД, тогда я решил использовать API ВКонтакте, как… сервис аутентификации.

От меня не требовалось ничего, кроме добавления кнопки на страницу входа, а пользователи могли регистрироваться простым нажатием кнопки “Войти”.

На просторах СНГ, на мой взгляд, такой способ авторизации может в некотором роде заменить авторизацию через email, хотя привязка к профилю в “левой” социальной сети не есть хорошо.

Окей, у нас есть аутентификация через сервера ВКонтакте, что же будем с этим делать? Первое, что понадобилось мне — разрешение тех или иных действий для пользователей, принадлежащих какой-либо группе. Я нашёл 2 пути решения этой задачи:

  1. Кастомные списки “друзей”;
  2. Группы.

Как раз второй вариант я и выбрал. Далее мне понадобилась возможность уведомления пользователей о чем-либо. Опять же выручает VK-api. В самом простом виде пользователю можно просто отправлять сообщение или постить “пуш” на стену группы.

Итак, уведомления и авторизация полностью работают на стороне ВКонтакте. Помимо всего прочего, ВКонтакте даёт уйму методов API для работы с различными разделами сайта (Документы, Фото), таким образом, на основе инфраструктуры ВКонтакте в скором времени могут появиться не просто какие-то небольшие сервисы, а целые системы файло-хранения или чего-то подобного.

Ранее Ctrl + ↓