Archive

Archive for the ‘Всичко друго’ Category

Как да пишем по-добър код

Попаднах на много интересна статия, написана от Joel Spolsky, който е измислил кратък въпросник, съдържащ 12 върпоса за оценка на това, какви практики трябва да съществуват в една софтуерна компания, която иска да пише добър и продуктивен код.

Статията е дълга, но определено си заслужава четенето! Всички Team Leaders и Managers, който си мислят, че знаят всичко, нека обърнат внимание на точка номер 8, а именно: “Do programmers have quiet working conditions?”.

Според статията, ако отговорите на по-малко от 10 въпроса с положителен отговор, то компанията, в която работите има сериозни проблеми. От личен оптит съм склонен да го потвърдя.

Към текущият момент не мога да дам ясна оценка, защото от доста време нямам пряк контакт с компанията, но ще отговоря според мен какво се случваше в предишната такава, в която работех.
Не искам статията да звучи като критика или възхвала на това, което се е случвало там, но за целите на теста взимам въпросната фирма като база за сравнение и оценка.

The Joel Test

Do you use source control? – Да. Въпреки, че не всички проекти го използваха в началото, отговора е положителен.
Can you make a build in one step? – Да. Доста полезно, особено когато се налага да го правиш всеки ден.
Do you make daily builds? – Да. Потвърждава предишният ми отговор.
Do you have a bug database? – Да.
Do you fix bugs before writing new code? – Не. Това беше проблем, който се надявам с времето да е бил решен. Опитах се да въведа подобна практика, но кратките срокове за новите задачи изпреварваха “ремонтирането” на бъговете.
Do you have an up-to-date schedule? – Да, но не веднъж се случваше да се променя, в което няма лошо, защото все пак е up-to-date :-)
Do you have a spec? – Не. Никой програмист не обича да пише документация… А тя всъщност е толкова важна!
Do programmers have quiet working conditions? – Да/Не. Сложно… По-скоро да.
Do you use the best tools money can buy? – Не. Нещо, което винаги ми е тежало, а и не само на мен.
Do you have testers? – Да.
Do new candidates write code during their interview? – Да. Не точно по време на интервютата, но в последствие преди започване на работа, което смятам за положителен отговор на въпроса.
Do you do hallway usability testing? – Не. Отново, за съжаление не сме правили това.

8 от 12… не е зле, нали? А може би е доста зле?

Бих добавил още:
Успявате ли да поставяте реални срокове за изпълнението на задачите? – Според мен, всеки един срок трябва да се консултира с програмистите и да се взима под внимание тяхното мнение. Не само защото те са хората, които трябва да го спазят, но и защото те са хората, които имат най-реална преценка за това колко време би отнело завършването на конкретна задача. Всяко отлагане на release (build) поради незавършени задачи излишно натоварва програмистите и изнервя обстановката в екипа.

Оставяте ли достатъчно време на програмистите за обучение? – Всяка уважаваща себе си компания би трябвало да намира време и ресурс за обучението на своите служители. В случея става въпрос за програмисти, но въпроса е валиден за компании от всички отрасли.
Нали не очаквате продукта, който произвеждате да е винаги на първо място и добре работещ, разчитайки на стари технологии и практики?

Как се случват нещата в компанията, в която работите? Успяхте ли да отговорите на всичките 12 точки положително?

Полезни съвети по време на интервю за работа

Рядко ми се отдава възможност да чета, но един от малкото блогове, които следя е Standalone Sysadmin. Вчера прочетох интересна статия, която искам да споделя с вас.
Общата идея е, че когато търсим работа, не трябва да се подценяваме и трябва да вярваме във възможностите си. И най-важното – да търсим висок стандарт при бъдещият ни работодател така, както той би го търсил от нас.

Хвърлете й едно око, заслужава си четенето. Коментарите също са полезни: Looking for a job? Make sure you look hard enough.

Uptime ?!

Харесва ли ви натоварването на машината? :–)

Categories: Debian, Linux, Всичко друго Tags:

Как да изкараме всички картинки от PDF файл?

Елементарно Уотсън! :-)

За целта използваме командата “pdfimages“, но първо трябва да инсталираме това:

apt-get install poppler-utils

Нека нашият PDF файл се казва test.pdf. За да изкараме картинките от него, използваме следната команда:

pdfimages -j test.pdf img

Това ще извади всички картинки от PDF файла като .jpg с префикс “img”. Пример: img-001.jpg, img-002.jpg

str_split – най-лесния начин да си форматирам цифрите :-)

Как ми трябваше начин да разделя дългите номера на товарителниците за да са по-читаеми за хората… а всъщност е толкова лесно :)
Ако и вие искате да разделите дългите си цифри, използвайте str_split

Имало едно време, една хакната машина…

Звучи като приказка, нали? Всъщност е реална история за това как трябваше да открия и да изтрия гаден “вирус” от един сървър.

При поредната проверка на пощата ми, чета писмо от datacenter-a, в който се намира една от машините ми. Там пишеше, че ако до няколко часа не разреша проблема с машината, тя ще бъде спряна. По-долу беше обяснено, че от нея има изключително много изходящи конекции, които flood-ят суича, към който е вързана машината.

И така, започна се…

В началото трябваше да намеря кой точно е процеса, предизвикващ въпросните конекции. Използвах ps auxw за да разгледам процесите, които в момента се изпълняваха на машината. На пръв поглед нямаше нищо необичайно – ftp, mysql, apache, ssh и още купчина други, с които няма да ви губя времето.
Но един от тях ми привлече вниманието, а именно /usr/local/apache2/bin/httpd. Нищо необичайно, нали? Всъщност проблема е, че моето apache се намира в друга директория… Ето и заподозреният :)

От тук нататък ще използвам прякорът “сивчо” за да не разкривам все пак за кой сайт става въпрос :)

Забелязах, че въпросният процес се изпълнява с потребител “сивчо“. Това означаваше точно две неща:
1. Машината ми не е root-ната. Тоест, мога да си я използвам без да е наложителна преинсталация.
2. Някой, някак е успял да хакне акаунта на “сивчо” – лесна парола или остарял РНР скрипт.

Първото ме успокои… пфу!

Започнах да разследвам “сивчо” и да видя какво е правил в последно време, но преди това заключих цялата му директория за всеки случай:

chmod 0 /home/сивчо

Използвах командата

find /home/сивчо/public_html -mtime -30 -o -ctime -30 -ls

за да разбера кои файлове е променял в последните 30 дни. Тук ударих на камък – няма нито 1 променен файл. Това означаваше, че скрипта не е писал по файлове, принадлежащи на “сивчо“… пълна мистерия…

Видях кой е Process ID на въпросния скрипт и отидох да го поразгледам. Нека кажем, че PID е 2012.
Влязох в директорията на процеса:

cd /proc/2012/

Исках да разбера, кой всъщност е файла, който се изпълнява зад този процес. А именно, на къде сочи exe файла. В случея – към root директорията “/“. Пак удрям на камък.
Исках да видя коя команда е използвана за да се стартира процеса, като погледа съдържанието на cmdline файла, но и той беше празен. Камък.
Погледнах в директорията fd, за да видя по кой файлове пише и чете процеса. Там имаше само сокети и apache error log файла. Това ме наведе на мисълта, че може би щях да мога да видя кои други файлове са се стартирали от потребител “сивчо” и евентуално да разбера точно в кой РНР файл е дупката за да я оправя или да предупредя клиента. Нямаше нищо. Погледнах и в лога на suPHP, но и там беше празно.

Отидох в /tmp/ директорията, която също се използваше от процеса. Там видях доста (десетина) скрити директории, принадлежащи на потребител “сивчо” и един странен .tgz файл, който при опит да разкомпресирам върна греша. Предположих, че това е самият “вирус”.

От тук нататък, изчерпан от идеи, реших да не се занимавам с ходене по следи от трохи, а просто да реша проблема. Убих процесите и изтрих скритите файлове и директории на “сивчо”. Това реши проблема, надявам се за постоянно. Все пак погледнах в /var/spool/cron/ да не би случайно там да има рестариращ процеса скрипт, но всичко беше наред.

Заключението ми е, че може би сам съм пренесал вируса от друг сървър при смяната на машините, която се случи преди известно време.

Linux Increase The Maximum Number Of Open Files / File Descriptors

За да увеличим максималния брой на отворени файлове за определен процес, трябва да напишем следната команда:

sysctl -w fs.file-max=100000

Ако искаме настройката да е валидна и след рестартиране на машина във файла /etc/sysctl.conf добавяме следният ред:

fs.file-max = 100000

За да проверите дали всичко е наред и правилно запаметено, използвайте следната команда:

blagomir@firefly:~$ sysctl fs.file-max
fs.file-max = 100000
blagomir@firefly:~$

Just fun или от нямане какво да правя…

Не, не че няма какво да се прави, но прочетох в един блог това и ми стана интересно. Реших да изкопирам идеята, а именно да покажа в колко машини съм се логвал от 1 Януари 2012 до момента.

Как става това ли?

blagomir@firefly:~$ cat .ssh/known_hosts | wc -l
46

Отговор: 46

P.S. Като се замисля май не са чак толкова много…

Categories: Всичко друго Tags:

Failed to save scheduled backup : Deletion of old backups is only supported when a date-based destination is used, and strftime substitutions are enabled

Или как да направим разделени по година/месец/ден бекъпи във Virtualmin/Webmin.

При настройка на бекъпа, в “Destination and format” карето, избираме директорията, в която искаме да се прави бекъпа.
До тук всичко е супер, но ако искаме и бекъпите автоматично да се изтриват след Х дни, трябва да напишем директорията така:

/my_backups/%y/%m/%d

MacBook Pro VS Ordinary Laptop

MacBook Pro или обикновен лаптоп ще е по-полезен в работата и ежедневието ви и защо?

Categories: Всичко друго Tags: