• Оценка проделанной работы за день у программиста, как оценить?

    robux
    @robux
    бородат
    Вот моё мнение по поводу оплаты труда программиста:
    1. Количество написанных строк обязательно должно оплачиваться деньгами, либо как основная оплата ("сколько написал -- столько получил, например 35 руб./строка"), либо в качестве поощрения ("фикса 20 тыс. руб./месяц + 25 руб./строка").
    2. Новые строки кода должны разделяться на разные виды и оплачиваться по-разному:
    1) абстракции (описание классов, структур, заголовки модулей, названия методов) и пустые строки -- 0 руб. (т.е. не учитываются в оплате за строки кода)
    2) рабочий код (тело методов, тело функций, тело процедур и т.п.) -- 70 руб./строка*
    3) определение констант, массивов, переменных вне тела методов -- 10 руб./строка
    4) комментарии (не более 10% от всего числа строк) и todo -- 5 руб./строка
    5) документация, changelog, bugfix-файлы -- 20 руб./строка.

    *Цена за рабочий код зависит от языка программирования, для низкоуровневых языков она должна быть меньше, для высокоуровневых -- больше, например:
    - Си -- 50 руб.
    - С++, Pascal, PHP -- 60 руб.
    - Ruby и Python -- 70 руб.
    Ну и так далее.

    3. Измененные строки (не новые) должны оплачиваться в 30%-50% от новых.
    4. Перенесенные строки (не изменялись, просто перенесены) - не оплачиваются.

    Учёт строк должен проводиться по распечатанному "git diff" или специально написанными для этого утилитами.

    Помимо оплаты за строки кода желательно оплачивать:
    1) фикса в месяц -- например, минимум 15 тыс. руб./мес. включающие оплату первых строк кода (т.е. напишет или не напишет на 15 тыщ, но всё равно получит, даже если весь месяц ни строчки не написал, или писал, но на 15 тыщ не написал). Это что-то типа подушки безопасности для новичков.
    2) время, проведенное в офисе -- например, 50 руб./час. Это не должно быть много, но должно стимулировать писать в офисе, а не из дома. Для работодателя, пишущий в офисе эффективнее, чем пишущий дома, т.к. он вживую общается с коллегами и больше пишет кода. К тому же присутствующий в офисе участвует в мозговых штурмах, совещаниях и тому подобном, что тоже положительно скажется на процессе. Чтобы не просыпали, первый утренний час сделать дороже, например 100 руб./час. Учёт входов и выходов вести турникетом по электронной карте или паролю номеронаберателя. Бюджетно - положить самозаполняемый журнал на тумбочку или бумажки, ручку и ящик с прорезью. Можно рядом повесть веб-камеру.
    3) бонус за выполнение поставленной задачи. Работодатель перед раздачей заданий сотрудникам может оценить каждое из них, например:
    - Написание GUI для ввода формы "Счета на оплату" - 3200 руб.
    - Реализация сетевого обмена записями по подпискам - 7500 руб.
    - Сохранение сообщений об ошибках в лог-файл - 1000 руб.
    Ну и так далее. Бонус учитывает сложность и срочность выполнения с точки зрения работодателя.

    При описанной мной системе программист будет мотивирован:
    1) больше писать рабочего кода, меньше плодить абстракции и витать в облаках
    2) стараться проводить больше времени в офисе
    3) брать "горячие" задания и выполнять их как можно быстрее
    4) не бояться остаться без денег (актуально для новичков).

    Все цифры приведены примерно и должны подбираться экспериментально конкретно для вашей ситуации.
    Ответ написан
  • Thinstation2.2.2i и Win Server 2012R2 не отображается курсор, как исправить?

    robux
    @robux
    бородат
    Мужики советуют отключать тень курсора мыши:

    Пуск - Панель управления - Мышь,
    вкладка «Указатели»,
    убрать галку «Включить тень указателя».
    Ответ написан
  • Как вернуть ярлычки листов в LibreOffice Calc?

    robux
    @robux
    бородат
    Была такая же проблема при выгрузке из 1С, решается так:
    Слева от нижней линейки прокрутки хватаешь мышкой за перекладину и вытягиваешь вправо, пока не появятся имена листов.
    Ответ написан
  • BootMgr в Windows 7 привязывается к железу через C:\Boot\BCD?

    robux
    @robux Автор вопроса
    бородат
    Проблема решена. Делюсь опытом.

    Я все ОСи (Linux, WinXP, Win7) клонирую через архивы *.tar.gz, загружаясь в линуксе с флэшки.
    Сидеть и целыми днями сюсюкаться с мастерами, затрачивая как обезьяна по 2 часа на комп - мне как-то не стреляет. К тому же в готовых образах уже установлены все программы - офисы, просмотрщики, сделаны настройки рабочего окружения и так далее.

    1. Linux.
    С линуксом проще всего - он не привязывается к железу.
    Пакуешь папки ./tar_root.sh:
    #!/bin/sh
    cd /
    tar --ignore-failed-read --exclude=var/cache/apt -czvf lubuntu1204.tgz bin boot etc home lib opt root run sbin usr var

    Потом распаковываешь, ставишь grub и готово (скрипт ниже).

    2. WinXP
    Хрюшу легко "отвязать" от железа: загружаешься в Безопасном режиме (по F8 в самом начале), заходишь в "Диспетчер устройств", удаляешь всё, что связано с чипчетом (например "Intel 45111"), жёстко выключаешь комп ВЫДЕРНУВ ШНУР питания из жопки, загружаешься в линуксе, правишь файл C:\Boot.ini:
    [boot loader]
    timeout=3
    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP disk 1 part 1" /noexecute=optin /fastdetect
    multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Windows XP disk 2 part 1" /noexecute=optin /fastdetect
    multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP disk 1 part 2" /noexecute=optin /fastdetect
    multi(0)disk(0)rdisk(1)partition(2)\WINDOWS="Windows XP disk 2 part 2" /noexecute=optin /fastdetect
    multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional Multiprocessor PC"  /fastdetect /noexecute=alwaysoff /hal=halmacpi.dll /kernel=ntkrnlmp.exe
    multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional"  /fastdetect /noexecute=alwaysoff /detecthal
    multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Multiprocessor PC with MPS"  /fastdetect /noexecute=alwaysoff /hal=halmps.dll /kernel=ntkrnlmp.exe

    и пакуешь всё это дело ./tar_win.sh:
    #!/bin/sh
    cd /mnt/win
    tar --ignore-failed-read --exclude=Windows/Temp -czvf winxp.tar.gz WINDOWS "Documents and Settings" "Program Files" AUTOEXEC.BAT Bootfont.bin CONFIG.SYS IO.SYS MSDOS.SYS NTBOOTDD.SYS NTDETECT.COM boot.ini ntldr

    Распаковываешь на новой машине из-под линукс, обновляешь груб:
    update-grub
    и готово.

    3. Windows 7
    Похоже на WinXP, но в безопасном режиме ПЕРЕД удалением чипсетов из Диспетчера устройств нужно ПОПРАВИТЬ РЕЕСТР (запустить regedit), чтобы избежать синего экрана BSOD 0x0000007B, цитирую первоисточник:

    Первым делом необходимо удалить ветку реестра HKLM\SYSTEM\MountedDevices.

    Теперь нужно включить запуск сервисов, загружающих стандартные драйвера контроллеров IDE и SATA.
    Открываем ветку HKLM\SYSTEM\CurrentControlSet\services в левой части редактора реестра. Теперь проверяем следующие разделы в этой ветке: amdide, amdsata, amdxata, atapi, intelide, msahci, pciide. Параметр Start у каждого должен быть равен 0х00000000 (0). Значение Start=0 - запуск сервиса при загрузке Windows. Если он равен 0х00000003 (3) щелкаем два раза на имя параметра (Start) и меняем значение на 0 (рисунок ниже) и нажимаем ОК.

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

    Если проделанные действия не помогли и Windows 7 все равно не загружается и выдает ошибку STOP 0x0000007b, значит необходимый драйвер контроллера не загружается. Попробуем включить загрузку всех известных операционной системе драйверов.

    Для этого ставим значение параметра Start равным 0 в следующих сервисах: adp94xx, adpahci, adpu320, aic78xx, amdsbs, arc, arcsas, elxstor, HpSAMD, iaStorV, iirsp, LSI_FC, LSI_SAS, LSI_SAS2, LSI_SCSI, megasas, MegaSR, nfrd960, nvraid, nvstor, ql2300, ql40xx, SiSRaid2, SiSRaid4, vhdmp, vsmraid, aliide, cmdide, nvraid, viaide.

    Я включил первую пачку сервисов, а из второй - только оканчивающиеся на *ide.

    Потом питание системника тоже жёстко вырубаем, загружаемся в линукс, ПОДСОВЫВАЕМ C:\Boot\BCD, дополненный с помощью EasyBCD и подправленный через VisualBCDEditor, пакуем всё это барахло ./tar_win7.sh:
    #!/bin/sh
    
    cd /mnt/win
    tar --ignore-failed-read --exclude=var/cache/apt -czvf /mnt/data/Distr/Win7_x32.Gor.emp3.delink.tar.gz bootmgr \
      config.sys XELDZ autoexec.bat BOOTSECT.BAK Boot Windows Recovery "Program Files" ProgramData \
      "Documents and Settings" Users PerfLogs Progs

    Распаковываем (как и Хрюшу) на другом компе, запускаем update-grub и заменяем строчку в файле /boot/grub/grub.cfg:
    chainloader +1
    на:
    ntldr /bootmgr
    С первым вариантом Windows7 грузится не на всех машинах.

    Я щас везде ставлю Linux (Lubuntu), Grub2 и винду по желанию юзера. Всё делаю через скрипт ./install.sh, предварительно подправив пути дисков и папок:
    #!/bin/sh
    
    INST_DEV=/dev/sdb1
    INST_MNT=/mnt/vdorogu
    
    BOOT_DISK=/dev/sda
    
    LIN_DEV=/dev/sda3
    LIN_MNT=/mnt/root
    
    WIN_DEV=/dev/sda1
    WIN_MNT=/mnt/win
    
    ## For Ext4
    #tune2fs -o journal_data_writeback $LIN_DEV
    #tune2fs -O ^has_journal $LIN_DEV
    #e2fsck -f $LIN_DEV
    
    ## === Mount parts
    
    #mkdir $INST_MNT
    #mount $INST_DEV $INST_MNT
    #mkdir $LIN_MNT
    #mount $LIN_DEV $LIN_MNT
    #mkdir $WIN_MNT
    #mount $WIN_DEV $WIN_MNT
    
    ## === Install Linux
    
    cd $INST_MNT
    
    tar xvzfk ./iso/lubuntu1204.tar.gz -C $LIN_MNT
    
    cd $LIN_MNT
    
    mkdir cdrom
    mkdir dev
    mkdir media
    mkdir mnt
    mkdir mnt/win
    mkdir proc
    mkdir sys
    mkdir tmp
    
    chmod 777 tmp
    chmod 777 home
    
    grub-install --root-directory=$LIN_MNT $BOOT_DISK
    mount --bind /dev $LIN_MNT/dev
    mount --bind /proc $LIN_MNT/proc
    mount --bind /sys $LIN_MNT/sys
    
    chroot $LIN_MNT grub-install --recheck --no-floppy $BOOT_DISK
    chroot $LIN_MNT update-grub
    
    umount $LIN_MNT/dev
    umount $LIN_MNT/proc
    umount $LIN_MNT/sys
    
    ## === Install Windows
    
    cd $INST_MNT
    
    tar xvzf ./iso/winxp3sp3dnet.tar.gz -C $WIN_MNT
    #tar xvzf ./iso/win7gor32.tar.gz -C $WIN_MNT
    
    # === Edit fstab
    
    nano $LIN_MNT/etc/fstab


    Времени экономится куча, особенно полезно, если нужно быстро систему восстановить.
    Любая ОС ставится за 5 минут (распаковка архива) без обезьяних действий.
    Ответ написан
  • Руби или же питон?

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

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

    Руби кажется более структурированным и идеологически выверенным. Питон же более прагматичный язык. Но со временем понимаешь, что у питона есть свой шарм. Например после питона я постоянно норовлю двоеточие поставить, или end'ы «забываю» ставить )

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

    Поставь себе программистскую задачу. И выполни её на руби и на питоне.
    Сам почувствуешь, какой язык тебе ближе.
    Ответ написан
  • «Заикания» видео при активном скачивании торрентов на ubuntu?

    robux
    @robux
    бородат
    Судя по периоду 2-3 секунды, то затык возникает при подчитывании фильма в видео буфер проигрывателя, и скорей всего связан с тем, что диск перегружен на операции чтение/запись.

    Копать можно в следующих направлениях:
    1) использовать проигрыватель с упреждающим чтением
    Т.е. чтобы заранее заполнял буфер, а не сразу перед тем как предыдущий кончился.
    2) перед просмотром копировать фильм на отдельный физический диск (на второй HDD) или в RAM-диск
    3) снизить приоритет торрента, чтобы его операции чтения/записи ждали проигрыватель.
    Ответ написан
  • Gstreamer: можно ли соединить два Pipeline'а?

    robux
    @robux Автор вопроса
    бородат
    Ну хорошо, упрощу вопрос:
    можно ли хотя бы приостановить одну ветку после tee?

    Т.е. чтобы поток данных в эту ветку не шёл. Что-то типа паузы.
    Но пауза не на весь пайплайн, а на его отдельную ветку, м?
    Ответ написан
  • Интересует опыт открытия интернет-магазина строительных материалов?

    robux
    @robux
    бородат
    Сам недавно керамзитные блоки через интернет находил — очень удобно.
    Что касается логистики, то обзвони по газетке мужиков с газелями/бычками/кран-бортами и с ними работай. Тебе хорошо и им хорошо. Для безопасности заключи гражд. договоры или просто сканы паспортов возьми (можно при отправке первых заказов).
    Что касается рекламы, то во-первых сайт должен хорошо индексироваться, т.к. покупатели ищут материалы через поисковики. Во-вторых, для бригад напечатай пачку визиток и раздавай продвинутым строителям (лучше бригадирам или «хозяевам»), у которых есть ноутбуки или планшетники. Фирмы-бригады тоже можно найти по каталогам или газеткам.
    Ответ написан
  • Маленькая и дешевая ip-камера

    robux
    @robux
    бородат
    Посмотрев цены на IP-камеры, пришел к выводу, что дешевле собрать свой велосипед:
    • RaspberryPi + USB-вебкамера + WiFi-антена (1800+500+700=3000 руб.)
    • DIR320 (с OpenWrt) + USB-вебкамера (1200+500=1700 руб.)
    Кроме низкой цены, плюсы:
    1) можно повесить несколько камер
    2) гибкая настройка ПО
    3) дополнительные функции (например, открывание дверей или прослушка)
    Ответ написан
  • Посоветуйте Git сервер

    robux
    @robux
    бородат
    1. Git-хостеры на kernel.org.
    Смотреть «Framework is open-source?» — «Yes»
    2. Хостинг Git в Википедии.
    Возможно, у кого-то из них открытый движок.
    Ответ написан
  • На базе какой железки построить домашний сервер?

    robux
    @robux
    бородат
    Кроме RP можно еще бюджетный нетбук взять, на Atom или даже на ARM NVidia Tegra. По деньгам недорого получится, бесшумный и энергоэффективный.
    Ответ написан
  • Перевод терминов Git на русский?

    robux
    @robux
    бородат
    Работает локально:
    • init — инициализировать git
    • config — конфигурировать git
    • add — добавить файл/каталог в индекс
    • rm — удалить файл/каталог (из индекса и физически)
    • mv — переименовать файл/каталог (в индексе и физически)
    • commit — зафиксировать индекс
    • branch — создать ветку
    • merge — слить ветки
    • rebase — переслить ветки
    • checkout — встать на ветку
    • status — текущее состояние
    • diff — показать что изменено
    • remote — настроить связь с удалёнными

    Работает удалённо:
    • clone — клонировать (init+remote+pull)
    • fetch — забрать (без слияния)
    • pull — забрать и слить
    • push — отправить

    В остальное еще не вникал.
    Ответ написан