• Java на уровне железа, отличия от C++?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Авторы надеялись, что к железу можно будет обращаться с помощью абстракций - производитель железа у себя реализует java-машину, а уж сверху нее можно запускать прикладной код.

    Вы забываете о большом пласте истории техники, который был сильно до этого - 8 битные домашние ЭВМ (десятки их) и язык Бейсик.

    Так вот, ЭВМ того времени были катастрофически разными - разные носители (кассеты, дискеты, картриджи), разная аппаратура (засунуть еще один центральный процессор в дисковод? да нивапрос! разная скорость для PAL и NTSC версий - легко!). Но вот бейсик был везде и позволял, с некоторыми переделками, таскать программы с машины на машину.

    Таким образом, авторы находились в этом историческом контексте (у них все детство прошло в обнимку с каким-нибудь VIC-20). Тут уже становится логичным желание сотворить то же самое, только круче - берем современный язык, стандартизируем синтаксис - и делаем аналогично - производитель железа предоставляет нам Java-машину с нужным уровнем абстракции - и все программы бегают с архитектуры на архитектуру без переделок.

    Отчасти, это сработало на старых мобилках, в эпоху j2me - это как раз Java, засунутая в телефон - игры, браузеры, карты (были даже ЯндексКарты), читалки, чатилки - куча всего.

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

    Сейчас апплет на java можно встретить во всяком старом железе, на нем там сделано GUI для удаленного администрирования серверов, коммутаторов и СХД. Вы браузером заходите на железку, и тут на вас вываливается ворох предупреждений о том, что сейчас будет запущено какое-то ужасное дырявое ПО, держите штаны, а то слетят. Уверены? Точно уверены? А с этим согласны? А так?

    А уже потом начали активно применять JavaScript, главным образом, изобретя Ajax - продолжая люто натягивать сову (систему для создания электронных библиотек для ученых/HTML) на глобус (задачу создания интерактивного гуя с красивой версткой).

    И это вы еще бэк на Perle не рефакторили
    Ответ написан
    2 комментария
  • Не могу понять, как вычислить вылеты, которые следуют друг за другом с перерывом не менее 5 минут?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Оконной функцией.
    Ответ написан
    Комментировать
  • Почему не работает логический оператор ||?

    GavriKos
    @GavriKos
    МАРШ УЧИТЬ СИШАРП.
    Не надо в юнити лезть без знания шарпа.
    Да, мне лень отвечать на такие детские вопросы, которые элементарно ищутся поисковником!
    Ответ написан
    4 комментария
  • Почему во многих играх в стаке максимум предметов может быть 999, а не 1000?

    Меньше места в UI занимает)
    Ответ написан
    Комментировать
  • Какую БД выбрать для 1000 запросов (записей) в минуту?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Любую.
    При 10 000 записях в секунду можно начинать что-то думать с железом.
    А 20 записей в секунду это настолько ни о чем, что наверное даже sqlite потянет.
    Ответ написан
    1 комментарий
  • Аналог Eval из JS в C#?

    @majstar_Zubr
    C++, C#, gamedev
    Ответ написан
    Комментировать
  • Как сделать чтобы большая БД держала нагрузку?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ооо.... Вы это сейчас вообще серьёзно?

    Если вы запускаете DBaaS платформу и не знаете что делать собственно с базами - то у вас не
    Запускаю свою облачную платформу, код и архитектура создана с нуля.

    У вас нет вообще абсолютно ещё ничего и уж архитектуры - в особенности. Кроме "идеи", над которой бьётся давно и много кто, при том имея ресурсы на собственные команды DBA.

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

    Значит этому юзеру достаточно ходить только на мастер.
    Для сферического в вакууме приложения нет средств автоматически распределять запросы по репликам. И такое сделать вовсе невозможно без накладывания ограничений на использование. Например,
    select somefunc();
    Что делает эта функция? Она только читает данные и потому можно отправить на реплику или она пишет и потому должна быть на мастере? Хотите правильный ответ от контрибьютора postgresql? Это достоверно не знает даже сама база до тех пор пока не выполнит функцию.

    Другой пример:
    begin isolation level repeatable read;
    select ...
    update ...
    commit;

    Как максимум на запросе select вы должны уже знать можете ли вы эту транзакцию отправить на читающую реплику. Откуда бы вам это узнать заранее?
    И прочие принципиально-нерешаемые вопросы.

    DBaaS это не про большие базы. Как бы не хотелось маркетингу убедить в обратном. Это про небольшие или стартующие проекты, где проще переплатить сервису за относительно вменяемую настройку и сопровождение типовой конфигурации.
    Ответ написан
    Комментировать
  • Какие книги есть для новичков по C# в 2020?

    GavriKos
    @GavriKos
    Такие же, какие и в 2019, 2018, 2017 и так где то до 2004.
    Шарп конечно развивается, но основы языка не менялись.
    А если вы еще и новичок в целом, а не именно в шарпах (т.е. опыта нет ВООБЩЕ) - то вам все равно какой год читать.
    Ответ написан
    Комментировать
  • Сколько нужно создавать слотов для 10 реплик при потоковой репликации?

    Melkij
    @Melkij
    PostgreSQL DBA
    Зависит от схемы расположения реплик.

    Каждое соединение репликации использует один из допустимых max_wal_senders хоста к которому подключается. Если вы настраиваете слоты репликации - то вдобавок вам нужно соответствующее число max_replication_slots на этом хосте.
    pg_basebackup в свою очередь использует до двух коннектов max_wal_senders и до одного max_replication_slots (зависит от параметров запуска и версии)

    Так если вы будете копировать все 10 реплик одновременно с помощью basebackup с одной мастер-базы - вам понадобится 20 max_wal_senders и 10 max_replication_slots. После запуска реплик будет использовано 10 max_wal_senders и от 0 до 10 max_replication_slots - смотря как настроите. Для каждой реплики отдельный слот репликации если вы хотите использовать слоты репликации.
    Но это если настраивать репликацию без каскада.
    Коннекты репликации считаются не по кластеру, а подключённые к конкретному инстансу. В случае каскада у вас легко может быть схема, например:
    с мастера репликацию читают 3 реплики, с каждой из них репликацию получают ещё по 3 реплики - вот уже 9 реплик, а использовали только по 3 walsender на хост.

    И при таком числе реплик весьма рекомендую делать каскад. И сеть на мастере поберечь и в случае переключения мастера придётся меньше баз рестартовать (primary_conninfo всё ещё меняется только рестартом всей базы, шанс у моего патча быть принятым в pg13 весьма призрачный)
    Ответ написан
    6 комментариев
  • Какой тип баз данных самый быстрый?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Какой транспорт самый быстрый? Болид F1? А если с десятью тоннами груза? А если на пересечённой местности? А если на воде? Уловили посыл? Скорость тех или иных видов СУБД зависит от условий эксплуатации. В одних условиях быстрее будет одно, в других другое.
    Ответ написан
    Комментировать
  • За что разработчик может уважать менеджера?

    80x86
    @80x86
    За то, что это — образ жизни.

    Я попробую изложить тут свой опыт. Думаю, получится ОЧЕНЬ субъективно. Увы.

    Последние три года мне приходится быть этаким Jack Of All Trades (к счастью, без продолжения “master of none“). Я начальник отдела автоматизации учебного процесса довольно большого, но весьма вялого до этой самой автоматизации ВУЗа. Жизнь сложилась так, что кроме этого я занимаюсь веб-разработкой (скорее фрилансом) и координацией нескольких полузакрытых проектов, выросших из аутсорса.

    Соответственно, приходится заниматься административной работой, организационно-координационной и непосредственно разработческой. И рисовать, верстать, копирайтить, тестировать, составлять матмодели, заниматься статистической обработкой и немного паять.

    Это, так сказать, для более глубокого понимания того, почему будет много субъективизма с претензией на объективность.

    До этого, примерно лет пять назад, когда я был чистым разработчиком, на работу менеджеров проекта/команды (да чего уж кривить душой — и на работу любого административного работника) смотрел с презрением, граничащим с этаким public riot. Скорее всего, мне просто не попадалось действительно хороших ПМов, которые бы умели поставить рабочий процесс так, чтобы разработчик понял, что о нём заботятся.

    Зачастую у меня были какие-нибудь вопросы, с которыми я шёл не к менеджеру проекта (к начальнику, директору или ещё кому-нибудь, кто так или иначе вёл проект), а к соседу-разработчику. Потом я сам с собой согласился, что убитое на поиск решения в интернете время многократно убивается пользой от более широкого фронта, открывающегося при обследовании проблемы и перестал ходить к коллегам за советами. Тем болеее, что в результате я и сам всё делал хорошо.

    Ещё мне дико не нравилось решать задачу некрасиво, причём это часто выражалось в затягивании сроков. Если мне начальник говорил:

    — Надо срочно сдать! Хватит тянуть резину, что у тебя там, почему нельзя сделать быстрее?

    , то я ему начинал рассказывать про то, что надо сделать так-то и так-то, соптимизировать выборки, дописать какие-то абстракции для возможного будущего использования и возможности расширения. При этом я откровенно не мог понять, зачем ему нужно кривое и косое решение, которое (вот если его ещё чуть-чуть попилить) скоро станет очень хорошим и крутым.

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

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

    А потом я стал начальником.

    Начальником болота, где не слышали про VCS, например. Вообще. И про проектирование.

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

    Так пролетело два года. Как-то зимним вечером я, сидя за рисованием документации и диаграммок ночью в очередные рабочие выходные, схватился за голову. Я стал тем самым менеджером, класс которых так не понимал и не принимал.

    С тех пор многое поменялось в голове: я научился жертвовать перфекционизмом в пользу выполнения поставленной задачи; научился делегировать работу; научился избавлять разработчиков от головной боли и смятений в выборе способа решения задач, выполняя роль своеобразной бритвы Оккама; научился… да научился много чему.

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

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

    Слава святому фон Нейману, такие люди, оказывается, есть и их достаточно много. В сравнении себя со многими из них я понимаю, что мне есть, куда стремиться. И это потихоньку топит лёд моего внутреннего разработчика, который потихоньку учится уважать менеджеров.
    Ответ написан
    Комментировать
  • Стоит ли писать свой язык программирования на python, c# и node.js?

    @deliro
    Если хочешь — пиши, чё бы нет. Какая разница, на каком языке писать лексеры, парсеры и AST? Другое дело, что этот язык дальше твоей разработки не уйдёт, если только ты не напишешь свой тулчейн на питоне, который будет твоё AST ещё оптимизировать, транслировать в машинный код и собирать из него PE и ELF для винды/линукса.

    Ради того, чтобы понять, как это всё работает — отличная идея. В остальном — не стоит.
    Ответ написан
    3 комментария
  • Проблемы с работой сети?

    @antonwx
    Как обстоят дела с загрузкой цп и памяти роутера ростелекома во время ошибок? Ещё бы неплохо уточнить какой роутер от ртк стоит. У меня дома их онтшка от трёх пк + телефона перегревается и глючит. Пришлось колхозить охлаждение активное, только так от лагов избавился. На 30 пекарен... ну не рассчитан он явно.
    Ответ написан
    Комментировать
  • Как разгрузить большую базу?

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

    Что выдает explain запроса?
    Ответ написан
    7 комментариев
  • Какой смысл использовать IEnumerable?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    главная фишка IEnumerable это возможность создавать параллельную конвеерную обработку легкочитаемым кодом. переводя на кухонный язык - если функция возвращает IEnumerable<что то там> из относительно медленного источника (БД, сложная обработка) она может делать yield return <что то там> поштучно. если эта функция оформлена как асинхронная, то вызывающий код, может быть написан, так, как будто просто получает IEnumerable<что то там> сразу, но с ключевым словом await. в итоге вызывающий код, и код поставщик данных, будут обрабатываться параллельно

    весь LINQ построен на IEnumerable, не только как на типе посреднике между типовыми обработками наборов данных, имеющих не известный заранее размер (тут бы и List справился), но и на возможности создавать асинхронные перегрузки для основных методов LINQ

    ps yield return вообще мощная штука. даже без async/await. как пример yieldprolog.sourceforge.net
    Ответ написан
    Комментировать
  • Какую БД выбрать для мобильной стратегии?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Проблем у вас несколько. Первая с latency, вторая с source of truth.
    Первая решается через CDN и репликацией инстансов с логикой. Гарантированно придёте к очередям и асинхронной обработке данных с событийной консистентностью.

    По базам - либо полностью менять логику приложения и коммуникации, либо использовать распределенные базы, такие как AWS Aurora и AWS DynamoDB. Сами по себе они региональные, но есть интересные фичи, позволяющие выводить на весь мир.

    Сразу скажу - коллизии будут в любом случаем
    Ответ написан
    6 комментариев
  • Столбец удален, но не удален, как удалить столбец?

    Melkij
    @Melkij
    PostgreSQL DBA
    Мой хрустальный шар совершенно верно показал.
    Когда вы делаете add column columnname text - вы получаете NULL во всей этой колонке. Разумеется сразу после этого вы поставить NOT NULL не можете никак. Любая строка нарушает это ограничение и база отказывается ставить NOT NULL.
    Когда вы делаете add column columnname text NOT NULL - чтож, это может сработать в одном случае - у вас пустая таблица. Тогда ни одна строка не нарушает NOT NULL ограничение, у вас просто 0 строк. Если хоть одна строка есть - это невозможно. Вы просите default NULL и одновременно NOT NULL - так не бывает. В сообщении об ошибке говорится именно о добавляемой в этот момент колонке, не о какой-то другой существовавшей ранее.

    Вы должны указать какой-то не NULL default если хотите поставить NOT NULL на создаваемое поле. Либо очистить таблицу.
    Либо создать без NOT NULL, заполнить поле, потом уже делать NOT NULL.

    В postgresql действительно колонка не удаляется никогда. Но это деталь реализации и к сути вашего вопроса отношения не имеет.
    Ответ написан
    2 комментария
  • Как узнать значение по хешу MD5?

    Zoominger
    @Zoominger
    System Integrator
    она в MD5. Можно как-то узнать значение по этому хешу?

    Только грубым перебором, что вы и сделали.
    А так - никак, оно для того и придумано, чтобы нельзя было расшифровать, хэширование - односторонняя функция.
    Ответ написан
    4 комментария
  • В каком формате хранить время для разных часовых поясов?

    delphinpro
    @delphinpro
    frontend developer
    Хранить в UTC. Для пользователя сделать настройку и делать перевод.
    Ответ написан
    1 комментарий
  • Высоконагруженность и многопоточность в node js?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Как организовать высоконаргуженный сервер на ноде?


    Нагрузите его)

    А если серьезно то нагрузка это не про языки программирования, а про масштабирование и архитектуру. Вам пока рано.

    А если таки хотите поломать голову то начните с того факта что серверов должно быть больше одного. Остальное осознание начнет появляться позже
    Ответ написан
    3 комментария