CoderLIfe – Telegram
CoderLIfe
35 subscribers
33 photos
1 video
10 links
Немного про жизнь кодера, интересности и рутина. Про IT в целом. Свое мнение по некоторым вопросом. Немного кода. Минимум заумности. Может немного юмора.
#it
#php
#develop
#javanoscript
#coder
#itlife

Админ @LimboFog
Download Telegram
Как не правильно документировать код.
1. Написать MVP.
2. Получить обратную связь и правки.
3. Внести правки, отрефакторить код.
4. Написать комментарии.
Как правильно документировать код.
1. Начать писать писать комментарии к функциям на этапе начала разработки. То есть написал функцию и сразу задокументировал ее. Ок все правильно сделал.
2. После того как свеженькая функция задокументирована сразу можно начать ее править, естественно уже написанные комментарии при этом менять не нужно, ну или максимум поменять только при первой правке, больше смысла не имеет.
3. Понять что написанная функция не нужна в принцыпе и удалить ее.
4. Нет все таки нужна! Написать заново, но наученный прошлым опытом решить задокументировать потом.
5. Дописать первую версию фичи, попытаться задокументировать то что было пропущено в процессе разработки.
6. Получить порцию правок, начать внедрять их не обращая внимания на комментарии.
7. Попробовать выпустить релиз.
8. Понять что все работает не так, в панике править имеющийся код и дописывать новые функции не обращая внимание на комментарии.
9. Тешить себя мыслью, что будет время для рефакторинга.
10. Начать разработку новой фичи.
Прогресс ради прогресса
#личноемнение

1.
Фейковое развитие 🏗🏕
====================================================
Задумался тут вот о такой штуке как развитие веба. Безусловно он сейчас, как говориться, шагнул очень далеко, и получил широкое развитие. Но вот только на мой взгляд он идет по экстенсивному пути. То есть несмотря на то что все разработчики, все издания, гайды, приложения и т.д. пишут о необходимости минимизации трафика, оптимизации использования ресурсов, сжатии и обфускации кода, оптимизации картинок и много еще всего такого. Вот несмотря на все это по факту мы ничего не оптимизируем, а тупо увеличиваем мощности, расширяем каналы трафика, увеличиваем скорости интернета, увеличиваем объемы памяти. Все это конечно здорово что интернет становится быстрее, и компы становятся все мощнее, но из за того что в разработке мы только лишь говорим об оптимизации, но по большому счету ей не занимаемся, мы не видим существенного улучшения от этого.

2. Пруфы ⚙️📺
====================================================
Приведу небольшой пример который немного визуализирует то что хотел сказать. 10 лет назад я мог без труда зайти на ютубчик и смотреть на нем любимые видосики я могу сделать это и сейчас, собственно ни чего не изменилось все как и 10 лет назад. Но есть одно отличие 10 лет назад я делал это на компе у которого было внимание 512 MB оперативы. Да и по тем меркам это был хлам, но тем не менее видосики на нем я смотрел без особых проблем. Скажу больше, я на нем не только их смотрел но и монтировал и рендерил. На моем нынешнем ноуте имеется 8 GB оперативной памяти, что в 16 раз больше. При сравнении кажется как это дофига, но хотя давайте взглянем. Просто два открытых поисковика в хроме сейчас занимают 400 мегабайт моей оперативы, на что! что блин на главной странице Яндекса и Гугла такого что может весить 400 мгабайт (ну ладно, если быть честными до конца сами страницы весят по 80 и 40 метров, остальное это движок хрома, но все равно я блин просто открыл браузер и лишился 400 мегабайт). Ок давайте посмотрим какой нибудь видосик. Что правда? 570 мегабайт для трех вкладок? Ок на своем старом компе посмотреть это видео нормально мне уже не удастся. Да и на современном если я активно работаю, например у меня открыт пхпшторм, пару вкладок в браузере и в другом браузере фоном играет музыка, я уже испытываю затруднения. Про рендеринг видео говорить не приходится. То есть по сути что раньше что сейчас я могу выполнять одни и те же задачи причем с одинаковой загрузкой компьютера.

3. Сейчас научу как надо 😂📚
====================================================
Что-ж это не радует даже несмотря на лучшее качество видео и прочие и т.д. Все таки хотелось бы чтобы по мере прогресса одни и те же задачи становились легче и занимали относительно меньше ресурсов. Что я хочу сказать - если 10 лет назад на среднем компе я мог монтировать видео среднего для того времени качества, то сейчас на среднем компе я хочу монтировать 2 видео среднего для настоящего времени качества. Это называется интенсивный рост, то есть качественный. Это прогресс здорового человека а не просто тупое увеличение мощностей.
Немного утрированная мысль конечно но все же думаю имеет под собой определенное здравое зерно.
Многие новички не уделяют должного времени на изучение GIT перед тем как начать свою карьеру в разработке. Из-за этого приступив к командной разработки, они могут доставить много головной боли и себе и всей команде. Начиная с попадания в коммиты каких-то левых файлов и заканчивая затиранием измененией своих коллег. Ох как это доставляет, когда смотришь коммит джуна и спрашиваешь - "а зачем ты удалил какую то функцию из ядра проекта?". Ответ - "я там ни чего не трогал". Ну классика же). Или когда кто то путается в своих же фичах и бранчах и теряет изменения. Ну это ли не веселье - всей командой отыскивать и восстанавливать его изменения. Это не для обиды написано или чтобы над кем то посмеяться, а для того чтобы обратить внимание на такой важнейший инструмент как GIT.
Приведу буквально 5 команд которые вы должны знать на отлично, чтобы избежать этих проблем.

1. Клонирование репозитория. Понимать разницу между работой с репозиторием по https и ssh. Уметь настроить доступ по ssh. Команда git clone

2. Создание, удаление, переключение между ветками. Особое внимание тут нужно уделить пониманию как ведут себя ваши не закомиченные изменения при переключении между ветками и создании новых веток. git branch, git branch -d, git checkout

3. Понимание разницы между локальной и удаленной веткой. Синхронизация с удаленной веткой. Подтянуть, запушить изменения. git pull , git push

4. Понимание состояний изменений. Незакомичено, добавлено в индекс, закомичено. Умение их отменить и добавить. git commit, git checkout, git add, git reset

5. Переключение между между коммитами, понимать что такое HEAD git checkout

6. Это уже в виде факультатива, не раз видел как разрабы проработавшие больше года не могли сменит адрес или имя ссылки на удаленный репозиторий. git remote -v git remote add git remote get-url

Если вы будете кристально прозрачно понимать эти концепции - цены вам не будет на начальных этапах. Удачи!
Шаблонизаторы

Всегда недолюбливал синтаксис шаблонизаторов в PHP. Ну вот хоть убейте не вижу в них большого смысла. Вот как раз недавно наткнулся на вот такой вот кусок кода в пыховском файле. Там конечно намешена и логика и отображение и в целом этот код не очень, но на нем можно хорошо проиллюстрировать мысль что не так сильно уж шаблонизаторы упрощают жизнь.
Вот кусок этого кода на PHP:

//PHP - вытащил пример из реального кода
<? if $user['balance_type']!=2 { ?>
<div class="panel panel-default">
<!--какой то html-->
</div>
<? } ?>

А вот как он бы выглядел если бы был написан с использованием шаблонизатора TWIG:

//переписал его на TWIG (разница небольшая)
{% if balance_type !=2 %}
<div class="panel panel-default">
<!--какой то html-->
</div>
{% endif %}

И вот хоть убейте меня не вижу я тут большой разницы, ну эти два говнокода абсолютно одинаковые и ни как шаблонизатор не сделал из него что то похожее на "best practices" код.

Смысл в том, что сам по себе шаблонизатор не делает код сильно понятнее если к этому не стремиться. Просто переписав "лапшу" на шаблонизаторе она не перестанет быть лапшой.

Вот например не мой взгляд код который действительно понятный и лаконичный и на PHP и на TWIG:

//php
<div class="panel panel-default <?=$is_none?>">
<!--какой то html-->
</div>

//twig
<div class="panel panel-default {{ is_none }}">
<!--какой то html-->
</div>

Тут в переменной передается просто имя класса которое ставить например блок в display: none. Подойдет конечно не для всех случаев но смысл думаю ясен.
#продвижениебизнеса
#оффтоп

Ха-ха
Американец продал свой пикап автосалону и не снял с него рекламу своего бизнеса. Ну и где же он его увидел в следующий раз? Конечно же у террористов.
С зениткой в кузове!

После этого мужик получил много звонков в свою фирму)))
Возьмем на заметку как новый рекламный канал.
🥳👏👍
В последнем релизе Telegram ввел некоторые новые фичи, наиболее значимой и не побоюсь этого слова долгожданной из которые являются папки. Когда эту возможность только анонсировали - очень ждал ее, потому как - это сильно упростит жизнь и позволит систематизировать чаты.

❗️❗️❗️🤦‍♀️🤦‍♂️🤷‍♀️🤷‍♂️
И вот релиз, и вот первые разочарования. Ну правда, может это я конечно что то не допонял, но вот такой странной реализации этого функционала ни как не ожидал. Если создать папку и положить в нее какие то чаты то я естественно ожидаю что эти чаты пропадут у меня из общего потока и будут отображаться только в этой папке. Но почему то разработчики посчитали такое поведение неправильным. И сделали так, что после того как я засунул всякие спамные чаты в отдельную папку они мало того, что не пропали у меня из общего потока, так теперь еще и сама папка мне сигнализирует что в ней лежат непрочитанные сообщения. Блин ну как так то.

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

❤️🌈Все равно Telegram крутой, может когда то и переделают)))
#лайфхак

Иногда бывает нужно в одном запросе соединить две таблицы по связи один ко многим, но не так как это сделает JOIN, соединив одну строку с несколькими связанными. Нужно чтобы получилась одна строка в которой есть поле содержащее строки из связанной таблицы.

Тут можно сделать 2 запроса и потом их обработать нужным образом, или если вы используете фреймоворк там это тоже реализовано, но все равно там делается 2 запроса которые потом уже обрабатываются.

Вот способ как можно это сделать в одном запросе. Для этого нужно будет использовать возможности mySql по работе с Json. А именно функции GROUP_CONCAT - эта функция конкатенирует результаты всего запроса, и функцию JSON_OBJECT которая создает Json строку.

Допустим имеем две следующие таблицы:
ORDERS
+----+------——-+
| id | name |
+----+---——----+
| 1 | ivan |
| 2 | elena |
| 3 | anonim |
+----+----——---+

GOODS
+----+-----———------+------—----+
| id | noscript | order_id |
+----+-------———----+----—------+
| 1 | phone | 1 |
| 2 | headphones | 1 |
| 3 | laptop | 2 |
| 4 | keyboard | 2 |
| 5 | camera | 3 |
+----+--------———---+------—-----+

Они связаны через поле goods.order_id. Предположим что мы хотим получить все товары которые заказала Елена. Чтобы у нас были такие поля order_id, order_name, order_goods. В поле order_goods будут лежать все строки из таблицы goods связанные с данным заказом.

Запрос будет выглядеть вот так:
SELECT *, (
SELECT GROUP_CONCAT(
JSON_OBJECT(
'goods_id', id,
'goods_noscript', noscript
)
) FROM goods WHERE order_id = ord.id) as goods
FROM orders ord
WHERE id = 2

В результате в поле goods мы получим валидный Json со всеми товарами из таблицы
{
"goods_id": 3,
"goods_noscript": "laptop"
},
{
"goods_id": 4,
"goods_noscript": "keyboard"
}
Небольшой кейс, поможет предотвратить некоторые баги

Если при написании запросов к базе вы используете чистый SQL, то в запросах на INSERT старайтесь всегда указывать описание полей в которые идет вставка, даже если вы вставляете данные во все поля таблицы.

Вот такой запрос будет более предпочтительнее
INSERT INTO users_table 
(field1, field2, ..., field_last)
VALUES (val1, val2, val3, ..., val_last)

Чем вот такой
INSERT INTO users_table
VALUES (val1, val2, ..., val_last)

⁉️Почему? Потому что во втором случае если вы решите в таблицу users_table добавить например еще одно поле, то вам нужно будет и в запрос добавить еще одно значение, а найти все такие запросы не всегда бывает просто. В первом же варианте при таком раскладе в новое поле при инсерте будет записано дефолтное значение, второй вариант выкинет ошибку.
This media is not supported in your browser
VIEW IN TELEGRAM
#забавы

Очень забавный проект на js. Даже несмотря на то что пока компонентов не так много, выглядит все очень лампово. Я лично минут на 40 залип экспериментируя и сочетая компоненты. В итоге изготовил вот такой вулкан, который конечно же уничтожит прекрасный живой мир).

Есть также возможность увековечить свою поделку 🤣🤦🏻‍♂️

Вот тут песочница

Вот его GitHub
Почта на десять минут

📍📬Иногда бывает очень нужно зарегистрироваться на каком либо ресурсе повторно, но создавать для этого отдельную почту просто лень. В таких случаях будет очень полезен данный сервис. Он предоставляет вам рандомный адрес на 10 минут. Если 10 минут мало то его можно продлевать. Если нужен другой адрес, пожалуйста сервис предоставит еще один.

В общем штука может быть крайне полезна 👍
https://10minutemail.net/
Наш не ответ "Кремниевой долине"
🚷 => 🤖
Тут недавно Инополис выложил сериал про программистов. Говорят что снят самими программистами, ну это конечно же не точно и проверять я это не буду. По крайней мере режиссер и актеры вроде бы как профессиональные. Но к сценарию программисты все же думаю руку приложили.

В сторону глупые человеки)
📻 => 📺 => 💻
Но не в этом суть. Посмотрел первые несколько серий и надо сказать мне понравилось. Про реализм говорить не буду, ну его этот реализм, тут все таки кино). И вот прям и сценарий нормальный, понравилось что не стали копировать "Кремниевую долину", получилось интересно. И актеры не раздражают. В общем прикольный сериал получился, пока было не стыдно смотреть. Надеюсь и дальше все будет ок.

Сцена с "питанием" прям плюс)))

Посмотреть можно тут
Родные костыли

🚴‍♀️🚲🚲🚲🚲🚲🚲🚲🚲🚲
Бывают костыли двух видов. Одни хотя бы работают. Ну я думаю не стоит объяснять что не так с левым примером и при каких обстоятельствах он будет работать не правильно.

⚙️🤦🏻‍♂️
Ну вот зачем было это придумывать, когда первая же поисковая ссылка выдала просто отличную реализацию. Да типа нельзя для всего найти готовое решение, и свои решения тоже надо уметь писать, но блин они же должны хоть работать, пусть криво, пусть неочевидно но хоть как. Это так сказать необходимый минимум для существования велосипеда.

Вот кстати нормальная реализация:
Склонение числительных в javanoscript
This media is not supported in your browser
VIEW IN TELEGRAM
#забавы

Интересная рисовалка

🎨 Попалась вот такая интересная рисовалка. Смысл в том что когда начинаешь что то рисовать, она предлагает похожие варианты картинок исходя из того что ты рисуешь. Хоть вариантов выбора не так чтобы очень много, но было очень забавно поиграться. В общем мне показалась полезная штука, теперь использую ее.

======================

P.S. очень понравилось как сделан туториал по использованию. Прямо образец, как надо делать, просто и понятно.

======================

Вот ссылка