Tuesday, January 2, 2018

Тренд: троха підсумкової статистики 2017

Отже тренд 2017 - писати підсумки року. Я троха подумав і напишу їх більш "приватно" в цьмоу бложику, і троха навіть більше в якості статистики, щоб самому краще розуміти де я і що я.
Поїхали.

  • Стартапи. Примайв участь в 4х стартапах - дещо феєрично зафейлилося з купою досвіду. Дещо перейшло на цей 2018 рік.  Якщо чесно - то навіть не знаю чи отримував я так багато досвіду ще колись, стартапи дають купу досвіду, і забирають ще більше сил і натхнення.
  • Робота. Продовжував працювати на Ciklum в якості девелопер-разнорабочий. Кодив на чому пошлють. Приймав участь в прісейлах на ранніх стадія ( точно більше десятка , важко порахувати ), лідав тімку в розрізі відділу ( на стартапі також лідав  - але досвід зовсім інший ). Купа поїздок в Київ - раз на місяць точно бував в рідних краях,  але постійно роботка забирала купу часу.
  • Навчання.  Почав і закінчив начання на Udacity ( Artifitial Intelligence nano-degree ), почав навчання в УКУ - взяв пару вибіркових курсів (лінійка, статистика, джава і тд).
  • Викладання. Провів ще кілька курсів по пайтону в LITS та провів курс по алгоритмах в Політесі - бляха, це забрало купу сил. Особливо вибиває з колії відсутність віддачі в студіках, це проблема, коли не бачих її.
  • Мови програмування. Python, Javascript, Java, Scala, Lua.
  • Мандри. Побували з Катериною в двох довгих поїздках по Європі. Гайнув півконтиненту в гори в Киргізію. Побував в НЙ. Проїхалися в машині 4к км за два тижні мандрів. Зробили ірраціональний крюк в 500 км до друга в Байрот.
  • Машина. Одне велике дт ( погнутий капот, кардан, подряпані двері ) в Словаччині і повернення на такій же машині назад. І 20к км загалом за рік накатано
Але то все фігня. Головний підсумок 2017 року в мене вдома. Спить-їсть і хоче досліджувати світ. Тому все попередньо написано можна вважати фігнею. Загалом - один з найкращих років в мому житті, і це круто


Friday, April 29, 2016

Чуток Сан-Франківська для настрою пятниці

Під час моїх вилазок в Сан-Франківськ, я бачи троха транспорту - з дєтского періоду. Ну тіпа з фільмів голівудських про Каліфорнію і про всякоє такоє. Тому троха подумав сьогодні і вирішив коротенький пост з цими фоточками. Не усіма, а деякими.


Пожежна машинка і людіські. Хтось викликав їх, а я свотках. Уточнення викликах їх не я. Я штраф нє хачу. Правда крута і знайома?



Опа опа - трамвайчик! Коли я його побачив , я ледь не прифігів, реальнно ледь не виронив все, що було в мене в руках і тіко фотка і фоткав його.


Крутий правда?


На прощання його мордашка з боку



А це його браток - трамвай класічєскій со всіх фільмоу про Сан-Франківськ. Думав догнать його, але він просто стояв собі мирно

Sunday, April 24, 2016

Стенфорд

Одного разу я вирішив вийти зі свого скучного райончику і прогулятися на кампус гамериканського університетику. Найближчий був Стенфорд. Хочу сказати, що в той час там було троха зажарко - тому нічого супер пупер не помітив там.

З міста в уні веде стандартна доріжка , правда пальм багато , і тротуар є



Аж осьь зненацька велика галявина з якоюсь будівленю на горизонті ( там мене корейська сімя сплутала з аборигеном, та попросила сфоткатися )


 Людей не видко взагалі, як так сталось не знаю

 

Переступаю поріг цього святилища


І навіть не відаю куди б це мені піти


Вирішив піти трохи в бік  - ібо там були фігурки, які я сплутав з шахами, хотів пограти


Правда цікавий орнамент?


Опа-чік - люди!!! я нарешті зустрів так багато людей!


А ні - то просто студенти



Що я помітив - в них любов до таких арок


  
І до пальм - вони скрізь

 
Зрештою вже пізно і тре було валити домів

Wednesday, April 20, 2016

Python, в середині dict'a

Наступним, за що я взявся в пітончику розбирита аби понять проблеми перфоменсу був славнозвісний dict, гроза всіх мап та хеш-таблиць ! 

Оп оп оп!

В пітончику дікт - це проста хеш-мапа , зі своїми власними приколи , але все ж таки хеш-мапа. Тому якщо ви знаєте , що це таке то можете далі не читати. А якщо ні - то продовжуйте.

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

typedef struct {
    Py_ssize_t me_hash;
    PyObject *me_key;
    PyObject *me_value;
} PyDictEntry;

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

typedef struct _dictobject PyDictObject;
struct _dictobject {
    PyObject_HEAD
    Py_ssize_t ma_fill;
    Py_ssize_t ma_used;
    Py_ssize_t ma_mask;
    PyDictEntry *ma_table;
    PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, long hash);
    PyDictEntry ma_smalltable[PyDict_MINSIZE];
};


Тобто це вже на порядок складніше за ліст  ( структуру якого я досліджував ось тут ), але і на багато цікавіше , бо структура складніша. Давайте глянемо, що там в середині є такого:

  • ma_fill - це кількість акитивних комірок ( вільних і зайнятих ) плюс кількість видалених комірок
  • ma_used - кількість використаних комірок
  • ma_table - наш масив значень
  • ma_mask - розмір масиву мінус 1, для вираховування значення індексу комірки ( слота )
  • ma_smalltable - початковий масив довжиною 8! аве!!

Стає вже трошки зрозуміліше? Дікт так само як ліст, містить в собі всю інформацію про себе - розмір, кількість зайнятиз комірок, кільких видалених комірок і  масив обєктів які містять ключ/значення. Це все допомагає дікт більшість речей виконувати з мінімальною вартітю для нашого пітончика ( доступ по ключу до обєкта, добавлення елемента, взанвання кількості ключів дікта, видалення елемента тощо)ПОтже коли ми це все уявили треба подивитися як він насправді працює. І тут треба розглянути два пункти:


  • Ініціалізація словника
    • Під час будь-якого створеня словника ( чи то d = dict() , чи d = {}, чи d = {1:'one'} ) спершу викликається сішна функція PyDict_New(),  в результаті отримуємо будемо  створену структуру, що описана вище і з готовими комірками під 8 елементів (=

returns new dictionary object
function PyDict_New:
    allocate new dictionary object
    clear dictionary's table
    set dictionary's number of used slots + dummy slots (ma_fill) to 0
    set dictionary's number of active slots (ma_used) to 0
    set dictionary's mask (ma_value) to dictionary size - 1 = 7
    set dictionary's lookup function to lookdict_string
    return allocated dictionary object

    • відразу встановлюється значення використаних слотів
    • відразу встановлюється значення вільних слотів
    • ініціалізується lookdict_string функція
    • та встановлюється маска для нашого дікта


Я думаю тут все ясно, що відбулося і розказувати не має сенсу (^_^)


  • Під час добавлення елементу до такого дікта ця вся структура починає працювати власне як хеш-мапа  і розкривати всю її суть.
    • Добавлення елементу до словника виконуєтсья за допомогою такої структури
arguments: dictionary, key, value
returns: 0 if OK or -1
function PyDict_SetItem:
    if key's hash cached:
        use hash
    else:
        calculate hash
    call insertdict with dictionary object, key, hash and value
    if key/value pair added successfully and capacity over 2/3:
        call dictresize to resize dictionary's table

    • Під час добавлення пари ключ/значення викликаєтсья ще одна допоміжна функція PyDict_SetItem(). Ця функція перевіря, чи ключ ок для дікта і вираховує хеш для нього, а потім за допомогою insertdict() добавляє нашу пару та нові слоти  ( якщо заповненість 2/3 від загальної кількості слотів  - не питайте чому саме така кількість, навіть не знаю)
    • Для пошуку правильної комірки в дікті ( тобто тої куди має бути записаний ключ, або де він вже є ) - викликається lookdict_string() - вона по готовому хешу вираховує комірку для нашого ключа.
    • Під час добавлення ключа може бути ще один цікавий випадок - "колізія імен", співпадіння хешів для двох різних ключів. Таке відбуваєтсья досить рідко - але можливе. Отже якщо наша функція lookdict_string() знаходить комірку для  нашого ключа , але вона зайнята - то просто дивиться чи наступна комірка є вільною , і так поки вона не знайде вільну комірку.

Начебто все просто правда? тіко троха багато коду схожого на сішний (=.

Thursday, March 5, 2015

Pet project , part uno

Отже - після нового року я задався цілью постійно писати якісь домашні проектики ( = для себе та практики власної. Так я дуже багато працював зі статистикою то вирішив написати бібліотеку для вигрібання статистичних даних з гітхабу та гітлабу.  Ну типу - чувак логіниться через гіт і бачить кількість своїх реп, скіко їх форкнуто, скількі з них він форкнув, там кількість зірочок його реп. Ну також може побачити і куди і скільки він комітить - ну може там проектик застоявся якийсь, а він приділяє увагу там ще якомусь шайсу, наприклад для мене то корисно все було - побачив , що мій акаунт на гіті ващє який атстойний. А ще там можна подивитися кількість добавлень та видалень в кожній репі - інфа насправді досить корисна,  для девелопера особисто та для проекту загалом - це кількість добавлень та видалень в кожній репі. Це насправді досить слизька тема - оцінка роботки девелоперів, але як для піськомірки підійде , можна буде залогінитися і побачити в кого краща статистика.

Сам проект складався з двох частин - врапера для апішки гіта та гітлаба  - просте формування запиту і хендлання вже json респонзу. Та вебморда побудована на flask - прикольний мінімалістичний фреймворк, де все треба з нуля ( ну майже з нуля ) писати. А для відображення стат інформації - google charts.

В роботі з цим проектом в мене якраз виникли ішьюси ( що дуже добре, бо я його для цього і придумував ) - я дуже мало свого часу працював  з юайкою , і тому все застопорилося,  зазараз якраз продумую, що і де має бути. Та норм покопався в сорсах flask.

В результаті -  купу досвіду отримав при роботі з фласком і з тою з самою юайком, і зявилася ідейка наступного проекту.

Наступного разу нарешті викину той пост про дікт в пайтоні, якраз вау ефект після хабра пройшов і забувся,  ну і ще распішу чуток про фласк.

Ссилка на сам врапер апішки тут