Десь рік займався спортивним ножовим боєм. Якось за тиждень до Нового року 2019 ми, разом із нашим сенсеєм, зібралися невеликою теплою компанією вдома в одного з наших хлопців.
"Передноворічні посиденькі ножовиків"
#knives
"Передноворічні посиденькі ножовиків"
#knives
"Взаємодія з системою контролю версій. Інструкція для новачків".
Зображення взято десь з Хабру. Люблю цю картинку.
#git
Зображення взято десь з Хабру. Люблю цю картинку.
#git
Доречі, про системи контролю версій.
Вчора вперше за п'ять років знайомства з git мені згодився reflog. По роботі.
Картіна маслом.
Запушив коміт з двома новими файлами у свою feature-гілку. Дивлюся - а один з них мені і не потрібен. Видалив його, а потім, щоб не створювати нового коміту та не залишати непотрібний файл в історії, роблю
1.
Отож. Не той.
Маємо: В локальномі репозиторії файла нема (бо amend). У віддаленому - теж (бо force push). А у файлі був SQL строчок на п'ятнадцять, що шліфувався зо дві години.
Перша секунда після: йо...
Друга секунда: о, в мене ж є reflog, я про нього і на мітапі розповідав.
1.
3.
4. маю "втрачений" файл в локальному репозиторії
5. ???
6. профіт!
Мораль.
Git ніколи сам по собі не видаляє дані. І навіть після переписування історії можна знайти "втрачене" (але поки gc на репозиторії ніхто не запускав).
#git
Вчора вперше за п'ять років знайомства з git мені згодився reflog. По роботі.
Картіна маслом.
Запушив коміт з двома новими файлами у свою feature-гілку. Дивлюся - а один з них мені і не потрібен. Видалив його, а потім, щоб не створювати нового коміту та не залишати непотрібний файл в історії, роблю
1.
git commit --amend
2. git push --force origin my-feature
Здогадайтеся, чи той файл я видалив?..Отож. Не той.
Маємо: В локальномі репозиторії файла нема (бо amend). У віддаленому - теж (бо force push). А у файлі був SQL строчок на п'ятнадцять, що шліфувався зо дві години.
Перша секунда після: йо...
Друга секунда: о, в мене ж є reflog, я про нього і на мітапі розповідав.
1.
git reflog
2. знаходжу хеш того коміту, в якому був потрібний файл3.
git checkout хешКоміту -- шлях/до/файлу
(тільки не загубіть пробіли до і після двох дефісів)4. маю "втрачений" файл в локальному репозиторії
5. ???
6. профіт!
Мораль.
Git ніколи сам по собі не видаляє дані. І навіть після переписування історії можна знайти "втрачене" (але поки gc на репозиторії ніхто не запускав).
#git
Булєва логіка - штука логічна. Але в реляційних базах є старий добрий
Так, ми пам'ятаємо, шо nullable поле тре перевіряти на
Так, ми пам'ятаємо, шо
Ще ми пам'ятаємо, шо
Цікаво, правда?
Та ОСОБЛИВО це, млять, стає цікавим, коли в nullable полі лежить масив і вам треба чекнути щось по типу "чи є значення у цьому масиві":
Причому цей предикат ще пов'язаний через
Не завжди nullable поля-массиви це зручно. Зробіть
І тоді
За мотивами написання SQL-міграції, в якій фігурує nullable поле-массив.
NULL.Так, ми пам'ятаємо, шо nullable поле тре перевіряти на
IS NULL (IS NOT NULL) і ніяк не на =NULL (<>NULL), бо в результаті замість бажаного true або false завжди отримаємо NULL.Так, ми пам'ятаємо, шо
якийсьОператор(NULL) та NOT якийсьОператор(NULL) знову таки дають одне й те саме - NULL (звісно, якщо якийсьОператор не з тих, що вміють поводитися з NULL - IFNULL, COALESCE...).Ще ми пам'ятаємо, шо
NULL є такимсь "третім елементом" у булєвій логіці РСКБД:true OR NULL —> true
false OR NULL —> NULL
true AND NULL —> NULL
false AND NULL —> false
(принаймні в PostgreSQL та MySQL)Цікаво, правда?
Та ОСОБЛИВО це, млять, стає цікавим, коли в nullable полі лежить масив і вам треба чекнути щось по типу "чи є значення у цьому масиві":
value=ANY(arrayField).Причому цей предикат ще пов'язаний через
AND або OR з іншими. Якось по типу( condition OR NOT value=ANY(myArray) )Мораль.
AND
( condition OR NOT value=ANY(myArray) )
Не завжди nullable поля-массиви це зручно. Зробіть
NOT NULL та зберігайте пустий масив замість NULL.І тоді
ANY(myArray) поверне канонічне true або false, яке прозоро може бути поєднано з іншими предикатами. І буде вам щастя.За мотивами написання SQL-міграції, в якій фігурує nullable поле-массив.
Друг підігнав. Як заміну для жетона безвиході у "Стародавньому Жаху". Друге фото - в ультрафіолеті.
ЗD-друк.
#boardGames
ЗD-друк.
#boardGames
