• Как сделать id usb-устройства статическим?

    @ceh9_lat Автор вопроса
    После долгих поисков я наткнулся на интересный файл /etc/modprobe.d/alsa-base.conf
    У меня его содержимое было таково:
    options snd-usb-audio index=1
    # autoloader aliases
    install sound-slot-0 /sbin/modprobe snd-card-0
    install sound-slot-1 /sbin/modprobe snd-card-1
    install sound-slot-2 /sbin/modprobe snd-card-2
    install sound-slot-3 /sbin/modprobe snd-card-3
    install sound-slot-4 /sbin/modprobe snd-card-4
    install sound-slot-5 /sbin/modprobe snd-card-5
    install sound-slot-6 /sbin/modprobe snd-card-6
    install sound-slot-7 /sbin/modprobe snd-card-7
    
    # Cause optional modules to be loaded above generic modules
    install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; }
    #
    # Workaround at bug #499695 (reverted in Ubuntu see LP #319505)
    install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; }
    install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; }
    install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; /sbin/modprobe --quiet --use-blacklist snd-seq-oss ; : ; }
    #
    install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; }
    # Cause optional modules to be loaded above sound card driver modules
    install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; }
    install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; }
    
    # Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)
    install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; }
    # Prevent abnormal drivers from grabbing index 0
    options bt87x index=-2
    options cx88_alsa index=-2
    options saa7134-alsa index=-2
    options snd-atiixp-modem index=-2
    options snd-intel8x0m index=-2
    options snd-via82xx-modem index=-2
    options snd-usb-audio index=-2
    options snd-usb-caiaq index=-2
    options snd-usb-ua101 index=-2
    options snd-usb-us122l index=-2
    options snd-usb-usx2y index=-2
    # Ubuntu #62691, enable MPU for snd-cmipci
    options snd-cmipci mpu_port=0x330 fm_port=0x388
    # Keep snd-pcsp from being loaded as first soundcard
    options snd-pcsp index=-2
    # Keep snd-usb-audio from beeing loaded as first soundcard
    options snd-usb-audio index=-2

    и это именно тот файл, где можно статически привязать звуковые карты
    Так как я хотел задать статические значения для звуковых устройств, если смотреть их через aplay - l, то это цифра, после слова "card", пришлось залезть в /proc/asound/, где я увидел card1 и card2, если заглянуть в эти директории, то можно увидеть файл usbid, в котором увидел значения наподобие xxxx:xxxx, далее, я взял это значение и прописал его в /etc/modprobe.d/alsa-base.conf в виде
    options snd-usb-audio index=2 id="xxxx:xxxx"
    где snd-usb-audio - это идентификатор любой usb-аудиокарты
    index - порядковый номер
    id - usbid, а котором говорилось выше
    После добавления перезагрузил машину, прописал aplay - l
    и получил желаемый результат, сколько бы не перезагружался, сколько бы не переставлял карты, они всегда будут под тем номером, который я прописал в index
    Ответ написан
    Комментировать
  • Как вы планируете нагрузку команды?

    sha256
    @sha256
    У меня проект ушел в текучку, стараюсь балансировать нагрузку внутри команды с учетом сложности направлений, объема новых задач и консультаций, магической формулы не знаю. Все задачи ведём в битрик24, но из-за ограниченности платформы много собственной "нахлабучки". В качестве аналитики используем внутренние отчеты, иногда выгружаем их в google Таблицы, где уже смотрим провалы и перегрузы.
    Ответ написан
    Комментировать
  • Какие грэйды развития внутри вашей компании?

    @ivodopyanov
    NLP, python, numpy, tensorflow
    Для Junior -> Middle надо разбираться в том продукте, который клепаете.
    Для Middle -> Senior надо уметь писать не говнокод; понимать как проектировать архитектуру так, чтобы через годик-другой её не хотелось бы выкинуть на помойку. Senior часто занимается реализацией нового функционала, к которому после него еще будут другие разработчики прикручивать фичи по желаниям заказчика.

    Какие-то критерии для переходов и грейды есть, но это просто бумажка\табличка в Excel. Обычно всё обсуждается лично на performance review.
    Ответ написан
    Комментировать
  • Какие грэйды развития внутри вашей компании?

    @kek123
    У нас есть сетка грейдов, состоящая из навыков и опыта. два раза в год интервью с начальником отдела разработки.
    Ответ написан
    1 комментарий
  • Какие грэйды развития внутри вашей компании?

    VirmarY
    @VirmarY
    Full-stack web developer
    У нас есть градация по определенной шкале. Это число получаемое из комбинации опыта в годах (т.е. ЗП будет расти просто за стаж, но не сильно), реальных навыков и уровня ответственности. От этого числа зависит твоя ЗП. Каждый из этих пунктов расписан и ты можешь посмотреть, что нужно делать , чтобы получить уровень выше. Выполнил условия - получил плюшку. Если застрял между двумя уровнями - тут решение уже за менеджером, какой уровень будет засчитан. Ревью два раза в год + индексация + премии.
    Ответ написан
    2 комментария
  • Какие грэйды развития внутри вашей компании?

    У нас нет уровней, нет грейдов, нет карьерного роста, нет тимлида, нет повышения зарплаты
    Ответ написан
    Комментировать
  • Как оптимизировать видео, вставляемое в качестве фона?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Уменьшите битрейт и разрешение видео.
    Переместите метаданные в начало mp4 контейнера
    Установите preload="metadata"
    htmlbook.ru/html/video/preload

    Чтобы пиксели в глаза не бросались наложите на видео сеточку из маленьких черных точек
    https://jsfiddle.net/soumyabg/wefLyrhp/
    css background dotted overlay
    Ответ написан
    5 комментариев
  • Какую программу (способ) для оптимизации изображений для сайта Вы используете?

    Mouvdy
    @Mouvdy
    https://tinypng.com и их API

    #!/bin/bash
    API_KEY="ВАШ АПИ"
    
    if [ $API_KEY = "CHANGE_ME" ]
    then
      echo "CHANGE THE API_KEY in this file."
      exit 1
    fi
    
    if ! type "jq" > /dev/null
    then
      echo "Please install `jq`"
      exit 1
    fi
    
    find /var/www/mobil1/data/www/site.com/files/categories -type f \( -name  \*.jpg -o -name \*.png -o -name \*.jpeg \) -print0 | while IFS= read -r -d '' file; do #Директория в которой искать файлы для оптимизации
    
      json=$(curl -sS --user api:$API_KEY --data-binary @$file https://api.tinypng.com/shrink)
      url=$(jq -n "$json.output.url" | sed -e 's/^"//'  -e 's/"$//')
    
    curl -sS $url > $file
    done
    Ответ написан
    1 комментарий
  • Как уменьшить тысячи картинок во всех подпапках?

    sim3x
    @sim3x
    Нужны пакеты
    sudo apt-get install jpegoptim imagemagick optipng
    mogrify

    бекапимся
    все будет происходить на месте - файлы заменяются
    начиная с текущей папки и далее в глубину

    Оптимизируем jpeg
    find . -type f \( -name "*.jpeg" -or -name "*.jpg" \) -exec mogrify -resize x100 -quality 90 {} \; -exec jpegoptim -o --strip-all {} \;


    Оптимизируем png
    find . -type f -name "*.png" -exec mogrify -resize x100 {} \; -exec optipng -o1 {} \;


    mogrify -resize ШИРИНАxВЫСОТА -quality КАЧЕСТВО
    если высоты(ширины) нет, то изменяем пропорционально

    optipng -o9 file.png
    максимальное количество проходов по изображению, очень эффективно для запущенных случаев, очень-очень долго
    пару минут на файл 1500х1500

    optipng -o5 file.png
    просто долго

    # код предоставляется как есть

    # почему оптипнг - он офигительный

    # для других типов картинок меняем find и ищем каким софтом их оптимизируют
    Также можно сконвертить картинки в пнг-жпг, но часто это как-то нужно синхронизировать с бд, и тут нет простого пути
    Ответ написан
    12 комментариев
  • Книги для изучения symfony?

    "Один год с Symfony" перевели на русский язык.
    hudson.su/kniga-odin-god-s-symfony
    Ответ написан
    Комментировать
  • Какую защиту использовать от спам ботов?

    @egorinsk
    Повторяю способы защиты, выбирайте любой, который нравится:

    Начнем со случая, когад у вас маленький (меньше 100 тыс юников в день/1 млн зарегистрированных юзеров) сайт.

    1) Сделать невидимое поле с именем email. 98% ботов-дебилов его заполнят, дальше вы понимаете, что с ними делать и куда вносить их IP. Чтобы не палиться, не пишите style=display:none, а скройте его чуть хитрее.

    Этот способ у меня отсеивает практически всех ботов на одном сайте. Правда, там боты, не заточенные под сайт, а просто, которые ходят и заполняют все формы подряд своей рекламой. Типа Хрумера наверно.

    2) Заполняемое яваскриптом поле типа hidden. Куча ботов не выполняют яваскрипт. Куки, кстати, наоборот, большинство ботов исправно присылают. Реферер и юзер-агент тоже обычно у них правильный.

    3) Более радикальный подход — убрать кнопку submit, заменив ее на div, который по событию onclick собирает значения полей формы и отправляет их аяксом. Аттрибут action тега form сделать указывающим на скрипт-ловушку. Если бот не написан специально под ваш сайт, он тупо не сможет отправить такую форму.

    Ок, допустим, вам не повезло, и ваш сайт с миллионами пользователей атакуют спамеры специально написанными скриптами. Что мы можем вам предложить?

    4) Добавлять вычисляемые/расшифровываемые яваскриптом поля. Внезапная смена алгоритма шифрования в 2 часа ночи скорее всего сдаст тех ботов, которые смогли через нее пробиться, но не успели переписать алгоритм.

    5) Проверять поддержку клиентом Flash (загружать флешку и через нее подписывать форму кодом).

    6) Проверять соответствие User-Agent и уровня поддержки технологий HTML5/CSS3 (например, определенные версии браузеров не поддерживают border-radius, другие поддерживают, и тд.)

    Более серьезные возможности дают методы статистического анализа. Например, можно вычленять из сообщений несловарные слова (это будут ссылки например) и анализировать источники их отправки. Например, если 1000 пользователей начинает за час отправлять по 100 сообщений не-друзьям с одним и тем же словом super-shop — это явный признак спам-рассылки. Для таких систем надо собирать статистику и писать белые/черные правила, вводить негласные лимиты подозрительных действий, в общем. серьезная работа.

    Можно, как вконтакте, привязывать аккаунты к телефонам. это работает.

    Еще немного рассуждений на эту тему тут: habrahabr.ru/qa/16920/#answer_70019

    А использование капчи в формах говорит о лени/низкой квалификации/урезанном бюджете или непрофессионализме и причиняет неудобства пользователям.
    Ответ написан
    1 комментарий
  • Как получить поле соединительной таблицы?

    viktorvsk
    @viktorvsk
    Как раз для таких целей рекомендуется вместо has_and_belongs_to_many использовать has_many through:
    Ответ написан
    1 комментарий
  • Решение размытия шрифта из-за transform:translate()?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    #1:

    -webkit-font-smoothing: subpixel-antialiased;
    -webkit-transform: translateZ(0) scale(1.0, 1.0);


    #2

    transfom: scale(2); 
    zoom: 0.5;
    Ответ написан
    Комментировать
  • Можно ли сделать такое на CSS?

    MindMinimal
    @MindMinimal
    Front-end Developer, веб-разработчик
    Как писали выше - бордер радиусом будет где-то так - нужно смотреть и править. Соглашусь с вариантом SVG
    Ответ написан
    Комментировать
  • Зафиксировать элементы подвески по оси Z в Unity3D?

    Dimusikus
    @Dimusikus
    Любитель
    Я не знаю как именно у Вас реализована скриптовая часть подвески, но фиксировать элементы в определённых углах можно функцией:
    RotateX =  Mathf.Clamp(flaot RotateX, float min, float max)

    она жёстко держит значения в диапазоне min........max. Можете контролировать углы этой функцией.
    Ответ написан
    1 комментарий
  • Запуск скрипта ruby по крону?

    Попробовать так:
    * * * * * cd $HOME && $HOME/.rvm/gems/ruby-2.2.5/wrappers/ruby $HOME/myapp/db_backup.rb

    А лучше добавить к шапку скрипта
    #!/home/user/.rvm/gems/ruby-2.2.5/wrappers/ruby
    и добавить права на запуск

    А в crontab
    * * * * * cd $HOME && $HOME/myapp/db_backup.rb
    Ответ написан
    2 комментария
  • Как развиваться начинающему web-разработчику?

    @toZavtra
    Принимаю заказы, пишите vasya@incream.org
    Послушай человека, у которого 4 года опыта управления веб-студией.

    Тебе нужно в первую очередь понять, где ты хочешь работать и только потом уже думать о технологиях и их прокачке. Когда ты узнаешь, где ты хочешь работать, над какими проектами, то узнаешь и какие технологии там используются. Потом устраивайся туда junior'ом и так вырастешь быстрее всего.
    Заодно, посмотришь, надо ли тебе оно и может тебе идти в другую область с другими технологиями.

    Помимо программистских советов есть еще чисто практичные и зачастую они решают, например, ты любишь делать законченный продукт или ковыряться в старом коде? Все эти басни и бредни про фреймворки, пойми, эти люди, которые до тебя писали код на твоей будущей работе, мозгами намного хуже тех же программистов, которые создали тот же Wordpress, зато они позволяют себе хаять его. Так вот ты придешь и будешь за таким человеком искать ЕГО баги 4-х летней давности. А представь, что баги эти от кривой архитектуры.

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

    Поэтому, в чем лучше кодить: в wordpress или в каком-нибудь symfony - это вопрос спорный, холиварный. Ни то ни другое не идеальное. Соответственно, какой стек технологий тебе учить, выбирать нужно отталкиваясь от того, чем хочешь заниматься. А учить стек лучше не на курсах, а идти джуниором.

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

    Потом, не забывай еще главное, мы живем в стране, где даже автомобиль нормальный сделать не могут, качество разработки здесь абсолютно такое же, то есть никакое, люди они одинаковые, что в АВТОВАЗЕ, что в Яндексе, поэтому на весь этот флёр вокруг каких-то там разработчиков клади болт.

    Я тебе расскажу, как это работает с точки зрения бизнеса в России, а не со стороны парняги в свитере и очёчках:
    1) Есть богатый дядя, который наворовал в своё время денег, у него есть сын, сын начитался хабра и бизнес молодости, взял у бати своего миллионов 50-100 и пошел пилить абсолютно никому не нужный стартап, нанял 30 человек, поставил компы, вот сюда нужно знать не столько сами технологии, сколько МОДНЫЕ технологии, смотришь модные тренды и их учишь или просишься джуниором, вауаля, и вот ты в струе.
    Делали делали, сыночке надоело пилить стартап, у него пати на мальдивах, свадьба, дети и тд - все разбежались.
    2) Есть государство или крупная контора, которая так или иначе, принадлежит кому-то из власть имущих, им нужно какой-то проект, они этот проект отдают фирме (то есть сыну, брату, свату), у которой сайт визитка. Эта фирма отдаёт это другой фирме, та отдает это еще двум-пяти фирмам. Где-то там в конце сидишь ты за компом и делаешь то, что тебе написали в ТЗ. Чтобы тебе что-то изменить в этом ТЗ, это должно пройти через 8 ртов и кучу согласований, и ты вообще лучше сиди и поменьше высовывайся. В таких конторах будешь пилить и пилить какую-нибудь хрень, в которой уже запутались все вокруг, но ты как-то делай, ведь скоро сдача. А потом они за два дня до сдачи, всей аравой посредников и программистов собираются в одном месте и наконец-то звонят главному заказчику и спрашивают, а как надо делать, то есть то, что ты спрашивал месяц назад. Иногда этот брейншторм помогает, иногда нет. Как туда устроиться? Опять таки, иди джуном.
    Примечательно, что качество продукта таких контор обычно хуже самой захудалой Джумлы, зато там все хаят CMS, но чтобы им в продукте прикрутить голосовалку, им нужно напрячь 8 ртов, распилить бюджет в тысяч 180-400, через кучу согласований сделать всё через жопу, но через ООП и какую-нибудь Symfony. Круто.
    3) Компании типа Яндекса, каких-нибудь банков. В таких компаниях обычно умные люди только на самом верху - это основатели компании, усмотреть за всеми аспектами фирмы им технически невозможно, поэтому часть продукта у них хорошая, основная, например, как поиск у гугла, а 90% других сервисов полное говно (посмотрите, что сделали эти "умы" из яндекса, вроде, с кинопоиском). Зато ЧСВ у каждого там Васи на уровне основателя компании. Вот эти Васи и делают там 90% продуктов, которые, как-бы второстепенны. Чтобы туда попасть надо не технологии учить, а изучать тренды какого-нибудь хабра, что там сейчас ценятся, какие авторы зарубежные: "Мега алгоритмическое программирование Алана Коуэла" и тд, таких книжек прочитать штук 10, выучить всё азы чистого программирования без фреймворков, одеться как мудак, чтобы выглядеть еще мудачее того гика, который тебя будет собеседовать, а то они ранимые и завистливые и опять таки, устроиться джуном.
    4) Компании локальные по созданию сайтов и прочего программирования. В таких фирмах свободы намного больше, чем в первых трёх, но нет столько денег, зато сразу видно продукт, который делаешь. Тут тебе пригодится и вордпресс и битрикс. Туда тоже лучше идти джуном. В таких компаниях шанс того, что ты потом запустишь боком собственный проект намного выше, т.к. у тебя будет опыт создания веб-сервисов, сайтов за Реальные сроки и ты будешь видеть ход их развития. Но с точки зрения денег, редкий случай, когда они тебе могут предложить даже столько, сколько в стартапе.
    Поэтому, если для души программировать, получать удовольствие, то варианты 1 и 4. Если хочется работы, от которой многие воют, то 2, 3.

    5) Есть еще компании, которые работают на запад, денег сейчас там в теории, может быть столько же, сколько и в стартапе у богатого буратино, там тебе сильно повезет, если будете делать пункт 4, если 2-3, то можешь брать веревку и мыло.
    Стартапы таким компаниям дают мало когда, ведь хипстеру миллионеру нужна атмосфера, нужны работнички перед глазами, а не на аутсорце. А вот латать баги в 6 летнем коде по цене продавщицы в ларьке Нью-Йорка - это запросто, это аутсорц. Текучка в таких местах дикая, поэтому они, отчаявшись, ищут негров за рубежом, никто вменяемый этим заниматься не хочет у них на родине. Поэтому если на аутсорце будет создание сайтов или каких-нибудь новых систем, это большая удача.
    Туда тоже нужно идти джуниором. Еще они почти всегда требуют английский, а если у тебя есть английский, зачем тебе они?

    6) Учишь английский, вордпресс, джумлу, магенто, цсс и идешь искать клиентов на английском языке. Из тебя вылупляется фрилансер, в перспектике открываешь собственную контору номер 5.

    Есть еще лайфхак, берешь абонемент в дорогой фитнес центр и знакомишься там с парнями, когда-нибудь тебе повезет и выйдешь на кого-нибудь богатого из чиновничков или олигаршьих родственников. Всем говори, что ты программист и у тебя есть "команда". Этого хватит, у богатых всегда "куча идей" куда бы просрать бабки (стартап) или наоборот где-то "намутить денег" (пункт 2). Они тебе сами предложат "тему", если ты обмолвишься, что ты программист. Всё, что у тебя будет к тому моменту, это сайт визитка, понимаешь к чему я клоню? Пункт 2, но ты будешь сверху, вторым ртом. Если повезет, будет и пункт 1, но ты будешь ко-фаундерем, ты посмотришь модные технологии и будешь под смузи составлять вакансии с reactJS, Angular, high load и еще кучу умных слов. А на биржах заказы пусть обычные люди ищут, которые за деревьями леса не видят. Или идут через жопу в пункт 2, когда надо заходить с другой стороны. Think different.
    Тот, кто на основании выше написанного лайфхака понял, что он ходил по кругу, а ключик в другом месте открывается, может мне скинуть денег за совет на кошелек R738086405346
    Точнее, это даже не совет, это инструкция, которая действительно рабочая.
    Ответ написан
    2 комментария
  • Как реализовать мультиплеер на socket.io?

    norlin
    @norlin
    я сейчас делаю прототип игры, используя следующую логику:
    1. всё состояние игры хранится на сервере (положения объектов и т.д.)
    2. каждый тик сервер отправляет на клиент пакет с данными об объектах, которые попадают в поле видимости данного клиента (в зависимости от его местоположения)
    3. клиент в свой клиентский тик отрисовывает последние полученные данные
    4. клиент слушает команды ввода и моментально отправляет их на сервер
    5. сервер двигает объекты в соответствии с получаемыми командами
    6. goto п.2

    Ключевой момент - клиент не может сообщать серверу изменения состояний объектов. Клиент может сообщать только пользовательский ввод, а уж как на него реагировать – решает сервер.

    Порядок пунктов у меня не совсем такой для серверного тика, по факту вот так:
    серверный тик:
    1. обновление состояния объектов в зависимости от комманд и прочих данных
    2. проверка коллизий
    3. обновление клиентов
    Ответ написан
    1 комментарий