• Как управлять локализацией дат?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Даты в БД хранишь в формате UTC. Можно даже без таймзон. Главное, чтобы все представляли единый формат/точку отчета.

    На клиенты отправляешь эту дату. JS может создавать Date используя ISO формат - клиент эту дату парсит и используя свою временную зону парсит.

    В общем, смысл следующий:
    - В БД даты хранятся относительно UTC
    - На и с клиента даты отправляются в UTC формате - представление даты с учетом таймзоны будет на стороне пользователя/UI, а коде бизнес-логики работа ведется с UTC

    Клиент лучше знает, какая у него таймзона и локаль
    Ответ написан
    2 комментария
  • Когда нужен MVC, а когда API?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Понятно же, что человек просто использует термины не по назначению. А имеет в виду способ взаимодействия с клиентом.
    Словом "mvc" он называет классический способ, при котором сервер отдает клиенту HTML (а не JSON).
    А словом "api" - REST сервис, при котором сервер отдает клиенту как раз JSON.

    И суть вопроса сводится именно к различию между этими двумя способами:
    - когда сервер генерирует HTML на основе полученных из БД данных, и отдает его браузеру
    - или когда в браузере выполняется программа на JS, которая запрашивает с сервера только данные, а потом на их основе генерирует HTML

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

    При этом с точки зрения бэкенд программиста разницы принципиальной между этими способами нет.
    Главное в программе - это её бизнес-логика. И уметь надо в первую очередь писать её.
    А в каком формате отдавать данные в браузер - дело десятое. И выбирать между "mvc HTML" и "api REST" нет смысла - уметь надо и то и то.

    Ну и, как уже объяснили, MVC - это совсем другое. Архитектура приложения. Причем она используется для любых приложений, независимо от типа отдаваемых данных. M и C в "api" приложениях используются в полный рост. Только V немного упрощается. при этом поскольку MVC подразумевается по умолчанию, то и писать её в вакансиях тоже особого смысла нет.
    Ответ написан
    4 комментария
  • Какой должна быть архитектура веб-сервиса работающего одновременно с мобильным приложением и с браузером?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    1. Сразу насчет микросервисов: оно, конечно, стильно-модно-модожежно, но для начала ознакомьтесь со свежим переводом недавней статьи на Хабре "Смерть от тысячи микросервисов" и задумайтесь: а у вас там точно требуется такой уровень гибкости, масштабирования и т.п., что без микросервисов никак. Задуматься стоит IMHO - выбор неоднозначный, и за вас его никто не сделает.
    2. Если вы знакомы с MVC и кго контроллерами, то вам будет несложно писать контролеры API на ASP.NET Core в старом добром стиле: традиционно они тоже базируются на инфраструктуре MVC. Там почти та же логика привязки параметров: ну, разве что, там стало автоматическим преобразование объектов на JSON из тела запроса в параметр-объект, но, вроде бы, можно использовать и старый стиль с несколькими параметрами с привязкой их одноименным свойствам объекта. Там используется та же самая маршрутизация по атрибутам - она должна быть вам знакома, если только вы не застряли в legacy времен MVC Framework 4, где была только центральная маршрутизация. Ну а возвращаемые объекты ASP.NET Core сам автоматически преобразует в JSON.
    Правда, начиная с ASP.NET 6 появился (а начиная с ASP.NET 7 стал нормально документированым) альтернативный вариант создания API - Minimal API, но раз у вас есть опыт работы с MVC, то наверное, вам лучше остаться с этим старым добрым вариантом.
    Насчет формата обмена - вызовов и результатов API - у вас полная свобода, но имейте в виду, что при использовании REST вы получите автоматизированню поддержку описания этих форматов через OpenAPI/Swagger: фронтовики с мобильщиками это оценят.
    Делать ли генерацию HTML для браузера на веб-сервере через View по шаблонам Razor или же поручить эту работу фронтовикам, снабжая их данными через API - это предмет выбора, это зависит: как там у вас с квалификацией фронтовых разработчиков, как с требованиями к интерактивности страницы в браузере (MVC этому не способствует, костыли для подключения фронтовых фреймворков у MS, вроде как, есть, но я за них ничего не скажу - не пользовался), не придется ли по соображениям производительности переходить к Server Side Rendering (View - они как раз про это, а если изначально HTML генирился на фронте то перенести его в ASP.NET будет сложно) и т.п.
    Авторизацация в ASP.NET Core есть из коробки, самых разных видов: часть уже встроена, для части придется подключать сторонние NuGet-пакеты, но подробности я вам тут не опишу.
    А в общем совет у меня такой: собирайте информацию и думайте сами, а попытки копировать "как у других" - они могут привести к совершенно неожиданным результатам: каждая задача в чем-то уникальна.
    Ответ написан
    Комментировать
  • Отличия GET от POST?

    @avivasyuta
    Дополню, что GET запросы кешируются. POST - нет
    Ответ написан
    Комментировать
  • Как спасти RAID?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Попробовал добавить вместо него SSD-диск, но что-то пошло не так и система не запустилась
    Вот тут, конечно, хорошо бы более подробное описание. Хотя бы о продолжительности "похода не так".
    Не видели ничего похожего на RAID rebuild в процессе?

    Потом дежурные помощники без понимания сути пытались восстановить загрузчик и похоже испортили его
    Вот это, к сожалению, тоже звучит не очень.
    Как именно они "пытались восстановить загрузчик"? Что было сделано и с какими результатами?

    Можно как-то восстановить загрузчик, чтобы хотя бы с диска c: загрузилась система
    Не нужно ничего восстанавливать, в т.ч. работоспособность системы. Сейчас основная задача - восстановить данные, её и нужно решать. Систему, с заметной вероятностью, лучше будет переустановить заново.
    В рамках работы по восстановлению избегайте любой записи данных на диски - форматирование, инициализация, ребилд, и т.п.

    А как же зеркалирование?
    Оно должно быть. RAID 10 - это страйп из двух зеркал.
    Грубо говоря, у вас все данные пишутся на массив "кусочками" одинакового размера. Нечётные куски уходят на первую пару дисков, чётные - на вторую. Внутри каждой пары содержимое дисков идентично. Так что в теории данные можно восстановить, имея по одному диску из каждой пары, в реальности - бывают нюансы.

    Есть вообще шансы на успех?

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

    Дальше индивидуально подключите живые HDD напрямую к другому компьютеру с Windows. Если она предложит какие-либо инициализации, проверки, форматирование, что угодно - отказывайтесь. Диски надо увидеть как устройства, это всё, что нужно.
    Дальше скачайте бесплатный R.saver: https://rlab.ru/tools/rsaver.html Распакуйте его на один из дисков рабочей системы. Запустите. Если серьёзных повреждений нет, то Р.сэйвер реконструирует и восстановит RAID автоматически. После этого копируйте данные.

    "диски с большой выработкой по времени"
    Этот статус из проприетарной утилиты мало что говорит, но после подключения и до использования R.saver, вы можете проверить SMART каждого диска в R.tester'е: https://rlab.ru/tools/rtester.html

    Это неплохо было бы сделать для успокоения совести, тем более СМАРТ можно посмотреть и для SCSI и SAS-дисков. Если там нехорошо, то дальше пока ничего не делайте, а выложите скриншоты.

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

    Не знаю где вы территориально, так что вот универсальная памятка о том, к кому обращаться за восстановлением информации: https://xn----7sbbfbnfa0a2audfacc2cat8e9f.xn--p1ai/
    Если вы в Москве, то будем рады помочь с массивом: https://rlab.ru/raidrecovery/

    P.S.
    CityCat4, спасибо, что упомянули! Ввиду работы в режиме военного времени, приходится прикладывать больше усилий к основным задачам, так что уже не особо получается как раньше сидеть с вами на уютненьком Тостере, мои дорогие :)
    Ответ написан
    1 комментарий
  • Как спасти RAID?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Абра-швабра-кадабра, Zettabyte появись! Нужна консультация :)

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

    В сервис нужно нести все четыре диска. Причем желательно их пронумеровать - какой к какому порту был подключен (это аппаратный адаптек сам разберется и расставит их как надо, а софтрейд - фигу)
    Ответ написан
    Комментировать
  • Как спасти RAID?

    @rPman
    RAID должен был защитить от проблем на одном из дисков (при должном везении, raid10, на определенных двух), но не защитит от аппаратных проблем в самом устройстве, вполне возможно что накосячил уже сам рейд контроллер. Так же могут создать проблемы просто кабели или блок питания, создав каскадно ошибки сразу на всех дисках.

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

    Правильное действие, брать ВСЕ 4 диска и нести в сервис, лучше вместе с контроллером, параллельно покупать диск, на который поместятся твои данные, так как сервису понадобится куда то писать восстановленные данные. Не нужно пытаться даже просто включать диски, отличный пример - на диске откололась чешуйка материала и гуляет по диску оставляя все больше и больше новых бэд блоков, то же самое при определенной смерти контроллера, например он начнет пытаться читать и перезаписывать верные сектора (чтобы ремап произвести) просто при их чтении, аккуратно заменяя содержимое 0xFF

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

    p.s. на будущее, чтобы уменьшить себе проблем, не используй аппаратные контроллеры, обывателю достаточно софтварного raid благо технологий вагон и маленькая тележка как для win так и для linux
    Ответ написан
    4 комментария
  • Как в Linux создать 1 том из двух дисков?

    @rPman
    backup format restore, используя livecd или консоль восстановления (лучше удобный livecd)

    у тебя на выбор lvm, mdadm (рейд 0 - stripe), btrfs/zfs
    делать резервную копию временно на новый диск, затем выбираешь любой инструмент (в зависимости от выбора будут требования по разбивке дисков), форматируешь раздел, восстанавливаешь и расширяешь диск.

    самое простое использовать btrfs, это файловая система поддерживает онлайн из коробки и добавление/удаление дисков и расширение разделов, в т.ч. raid всех уровней, сжатие на лету, дедупликация (инструменты кстати пока еще не из коробки), бесплатные снапшоты и прочее прочее, поддерживается grub (т.е. не нужно делать /boot раздел) и т.п. (к сожалению efi раздел для secureboot или biosboot для legacy на gpt все еще нужны)

    т.е. длелаешь копию на втором диске, затем форматируешь раздел на старом как btrfs, копируешь обратно, добавляешь к первому диску второй раздел команда
    btrfs device add /dev/sda1 /dev/sdb1
    затем обновляешь grub
    grub-install /dev/sda --root-directory=/path/to/mounted/root

    p.s. кстати в linux файловые системы можно разворачивать прямо на диске, без создания разделов (но тогда нужен /boot где то разворачивать)
    Ответ написан
    Комментировать
  • Почему точка монтирования может показывать старое содержимое вместо реального?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    А она в этот момент точно была замонтирована? Может кто-то размонтировал вручную и там просто локальное содержимое лежит - отмонтируйте и посмотрите что лежит в локальной папке - если тот самый "хеш", значит просто в тот момент не было смонтировано
    Ответ написан
    4 комментария
  • Насколько сейчас востребован .NET в России?

    Griboks
    @Griboks Куратор тега C#
    Очень востребован.
    Ответ написан
    Комментировать
  • Как найти причину ошибок "Input/output error" на Linux?

    justhostRU
    @justhostRU
    проблема с носителем.
    чаще - кабель или перегрев южного моста.
    реже - писали выше бэд-сектора.
    Ответ написан
    Комментировать
  • Для чего нужен LINQ?

    Morpheus_God
    @Morpheus_God
    LINQ помогает избегать многих велосипедов которые могут посетить ясную голову программиста.
    Вместо громоздких циклов по поиску или фильтрации ваш код будет лаконичен и легко читаем.
    Примеры как он используется можете посмотреть тут.
    Ответ написан
    Комментировать
  • Как прочитать файл построчно в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    это из за правки файлов linux из под windows/macos
    для преобразования есть специальные утилиты в linux - это dos2unix/mac2unix и обратные им unix2dos/unix2mac

    п.с.
    $() здесь лишнее, а неизвестные пути желательно закавычивать, а то вдруг попадется строка с пробелом:
    while read str; do
    	ln "/usr/share/nginx/html/$str" "/usr/share/nginx/html/tst/$str"
    done < /home/user/list.txt
    Ответ написан
    Комментировать
  • Как прочитать файл построчно в bash?

    @AVKor
    Не надо использовать виндовые EOL. В никсах EOL = \n, а в винде EOL = \r\n
    Ответ написан
    1 комментарий
  • Как собрать лёгкую сборку приложения .NET Core?

    freeExec
    @freeExec
    Участник OpenStreetMap
    но полученные папки "для публикации" выходят совсем тяжёлыми - под 200 мегабайт для программки весом в 0,2 МБ!!!

    Так в варианте с .NET Framework надо прежде скачать этот фреймворк на 400Мб и установить. Без него не будет работать. Поэтому утверждение, что программа весит 0.2Мб не верное.
    Ответ написан
  • Как сделать автоматическое обновление консольного приложения в Linux на .Net Core?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Про атрибуты все уже сказали. Но если заливаете в /tmp, то там атрибуты исполнения могут сбрасываться или просто оттуда не запускаться, в зависимости от параметров монтирования /tmp!
    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec)
    Вот у меня - nosuid (запрещать suid бит), noexec (запрещать исполнение), nodev (запрещать дескрипторы устройств).

    У меня процесс обновления происходит в несколько этапов
    1) скрипт запуска приложения проверяет линк в /tmp/uploaded
    - если есть, запускает приложение по этой ссылке с параметром --uploaded=path-to-new-version и удаляет саму ссылку (!)
    - если нет - запускает приложение по стандартному месту
    2) приложение проверяет по ключу --uploaded свой функционал и если все хорошо, делает линк на текущую версию на стандартное место приложения, или валится по ошибке.
    3) Когда скачалась новая версия, на нее делается ссылка в /tmp/uploaded и приложение гасится
    4) приложение перезапускается

    В результате, даже если залилось приложение с ошибками, то у меня всегда есть старая версия.
    Ответ написан
    Комментировать
  • Почему не проходят нестандартные http-заголовки?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не смотрели запросы через Fiddler2? www.telerik.com/fiddler В режиме Composer?
    Ответ написан
    2 комментария
  • Почему не проходят нестандартные http-заголовки?

    Нет ли в цепочке прохождения ответа к нему какого-нибудь прокси:
    - отдельно стоящего
    - размещенного непосредственно на этом ПК (в т.ч. например от антивируса)
    - антивирусного плагина
    - турбо-режима, пропускающего весь трафик через какой-нибудь узел сжатия
    ?
    Ответ написан
    Комментировать
  • Как узнать количество текущих соединений Nginx?

    BuriK666
    @BuriK666 Куратор тега Nginx
    Компьютерный псих
    Комментировать
  • Windows Presentation Foundation мертв?

    gloomkolomna
    @gloomkolomna
    c#, WPF
    Вообще ни разу не мертв. Работаем с ним и все замечательно, если чего-то нет - пишем сами..
    Как уже сказали, WPF - это очень "гигантский шаг вперёд" - один биндинг многого стоит.
    Ответ написан
    4 комментария