Сторінки

вівторок, 7 серпня 2012 р.

Перший досвід руфингу

Ідея залізти на телевізійну вишку поблизу міста з'явилась давно. Ще тоді як її збудували. Але тоді було якось дуже стрьомнувато.

А якщо там колючий дріт кругом? А якщо він під напругою? А якщо там є сторож? А якщо спрацює якась сигналізація? А якщо мене хтось побачить знизу, куда мені втікати? Одним словом сумніви не давали мені спокою. Було вирішено перед цим "подвигом" походити пару днів до тієї красуні, розвідати обстановку, знати що, де, як і коли. Навіть коли я дізнався що там нема сторожа і колючого дроту, все одно було якось стрьомнувато. Все ж таки поблизу є столярські цехи, і там живуть гомосапієнси (власники цехів) які розгулють туда-сюда.

А на такі справи ніяк не вистачало часу. Та яка там вишка, як тут кожного вечора гуляєш до опівночі. Літо все ж таки.

Сьогодні проходив мимо вишки, тьфу типу - вежі, а ше точніше телевежі і подивився на це все з пофігістичної точки зору: колючого дроту там 100% нема, сторожа теж, а ставити сигналізацію на вежу яка збудована за містом і біля якої майже ніхто не ходить теж дібілізм, і хто мене там може засікти, ну реально яка нормальна людина побачить психа який лізе по вишці, здалека таке точно не побачити, а зблизька, та ще й вночі тим більше. Всі сумніви розвіялись. Треба лізти.

Перша спроба. Друг на шухері. Проліз майде один з шести секторів. Недалеко почулись голоси гомосапієнсів. Вирішив відкласти цю подію ще так на годинки три, коли сапієнси полягають спати.

Північ. Друга спроба. Дуже добре що є два ряди драбин, які чергуются між собою кожних півсектора. Так набагато спокійніше лізти, бо знаєш що у випадку падіння, чи просто нога зі сковзне з драбини, падати низько не прийдеться, максимум - 5 метрів, на плошадку драбини.

Виліз півтора сектора, сів подумати і заспокоїти серце, яке чогось почалось бєшено битись. Знову в голову почали лізти всякі сумніви: а що якщо щось станеться, а я тут один? А що якщо потім буде стрьомно злізти? А що як там сильний вітер і буде важко лізти?

А хулі. Лізу до кінця. Поліз. Без зупинок і перерв. І ось я вже на вершечку цієї 60-ти метрової красуні. Оглядовий майданчик десь так 4 на 4 метри. Місто видно як на долоні, всі найбільші вулиці, центр, окраїни. Ну кайф, шо тут казать. А ще десь не десь горять ліхтарі по окружних селах. В сторону Бучача мерехтіла полоса фонариків, швидше за все це було об'їзна. Шкода, що не було на що сфоткати пруфпік.

Загалом перші хвилини перебування на вежі я тішився як слон після бані. Правда не стільки від висоти, як від підкорення цієї безумовно найвищої вежі поблизу міста. Мобільні вежі проти неї виглядають як голки їжака. Ну і висота пташиного польоту теж справляє непогані враження.

Там був досить сильний вітер, тому можна було підспівувати музиці у вухах і не боятись, що тебе хтось почує. Зліз також без пригод, які ж тут можуть бути пригоди. Наступний раз лізу з фотіком, палюбом

Тепер можу з чистою совістю назвати себе руфером-початківцем. На черзі 30-ти метрові мобільні вежі :)

Прочитати пост

неділя, 27 листопада 2011 р.

my-linux-evolution

Хочу розказати вам свою еволюцію в Linux. А почалось усе з того що одного чудового дня мене конкретно задовбала вінда. Таких днів було багато, але цей був вирішальним. Вдаючись знайти альтернативу я згадав що є така штука як Linux. Від цього дня і до першого встановленого дистрибутива минуло багато часу, пошуків в ґуґлі, багато з яких марних пошуків. Море прочитаного матеріалу і роздрукована інструкція по встановленню. Я переживав за кожну деталь, навіть за завантажувач, чи встановиться він, чи встановиться правильно, що робити якщо не встановиться, як встановити самому.

Незнаючи по яких параметрах підбирати дистрибутив мій вибір впав на Red Hat Linux 9. Найшов його на якомусь забитому сайті, скачав, почав встановлювати... помилка. Допомогли експерти на тематичних форумах, сказали що це стара версія RH може не підтримувати нове залізо.
Після цього результати ґуґлення зупинились на Ubuntu 8.10. "Цей дистрибувив перш за все призначений для початківців..." - ця фраза мене переконала. Вінчестер вже був підготовлений, були створені потрібні розділи в потрібних файлових системах. Це було 15 березня 2010. Цього дня у мене і в сусідів по кімнаті повністю зруйнувались стереотипи про лінукс типового віндоюзера. На той час мене вразило, що Linux це не тільки чорний командний рядок і мінімальна графіка. Це досить зручне графічне середовище, яке можна налаштовувати вздовж і поперек, система яка працює як годинник, відсутнісь такого незрозумілого мусора як реєстр, але найбільше мене вразила команда "sudo apt-get install apache2 php5 mysql-server". Однією командою встановився web-сервер, php і мускул =)

Спочатку було дуже важко, я зовсім не знав команд, незнав структури Linux, незнав що це за такі дивні папки на "диску /", і де моя папка Program Files, можна сказати абсолютно нічого не знав про Linux.

Тепер юзаю "третій" по типу дистрибутив. Тепер коротко про кожний:


1. Ubuntu (Gnome 2.x)
Дякую Марку Шатлворту за його проект. Адже завдяки Ubuntu зруйнувались усі мої тупі віндоюзерські стереотипи і я відкрив для себе світ вільного програмного забезпечення. Я користувався Ubuntu 8.10 місяць, потім взнавши кодування версій ubuntu обновився до 9.04. Пізніше до 9.10, 10.04, 10.10.

Від версії 10.10 Ubuntu мене вже не прикалувало. Цей дистрибутив став якийсь попсовий для мене. Unity добило мене і дочекавшись символічної дати 15 березня 2011 року, та накурившись мануалів я перейшов на Debian 6 Squeeze. Звичайно можна було залишатись на якісь старій версії, чого я не хотів робити)


2. Debian 6 Squeeze (fluxbox 1.4)
На той час мені вже добряче надоїв Gnome. Хотілось чогось дуже мінімального, до цього трохи користувався fluxbox на убунті. Тому без сумніву поставив debian в зв’язці з fluxbox. Першим кроком було встановлення голої системи в якій нічого крім консолі не було, далі встановлення Xorg, fluxbox. Після цього можна було запустити це легке графічне середовище, встановити потрібні проги. Скріншот 19 березня 2010 (original):

Підібравши вдале оформлення я користуюсь ним постійно, не фанатію від частої зміни тем оформлення, значків та іншого. Скріншоти перед знесенням:

І знову ж таки Debian мені набрид і захотілось чогось нового)


Після знесення дебіана, я спробував Fedora 15 з третім гномом. Трохи покористувався, і зрозумів що третій Gnome зовсім не зручний для ноутбука, от якби його поставити на планшет, було б якраз суперово.
Пізніше за порадою @wock поставив Mint 11 LXDE. Мінт приємно вразив мене, до цьго часу я вважав що Mint це якийсь маленький не популярний форк Ubuntu. Але це було не воно, хотілось набрати навики в користуванні rpm-подібних систем, тому зніс Mint і поставив Fedora 16 KDE. Так, я такий. Перебірливий і не зупинюсь поки не досягну бажаного результату.


3. Fedora 16 (KDE 4.7.3)
Зараз користуюсь цим дистрибутивом. Освоюю кеди, скоріше я вважав що кеди на моєму слабенькому лептопі будуть виснути, але це зовсім не так. Поки що ніяких скарг нема =)

Дуже цікаво було б послухати інші історії лінуксоїдів. А не лінуксоїдам - раджу спробувати хоча б Ubuntu - не пожалієте)

Прочитати пост

неділя, 20 листопада 2011 р.

Май фейворіт плейсес

Я затятий велосипедист. Катаюсь завжди, не важливо літом чи зимою, в сонячну погоду чи в дощ, грозу. Для мене в цьому не існує заборон.


Я не купую якісних професійних деталей, усе що є - це прості, стандартні деталі з базарів. Найдорожче що є це протиударне колесо за 100 грн, і педальки за 80. Десь два роки тому мене остаточно задовбали переключателі швидкостей, ручні гальма все що з цим зв’язане, і я поставив заднє колесо з барабаном. Тепер на ровері нічого лишнього, плюс педальні гальма: можна спокійно їхати згори і говорити по телефону, чи хавати яке небудь стирене по дорозі яблуко.

Тепер от їжджу на такому:

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

Об’їздили ми з ним майже весь Монастириський район, і в мене вже давно є декілька улюблених місцин, куди я часто приїжаю сам або з другом.

1. ГЕСка

Так ми назвали це місце коли перший раз приїхали сюди, це було багато років тому, навіть не пам’ятаю коли саме. Це місце мені найбільше подобається, можливо тому що воно найближче від дому і я тут найчастіше буваю. Тут річка Коропець утворює таку невелику заплаву, де є невеликі острівці.


2. Медоєво
Звідки така назва - поняття не маю. Непомітна місцина в лісі, недалеко від проведення етно-фесту Дзвони Лемківщини та від траси Івано-Франківськ - Тернопіль. Тут є невелике озеро, яке вже давно ніким не чищене, дерев’яна альтанка і джерело де тече чиста-чистюща вода. Ідеальне місце для шашлику, тому через це тут постійно купа мусору, який залишає п’яне бидло. Літніх фото нажаль немає


3. Завадівське озеро
Завадівське, тому що поблизу села Завадівки. До першого місця я їжджу круглорічно, тому воно і перше, а сюди я найчастіше їжджу літом. А все тому що це найчистіше озеро в районі. Літом на вихідних, на березі нема пройти не те що велосипедом проїхати. Озеро знаходиться біля лісу, в долині і наповняється підземними джерелам які появляються в деяких місцях. Обожнюю тут плавати =)


Тому, всім раджу (! особливо літом) - виключайте комп і гайда кататись. Це принесе вам море позитиву і хороших спогадів, і відкриєте заодно багато цікавих місцин для себе.


З.І. Ровер або смерть!

Прочитати пост

неділя, 13 листопада 2011 р.

Якби можна було неспати...

Якби можна було неспати, то можна було б зробити купу потрібних справ вночі. Адже це як мінімум 8 годин. Активність в соціальних мережах практично нульова. Тебе ніщо не відволікає. Усі сплять. Нічого не міняється. Адже усі зміни зараз залежать від тебе, бо вдень коли ти налаштований на якусь роботу, щось може раптово змінитись і прийдеться переключитись, або коли в голову стрільнула геніальна ідейка яку хочеться тут же втілити, то це зазвичай неможливо, через виконання роботи яку повинен.

Це так як зупинити час. Лиш ти один, і усе залежить від тебе...Але безсонні ночі не очищають голову від думок поточного дня і з ними приходиться жити наступний день. А від майже безсонних двох ночей вже можна заснути будь-де і очистити голову від думок.

Прочитати пост

понеділок, 7 листопада 2011 р.

Windows і Linux на одному компі

Як правильно встановити дві операційки на один комп (один жорсткий диск)? При переході на Linux початківці як правило хочуть залишити вінду як додаткову ОС, на всякий випадок.


Отже хочу поділитись своїм власним, деколи гірким досвідом, вставлення цих ОСей на комп.

Найпоширенніший випадок, коли на компі є диски C:, D:, E: , звичайно на диску C: вінда і юзер ставить лінукс на диск D: або E:. Тоді ніяких проблем не виникає. Або коли встановлювати Ubuntu з під Wubi то юзер взагалі не цікавиться що там робиться при встановленні

Другий теж дуже поширений випадок - це затирання MBR Grub2. Наприклад, є на компі і вінді і лінукс. Вінда якимось дивним чином злетіла, юзер захотів її поміняти, поміняв і при наступному завантаженні вже немає звичного меню grub де пропонується вибрати оську для завантаження. А вся проблема у тому що при встановленні відни вона не дивиться чи встановлені на компі ще якісь ОСьки, крім власне вінди, і якщо нема то вона вважає комп чистим.
Цю проблему можна виправити відновленням Grub-а. Завантажуємся з будь-якого LiveCD/DVD дистрибутива (найкраще з того самого що затертий віндою) і лікуєм grub цими командами:

# grub
> find /boot/grub/stage2
hd0,0
> root (hd0,0)
> setup (hd0)
А тепер, незнаю чи поширений чи ні, мій випадок: чистий вінт, треба встановити вінду і fedora 15, а решту області залишити для /home.
Отже поділив я диск на 3 розділи
/dev/sda1  ext4   15Gb   /
/dev/sda2  ext4   263Gb  /home
/dev/sda3  ntfs   20Gb   
Всі первинні. Так що при перевстановленні федори чи іншого дистрибутиву дані з розділу /home залишались незмінними. Відколи встановлював Debian 6 Squeeze в автоматичному режимі поділу дисків - відтоді ділю диски тільки вручну. Бо Debian був зробив таке: 1 первинний розділ для /, 1 розширений - а в ньому /home, /var, /boot, /usr. Це мене влаштовувало, доки не захотів поставити федору.

Встановив Федору, ступив. Забув що потім при встановленні вінди grub затреться. Далі встановив вінду, довів її до пуття. Відновив grub, перезавантажив... а там вінди в меню нема!
А це тому що вінда на третьому розділі диску, щоб grub правильно її побачив вона повинна була б бути на першому або на другому місці, інакше grub зчитує усі початкові, позначені міткою "bootable" розділи. Після не boot-абельного/них розділів він не сприймає нічого.

Далі побавившись трошки з Федорою пожалів що не виділив swap, бо без нього сплячий режим (hibernate) відсутній. І так як тут була уже безвихідна ситуація, форматнув вінт і виправив помилки. Поділив диск на 4 розділа:

/dev/sda1  ntfs   20Gb   
/dev/sda2  ext4   15Gb   /
/dev/sda3  swap   2Gb   
/dev/sda4  ext4   261Gb   
Також всі первинні. Розділ для вінди на першому місці, для федори на другому + 2 гіга свопу і решта усе на домашній розділ. Встановив вінду, а потім федору


З цього всього я зробив висновки:
  • Розділ для вінди найкраще робити першим і безумовно первинним
  • Розділи які призначенні для довготривалого зберігання даних (aka /home) краще робити єдиними і первинними. Але звичайно - не перегнути палку: максимум 4 первинним розділа
  • Бажано виділяти swap для будь-якого Linux-дистрибутива. Не пожаліти тих пару гіг
  • І завжди уважно робити такі діла як ділення диска та встановлення 2 ОСей на комп, щоб потім лишній раз не переробляти усе заново


Прочитати пост

четвер, 6 жовтня 2011 р.

Cкрипт-пожирач файла

Дуже часто в мене виникає потреба обробляти якийсь файл по рядково. Звичайно тут нема ніякої проблеми, ось код:

#!/bin/bash

cat file.txt | while read line; do
 echo $line
done

Але що робити коли файл меговеликий і його обробка триває декілька хвилин, годин або днів (мається на увазі що кожен рядок з файлу піддається довготривалій обробці)???


Коли що небудь або хто небудь перериває цей процес то це мене дуже бісить. Тому виникла потреба в скрипті який би міг вирізати з файлу той рядок який йому потрібно, тобто з’їдати файл.
А якщо добавити прапорець блокування під час зчитування рядка з файла то цей скрипт набуває зовсім нових властивостей
Переваги такого скрипту:

  • можна легко відновити роботу після переривання
  • можна запустити n-кількість копій, які швидше "з’їдять" файл
  • не треба змінювати коди копій скрипту, всі коди однакові - а кожна копія робить своє

Ось детальний код з коментуванням:

#!/bin/bash


FILE="file-e" # файл-жертва

SIZE=`cat $FILE | wc -l`

# поки розмір файлу не дорівнює 0
while [ "$SIZE" != "0" ]; do 

  LOCK=`head -n 1 lock`; # зчитуєм блокування
  
  if [ "$LOCK" == "0" ]; then 
    echo 1 > lock # якщо розблоковано, блокувати і...
    
     
    SIZE=`cat $FILE | wc -l`
    { IFS= read -r line; cat 
    } < "$FILE" > "tmp_$SIZE" && mv "tmp_$SIZE" "$FILE"
    # ось ці три рядки вище роблять наступне:
    # - зчитують верхній рядок в змінну line
    # - решту файла заноситься в тимчасовий файл
    # - потім тимчасовий файл переміщується в оригінал

   echo 0 > lock # розблоковуєм
   DATE=`date  +%T`
   echo "${DATE} ${line}"
   sleep 1
  else 
    echo "Waiting for UNLOCKING..." 
    # якщо заблоковано, очікування 3 сек
    sleep 3
  fi
  
done;
# і знову на початок циклу, поки файл не закінчиться

А тепер треба перевірити роботу цього пожирача. В якості піддослідного файла-жертви буде файл ось такої структури:

1 string
2 string
3 stirng
...
Який створюється скриптом rst.sh. Менше слів, більше коду:
flashbag@laptop:~/vnc-new$ cat rst.sh
#!/bin/bash
rm -rf file-e
touch file-e
chmod 666 file-e

for i in `seq 1 50`; do 
  echo "${i} string" >> file-e
 done
flashbag@laptop:~/vnc-new$ ./rst.sh
flashbag@laptop:~/vnc-new$ cat file-e
1 string
2 string
3 string
4 string
5 string
6 string

Тепер запускаю 4 копії цього мегопожирача файлів...

Як видно з скріншота кожна копія цього мегопожирача з’їдає один унікальний рядок. Дві копії не можу з’їсти один і той самий рядок. Ще один експеримент на рахунок продовження трапези скрипта після переривання.

Ця стаття не принесе нічого нового в досвід затятих лінуксоїдів, тому що вона розрахована на аматорів-початківців у bash програмуванні. Буду радий почути відгуки :)

Прочитати пост

середа, 6 липня 2011 р.

Лист від info@fbi.govs

Сьогодні був приємно здивований зайшовши на свою пошту Freemail на ukr.net. 21 червня 2011, о 03:11:10 мені прийшов лист від info@fbi.govs з дуже цікавим змістом.


ANTI-TERRORIST AND MONETARY CRIMES DIVISION

FBI NEW YORK 26 FEDERAL PLAZA

FEDERAL BUREAU OF INVESTIGATION

23RD FLOOR NEW YORK, NEW 10278-384-0004

Fund Beneficiary ,

We sincerely apologized for sending you this sensitive information via e-mail instead of a certified mail, post-mail, or face -to- face conversation, it is due to the urgency and importance of the security information of our citizen. We the FEDERAL BUREAU OF INVESTIGATION (FBI) Washington DC, in conjunction with some other relevant investigative Agencies here in the United STATES of America have recently recovered your funds through our Global intelligence monitoring network.

This letter is to officially inform you that we has captured those impostors that stole your winning fund that was been deposited in UK Bank, after we got a report from the FBI United Kingdom to supervise a case that was allied to your stole fund, this fund was stole and transferred to Africa with the help of the bank Work in UK, the said fund is now in Africa. Through your Identification record and also the information received with the Money Tracking investigation department, that you have some funds awaiting adjudication and will be credited to you.

You do not have this document in your files; if you did the fund wouldn't be hold. We did not believe this at first but when we saw the transfer we had no option than to contact you. You have 96 hours to produce legal proof of the below frozen wired transaction number coded: AZQV9007, you don’t have any rights to receive the funds if documented legal wire information is not complete.

The very heart of FBI operations in our investigations--which serve, as our mission to protect and defend the United States against terrorist and foreign intelligence threats and to enforce the criminal laws of the United States.' So follow our instructions properly to avoid any action before you. Note the said fund is now under our custody, you should get back to us immediately.

We are waiting for your immediate responds.

Yours Sincerely

Sign

FBI Director.
Mr. Robert S. Mueller

Зрозуміло що це спам, ось перший доказ цьому

FBI.gov is an official site of the U.S. Federal Government - а не fbi.govs
Переклав цей лист гуглом, він виявився досить цікавим. Вони відновили мій фонд, який був вкрадений та переданий до африки. Але глобальна система моніторингу та розвідки знайшла цих негідників і ФБР хоче повернути цей вкрадений фонд.

Сюжет прямо як в голівудському фільмі. А в кінці листа ще підпис від директора ФБР та фраза
"Ми чекаємо Вашої безпосередньої відповіді.". При спробі попінгувати хост fbi.govs він уже був накритий. Звичайно від 21 червня минуло достатньо часу для ФБР щоб накрити цих креативних спамерів.

Прочитати пост

субота, 2 липня 2011 р.

Граббинг сайту nashe.com.ua

В пошуках нової музики для себе мені в голову прийшла ідейка проаналізувати сайт http://nashe.com.ua ( тексти пісень українськиї виконавців ). Аналізовувати та граббити різні сайти - це моє так сказати хоббі. Це дуже цікаво для мене - оскільки в цьому процесі я вивчаю програмування на bash більш детально і в потребі якогось унікального програмного рішення завжди дізнаюсь щось нове для себе.

Так ось: першим ділом треба було зясувати загальну кількість виконавців викладених на сайті. Відкривши вкладку виконавці на сайті я побачив 4 сторінки виконавців. Передивившись декілька посилань на сторінки виконавців було ясно що виконавців десь в районі 1000. На сайті вони розміщені по алфавітному зростанню. В випадку парсингу ID виконавців були б розміщені хаотично. Тому я вирішив грабити по зростанні ID кожного виконавця.Написав простий скрипт:

#!/bin/bash

for id in `seq 1 1200`; do 
  GET "http://nashe.com.ua/artist.htm?id=$id" > ./artists/$id.html
  check=`cat "./artists/$id.html" | grep arttitle | cut -d"'" -f4`
  if [ "$check" = "arttitle" ]; then
    echo $id >> artist-list
    echo "id=$id is ok!"
  else
    rm -rf ./artists/$id.html
    echo "id=$id error..."
  fi
done

який перевіряє ID від 1 до 1200 на наявність виконавця. Коли перевірка дійшла до 1000 скрипт почав видавати постійні "error..". Стало ясно що виконавців 953, а не 722 як пише на сайті.

Коли в параметрі id викликано неправильне значення то скрипт повертає усіх виконавців. За допомогою простого парсингу можна відрізнити яка сторінка видана: з існуючим ID чи неправильним.

flashbag@laptop:~/nashe.com.ua$ GET http://nashe.com.ua/artist2.htm?page=2 | grep arttitle
flashbag@laptop:~/nashe.com.ua$ GET http://nashe.com.ua/artist.htm?id=492 | grep arttitle
<div align='left' class='arttitle' style='width: 45%;'>K402</div>
flashbag@laptop:~/nashe.com.ua$ GET http://nashe.com.ua/artist.htm?id=492 | grep arttitle | cut -d"'" -f4
arttitle

Для виконавця в коді присутній блок div з класом arttitle. Якщо в команду ще добавити контейнер cut можна чітко виділити ключове слово

Звідси можна записати назву кожного виконавця в файл з такою послідовністю як вони розміщені у базі даних: від id=1 до 953. Ось скрипт get-artists.sh:


#!/bin/bash
rm -rf artist-names
touch artist-names

for id in `seq 1 953`; do
 cat ./artists/${id}.html | grep arttitle | cut -d'>' -f2 | cut -d'<' -f1 >> artist-names
done

Це навіть смішно скриптом назвати, можна цей код в одну команду втиснути )))

Тепер я вирішив дістати усі стилі виконавців, код:

#!/bin/bash
rm -rf styles.list
touch styles.list

for id in `seq 1 953`; do 
  a=`cat "./artists/$id.html" | grep "<br><span class='title'>"`
  b=`echo ${a//*<span} | cut -d'>' -f3 | cut -d'<' -f1` 
  echo $id $b
  echo $b >> styles.list 
done
після цього рядка
a=`cat "./artists/$id.html" | grep "<br><span class='title'>"`
змінна а набувала різного значення, у виконавців про яких була повна інформація змінна а приймала цю інформацію, а у тих в кого був лише стиль - приймала значення лише стилю.

Іншими словами змінна а приймала значеня html-кода блока про виконавця. Треба було якось виділити її і я побачив що усі пункти ( Дискографія, Оф.сайт, Email ) крім стилю були розміщені в тегах div. За допомогою цієї команди
echo ${a//*<span}
можна виділити всю інфу після тега span. А далі cut-ом виділяється тільки потрібне значення стилю/стилів

Файл styles.list має відповідно 953 рядка і у кожному є стиль/стилі виконавця або нема стилю. Є і такі виконавці як 98,100,109,153,154,155 та інші.



Тепер в мене виникла ідейка виділити кожний унікальний стиль. Алгоритм скрипту зразу проскочив в голові: порожні рядки видаляються, в того виконавця в кого два або більше стилів, стилі розділяються, кожному стилю - окремий рядок, далі записуються в окремий файл один унікальний стиль тільки один раз. Для перевірки схожості стилів треба видаляти лишні пробіли в рядках.

Розписувати створення скрипту не буду, бо це буде довго і нудно, ось готовий скрипт:

#!/bin/bash -x

file="style-by-line";

rm -rf $file
touch $file

cat styles.list | while read line; do
 if [ "$line" != "" ]; then 
   x=${line//[!,]/}
   if [ "${#x}" = "0" ]; then
    echo $line | tr -s " " | sed 's/^[ ]//g' >> $file
   fi 
   if [ "${#x}" = "1" ]; then
    echo $line | cut -d',' -f1 | tr -s " " | sed 's/^[ ]//g' >> $file
    echo $line | cut -d',' -f2 | tr -s " " | sed 's/^[ ]//g' >> $file
   fi
   if [ "${#x}" = "2" ]; then
    echo $line | cut -d',' -f1 | tr -s " " | sed 's/^[ ]//g'>> $file
    echo $line | cut -d',' -f2 | tr -s " " | sed 's/^[ ]//g'>> $file
    echo $line | cut -d',' -f3 | tr -s " " | sed 's/^[ ]//g'>> $file
   fi
   if [ "${#x}" = "3" ]; then
    echo $line | cut -d',' -f1 | tr -s " " | sed 's/^[ ]//g'>> $file
    echo $line | cut -d',' -f2 | tr -s " " | sed 's/^[ ]//g'>> $file
    echo $line | cut -d',' -f3 | tr -s " " | sed 's/^[ ]//g'>> $file
    echo $line | cut -d',' -f4 | tr -s " " | sed 's/^[ ]//g'>> $file
   fi   
 fi
done
sort -k 1,1 -u style-by-line > uniq-styles

Зразу в очі кидається ондоманітні умови. Так це лишнє, але з циклами в цьому напрямку в мене поки що не дуже. Змінна x - це кількість ком в одному рядку. Експерементальний шляхом визначено - максимальне значення змінної x=3, три коми-розділювачі, отже максимально можливо 4 стилі для виконавця.

Остання команда мене просто вражає. Я стільки гуглив щоб зробити унікальне сортування кожного рядка в файлі. Вже надумав написате це сортування на PHP, але в останній момент найшов найоптимальніше рішення - унікальне сортування однією командою.

Так ось вийшло 37 унікальних стилів. Відсортовані по алфавіту в OpenOffice. Ось вони:

А капелла
Альтернатива
Альтернативний рок
Брутал-поп
Вільний український метал
Готик-фольк метал
Гранж
Джерело:
Ейсід-хоп
Електро
Електро-рок
Електро-фолк
Етно-арт-рок
Етно-ска-панк
Етно-хаус
Інді-ретро-поп
Латино
Ліричний рок
Нео-психоделія
Нью-ейдж
Нью-метал
Подільський фундаментал
Поп-рок
Ритм-н-блюз
Ритуальний фолк
Рок
Рок-н-рол
Рокабіллі
Симфо-арт-метал
Техно-денс
Фолк
Фолк-дарк-метал
Фолк-метал
Фолк-рок
Фолк-фанк-рок
Хіп-хоп
Християнський рок

Тут і найшовся перший баг: стиль "Джерело:" ( виділений жирним ). Коли я подивився в усі стилі то цей стиль належав виконавцю з id=452. Сторінка цього виконавця справді не така як усі, в середині тегу span там знаходиться посилання на джерело інформації. Значить скрипт без багів, це мене порадувало =)

Щоб це все не здавалсь маячнею, я написав прості скрипти index.php та show.php.

Лістинг index.php:

<form action=show.php method=get>
<select name=style>
<?php

$uniq_styles=file('uniq-styles');

for ($i=0; $i<count($uniq_styles); $i++ )   
{ echo '<option name='.$i.'>'.$uniq_styles[$i].'</option><br>'; }

?>
</select>
<input type='submit' value="OK">
</form>


Лістинг show.php:

<?php

$style=$_GET['style']; 
echo '<b>'.$style.'</b><br>';

$styles=file("styles.list");
$artists=file("artist-names");

for ($i=1; $i<count($styles); $i++ )
 { 
   if (substr_count($styles[$i-1], $style)>0) 
  echo '<a target=_blank href="http://nashe.com.ua/artist.htm?id='.$i.'">'.$artists[$i-1].'<br>';
 } 

?>

Тут можна їх потестувати http://kepnung.host-ua.org.ua/nashe.com.ua

Цим скриптам потрібні файли uniq-styles, styles.list, artists-names.


Тепер все спочатку, коротко і ясно:

  • Щоб не закачувати кожен раз для парсингу всі сторінки виконавців є скрипт download-artists.sh. Він закачує усі 953 сторінки у папку artists, у вигляді ${id}.html.
  • Щоб записати в файл artist-names назву кожного виконавця є скрипт get-artists.sh
  • Щоб дістати стиль/стилі кожного виконавця в файл styles.list є скрипт get-styles.sh
  • І нарешті щоб виділи тільки унікальні стилі в файл uniq-styles є скрипт get-uniq-styles.sh

Наочний приклад цього грабингу це посилання вище. Іншими словами - це фільтр виконавців по стилю, на сайті такої штучки нема. Треба підказати їм таку ідейку.

Прочитати пост

понеділок, 27 червня 2011 р.

Що спонукало мене створити блог?

Вчора у мене сталась дуже неприємна ситуація за яку мені дуже соромно, дуже соромно!!! З одного боку добре що це сталось - ця ситуація дала поштовх в деяких стосунках з старими друзями, і дала мені багато досвіду.

Але це такий сором!!!! З цього моменту я сподіваюсь виправити своє життя на краще, бо так далі жити це не вихід.

Прочитати пост