Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Posts Tagged ‘розробка

Корисні налаштування Git

leave a comment »

Перше. Як не задовбувати всіх сміттям яке створює ваше IDE, і за замовчуванням мати gitignore для всіх репозиторіїв.

git config --global core.excludesfile ~/.gitignore

Ця команда відредагує файл ~/.gitconfig і в ~/.gitignore можна буде перелічити всякі там *.swp, чи що там ваш редактор створює.

Друге. Якщо Go не хоче встановлювати модулі з помилкою “fatal: could not read Username for ‘https://github.com’: terminal prompts disabled”, бо залежності прописані через https, а ви використовєуте SSH, це можна виправити таким налаштуванням:

git config --global url."git@github.com:".insteadOf "https://github.com/"

На цьому поки що все, дякую за увагу. 🙂

Written by bunyk

12 Листопада, 2019 at 12:48

Опубліковано в Кодерство, Конспекти

Tagged with ,

Кілька рядків коду що підвищують продуктивність в рази

with 4 comments

«Не потоком шумних і галасливих фраз, а тихою, невтомною працею любіть Україну!»

Це клікбейтний заголовок, але тут ми дійсно за пару хвилин напишемо розширення до браузера, щось на зразок resquetime тільки просте як одноклітинні. Назвемо його наприклад higher power, бо воно працюватиме як підстраховка для нашої власної сили волі.

Створюємо директорію проекту

bunyk@bunyk-thinkpad:~/projects$ mkdir higher_power
bunyk@bunyk-thinkpad:~/projects$ cd higher_power/

А в ній файл manifest.json з наступним вмістом:

{
"manifest_version": 2,
"name": "Higher power",
"version": "1.0",

"description": "Helps you to avoid temptations",

"icons": {
},

"content_scripts": [
{
"matches": ["*://*.facebook.com/*"],
"js": ["power.js"],
"run_at": "document_start"
}
]
}

Версії і назва – обов’язкові поля, опис та icons – ні, але корисні, бо відображатиметься в списку додатків, а content_scripts описує який код завантажуавти при відкриванні певної адреси.

“run_at” каже запускати код ще до того як сторінка завантажиться, без цієї опції браузер пару секунд рендерить стрічку фейсбука, а тоді вже наш аддон починає щось робити.

Створимо цей код, в згаданому в маніфесті файлі power.js, нариклад так:

window.location.href="https://bunyk.wordpress.com/";

Замість bunyk.wordpress.com можна вписати https://www.udacity.com/, https://www.edx.org/, https://github.com/ чи щось таке.

Тепер відкриваємо в Firefox сторінку “about:debugging” (для інших браузерів самі з’ясуйте що і напишіть в коментарі будь ласка), натискаємо кнопку “Load Temporary Add-on…”, вибираємо будь-який файл з директорії нашого проекту, і насолоджуємось результатом.

Посилання

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension

Written by bunyk

30 Березня, 2019 at 00:38

Геренуємо пару ключів для цифрового підпису за допомогою RSA в Python

with 7 comments

Для тих кому викликати openssl набридло. Це дивно, але цього нема в стандартній бібліотеці python, тому:

sudo pip install pycrypto

Тоді:

from Crypto.PublicKey import RSA
from Crypto import Random

private_key = RSA.generate(1024, Random.new().read)
public_key = private_key.publickey()

print(private_key.exportKey().decode('ascii'))
print(public_key.exportKey().decode('ascii'))

Що дасть нам:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCFO0e8pxFV5Niq9Kjkn7HpX5xCbsh2oP56t2goNw/qZnddzW1x
... blablabla ...
dB6mvhutUqKRZDaA1o4y1kytKTG42RfEtdm8t1Z/77dS
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFO0e8pxFV5Niq9Kjkn7HpX5xC
bsh2oP56t2goNw/qZnddzW1xW3rWxYI2/Jxp/hv7EGapg12EcViF/C8Uv2WbCDEM
LIRaMqtHKFNaniscMgZKgaohkjXcLk5dIrVXuuxY7sk07BZqj+Jsv6xgR6GZ0CmG
Q3ZOmGAKksC/YA3gYwIDAQAB
-----END PUBLIC KEY-----

В іншій публікації було показано як це робити допомогою openssl, і як цими ключами підписати токен.

Written by bunyk

26 Червня, 2018 at 11:00

Опубліковано в Інструменти, Кодерство

Tagged with ,

Проста схема перетворення інтерактивної процедурної програми з goto в функціональну рекурсивну

with 3 comments

Власне вся передмова помістилась в заголовок. Хоча може для цього “паттерну” є коротша назва.

Існує клас інтерактивних програм які очікують вводу користувача, потім залежно від того вводу щось роблять, потім знову очікують вводу і так далі. Наприклад якась така програма “вгадай число”:
Прочитати решту цього запису »

Written by bunyk

10 Квітня, 2016 at 13:29

Опубліковано в Кодерство

Tagged with , , ,

Знову повертаючись до університету

with 6 comments

В мене таке відчуття ніби я в універі. Місце де я сплю – вузьке і біля стіни. Біля ліжка – захаращений стіл. Мій сусід поїхав кудись на вихідні, а я сиджу, залипаю в комп’ютер і скоро зустрічатиму світанок. 🙂

Сиджу, ковбашу код який мав би допомагати мені виправляти помилки форматування статтей вікіпедії:
Прочитати решту цього запису »

Written by bunyk

13 Березня, 2016 at 04:55

Як Garage48 допоміг мені нарешті почати проект

with 7 comments

Минулих вихідних я відвідав Garage48 – мені дуже сподобалось. Тому дуже вдячний Анастасії за те що повідомила і склала компанію, і компанії N-iX за те що надали можливість провести таку подію.

Що там було гарного?

Garage48 – це хакатон, слово що складено об’єднанням слів хакер і марафон. Тобто по суті мало б бути 48 годин програмування протягом вихідних.

В якомусь гаражі. Так, в тому місці де захід проводився (офіс компанії N-ix знаходиться на 7-му поверсі заводу Електрон), зліва від “сцени” була купка шин. Коли я мав нагоду поговорити з директором, я запитав чи то запас з євромайдану, чи аби створити гаражну атмосферу. Виявилось він просто літню гуму зберігає на роботі.

Garage48 придумали е-стонці. Е-стонія – дуже е-лектронна держава. А все тому що вони якось розробили скайп, їм сподобалось і вони вирішили спробувати зробити ще щось таке. Естонія невелика, всього лише 1.3 мільйона населення, але подушна кількість стартапів там чи не вища ніж в Каліфорнії. Окрім електронного уряду, відомі ще компанією Transferwise, яка здешевлює міжнародні перекази між різними валютами до одного євро, замість % обміну.

Garage48 естонці не тільки придумали, вони й проводили. Вони займались всією організацією, презентаціями і т.д. А так як це вже не перший хакатон – все було досить чітко. Єдиний мінус – це був мій перший хакатон такого роду, і тому я був не зовсім в курсі що головне не так писати код, як правильно подати ідею, і зорганізувати роботу. Наступного разу знатиму, що якщо є ідея – на хакатон треба приходити вже з командою. Або хоча б з менеджером. Або бути нормальним менеджером, що не так вже й просто. Треба мати people skills.

Ragnar Sass не надто вражений нашим демо. 😦

Що крім коду мені довелось робити? Ну спершу – презентувати свою ідею за 90 секунд одним слайдом. Добре що в мене вже є досвід публічних виступів. Досвід 90-секундних виступів тепер теж є. 🙂 Далі – знайти “співробітників”. І тепер я краще розумію як тяжко HR. Я вже готовий був до того що проект буде на .Net, або мікроконтролерах, але пощастило і таки знайшлась одна людина на Python. Далі – змусити їх робити те що я хочу, а не те що вони хочуть. І це при тому я їм ніяку зарплату не платив. Перший день і половину другого ми провели за суперечками про те що ми будемо робити. На щастя нікого звільняти не довелось, самі звільнились. А поки всі сперечались, одна людина зробила все за нас, почала Django проект, описала всі залежності, встановила всі бібліотеки і бекенд був готовий. Далі два фронтендщики зробили фронт-енд кілька разів.

А в ніч з суботи на неділю ми пішли на “тім-білдінг”. Хоча напевне раніше варто було. Можна було б звісно довше програмувати, але ж ми прийшли на хакатон також і заради розваги, тому цікаво було також познайомитись. Особливо тому що один з нашої команди, Алекс, який власне все й зробив, був з Донецька, але через те що їх офіс зі зрозумілих причин зараз не достатньо зручний для роботи – переїхав у рідне місто – Костянтинівку. І мало того що він крутий розробник, він ще й має футболку з логотипом The Pirate Bay і знає тексти Фліта і Тостера.

Тім-білдінг полягав просто в тому що ми сиділи на пиві в цілодобовому кафе “Цісар” на городоцькій біля церкви Анни. Ціни там дуже навіть помірні, але меню не відповідає можливостям кухні, тому треба додатково питати про наявність певних страв. А ще там була офіціантка, дуже добра, чим мені дуже сподобалась. Я навіть запросив її на танці, хоча вона звісно відмовилась. Чомусь 95% дівчат яких я запрошую на танці – відмовляються. Я напевне роблю щось неправильно, може не треба питати так прямо в лоб, а спочатку зайнятись якимись попередніми ласками бесідами, щоб вони були поступливіші? 🙂 Потім офіціантка напевне тому що не було чим зайнятись (то була десь 2:30) заспівала пісню сербською краще за Марію Шерифович. Так гарно заспівала що я аж закохався. Тільки от не бачив її відтоді, ніяк не можу на її зміну потрапити. Думаю якби вдягнувся нормально, вмився і побрився, мав би більші шанси її запросити.

Ліричний відступ закінчуємо, тепер до того що ми робили далі.

Після тім-білдінгу ми почали спроби інтегрувати фронтенд і бекенд і фіксити баги які виникали в процесі. Не всі встигли, але як виявилось – цього не потребувалось, потребувалось зробити гарне демо. І я не думав що це займе так багато часу. А ще, мене змушували двічі ходити на репетицію демо-презентації (на першу з яких ми спізнились бо не були в курсі). Демо мало тривати 180 секунд і його треба було багато разів пробувати, аби сказати все цікаво, пояснити важливість і корисність свого продукту і вкластись в час. На першій репетиції естонці сказали мені що спочатку треба сказати як мене звуть. Я спитав кого то обходить, але мені сказали що то важливо так само як і про що проект. А ще, що мені треба тримати зоровий контакт з аудиторію а не руки в кишенях.

Біля сусідньої до нашої кімнати свою презентацію репетирувала дівчина, команда якої зрештою отримала перше місце. Я домовився з нею про співпрацю, і ми одне одного засікали, критикували та вчились підтримувати зоровий контакт. То було трохи незручне, але досить цікаве заняття, думаю варто ще потренуватись на інших людях. Або як Віктор Суворов (пробачте, я не втримаюсь і вставлю ще ліричний відступ):

С глазами у меня хуже, чем с языком. У меня есть опыт из Спецназа смотреть в глаза собакам. Но тут этого недостаточно. Нас тренируют с зеркалом: смотри в глаза, не моргай. Не отводи взгляд. Если хочешь завербовать человека, ты должен прежде всего выдержать взгляд. Дружба начинается с улыбки, вербовка – со взгляда. Если ты не выдержал первый тяжелый взгляд своего собеседника-то и не пытайся потом его вербовать: психически он сильнее. Он не поддастся.

Я выхожу на станции метро “Краснопресненская” и иду в зоопарк. Если у вас та же проблема, то приходите к закрытию – вам никто не помешает. Я смотрю в глаза тиграм, леопардам, Я направляю свою волю, я сжимаю челюсти.
Неподвижные желтые глаза хищника расплываются передо мной. Я сильнее сжимаю кулаки, впиваясь ногтями в ладони. Глаза нужно осторожно сощуривать и вновь медленно-медленно широко раскрывать, так можно не моргать. Глаза режет, наворачиваются слезы. Еще мгновение – и я моргнул. Огромная ленивая рыжая кошка презрительно улыбается мне и отворачивает разочарованно морду: слаб ты, Суворов, со мной состязаться.

Ничего, кошка. Я настойчивый. Я приду сюда в следующее воскресенье. И в следующее. И потом еще. Я – настойчивый.

В кінцевому результаті вийшло як завжди – розмахував руками або тримав їх в кишенях і дивився в підлогу. Відео виступу

Ще, нам пощастило мати в команді маркетолога, і організатори казали що це теж дуже важливо. Можливо варто було довірити презентацію їй, а самому зайнятись кодом, але знову ж таки – менеджмент був поганий, і пояснити ідею, про яку думав протягом кількох місяців простіше самому.

Після хакатону залишається проблема підтримки цього всього. 48 годин – за вихідні – це гарний копняк для того щоб ідея почала рухатись, бо це навіть більше ніж робочий тиждень. Це як робочий тиждень з суботою. Навіть якщо ми не ввесь час працювали. Проблема в тому що ми використали python2, а я щиро вболіваю за python3, на якому вже є купа можливостей писати. І що хостинг позичений на Azure, а переносити – довго, бо залежностей багато, і деякі такі – в назві яких я навіть слова не знаю:

django-annoying==0.8.4
django-wysiwyg-redactor==0.4.2.1
django-formtools==1.0
django-flat-theme==1.1.1
django-tastypie==0.12.2
django-location-field==1.6.1
django-cors-headers==1.1.0
django-sitemetrics==0.5.0

uwsgi==2.0.11.2
newrelic==2.56.0.42

Хоча я багато повикидав, тому що ніякого New Relic там не потрібно. І простори імен в проекті вийшли заглибокі. Взагалі він вийшов занадто ентерпрайзним, як на таку просту ідею. Але нічого, потрохи переробляю.

Ах, і найгірше, в нас головний select зроблений в python циклі. 🙂 Жахіття! Нічого, це теж перероблю. Біда от що я повністю нулячий в керуванні конфігурацією. Те що я пишу публікації про docker, Vagrant, (про fabric бракує) – означає тільки те що я час від часу роблю спроби там освоїтись.

А ще, думаю, може б то open source? З одно боку, якщо ідея злетить, було б шкода давати конкурентам можливість обігнати нас, а з іншого боку – мало хто вірить в таку ідею крім мене.

Поки що живий сервер можна спостерігати за адресою http://46.101.226.138/. Не знаю наскільки довго.

Одним словом, ми не виграли, але головне не перемога, а участь, а ця участь окрім втоми дала дуже багато – весело проведений час, мотивацію робити щось далі, без ілюзії про те що це буде легко, і купу нових знань і досвіду.

Якщо буде ще одне таке подібне – обов’язково піду. А поки що попереду LvivPy #5 та Django girls Хмельницький. І хоча я не дівчина та погано знаю Django, але в мене в дипломі написано що я можу викладати (здається), тому я спробую викладати.

See you!

Written by bunyk

18 Листопада, 2015 at 00:50

Опубліковано в Нещоденник

Tagged with , ,

Вступ до системної інженерії

with one comment

Від університету Нового Південного Уельсу можна подивитись на Coursera.

Найнудніший з тих що я проходив в інтернеті. Здається що навіть в університеті не було так нудно. Проходив я його для того щоб зрозуміти “якщо те що пишу я набагато простіше за літаки, то як взагалі ті літаки літають? Як тисячі людей домовляються про те щоб діяти разом?”

Ну, власне зрозумів. Систему розбивають на підсистеми, задають інтерфейси між ними, так на кілька рівнів, кожен працює над своєю частиною, потім їх інтегрують, тестують, і якщо не сподобалось – починають з початку.

Нудний, бо по перше, про водоспадну модель я ще в університеті дізнався (а також про Extreme programming, Dynamics System Development Method, і навіть трохи про Rational Unified Process). Що означає що кубик – таки класний і при певних зусиллях може бути в топ100 світового рейтингу, а також про те що Карнаух – одна з найкращих викладачів там, бо якби не вона, я б таких слів не знав, і це при тому що коли ми з нею познайомились я вже не дуже хотів вчитись.

А по друге, ну не треба ставити на слайди стільки списків. А якщо вже поставили – то не читати списків.

Аби краще відклалося – зробив собі конспект. Якщо хто незнайомий з тим що таке системна інженерія, і наприклад думає чи хотів би він це вчити, чи треба шукати іншу спеціальність – можете ознайомитись. Хоча, зразу попереджаю що на практиці воно дещо інакше виглядає ніж в теорії. 🙂
Прочитати решту цього запису »

Written by bunyk

13 Травня, 2015 at 18:13

Опубліковано в Конспекти

Tagged with