Pull to refresh
4
0
Алексей Повар @wert_lex

Server Side Developer

Send message

Зато есть другие увлекательные проблемы :)

К тому, что написано в комментарии, еще можно добавить:

  1. SQL JOIN это декартово произведение, и его размер растет довольно быстро. Начиная с некоторого уровня вложенности в GraphQL, размер Result Set из базы может очень сильно удивить

  2. из той же проблемы есть ряд приседаний связанных с тем, как делать пагинацию. Особенно для вложенных данных.

  3. а еще иногда бывает, что сильно не все данные есть в реляционной базе

В общем на первый взгляд DataLoader выглядит некоторым безумием, а на второй, в парадигме работы с данными GraphQL - весьма практичная штука.

Потыкать всякие OCaml-и с Лиспами, да всякие Zig-и на первом курсе - очень правильное дело.
Но я таки оставлю полтора непрошенных совета:

  • хорошо бы найти какую-то современную джаву (Golang, Python, что там сейчас самое модное и не планирует умирать?), и разобраться с ней на должном уровне. Потому что рано или поздно захочется чтобы за программирование еще и платили. И вот нельзя исключить момента, что за OCaml где-то платят младшекурснику, но это очень много звезд должно сойтись.

  • я бы очень сильно рекомендовал поискать настоящую работу. Может даже на четверть ставки. Язык программирования в работе разработчика необходимая, но не достаточная штука. Есть взаимодействие с коллегами/начальниками/кастомерами, есть предметная область (по сравнению с некоторыми все эти брейнфаки, уайтспейсы и перл-уанлайнеры - образец читаемости, простоты и понятности), есть богатая россыпь тулинга от гитов с линтерами до кубернетисов с терраформами, и еще много всякого

    • это не значит, что то, что описано в статье - не важно. Важно. Но вот эти штуки выше они все это дело укладывают в достаточно реалистичную канву и кое как структурируют это дело

    • ну и пока молодой без кредитов, ипотек, машин квартир - меняй работу почаще. Увидишь побольше

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

Но качественно спроектированный язык программирования? Тут переменные объявляй так, здесь по-другому, тут new, там make. Вот так встроенным функциям делать можно, а программистам - нет. Интерполяция строк в 2024? Вот вам Sprintf. Generics вот завезли спустя 14 лет. Ну спасибо, ну праздник.

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

С lerna все хитро: изначальный продукт немного умер. Потом разработку lerna перехватили ребята, которые делают nx. И теперь lerna внутри - это nx.

Я в этой связи перевез достаточно большой проект с lerna на nx. Нравится. Там очень много свистелок, которые не особо нужны, но ядро работает прекрасно и делает все, что необходимо.

Если не нравится nx, есть turborepo. Он местами даже поинтереснее будет. Но частично написан на Rust. Для pet-проекта это не беда. Для большого проекта - это значит что чтобы заглянуть в него, надо понимать неплохо Rust.

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

Obsidian, в режиме текстового файлика, без плагинов для всякого модного

Лет за 10 попробовал все популярные решения до которых дотянулся: Wunderlist, Trello, Any.Do, Todoist, TickTick, просто почту, Evernote, OneDrive, липкие стикеры, Moleskin, бумагу А4 и А3, Monday, Apple Reminders и даже Jira.

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

Как тут два лайка поставить?)

А важные навыки - это какие?
Коммуникационные - сомнений нет.
Какие-нибудь там кванты с радиофизикой, да хардкорная мат.статистика - крайне сомнительно.

Статья - огонь.
Есть вопрос: идея архитектуры иксов в общих чертах понятна. А чем принципиально Wayland со товарищи отличается?

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

  • это еще чуть более умный code completion tool: в Borland Turbo C код комплишн вообще отсутствовал, в NetBeans/Eclipse уже было неплохо, в IJ IDEA со товарищи стало хорошо. Теперь вот стало еще умнее.

  • это неплохой апргейд Rubber Duck debugging. Резиновая утка была неплоха - слушала внимательно. Теперь еще и отвечает, и даже довольно часто в тему.

  • и в том же духе - с этой штукой иногда неплохо бывает обсудить свои мысли касательно архитектуры/реализации. Вопрос, как известно, уже содержит половину ответ, а уж сформулированный и записанный вопрос - тем более. Да и ответы часто как минимум не сильно мимо.

  • всякое рутинное неплохо автоматизируется. Написать болванку документации - уже неплохо.

Вот имхо, плохая идея в хоть сколько-нибудь отдаленной перспективе для всех:

  • Rust-программистам быстро станет скучно разбираться в очередных тонкостях ES202x и обновлениях TS

  • JS/TS - программистам писать новые и редактировать существующие правила станет сложно. Чтобы это сделать нужно неплохо изучить сильно другой язык программирования (и Rust это не поганая джава, там думать надо по-другому)

  • когда оно начнет крашится по причине некачественного плагина, или опции --timing как в комментарии выше, то будь оно написано на JS/TS еще есть шанс подебажить самому, тулинг-то в основном тот же. Найти человека, который на постоянной основе знает JS/TS и очень большой молодец в Rust.. ну не знаю, а зачем он на JS/TS тогда пишет?

В общем имхо, писать основной тулинг (а линтер в 2023 году, как ни крути - основной тулинг) на языке, отличном от языка, для которого этот линтер пишется - со всех сторон странная затея. Тут конечно надо не на Rust/Go/С++ (спаси и сохрани) все переписывать, а искать варианты того, что нужно протолкнуть в node, чтобы хотя бы свой тулинг работал пошустрее.

Так а по другому не получится, если действительно очень хочется опираться на интерфейсы - никаких интерфейсов в рантайме нету. А для того, чтобы TypeGuards завелись для интерфейсов - эти самые интерфейсы нужно в рантайме как-то различать. И различать их путём перебора всех возможных наследников - ну такая себе идея.

Там выше заметили, что вообще вопрос неправильный и спрашивать надо не так :). Ну, вопрос такой, какой есть. И Type Labeling вполне себе стандартный подход для решения этой проблемы в TS. Да, типы придётся потэгать ручками. Но, компилятор любезно даст по рукам, если забыть это сделать, а на этом все проблемы и заканчиваются

Ну, на Вопрос 2 есть сильно более лучший ответ. Есть более правильные, надёжные и масштабируемые способы решить эту проблему даже в масштабах технического интервью.

Branded/Tagged types

// Tagged types directly
interface IEvent {}
interface ISimpleEvent extends IEvent {
    __tag: 'ISimpleEvent';
} 
interface IComplexEvent extends IEvent {
    __tag: 'IComplexEvent';
} 

class T implements ISimpleEvent {
    __tag: 'ISimpleEvent' = 'ISimpleEvent';
} 

class D implements IComplexEvent {
    __tag: 'IComplexEvent' = 'IComplexEvent';
}

function isComplexEvent(smth: any): smth is IComplexEvent {
    return smth?.__tag === 'IComplexEvent';
}

function processEvent(event: IEvent) { 
  if(isComplexEvent(event)) { 
    console.log('ComplexEvent');
  } else { 
    console.log('SimpleEvent');
  } 
}

// Or Branded type helper
type Branded<A, B> = A & { __brand: B };

type IEvent2 = Branded<{}, 'IEevent2'>;
type ISimpleEvent2 = Branded<{/*...*/}, 'ISimpleEvent2'>;
type IComplexEvent2 = Branded<{/*...*/}, 'IComplexEvent2'>;
// ... and so on

На всякий случай добавлю, что Evernote Legacy по прежнему умеет выделять все заметки и экспортировать их в один enex файл со всеми тэгами и вложениям. Ровно как и импортировать обратно. Новый клиент ограничивает этот процесс 50 заметками за раз. В качестве бэкапа - то что нужно.

Ну и на самый крайний случай формат enex хоть и засилие xml, но в целом более-менее парсится.


Ух ты, комментарий, который я написал в 2016 заапрувили в 2021. Уже даже Google Play Music не существует :D

Понятно, что на вкус и цвет, но и музыку в эти плейлисты «консьерж» подбирает как консьерж, только немного глухой, бухой и напрочь отсутствующим чувством прекрасного.

Имхо, конечно, но подборки у гугла прямо не фонтан. А вот как фонотека, да за 159 рублей в месяц — отлично.

Вот мобильное приложение бы ещё толковое, поиск по PDF, да страницы из веба сохранять - совсем хорошо было бы.

Смотря чем вы занимаетесь. Уже достаточно много софта на M1 подвезли, но далеко еще не весь. Docker, например, отсутствует.
Статус "портированности" можно посмотреть тут: https://isapplesiliconready.com/

А это они, похоже, назначают вообще всем сразу (даже не дожидаясь результатов тестов, анализов или еще чего).

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

1
23 ...

Information

Rating
Does not participate
Location
Россия
Registered
Activity