Troubleshooting Team City NuGet Installer

So you are troubleshooting your NuGet packages retrievement or installing in TeamCity? It is very hard to do because DLLs are cached and NuGet engine does not try to retrieve packages, which are already installed. This leads to the situation where you change some settings to see what happens but nothing really happens. I had this same situation while setting NuGet Installation build step. I was changing the set of NuGet sources, but nothing changed. Then I just removed all NuGet sources, but builds were still successful. I had almost gone crazy, but then I recalled – this kind of problems are usually related to some kind of cache. First I checked if there are any global settings of NuGet in TeamCity, did not find any. And after a while I have learned – in order to be sure that your packages installation runs completely, you have to:

  1. Delete  “packages” folder in your solution. This is to ensure that NuGet actually downloads something and puts it in right place;
  2. Delete all files in C:\Windows\SysWOW64\config\systemprofile\AppData\Local\NuGet\Cache folder (this is for 64-bit architecture, for 32-bit machine everything is in System32 folder). When Team City sees package ID in packages.config file it first looks in this folder for cached packages;
  3. Also, check what is in C:\Users\alexa\AppData\Roaming\NuGet\NuGet.Config if you have Visual Studio installed. Visual Studio uses this file to store NuGet configurations, because they are not saved anywhere in project or solution files.
Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Як я підтримую свою продуктивність

pomodoro time mac iconУ нашому сьогоденні, коли життя вирує навколо нас, багатьом дуже важко зосередитися на тому, щоб виконувати свою роботу. А особливо тоді, коли робота не сама цікава (будь яка робота такою стає з часом, приїдається).

Навколо нас постійно люди, що потребують нашої уваги. Електронна пошта, яку завжди кортить перевірити. Facebook, на який хочеться зайти і перевірити, чи хтось лайкнув нашу останню фотку котика. YouTube відео останнього приколу у виконанні наших туповатих політиків. Новинні сайти, які постійно публікують інформацію де і що відбувається.. Кава. Чай. Курілка… Погані новини – якщо ми самі не подбаємо про свою власну продуктивність, про неї не подбає ніхто.

У цьому дописі, хочу поділитися враженнями про техніку, яку я відкрив для себе кілька місяців тому і дотепер її використовую. Надзвичайно проста, цікава і не без прикола. Називається техніка помідора. Суть її полягає у тому, щоб виконувати помідори. Помідор – це 25 хвилин зосередження виключно на одному завданні під рукою. Нічого з того, ще перелічено вище, під час помідора робити не можна. Не можна навіть природні потреби справляти, бо вони також відволікають. Після кожного помідора – перерва 3-5 хв. Після кожного четвертого помідора – перерва 15 хвилин. От і все :-).

Цілком припускаю, що не кожному така техніка підійде. Хтось і без неї достатньо дисциплінований/мотивований і гарує по 10 годин на добу, а комусь усі ці практики продуктивності здаються дитячою забавою. Але якщо мені техніка помідора допомогла підвищити власну продуктивність (абсолютно суб’єктивно, я не проводив ніяких вимірювань), то, напевно, може допомогти й іншим. Варто спробувати. Поділюся своїми враженнями, може когось замотивує.

  • Якщо розбити робочий час, 8 годин, на помідори, то вийде близько 15 помідорів на день. Але зробити 15 помідорів щодня протягом тижня (75 помідорів) і зберегти психічне здоров’я дуже важко. Відверто кажучи, за 4 місяці використання цієї практики я не спромігся видати бодай один тиждень з 55 помідорами. Коли мені вдається день з 12 помідорами – я почуваюся вкрай виснаженим;
  • В офісі з помідорами важкувато, але тим не менше, якщо колегам пояснити цю систему, цілком можна видавати по 10 помідорів на день. У мене виходило. Але майже ніколи не виходило 50 помідорів на тиждень. Завжди трапляються дні, коли забагато часу витрачаєш на наради. Зараз я працюю з дому і 50 помідорів на тиждень – запросто. Тож якщо міряти цією метрикою, то можна стверджувати, що програміст ефективніший в ізоляції ніж в офісі (згоден, не таке велике відкриття :-));
  • П’ятихвилинна перерва може дратувати, якщо саме заглибився у процес кодування. Я в таких випадках її майже пропускаю. Але скоріш за все пропускати більше ніж дві перерви не вийде, концентрації не вистачить. Зате які переваги дають ці перервочки! Я, наприклад, завжди їх використовую для виконання вправ, у тому числі й для очей. Виявляється за 5 хвилин можна їх чимало зробити. Можна просто підвестися і подивитися на дальню точку – уже розвантаження для очного м’язу. Спостерігав також цікавий ефект. Часом зациклюєшся на завданні, б’єшся над ним, але намарно. І тут спрацьовує таймер. Встаєш, розминаєшся, дивишся на ліс вдалечині, і раптом… клік, і приходить в голову ідея як розв’язати проблему. Тобто техніка помідора дозволяє не зациклюватися, а відступити трохи назад і подивитися на проблему під іншим кутом;
  • Спостерігав я і цікавий психологічний ефект. Трапляються дні, коли перекидаєшся постійно з одного завдання на інше, а ввечері відчуваєш втому і незадоволеність днем. Поставлені завдання ніби з місця не зрушали. Починаєш нервувати й думати, що треба перепрацювати кілька годин. Такі відчуття ніколи не з’являються коли виконано 10-12 помідорів. Навпаки, після 10-12 помідорів є відчуття завершеності, відчуття досягнення, приємної виснаженості. І, так би мовити, із почуттям виконаного обов’язку можна йти відпочивати та розважатися.

Кілька слів про інструменти. Техніка помідора так називається тому, що її автор використовував кухонний годинник у вигляді помідора для відстежування 25-хвилинних проміжків часу. Тобто звичайного таймера цілком достатньо. Я все ж пішов далі й використовував ось цей таймер помідорів. Але зрештою зупинився на kanbanflow, де я записую свої завдання і приєдную виконані помідори до певних завдань. Тож за бажання техніку помідора можна також використовувати як техніку відстежування часу та оцінювання трудомісткості завдань.

 

 

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Вчителювання у кар’єрі програміста

Я дозволю собі розділити фахівців-програмістів на дві великі категорії: 1) фахівці, що відчувають дискомфорт і неприємні емоції від викладання чогось іншим; 2) фахівці, які залюбки діляться своїми знаннями або, принаймні, не відчувають дискомфорту, коли справа доходить до викладання. Мислення фахівців з першої групи, анти-вчителів, приблизно таке: “Чому я маю ділитися важко здобутими знаннями?” та “Замість того, щоб ділитися тим, що я знаю, краще я дізнаюся ще щось і напишу реального коду для клієнта”. Я не маю нічого проти такого мислення. Так налаштовані багато дуже кваліфікованих і ефективних фахівців, які творять чудеса проводячи руками по клавіатурі. І хоча я думаю, що відмовою від вчителювання вони шкодять своїй кар’єрі, яка за інших умов була б ще блискучіша, їм краще не викладати. Просто тому, що це їх дратує і змушує почуватися кепсько, а здоров’я важливіше за усе. Гарна новина у тому, що більшість програмістів усе ж таки належить до іншої категорії, категорії вчителів, або потенційних вчителів. Адже людина все ж любить говорити й ділитися тим, що їй по-справжньому цікаво. А програміст особливо. Спробуйте у самого запеклого інтроверта розпитати (краще за пивом, аби він розслабився) про його хобі-проект і самі в цьому переконаєтесь.

Однак мало хто наважується з’явитися перед аудиторією і навчати. Що ж зупиняє? Сором’язливість та брак мотивації. Про сором’язливість. Програмісти страшенно сором’язливі люди (ну нехай не всі, але більшість), а все тому, що професія вимагає постійного навчання. А ми знаємо, що чим більше вчишся, тим більше розумієш, що нічого не знаєш. Тому з’являється цілком зрозуміле небажання вчити тому, що розумієш, що сам знаєш не достатньо. Але згадайте скільки разів в університеті на лабораторних роботах ви задавали питання саме своїм колегам студентам, які так само, як і ви, навчалися і не були експертами. Психологічно легше запитати людину, яка разом з тобою проходить шлях навчання, а не експерта. Тому варто проковтнути скромність і якщо хочеться навчати – слід йти і робити це. Ніхто не знає всього. Потрібно лише трішечки знати більше ніж аудиторія, і цього достатньо. Так, можуть задати запитання, відповіді на яке ви можете не знати. Але хто знає все? Гадаєте експертам не задають таких запитань? Просто не претендуйте на експертизу, а визнайте, що вам треба вивчити глибше це питання, справді вивчіть його і дайте відповідь пізніше (наприклад, електронним листом або дописом у блозі).

Мотивація. Навіщо вчителювати програмісту? І так завдання виконує і платню отримує. Я б стисло сформулював причину так: для більш повного і цікавого професійного життя та розвитку кар’єри. А розлого розгляну такі причини/стимули:

Стати кращим програмістом. Програмування – це не просто інженерна діяльність. Це, якщо можна так висловитися, педагогічно-інженерна діяльність. Фундаментально ми формалізуємо процедурні (імперативні) знання так, щоб машини могли користуючись цими знаннями виконувати поставлені завдання. Тобто у певному сенсі ми навчаємо машину. Але важливіше викласти ці процедурні знання так, щоб інша людина максимально точно і швидко їх зрозуміла. У цьому є прямий економічний зиск: менше часу на читання коду -> більше часу на нову функціональність, що має цінність для клієнта. Тож щойно ви сіли вранці за клавіатуру, ви уже вчителюєте, і наскільки ви це добре робите залежить від того, як часто ви вчителюєте перед людською аудиторією. Хочу зауважити тут, що я маю на увазі не лише класичне вчителювання, типу викладач і група студентів. Вчителюванням може бути й скрінкаст, і подкаст, і допис у блозі, і вебінар, і коучінг джуна (junior developer :-)). Зараз існує дуже багато можливостей і форм вчителювання.

Гарно опанувати технологію/практику програмування. Кажуть, ніби щоб по-справжньому опанувати якусь тему, слід на цю тему написати книгу. А що таке книга для автора, як не спосіб поділитися знаннями? Програмісти мусять постійно навчатися, щоб залишатися потрібними на ринку праці й викладання мало не єдиний спосіб закріпити отримані знання. Можна заперечити, що багато практики закріпить знання. Так, це правда, вчителювання – то марнування часу, якщо крім нього ви не практикуєте як професійний програміст. Але якщо ви маєте гарну практику за плечима, вчителювання дозволить краще зрозуміти і запам’ятати тему, систематизувати знання, зрозуміти глибинні залежності та структуру понять і концепцій. Наприклад, ви можете мати багато досвіду в JavaScript та C#. Тепер спробуйте комусь пояснити чому JavaScript в першу чергу об’єктно-орієнтована, а не функціональна мова програмування. Спробуйте пояснити чим фундаментально відрізняються об’єкти від замикань у C#, що спільного між делегатами та інтерфейсами, що це взагалі таке, і ви відчуєте, як ваш рівень і глибина розуміння предмету росте. Інший приклад. Я працював уже два роки на APL коли почав викладати цю мову програмування іншим, і все ж мав важкі часи, коли готувався до лекцій. А після закінчення курсу по APL я став відчувати, що краще розумію мову, краще можу впоратися з конструюванням ідіоматичного коду на ній.

Зробити наступний крок у кар’єрі. У кар’єрі програміста дуже ймовірно може статися… глухий кут? Вивчення нових технологій заради нових технологій? Уже не цікаво, адже кожна нова – це по суті добре забута стара + кілька плюшок. Стати архітектором і сидіти у вежі зі слонової кістки, малювати діаграми та днями сидіти на мітингах? Не те, адже хочеться писати код. Менеджмент? Хай Бог милує! Чим же тоді зайнятися, куди розвиватися? Вчителювання може стати відповіддю. Тут людина може знайти вихід накопиченій за багато років енергії, мотивацію і сенс у поглибленні своїх знань. Адже людина – соціальна істота і може віднайти сенс своєї діяльності у вчителюванні та допомозі іншим опанувати цей непростий фах. Тепер, будемо відверті, вчителювання не надто високооплачувана діяльність. Але зовсім не обов’язково покидати роботу програмістом. Можна викладати й на робочому місці, після роботи, можна стати консультантом. Зрештою, можна погодитись і на постійне вчителювання, адже за роки роботи програмістом ви надбали достатньо і вам не потрібні уже високі доходи, чи не так?

Емоційно відпочити. Існує три типи навантаження: фізичне, емоційне та інтелектуальне. Людина відпочиває, коли отримує навантаження іншого типу, ніж те, що вона отримує під час роботи. Програміст отримує надмірне інтелектуальне навантаження і шкідливий фізичний стрес. Тож відпочинок має бути фізичним і емоційним. Якщо з фізичним зрозуміло, то як отримати емоційний відпочинок? Хто заперечуватиме, що робота програміста монотонна? Тобто щодня те саме місце і той самий комп’ютер, і мало що відбувається. А надто якщо програміст працює сам, віддалено. Змінити обстановку і відпочити емоційно можна вчителюванням. У цьому випадку вчителювання має бути не віртуальним. Потрібно обрати аудиторію, до якої треба поїхати. Це може бути конференція, тренінг, семінар або курси. Таким чином ви знайомитеся з новими людьми, буваєте в нових місцях і переживаєте такі потрібні нові емоції.

Поділитися знаннями та розширити мережу соціальних контактів. Не кожному хочеться ділитися знаннями, але багато хто отримує від цього величезне задоволення, бо як я вже казав: людина – соціальна істота. Багатьом з нас також важливо мати широку мережу соціальних контактів для спілкування, в тому числі й на професійні теми. Часто хочеться просто поділитися тим, що вивчив, чи тим, яку проблему розв’язав, або тим, яка цікава ідея спала на думку. Одним словом, тут немає раціональної причини, крім біологічної. Просто хочеться, просто тому, що соціалізація і взаємодія дала нам процвітання як біологічному виду. Тут є і цікавий побічний ефект. Ваші студенти з часом стають фахівцями, що приймають рішення. Це може дуже посприяти вашому наступному працевлаштуванню чи під час пошуку наступного клієнта.

Прорекламувати себе. Вчителювання – це чудовий інструмент маркетингу. Мало того, що ваша аудиторія дізнається про ваше існування, про ваші фахові та комунікативні здібності, так вона ще й дізнається у чому ваші інтереси, які технології ви опанували та на якому рівні. Зрештою, потенційні роботодавці та замовники розуміють, що ви не просто робите роботу за гроші й викидаєте з голови усе, щойно настає шоста вечора, а захоплюєтесь тим, чим займаєтесь, маєте так би мовити пристрасть (passion). Роботодавці дуже таке люблять, адже вони хочуть найняти людину з високою внутрішньою мотивацією, яка окрім основної роботи ще й буде сприяти поширенню знань і компетенцій в компанії. Зверніть увагу, що найпопулярніші у світі програмісти, які зробили своє ім’я не продуктом чи компанією (як Лінус Торвальдс чи Біл Гейтс, хоча, гадаю, і вони немало вчителюють), наприклад, хлопці, про яких я писав, досягли популярності в основному через вчителювання та активне просування своїх учительських та наставницьких послуг.

І нарешті, реалізувати професійну відповідальність за розвиток індустрії в цілому. Індустрія програмного забезпечення зростає шаленими темпами й щоп’ять років кількість програмістів збільшується удвічі. Це означає, що ветеранів програмування, яких між тим активно знищують менеджерські позиції, пенсії, хвороби й тому подібні речі, дуже мало. Таких, що програмують більше 11+ років, всього 24.2%. А про 20+ годі й казати. Тому відповідальність тих, хто входить у ці 24 відсотки, забезпечити становлення інших 76%. А це ж в середньому по 3 студенти/підмайстри на кожного!

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail