Так себе программист
97 subscribers
192 photos
7 videos
1 file
185 links
Меня зовут Александр Троценко. Разработчик, преподаватель, к.т.н. Пишу о программировании и профессии.

10 лет в разработке desktop на C/С++

Контент: https://taplink.cc/atrotsenko
Download Telegram
Вывод какой команды показан на картинке выше?
Anonymous Quiz
25%
git status
43%
git branch -vv
7%
git diff
25%
git log
🎉1
Как ведут документацию проекта в Capella

Почти год назад я рассказывал вам про ведение документации проекта на Markdown, когда файлы документации располагаются рядом с исходным кодом. То есть в том же репозитории.

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

И тут попадается живой пример!

👉 Копаясь в проекте Capella на GitHub, я обратил внимание на довольно развитый раздел Wiki. На первый взгляд, ничего особенного, у многих такое есть. Но при переходе по первой же ссылке я попадаю обратно в репозиторий!

GitHub Wiki оказалась фасадом, который ведет к файлам документации, расположенным в основном репозитории.
И этих файлов там больше трех сотен.

В Capella вместо Markdown используется MediaWiki. Они похожи. В обоих случаях культивируется парадигма "doc as code". Однако MediaWiki посложнее и предлагает больше инструментов для разработки документации. Но самое главное, что GitHub "из коробки" умеет рендерить и те, и другие файлы.

Я не знаю, насколько наличие документации мешает работе с репозиторием. Ну git clone будет выполняться подольше. Ну места на диске будет занято чуть больше...

С другой стороны:
- документация всегда под рукой,
- как следствие, поддерживать ее проще,
- как следствие, правки кода и документации попадают в один пул-реквест,
- как следствие, сборка с пул-реквеста готова в production 🤭

В общем, подход имеет место быть. Проект Capella не заброшен и развивается. 5000+ коммитов, ежегодные релизы, полсотни контрибьютеров говорят сами за себя.

—

🎉 Этим постом вводится новая рубрика #ЖизньДругих, где мы будем разбирать интересные решения в открытых проектах. Предыдущий пост про Minetest тоже в нее попал ⤴️
👏2🔥1
#include <iostream>

int main() {
int a = 11, b = 4;
double c = 4;
std::cout << a / b << " " << a / c;
return 0;
}
Выше дан код C++. Какой вывод будет у программы?
Anonymous Quiz
77%
2 2.75
14%
2.75 2.75
5%
2 2
5%
11/4 11/4
🔥2
"Этого не может быть...

...потому что этого не может быть никогда".

Помните крыловского "философа без огурцов", который критиковал мужика-огородника, а сам так ничего и не вырастил?

👇 Так вот похожий сюжет есть и у Чехова в "Письме к ученому соседу". Только здесь "умник" наполнен не книгами и журналами, а слухами и предрассудками.

Но суть героя та же: абсолютная, без тени сомнения, уверенность в правоте собственных суждений.

В письме мужик в пух и прах разматывает достижения современной науки (с поправкой на 19 век).
Ну, например, тезис об эволюции:

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


Или про людей на Луне:

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


И про пятна на Cолнце:

Из какого мокрого тела сделаны эти самые пятны, если они не сгорают? Может быть, по-вашему и рыбы живут на солнце? Извените меня дурмана ядовитого, что так глупо съострил! Ужасно я предан науке!


😁 Мужик не знает о том, что он не знает, ...и ему норм (эффект Даннинга-Крюгера?)

Но к чему это я.

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

—

📍 Чехов А.П. - "Письмо к ученому соседу" (1880) #КнижнаяПолка@mediocre_developer
🔥4
Традиционно университет в сентябре отнимает почти все свободное время, но без теста я вас не оставлю 😊

По крайней мере сегодня 😁

👇

#include <iostream>

int main() {
for (int i = 0; i < 2;) {
std::cout << i;
for (int j = 0; j < 2; ++j, ++i)
std::cout << j;
}
return 0;
}
Выше дан код C++. Какой вывод будет у программы?
Anonymous Quiz
35%
001101
40%
001
20%
Бесконечные нули и единицы
5%
Ошибка сборки
Симпотный робот 👍

Но если захочется отсканировать QR, то надо будет либо поклониться ему, либо встать на колени 🧎‍➡️🤖

Ну реально не удобно. Что ж так низко куарчики то?

А робот симпотный, да.

—

Это, конечно, не рубрика "путаница в интерфейсах", но отличный повод про нее напомнить 😊
😁5👾4
Переезд блога

🎉 Рад сообщить, что я наконец-то перевез свой сайт с большими статьями с платформы hashnode на собственную статику с хостингом на GitHub Pages.

👉 https://mediocre-developer.ru

А лозунг то какой, а! Зацените:
Признание - первый шаг на пути от “так себе” вчера к “немного лучше” сегодня.

Философия так себе программиста 🔥
Только через осознание своего незнания мы развиваемся и двигаемся дальше.

Но ладно с ней, с философией, перейдем к практике.

🔸 Чем же не угодил hashnode?

1. Деградация индексации в поисковиках. С марта этого года платформу начали дудосить какие-то плохие ребята и разработчики поставили контроль входа, который заблокировал в том числе роботов гугла и яндекса. Просмотры упали в ноль (см. скрин). Техподдержка отморозилась и приказала ждать. Я подождал полгода... и ни-че-го.

2. Слабая кастомизация. Кроме статей, ничего особенного и не опубликуешь.

3. Риск блокировки. Ресурс зарубежный, а исходников на руках нет.

🔸 Почему GitHub Pages?

1. Простота входа. В сети есть готовые шаблоны сайтов. Сконфигурировал под свои нужды и сразу захостил.

2. Исходники на руках. Весь сайт генерируется из markdown с помощью jekyll. В случае чего развернуть можно где угодно, хоть на домашнем сервере.

3. Бесплатный хостинг. Чего тут комментировать то)

Честно говоря, как только в hashnode провалились просмотры, желание писать улетучилось. Несколько статей так и остались в черновиках. Теперь постепенно их допишу и опубликую. Все таки читательская активность невероятно мотивирует 😊
🔥7
Так себе программист
Переезд блога 🎉 Рад сообщить, что я наконец-то перевез свой сайт с большими статьями с платформы hashnode на собственную статику с хостингом на GitHub Pages. 👉 https://mediocre-developer.ru А лозунг то какой, а! Зацените: Признание - первый шаг на пути…
К слову, с сайтом очень помогли нейронки. И с кодом, и с переездом. Я не знаю, сколько бы я сам с ним просидел, так как в вебе не бум-бум. Ну то есть небольшой опыт имеется, но это было очень давно.

Возможно, без нейронок я вообще бы за это не взялся. Многое пришлось бы изучать. Сомнительная инвестиция. Отдал бы на аутсорс)

А теперь, получается, и волки сыты, и овцы цели.
💪 Мощь
👍4
#include <iostream>

struct Foo {
Foo() {
std::cout << "Foo ";
throw 42;
}
~Foo() {
std::cout << "~Foo ";
}
};

int main() {
try {
Foo o;
} catch (int) {
std::cout << "catch";
}
return 0;
}
😁5
Выше дан код C++. Какой вывод будет у программы?
Anonymous Quiz
38%
Foo ~Foo catch
24%
Foo 42 catch
10%
Foo ~Foo
29%
Foo catch
🤬1
Эффект резинового утенка

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

Короче.

👉 Нужно взять резинового утенка, реального или воображаемого, и рассказать ему о своей проблеме. Рассказать доходчиво, с расстановкой, ответить на все его вопросы... Да, утенок молчаливый. Но мы же можем предположить, что ему будет не понятно.

И вот тут может возникнуть ЭФФЕКТ. Решение проблемы появится словно из ниоткуда. Точнее из вашей же головы 😏
Обрадовавшись, вы броситесь работать дальше, а утенок, так и не сказав ни слова, уйдет в закат. Его задача выполнена.

Я этим эффектом пользуюсь, когда хочу задать кому-то вопрос. Где-нибудь в блокноте или в избранном в телеге описываю контекст, формулирую проблему, отвечаю на потенциальные вопросы адресата и... иду попить водички. Беру паузу, так сказать. После перерыва все перечитываю и, если ЭФФЕКТ так и не случился, отправляю сообщение. А случится он может на любом этапе, даже при описании контекста. Но чаще всего - при ответах на потенциальные вопросы.

📍 Вообще историю об утенке я видел в книге "Программист-прагматик" Ханта и Томаса. Читал давно, но впечатления были хорошие. Надо как-нибудь перечитать.
👍6
Тест по диаграммам!

Подсказка для тех, кто совсем не знает, что это:
да прибудет с вами сила интуиции 💡
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Зачем читать фантастику?

Я не большой фанат фантастики в тексте, но иногда... Звезды сходятся, и руки доходят до книги. Последний раз звезды сошлись на "Черновике" Лукьяненко (нельзя же вечно держать его в отложке). Но после чтения повис вопрос: зачем?

Серьезно, зачем тратить время на фантазийный полет чужой мысли, имеющий мало общего с моей реальностью?

Вообще, есть у меня три причины. Незамысловатых, плоских, без сложной философии.

⭐️ Элементарно отдохнуть. Первая и главная причина. Время от времени наступает насыщение серьезной литературой (профессиональной или не очень). Хочется сделать паузу и почитать что-то простое и быстрое.

⭐️ Узнать ответ на вопрос: "А что будет, если..." Можно, конечно, и самостоятельно пофантазировать. А можно посмотреть, что нафантазировали другие, умудренные опытом. Вот что будет, если обезьяны станут венцом эволюции вместо человека?

⭐️ Погрузиться в историю. Посмотрите год написания книги и соотнесите его с мыслями автора. Интересно замечать, как изменились с тех пор наши представления. А еще интереснее осознавать, что кое-что живо сейчас и, скорее всего, будет живо через столетие. Чего стоят только три закона робототехники у Азимова!

Но вернемся к "Черновику". Все звезды сошлись. Что будет, если все вокруг тебя забыли, да еще и в 2005 году (год написания), когда интернет уже есть, но соцсети еще не ушли в массы? Выглядело заманчиво. Но в итоге я получил динамичный боевичок с прыжками между мирами... без внятного ответа на изначальный вопрос. Забыли и забыли, чего уж тут.

Поэтому у меня вопрос к вам: какая фантастика вас зацепила? Давайте пополним друг другу отложку!

#КнижнаяПолка
🤔3
#include <iostream>
#include <thread>
#include <chrono>

int sharedValue = 0;

void worker() {
for (int i = 0; i < 3; ++i) {
int localCopy = sharedValue;
sharedValue = localCopy + 1;
}
}

int main() {
std::thread t1(worker);
std::thread t2(worker);

t1.join();
t2.join();

std::cout << sharedValue << std::endl;
return 0;
}


💡 Подсказка для не знакомых с C++: два потока работают с несинхронизированным ресурсом
Выше дан код C++. Какой вывод будет у программы?
Anonymous Quiz
11%
0
17%
3
0%
6
72%
Неопределенное поведение