• Пишут ли в компаниях коммиты в git на русском?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    принято ли в срезе разработки веб приложений СНГ писать коммиты на русском?

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

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

    1. Англицизмов, которые еще и не имеют однозначной транслитерации в кириллицу, что ломает поиск по коммитам.
    2. Названий классов, файлов, или еще каких-то сущностей из мира кода, которые и так уже переведены и есть в исходниках проекта на английском.
    3. Набора базовых глаголов, которые ставят в начале предложений, вроде "добавил", "исправил", "удалил".


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

    @res2001
    Developer, ex-admin
    Если речь идет о взаимодействии в рамках одной сети WiFi - то нет проблем. Используйте широковещательные пакеты для уведомления других устройств, что в сети есть устройство, готовое работать по вашему протоколу.
    Если это более общая задача, не привязанная к одной сети и WiFi, то даже если устройства будут знать адреса друг друга (не важно каким способом), могут возникнуть проблемы с доступом к устройству из-за оператора связи, т.к. в сотовых сетях обычно используется NAT оператора, который препятствует прямому доступу из интернета к устройству (NAT как правило включен в любом WiFi роутере и т.п.). В этом случае придется использовать какой-либо сервер в интернете со статическим адресом.
    Существуют варианты обхода NAT, но они так же требуют сервера для инициализации соединения, а затем уже устройства могут работать напрямую. Подобные техники используются, например, в VoIP. Гуглите по протоколу STUN.
    Ответ написан
    2 комментария
  • Возможно ли фрилансить на Си?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Для ответа на ваш вопрос нужно зайти на популярные биржи и поискать заказы на Си. Проанализировать результат.
    Сами справитесь?
    Ответ написан
    Комментировать
  • Как разговаривать с клиентом о технических деталях?

    @ComodoHacker
    Навык общения с клиентами и перевода с "клиентского" языка на технический — это одно из конкурентных преимуществ во фрилансе. Так же как и навыки презентации и продажи своих услуг.

    Либо нужно их развивать, либо работать в команде с тем, кто ими обладает. И тот и другой путь вполне эффективен.
    Ответ написан
    Комментировать
  • Как передается готовое приложение от кодера к заказчику?

    @UserTwo
    Вам необходим исходный код приложения (для последующей доработки), сертификат которым было подписано приложения и данные к сертификату (без него вы не сможете в последующем выпустить обновление) ну и собранное приложение (apk).
    Ответ написан
    1 комментарий
  • При запуске 100 задач (Job Array) на AWS Batch около 25 запускаться сразу, а остальные ждут в статусе RUNNABLE. В чем ограничение?

    @Ted7021 Автор вопроса
    Обратился по этому вопросу в AWS Support. Они подтвердили проблему, но решения для нее не нашли.
    Посоветовали использовать On-Demand вместо Fargate когда нужно выполнить большой обьем задач как можно быстрее.
    После перехода на On-Demand provisioning model проблема решилась.
    Теперь запускается максимальное кол-во конкурентных задач, указанное в настройках compute environment.
    Это как раз то что мне было нужно.
    Ответ написан
    Комментировать
  • Как скачать метапакет?

    hint000
    @hint000
    у админа три руки
    $ sudo apt satisfy kde-plasma-desktop 
    
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      appmenu-gtk-module-common appmenu-gtk3-module apt-config-icons-hidpi apt-config-icons-large apt-config-icons-large-hidpi baloo-kf5 bluedevil breeze breeze-cursor-theme breeze-gtk-theme breeze-icon-theme catdoc dconf-cli debconf-kde-data debconf-kde-helper desktop-base docbook-xml docbook-xsl dolphin drkonqi
      ffmpegthumbs fonts-hack fonts-noto-unhinted fonts-quicksand frameworkintegration geoclue-2.0 gir1.2-ibus-1.0 haveged ibus ibus-data ibus-gtk ibus-gtk3 iio-sensor-proxy kaccounts-providers kactivities-bin kactivitymanagerd kde-baseapps kde-cli-tools kde-cli-tools-data kde-config-gtk-style kde-config-screenlocker
      kde-config-sddm kde-plasma-desktop kde-style-breeze kde-style-oxygen-qt5 kdeconnect kded5 kdegraphics-thumbnailers kdialog kdoctools5 keditbookmarks kfind kgamma5 khelpcenter khotkeys khotkeys-data kimageformat-plugins kinfocenter kinit kio kio-extras kio-extras-data kmenuedit konqueror konsole konsole-kpart
      kpackagelauncherqml kpackagetool5 kpeople-vcard kscreen ksshaskpass ksysguard ksysguard-data ksysguardd ktexteditor-data ktexteditor-katepart kwalletmanager kwayland-data kwayland-integration kwin-common kwin-data kwin-style-breeze kwin-x11 kwrite kwrited libaccounts-glib0 libaccounts-qt5-1 libappmenu-gtk3-parser0
      libappstreamqt2 libcanberra-pulse libcolorcorrect5 libdbusmenu-qt5-2 libdebconf-kde1 libdmtx0b libdolphinvcs5 libeditorconfig0 libepub0 libfakekey0 libfam0 libgit2-28 libgps26 libgrantlee-templates5 libhavege1 libhfstospell10 libhttp-parser2.9 libibus-1.0-5 libjs-underscore libkaccounts1 libkdecorations2-5v5
      libkdecorations2private7 libkf5activities5 libkf5activitiesstats1 libkf5archive5 libkf5attica5 libkf5auth-data libkf5auth5 libkf5authcore5 libkf5baloo5 libkf5balooengine5 libkf5baloowidgets-bin libkf5baloowidgets-data libkf5baloowidgets5 libkf5bluezqt-data libkf5bluezqt6 libkf5bookmarks-data libkf5bookmarks5
      libkf5calendarevents5 libkf5codecs-data libkf5codecs5 libkf5completion-data libkf5completion5 libkf5config-bin libkf5config-data libkf5configcore5 libkf5configgui5 libkf5configwidgets-data libkf5configwidgets5 libkf5contacts-data libkf5contacts5 libkf5coreaddons-data libkf5coreaddons5 libkf5crash5
      libkf5dbusaddons-bin libkf5dbusaddons-data libkf5dbusaddons5 libkf5declarative-data libkf5declarative5 libkf5dnssd-data libkf5dnssd5 libkf5doctools5 libkf5emoticons-bin libkf5emoticons-data libkf5emoticons5 libkf5filemetadata-bin libkf5filemetadata-data libkf5filemetadata3 libkf5globalaccel-bin
      libkf5globalaccel-data libkf5globalaccel5 libkf5globalaccelprivate5 libkf5guiaddons5 libkf5holidays-data libkf5holidays5 libkf5i18n-data libkf5i18n5 libkf5iconthemes-bin libkf5iconthemes-data libkf5iconthemes5 libkf5idletime5 libkf5itemmodels5 libkf5itemviews-data libkf5itemviews5 libkf5jobwidgets-data
      libkf5jobwidgets5 libkf5js5 libkf5kcmutils-data libkf5kcmutils5 libkf5kdcraw5 libkf5kdelibs4support-data libkf5kdelibs4support5 libkf5kdelibs4support5-bin libkf5kexiv2-15.0.0 libkf5khtml-bin libkf5khtml-data libkf5khtml5 libkf5kiocore5 libkf5kiofilewidgets5 libkf5kiogui5 libkf5kiontlm5 libkf5kiowidgets5
      libkf5kirigami2-5 libkf5konq-data libkf5konq6 libkf5networkmanagerqt6 libkf5newstuff-data libkf5newstuff5 libkf5newstuffcore5 libkf5notifications-data libkf5notifications5 libkf5notifyconfig-data libkf5notifyconfig5 libkf5package-data libkf5package5 libkf5parts-data libkf5parts-plugins libkf5parts5
      libkf5people-data libkf5people5 libkf5peoplebackend5 libkf5peoplewidgets5 libkf5plasma5 libkf5plasmaquick5 libkf5prison5 libkf5pty-data libkf5pty5 libkf5pulseaudioqt2 libkf5purpose-bin libkf5purpose5 libkf5quickaddons5 libkf5runner5 libkf5screen-bin libkf5screen7 libkf5service-bin libkf5service-data libkf5service5
      libkf5solid5 libkf5solid5-data libkf5sonnet5-data libkf5sonnetcore5 libkf5sonnetui5 libkf5style5 libkf5su-bin libkf5su-data libkf5su5 libkf5syntaxhighlighting-data libkf5syntaxhighlighting5 libkf5sysguard-bin libkf5sysguard-data libkf5texteditor-bin libkf5texteditor5 libkf5texteditor5-libjs-underscore
      libkf5textwidgets-data libkf5textwidgets5 libkf5threadweaver5 libkf5wallet-bin libkf5wallet-data libkf5wallet5 libkf5waylandclient5 libkf5waylandserver5 libkf5widgetsaddons-data libkf5widgetsaddons5 libkf5windowsystem-data libkf5windowsystem5 libkf5xmlgui-bin libkf5xmlgui-data libkf5xmlgui5 libkfontinst5
      libkfontinstui5 libkscreenlocker5 libksgrd7 libksignalplotter7 libkwalletbackend5-5 libkwin4-effect-builtins1 libkwineffects12 libkwinglutils12 libkwinxrenderutils12 libkworkspace5-5 libmarkdown2 libminizip1 libnotificationmanager1 liboxygenstyle5-5 liboxygenstyleconfig5-5 libpackagekitqt5-1 libpam-kwallet-common
      libpam-kwallet5 libphonon4qt5-4 libphonon4qt5-data libpipewire-0.2-1 libplasma-geolocation-interface5 libpolkit-qt5-1-1 libpowerdevilcore2 libpowerdevilui5 libprocesscore7 libprocessui7 libqalculate20 libqalculate20-data libqca-qt5-2 libqca-qt5-2-plugins libqrencode4 libqt5concurrent5 libqt5designer5 libqt5help5
      libqt5hunspellinputmethod5 libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5multimediawidgets5 libqt5opengl5 libqt5positioning5 libqt5printsupport5 libqt5quickcontrols2-5 libqt5quicktemplates2-5 libqt5quickwidgets5 libqt5script5 libqt5sensors5 libqt5sql5
      libqt5sql5-sqlite libqt5test5 libqt5texttospeech5 libqt5virtualkeyboard5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5webchannel5 libqt5webengine-data libqt5webenginecore5 libqt5webenginewidgets5 libre2-5 libscim8v5 libsignon-plugins-common1 libsignon-qt5-1 libsnapd-qt1 libtaskmanager6 libvoikko1
      libweather-ion7 libxcb-composite0 libxcb-cursor0 libxcb-damage0 libxcb-dpms0 libxcb-record0 libxcb-res0 libxml2-utils libzip5 media-player-info milou oxygen-sounds phonon4qt5 phonon4qt5-backend-vlc plasma-browser-integration plasma-desktop plasma-desktop-data plasma-discover plasma-discover-backend-fwupd
      plasma-discover-backend-snap plasma-discover-common plasma-framework plasma-integration plasma-pa plasma-thunderbolt plasma-workspace plymouth-label polkit-kde-agent-1 powerdevil powerdevil-data python3-ibus-1.0 python3-pyqt5 python3-sip qdbus-qt5 qml-module-org-kde-activities qml-module-org-kde-bluezqt
      qml-module-org-kde-draganddrop qml-module-org-kde-kcm qml-module-org-kde-kconfig qml-module-org-kde-kcoreaddons qml-module-org-kde-kholidays qml-module-org-kde-kio qml-module-org-kde-kirigami2 qml-module-org-kde-kquickcontrols qml-module-org-kde-kquickcontrolsaddons qml-module-org-kde-kwindowsystem
      qml-module-org-kde-newstuff qml-module-org-kde-people qml-module-org-kde-purpose qml-module-org-kde-qqc2desktopstyle qml-module-org-kde-quickcharts qml-module-org-kde-runnermodel qml-module-org-kde-solid qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtgraphicaleffects
      qml-module-qtmultimedia qml-module-qtqml-models2 qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-layouts qml-module-qtquick-privatewidgets qml-module-qtquick-templates2 qml-module-qtquick-virtualkeyboard qml-module-qtquick-window2
      qml-module-ubuntu-onlineaccounts qtchooser qtvirtualkeyboard-plugin qtwayland5 sddm sddm-theme-debian-maui sgml-base sgml-data signon-plugin-oauth2 socat software-properties-qt sonnet-plugins systemsettings user-manager xdg-desktop-portal xdg-desktop-portal-kde xml-core xsettingsd
    0 upgraded, 408 newly installed, 0 to remove and 0 not upgraded.
    Need to get 190 MB of archives.
    After this operation, 788 MB of additional disk space will be used.
    Do you want to continue? [Y/n]


    Хотя сравнил с sudo apt-get install --download-only и не заметил разницы в списке пакетов.

    но скачиваются не все пакеты((
    Так понимаю, что скачиваете на другом ПК, а потом переносите пакеты туда, где нужно установить? Возможно, скачиваются не все, потому что часть пакетов на том ПК уже установлена.
    Ответ написан
    2 комментария
  • Стоит ли работать специалистом техподдержки в банке?

    hint000
    @hint000
    у админа три руки
    Рекомендую поработать там один год. Кое-какой полезный опыт это даст (в том числе soft skills поднимите), но долго засиживаться не стоит. Некоторые начинают уважительно относиться, увидев в резюме, что вы работали в банке. Не знаю почему (объективных причин вроде нет), но такие стереотипы имеют место. Так что поработайте. Возможно, вас выжмут, как лимон, но за один год не успеете сдохнуть, зато соберёте небольшую финансовую подушку для поиска другой работы.
    Ответ написан
    1 комментарий
  • Фриланс как аналог удаленки на компанию возможен?

    @mrisid
    Если у вас нет прокаченного профиля на фриланс биржах то скорее всего сначала будет сложно.
    По поводу заработка: все зависит от того насколько вы хорошо умеете решать задачи которые чаще всего попадаются на рынке, и сколько заказов вам будет перепадать.
    Зайдите на фриланс и посмотрите задачи которые там выдвигают, попробуйте решить наиболее востребованные и проверьте насколько хорошо у вас это получается.
    Если вы будете очень качественно и быстро выполнять заказы то вполне возможно что вы сможете быстро заполучить хорошие отзывы и доверия к вам будет больше.
    (доверие => больше клиентов => больше заказов => больше денег)
    Важно то, насколько востребовано решение тех задач которые вы решаете.

    Итог: Если вы будете ОЧЕНЬ усердно работать и исключительно качественно выполнять заказы то таких целей вполне можно добиться.
    Ответ написан
    3 комментария
  • В чём главное различие между Nginx и Apache?

    Lynn
    @Lynn
    nginx, js, css
    Nginx начинается на N, а Apache на A.
    Ответ написан
    Комментировать
  • Исполнитель удалил проект с сервера заказчика?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    Так не честно) Удалить надо было только половину))
    Ответ написан
    1 комментарий
  • Как запустить докер с бинарником скомпилированным из го?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Почему в ENTRYPOINT делается chmod? Надо просто ./client или даже полный путь /app/client.
    Ответ написан
  • Как правильно организовать обслуживание и работу с большой БД?

    Vamp
    @Vamp
    Касательно mysql знаю три варианта:

    1. Утилита pt-online-schema-change. Создаёт пустую копию исходной таблицы, делает на ней alter, копирует данные из исходной таблицы и в конце меняет местами старую и новую таблицы.

    Пользовался этой утилитой пару раз. Хорошо работает.

    2. В mysql 5.6 появилась возможность делать alter без блокировок средствами самой субд. Нужно в alter добавить парочку новых параметров:
    ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
    Этот вариант я сам не пробовал, поэтому прокомментировать не могу.

    3. Самый сложный вариант с использованием двух инстансов mysql, связанных master-master репликацией:

    1. Делаем alter на втором сервере
    2. Ждём, когда второй сервер догонится по репликации
    3. Переключаем сервис на вторую базу
    4. Ждем какое-то время, смотрим, нормально ли приложение работает с новой схемой, нет ли деградации или ошибок
    5. Делаем alter на первой базе
    6. Ждём догона репликации
    7. Возвращаем сервис на первую базу

    С этим вариантом я работаю постоянно. Выглядит просто, но на деле много нюансов.

    Нужно обязательно пропускать alter мимо репликации:
    SET sql_log_bin = 0;
    ALTER TABLE tbl_name ...;
    Важно не забыть про sql_log_bin = 0, иначе alter по репликации переедет на соседний сервер и залочит таблицу уже там. А переключать сервис нельзя, пока репликация не догонится.

    Если меняется структура таблицы - добавляется/удаляется колонка или меняется их порядок, нужно обязательно проследить чтобы тип репликации обязательно был STATEMENT. Иначе репликация приляжет на первом же запросе в формате ROW с примерно такой странной ошибкой:

    Column 25 of table 'mydb.mytable' cannot be converted from type 'varchar(255)' to type 'bigint(20) unsigned'


    А со STATEMENT нужно следить чтобы приложение нигде не понижало уровень изоляции ниже REPEATABLE READ, иначе получит ошибку:

    Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
    Ответ написан
    Комментировать
  • Можно ли с помощью одной команды вывести размер всех дисков в json формате?

    romesses
    @romesses
    Backend инженер
    Погуглил:
    https://stackoverflow.com/questions/35211716/store...
    Кроме того, выдержка из man df:
    --output[=FIELD_LIST]
                  use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted.
    
    И далее внизу:
    
           FIELD_LIST is a comma-separated list of columns to be included.  Valid field names are: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size',
           'used', 'avail', 'pcent', 'file' and 'target' (see info page).
    Ответ написан
    Комментировать
  • Можно ли с помощью одной команды вывести размер всех дисков в json формате?

    df -h --output="source,pcent" | tr -s ' ' | csvjson -d' '

    csvjson - утилита из пакета csvkit в Debian/Ubuntu
    Ответ написан
    1 комментарий
  • Возможно ли установить контейнер как сервер?

    romesses
    @romesses
    Backend инженер
    Если у вас вычислительные задачи на том контейнере, то есть немалая вероятность, что вам не удастся выиграть отказом от Docker.
    Пожалуй, разве только если вы запускаете контейнер слишком часто. Тогда это будет иметь смысл. Но тогда вы неправильно пользуетесь Docker.

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

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

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

    p.s. убери из требований zip архив (точнее не храни его так, формируй по требованию), тогда резервирование можно оптимизировать на уровне файлов или даже файловой системы (например btrfs позволяет получать диф снапшота на лету в виде файла и вносить эти изменения в другом месте)
    Ответ написан
    6 комментариев
  • Как организовать инкрементальный бэкап S3?

    romesses
    @romesses
    Backend инженер
    Как чисто "наколенный" вариант, использовать:

    EC2 инстанс с запускаемым софтом:
    1. Монтирование S3 (source, target) в качестве папки: goofys или s3fs.
    2. В качестве резервирующего ПО: Bup для дедупликации. Умеет подобно Git...
    На входе папка исходного бакета, а на выходе - целевая.

    Сам не пробовал. Просто как идея.
    Ответ написан
    2 комментария
  • Запрос mysql, что не так?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Синтаксис:
    SELECT * FROM `advert` WHERE `active` = '1' AND `type` = '1' ORDER BY `price`;


    проверяем: SQL online
    Ответ написан
    Комментировать
  • Как заблокировать обновление hwe ядра Linux?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Меня это тоже задолбало. Подтверждаю, ни один из известных гуглу способов запретить обновлять ядро - не работает (по крайней мере в Ubuntu 20.04). Решил проблему довольно легко. Нашел через браузер в репозитории Debian ядро 4.19 (поддержка его до декабря 2025, но вы можете поискать другие версии) - скачал 4 deb-пакета:
    1. linux-modules-4.19.0-041900-lowlatency_4.19.0-041900.201810221809_amd64.deb
    2. linux-headers-4.19.0-041900_4.19.0-041900.201810221809_all.deb
    3. linux-image-unsigned-4.19.0-041900-lowlatency_4.19.0-041900.201810221809_amd64.deb
    4. linux-headers-4.19.0-041900-lowlatency_4.19.0-041900.201810221809_amd64.deb

    установил так sudo dpkg -i *.deb
    Далее перезагрузился на ядро 4.19 и удалил ядро 5.xx. Все, проблема решена.

    PS: Если присмотреться, то можно увидеть, что есть 2 пакета с заголовками, их нужно именно 2. Если один из них будет отсутствовать, то заголовки не установятся(или установятся, но будут сломаны пакеты - не помню уже). Заголовки на работу системы не влияют, но их отсутствие может подкинуть проблем при установке некоторого софта - например, VirtualBox.
    Ответ написан
    9 комментариев