Софт для роботи фрілансера

Примітивний набір інструментів для розробки, нульовий. Це те, що потрібно для того, аби почати вчитись, або виконувати мінімальні замовлення:

  • Операційна система на базі Windows — мінімум заморочок при старті;
  • IDE, редактор коду;
  • файловий менеджер;
  • віртуальний сервер — для роботи в офлайні та відладки примітивних речей;
  • тестовий хостинг для тестування в польових умовах;
  • браузер.

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

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

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

  • IDE ти приглядаєш таку, щоб підтримувала потрібні конфігурації, бажано, щоб останні можна було б швидко змінювати, в залежності від проекту;
  • Дбаєш про те, щоб не використовувати піратський софт. Частково з принципів, а частково тому, що перестаєш працювати з дому;
  • В якийсь момент зупиняєш вибір на Linux, коли визначаєшся з операційною системою. З одного боку відпадає питання ліцензійності, з іншого — софт максимально наближений до інтерфейсу роботи з сервером, до якого ти з часом звикаєш;
  • В якийсь момент знову починаєш послуговуватись віртуальним сервером: для роботи з фреймворками, або іншими мовами програмування. Проте, зупиняєшся, не на готових пакетах, а надаєш перевагу кастумній збірці;
  • Файловий менеджер налаштовуєш під себе, перестаєш зберігати там паролі, ставиш купу закладок, вивчаєш додатковий функціонал;
  • Браузерів кілька, при чому один завжди підключений через проксі сервер;
  • Віддалений хостинг переводиш з бюджетного варіанту на виділенку, або пристойний реселерський пакет;
  • Намагаєшся підняти свій сервак з гівна та палок. Витрачаєш час, щоб набити руку та краще зрозуміти темну сторону хардвару;
  • GIT. Спочатку зупиняєшся на чомусь простішому — SourceTree, проте потім переходиш до старої-доброї консольної версії;
  • Резервне копіювання. Обзаводишся віддаленим диском, де тримаєш різний непотріб.

Загалом, устаткування для роботи це не стільки софт, скільки час на інтеграцію в процеси. Пристойне позиціонування на ринку, навіть якщо мова йде про особистий бренд — це багатовекторна праця. Тому наступного разу ми ще поговоримо за маркетингову складову.

і за що я отриммував свої гроші….

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

Чому не можна пізнати основи “трошки” — після перших досліджень приходить розуміння рівня якості попереднього коду. Жити спокійно далі вже не вийде 🙂

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

Внутрішній вказівник масиву php

Кілька разів стикався з поняттям внутрішнього вказівника масиву array(): так званий “internal pointer” в php. Найчастіше про нього згадується в php-функціях обходу масиву: next(), prev(), current(), reset(), end(). А також команди обходу результатів з БД: mysql_fetch_assoc(), mysql_fetch_array().

Наскільки я зрозумів з прочитаного, internal pointer — елемент нижчого рівня мови, частина структури HashTable.  Він пересувається ітераторами циклів та вище перечисленими командами. Також, його наявність частіше використовують для пояснення роботи функцій.

Чи впливає позиція вказівника на виконання команд я не нагуглив.

Ринок. що я продаватиму наступні два місяці

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

Не знав я тоді багато… і в компаніях відповідали мені взаємністю 🙂

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

Ходити на співбесіди потрібно навіть фрілансерам. Проте, ми відхилились. Сьогодні я помітив, що все ще продовжую загравати з рекрутерами навіть при тому, що не планую найближчий місяць найматись, а також при тому, що ще не осилив кілька останніх публікацій із запланованої прокачки. Ваш покірний слуга відразу задетектив відсутність чіткої декларації намірів — тобто, Юрій Санич не знає, чого хоче…

Отже, щоб не смикатись на “перспективні” варіанти, давайте спробую визначитись, які ж наміри пріорітетні на наступні 7 тижнів:

  • дотиснути програму прокачки девелоперстких скілів — це важливо як для продажу себе компанії, так і в практичній роботі;
  • англійська — багато косяків з розмовним рівнем та часами;
  • 15 дрібних проектів — це моя поточна робота і потрібно якось жити 🙂
  • останнє в списку, але не за значенням — автоматизація хобі. Я винаймаю деякі приміщення, які просто простоюють. Створення розумного середовища навколо них допоможе оптимізувати витрати та прискорити зростання.

Детальніше про кожен з пунктів-намірів я ще писатиму в майбутньому. На разі, що я маю зробити, щоб виправдати матеріал:

  • менше смикатись в linkedIn та djinni. Спілкування з рекрутерами зараз не в пріорітеті;
  • не шукати нові проекти, а зосередитись на закритті поточних задач;
  • з фейсбуком я й так модний, але заходити теж варто не частіше двох разів на день.

 

Linux перша кров

Траплялось таке, що спочатку робите, а потім вже задаєтесь питанням: навіщо?

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

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

Так болтик за болтиком зібрався звір з тактовою частотою в 2.4 гГц, оперативкою в 512мб, хардом від старенького ноутбука та вентиляторним шепотом як в маленького кукурузника…

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

Все це було вчора, в неділю… В понеділок опісля роботи я підготував завантажувальну флешку, полистав мануали й почав установку. Перший вейл проявився, коли я через дві з половиною години зрозумів, що ставлю на скотину останню версію Ubuntu, вимоги якої в 4 рази, це 400 процентів, якщо що, перевищують апаратні можливості…

Ок, дві з половиною години в топку, а ми завантажуємо більш ліберальний дистрибутив 12-ї версії для ПК та готуємо нову флешку та ставимо по-другому колу. Півгодинки встановлення і ось у нас готова флеха з ubuntu-12.04.5.

Наступні дві години монітор дико мерехтів з лого операційки посередині. підозрюю, що я щось зафейлив з підготовкою флехи. Користувався до речі rufus, сподіваюсь, Вам вона послужить краще 🙂

UPD перезаписав дистрибутив, далі мерехтить як дідько. На відмітці трекера в 5 годин припиняю на сьогодні це нетребство

INSERT IGNORE — оновлення при існуючому записі MySQL

Якщо у вас тип сервера: MariaDB, то задача “вставити новий запис, або ж оновити якщо даний запис вже існує” легко виконується за допомогою команди INSERT IGNORE. Дана функція не видає помилку так як ON DUPLICATE KEY UPDATE

INSERT IGNORE INTO books
    (id, title, author, year_published)
VALUES
    (1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 0 rows affected (0.00 sec)

MySQL видалення об’єктів таблиці, дублікати яих не присутні в таблиці №2

Приводимо у співвідношення дві таблиці, видаляючи вкладеним записом з ikeaProductsStatistic ті товари, які не присутні в ikeaProducts

DELETE FROM ikeaProductsStatistic WHERE id not in (select id from ikeaProducts)

Мотивація, чорти б її взяли…

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

Відтак, якщо у Вас щось не виходить, отже ви ще не обрізали всі нитки, не обмізкували фінальний план та не спали останні мости. Спробую прояснити:

  • перебираєте вакансії, якщо Ви фрілансер — отже залишаєте варіант на корпоративні плюшки і, що хтось за Вас організує навчання-зростання;
  • метикуєте над хоббі-бізнесом в робочий час, отже, сподіваєтесь, що це хоббі позбавить потреби заробляти в принципі;
  • перевіряєте пошту частіше ніж за 40 хвилин — очікуєте на більш важливу задачу, ніж ту, що виконуєте конкретно зараз.

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

Дорожня карта бекенд-девелопера

Якщо хто раптом заблудився, або звернув не туди, то мудрі люди накидали тут доволі внятну навігацію.

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

Варто зауважити, що матеріальчик є продовженням попередньої теми.

Функція LENGTH, Mysql — визначення довжини поля

стоїть завдання паерекласти описи 7000 + товарів, при чому описи розбиті на частини. Загалом виходить ~40 тисяч записів різного калібру.