Кирилл Артёменко

Личный блог | Написать мне

SSH без пароля и приватный доступ к GIT

Для доступа к серверу по SSH без ввода пароля, необходимо, чтоб он нас узнавал. Для этого, добавим наш публичный ключ на удаленный сервер. Разместим его в домашней директории пользователя, под которым будем подключаться, в файле ~/.ssh/authorized_keys.

Если ключа нет, сгенерируем его:

# генерация пары public/private rsa ключей (создаст 2048 битный RSA ключ)
ssh-keygen -t rsa -b 2048
# или можно сгенерировать 4096 битный ключ с комментарием
ssh-keygen -t rsa -b 4096 -C "КОММЕНТАРИЙ"

После размещения ПУБЛИЧНОГО ключа на сервере в списке авторизованных, он перестанет запрашивать пароль при подключении.

# сделать это можно используя команду ssh-copy-id (если она имеется)
ssh-copy-id user@server
# или при помощи последовательности команд
cat ~/.ssh/id_rsa.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >>  ~/.ssh/authorized_keys"
# если возникли сложности с командами, добавьте ключ вручную в файл ~/.ssh/authorized_keys

Теперь, мы можем подключаться без пароля.

# подключаемся по SSH
ssh user@server
# работает, далее давайте настроим приватный доступ к GitHub — убедимся, что он нас не узнает
user@server:~$ ssh -T git@github.com
Permission denied (publickey).
# так и есть, не узнал

Для того, чтоб он нас узнавал, необходимо добавить наш ПРИВАТНЫЙ ключ в SSH-клиент и установить соединение с использованием личного ключа используя атрибут -A.

# добавляем ключ в SSH-клиент
ssh-add ~/.ssh/id_rsa
# подключаемся по SSH с использованием добавленного ключа (указав атрибут -A)
ssh -A user@server
#  проверяем узнает ли нас теперь GitHub
user@server:~$ ssh -T git@github.com
Hi KirillArtemenko! You've successfully authenticated, but GitHub does not provide shell access.
#  теперь можно работать со своими приватными репозиториями

На этом все. Приятного использования!

ObjDict v.1.0 — Словарь как объект

После длительного общения с JS, в Python, иногда, разобрав очередной JSON в словарь мне очень не хватало обращения к его вложенным элементам используя точечную нотацию (как у объектов, в JS ведь все объекты).

Хотелось вместо громоздкого json[’a’][’b’][’c’] использовать изящное json.a.b.c обращение.

Представляю вашему вниманию простой класс-обертку на базе базовых словарей, достаточно просто «обернуть» им словарь, после чего, к нему можно обращаться как к объекту используя точечную нотацию как у JS.

Класс objdict — расширяет dict, позволяя обращаться к его свойствам, как к атрибутам object-a, но при этом, сохраняя его полноценным dict-ом.

class objdict(dict):

    def __init__(self, *args, **kwargs ):
        dict.__init__(self, *args, **kwargs )
        for key, value in self.items():
            if isinstance(value, dict):
                self[key] = objdict(value)

    def __getattr__(self, name):
        if name in self:
            return self[name]
        else:
            raise AttributeError("No such attribute: " + name)

    def __setattr__(self, name, value):
        self[name] = value

    def __delattr__(self, name):
        if name in self:
            del self[name]
        else:
            raise AttributeError("No such attribute: " + name)

Пример использования dot-нотации (присваивание тоже доступно):

>>> my_dict = {'a': {'b': {'c': 'OK'}}}
{'a': {'b': {'c': 'OK'}}}

>>> my_dict.a.b.c # пример ошибки
AttributeError: 'dict' object has no attribute 'a'

>>> my_objdict = objdict(my_dict) # преобразуем в objdict

>>> my_objdict # внешне остается таким же словарем, но...
{'a': {'b': {'c': 'OK'}}}

>>> my_objdict.a.b.c # получить свойство на 3-м уровне проще простого
'OK'

>>> my_objdict.a.b = 'END' # задать или удалить значение тоже не составляет труда
>>> my_objdict.a.b
{'a': {'b': 'END'}}

@ToDo: В версии 1.1 планирую добавить .get() обработчик с форматом objdict.get(’a.b.c’, ’default value’) для получения значения без необходимости перехвата AttributeError, будет еще более удобным для работы c JSON.

Дзен дизайна

  • Просто, но не примитивно
  • Емко, но не скупо
  • Лаконично, но интуитивно
  • Красочно, но не вычурно
  • Изящно, но не смазливо
2018   Дизайн

Студия Лебедева скатилась до уровня начинающего фрилансера

Мы готовим к запуску сервис знакомств, и, когда нам потребовался логотип, убедившись в целесообразности работы с опытными профи (я уже много лет являюсь большим фанатом студии Лебедева) отправили заявку, в которой описали кто мы и чем занимаемся.

26 октября нам одобряют нашу заявку и мы получаем приглашение в личный кабинет для заполнения данных о компании и формирования счета на оплату услуг. Тут все стандартно — заполнили форму, получили счет, оплатили, ждем.

30 октября получаем приглашение в личный кабинет в котором производим постановку задачи дизайнеру и описываем пожелания к результату. Мы осознанно не писали много много пожеланий, дабы не ограничивать креативность дизайнеров. Однако, поскольку мы планировали использовать логотип в мобильных приложениях и интерфейсах, для нас был очень важен ключевой фактор, а именно: «Оригинальный и узнаваемый графический образ» и уточнение «чтобы это был именно образ, а не просто название интересным шрифтом. Текст, только как дополнение этого графического образа, например, как здесь — https://www.artlebedev.ru/biologica/. Задача поставлена, счет оплачен, возвращаемся к своей работе в предвкушении результата.

28 декабря приходит долгожданное письмо „Привет! Все готово.“ — получите, распишитесь. Идем в кабинет и скачиваем файл (никакого сопроводительного текста или процесса не было, только ссылка). Взволнованные и заинтригованные, мы всей командой собираемся у моего монитора и я открываю файл, после чего нам является „наш оригинальный и узнаваемый графический образ“.

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

Мы были готовы ко многому, но не к такому крайне слабому и примитивному исполнению. Само исполнение логотипа было настолько шатким, неустойчивым и сомнительным, что я не могу себе даже представить как арт-директор мог пропустить это решение, подписаться под этим своим именем и отправить клиенту как завершенный будущий логотип. Странно, поскольку задача была действительно интересная и можно было создать что-то впечатляющее и свежее, тем самым продемонстрировав креативность и опыт своих сотрудников. Но все бы ничего, вкус дело субъективное и согласно условиям мы не в праве обсуждать или придираться к дизайну, НО, через 20 минут выясняется, что это мало того, что, не ассоциируется со знакомствами и не самостоятельный графический образ, который мы планировали добавить на кнопки и пиктограмму приложения, так это еще и откровенный и весьма посредственный плагиат (достаточно поискать в гугле “creative plus logo”). Неужели среди всех людей в студии не нашлось никого, кто бы мог проверить это перед отправкой?

Нам все становится очевидно, берем телефон и звоним в студию. Девушка вежливо объясняет что нужно написать письмо с претензией на официальный ящик студии. Пишем письмо, в ответ тишина. Нам до сих пор, никто, ничего, не ответил на нашу претензию. Вот тебе и работа с клиентом. Получается, что мы мало того, что получаем совсем не то, что просили, но и даже обсуждать и урегулировать эту ситуацию с нами никто не пытается. Это неприятно и обидно. И тут я вспомнил последнюю строчку из финального письма „Растите, богатейте и приходите за новым дизайном.“, видимо это был сарказм.

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

Итог: Выброшена куча денег, два месяца ожидания. Имеем скопированный левой ногой (не ассоциирующийся со знакомствами) логотип и полный игнор со стороны студии.

P.S. Все это было написано для того, чтобы вы учли наш негативный опыт и не витали в облаках обманываясь ложными ожиданиями заказывая что-либо в студии Артемия Лебедева.

UPDATED Запустили конкурс на создание логотипа — приглашаю всех к участию!

Тормозит Docker на Mac?

Проблема: volume подключенные на Mac в режиме чтения и записи очень долгие подробнее
Решение: достаточно добавить :cached к volumes — узнать как это работает

docker run -v /Users/mb/code/docker-project/app:/project-app:cached alpine command

При использовании docker-compose

services:
  php:
    image: php:fpm
    volumes:
      - ./app:/usr/local/app:cached

Самый простой способ ускорить работу в несколько раз без танцев с бубном (плясал 3 дня).

Примеры ускорения наглядно

Ctrl + ↓ Ранее