Опит за DNS rebind атака

Публикувано на

Като един компютърен нърд от време на време си гледам логовете на рутера. Това, което ми направи впечатление днес, и което не бях виждал преди, са следните редове:

Sat Jan 14 14:20:49 2017 daemon.warn dnsmasq[12116]: possible DNS-rebind attack detected: 6.57.63.45.zz.countries.nerd.dk
Sat Jan 14 14:20:51 2017 daemon.warn dnsmasq[12116]: possible DNS-rebind attack detected: 206.146.217.87.zz.countries.nerd.dk
Sat Jan 14 14:20:53 2017 daemon.warn dnsmasq[12116]: possible DNS-rebind attack detected: 14.96.161.89.zz.countries.nerd.dk
Sat Jan 14 ...
Comments

Pretty print на JSON с Python

Публикувано на

Наложи ми се да разгледам по-детайлно един JSON стринг, който беше доста дълъг и само на един ред. Знам, че има online JSON pretyfier-и, но ми се искаше да видя какво е необходимо за да си го направя локално в терминала (по-конкретно в ipython). Оказа се доста просто:

import json
from collections import OrderedDict

json_data = r'''paste your JSON here'''

data = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(json_data)
print(json.dumps(data, indent=2, ensure_ascii=False))

Кратко и красиво

Comments

Увеличаване на TTL на OpenWRT

Публикувано на

Когато разполагате с OpenWRT рутер и ви се наложи да увеличите стойността на TTL-a може да се направи по следния начин:

Инсталирате следните пакети: iptables-mod-ipopt и kmod-ipt-ipopt

Това може да направите през SSH терминал със следната команда:

opkg install iptables-mod-ipopt kmod-ipt-ipopt

Или в LuCi интерфейса от System -> Software.

След това в LuCi интерфейса в Network -> Firewall -> Custom Rules добавяте следния код.

iptables -t mangle -I POSTROUTING 1 -j TTL --ttl-set 128

Това ще направи TTL-a със стойност 128

Comments

Сайтът вече работи под Django 1.8

Публикувано на

На първи Април излезе новата версия на Django. Това много чакана версия, поне за мен. В нея има много нови неща, но някой от тях очаквах с нетърпение заради блога ми:

  1. Вече може лесно да се създават сложни SQL заявки и вече няма нужда от хака, който ползвах за филтриране на агрегиращ Count в Django, за който бях писал.
  2. Оправен е проблемът с inclusion_tag-овете, който пречеше да се полва django-wpadmin и Django Cached Template Loader

Сега вече сайтът работи с новата версия и нямам хакове с чист SQL код (дори в Django 1.8 хака не работи), а темплейтите са кеширани ...

Comments

Свързване чрез VPN под Fedora 21

Публикувано на

Скоро ми се наложи да си конфигурирам VPN за да работя отдалечено. Сега ползвам Fedora 21 и реших да настроя всичко през графичният инструмент на Gnome 3. Опитвах какво ли не, но така и не можех да се свържа успешно. Погледнах в логовете и там видях следното съобщение:

LCP: timeout sending Config-Requests

Причината се оказа, че  firewall-a блокира gre порта (порт 47). През графичния интерфейс на firewalld не успях да го разреша. Това, което намерих е чрез използването на командата firewall-cmd.

firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 ...
Comments

Python на Host.bg е равно на мисията невъзможна!

Публикувано на

За втори път ми се наложи да се опитам да пусна Django сайт на споделен хостинг на Host.bg. Както може да се досетите за втори път е неуспешен. Причината е, че от Host.bg упорито отказват да инсталират няколко пакета, като единият от тях е меко казано задължителен за всяка CMS система - PIL/Pillow. Оправданието им е: За съжаление на споделен хостинг се избягва добавянето на подобни модули, който не са включени в началната конфигурация и компилирането на сървъра. Вече на cloud сървъра вие имате пълната свобода да инсталирате , каквото желаете като модули и плъгини..

Само ще вметна че ...

Comments

Сайтът вече работи под Python3

Публикувано на

От едно известно време на сам сайтът е съвместим с Python3, но официално не беше качен на сървър с Python3. Най-накрая намерих малко свободно време за да  се реша на мигрирам сайта.

Тъй като сайтът се хоства на OpenShif, си създадох нов Cartridge с Python 3.3 и започнах с експериментите. Дългото забавяне (от както моят код беше съвместим с Python3 до реалното пускане на реална) бе, поради несъвместимостта на всички приложения които ползвам с новия Python.

В два предишни мои поста "Сайтът е с една стъпка по-близо до Python3" и "Излезе новата версия на django-imagekit"  бях ...

Comments

Django на Superhosting половин година по-късно

Публикувано на

Преди време бях написал блог пост "Как да подкараме Django на Superhosting.bg". Сега искам да напиша какво е положението половин година по-късно и дали има някакъв напредък.

Започвам с първото положително нещо - вече има Git, така че той може да бъде ползван за качване на проекта на сървъра на СуперХостинг.

Отностно версиите на Python - тук нямаме такъв успех. Все още има само Python2.6. Трябва да отбележа обаче, че Суперхостинг са се постарали да ни направят живота по-лесен, като предварително са инсталирали virtualenv, setuptools и pip. Така вече не се налага ръчното им инсталиране, което бях описал в ...

Comments

Сайтът вече е с нов дизайн

Публикувано на

Най-накрая и моят сайт вече е с HTML5 и дори с responsive дизайн. Сега се надявам, четенето на блог статиите под мобилни устройства, да е по-удобно, както и навигацията по сайта. Все още има трески за дялъне, особенно с менюто за навигация, но е една стъпка напред към по-добро "мобилно изживяване".

Знам, че мога да отнеса много критики за дизайна, но все пак аз не съм дизайнер. Можеше да използвам някоя bootstrap тема или др, но искам кодът да е минималистичен, за да може сайтът да е лек. Също така използването на CSS framework води до използване на много класове ...

Comments

Излезе новата версия на django-imagekit

Публикувано на

Нова година, нов късмет! Излезе и новата версия на django-imagekit, която най-накрая потдържа Python 3.  За хората, които не са запознати с това приложение, това е библиотека която улеснява използването на изображения в моделите на Django. Причините, поради които съобщавам за новата версия на django-imagekit е,  че списъка с Python3 съвместими приложения за Django нараства с още едно, както и че заслугата за това се падна на мен. С приемането на този pull request бе добавена съвместимост на django-imagekit със Python 3.

Преди време бях писал, че Сайтът е с една стъпка по-близо до Python3, благодарение на django-tinymce. Сега благодарение ...

Comments

Сайтът е с една стъпка по-близо до Python3

Публикувано на

Благодарение на новата версия на django-tinymce (1.5.2), която има съвместтимост с Python 3 благодарение на този мой къмит ( https://github.com/aljosa/django-tinymce/commit/1df8fe70f081419e7e79ed8c9f8d1a2644c814df ), сайтът вече е с една стъпка по-близо да работи под Python 3. Новата версия на django-tinymce също така е съвместима и с последната версия на Django, а именно 1.6, която е с официална съвместимост с Python 3, а не както версия 1.5 - с експериментална.

За съжаление не всички външни приложения са съвместими с Python 3. Все оше django-disqus няма потдръжка, защото моят pull request не е приет https://github.com/arthurk/django-disqus ...

Comments

Сайтът вече се хоства на OpenShift

Публикувано на

До сега този сайт се хостваше от вкъщи, но реших, че няма нужда да има пуснат един компютър постоянно, който да вдига шум. За жалост трудно се намира безплатен Django хостинг, не е както с PHP. Някой би предложил Heroku, тъй като те имат безплатен план, но той е доста ограничен. Също така Heroku има един друг проблем - няма постоянен сторидж за файловете и трябва да се ползва Amazon S3. Това никак не ми допада като идея.

И така един ден случайно попаднах на OpenShift и видях, че имат безплатен план и реших да се възползвам. За разлика от Heroku ...

Comments

Филтриране на агрегиращ Count в Django

Публикувано на

ORM-ът на Django предлага възможност за лесно използване на агрегиращи SQL функции, като COUNT, SUM, MAX, MIN, AVG. Когато имаме две таблици с релация едно към много е много лесно да преброим всички "деца" на основният запис. Нека да разгледам следният пример. Имаме следните модели:

from django.db import models

class Category(models.Model):
title = models.CharField(max_length=128)
class Entry(models.Model):
category = models.ForeignKey(Category, related_name='entries')
title = models.CharField(max_length=128)
content = models.TextField()
is_published = models.BooleanField()

Имаме категории и към всяка категория може да имаме много статии. Ако искаме с една SQL заявка да вземем всички ...

Comments

Инсталиране на Webmin/VirtualMin върху Ubuntu

Публикувано на

Наскоро търсих за WEB базиран инструмент за администриране на Linux сървър. Виждал съм по разни хостинг компании да ползват cPanel и си търсех нещо подобно, но условието беше да не е на PHP, дори по възможност ако може да е на Python. За съжаление не намерих такъв на Python, но попаднах на Webmin. Той като един истински инструмент за линукс администратори е писан на Perl. Както и да е инсталирах си го като изтеглих deb пакет от официалният сайт.

Това което ме интересуваше беше администраиця Samba и Nginx. Като цяло конфигурационните файлове на Nginx не са сложни, дори са повече ...

Comments

Как да използваме наименовани локации в NGINX

Публикувано на

Или как да имам "спретнат" конфигурационен файл с минимално количество повторение в кода.

Nginx сървърът притежава т.нар наименовани пътища (named location), които изглеждат по следният начин:

location @some_location {
# some stuff
}

Ключовото тук е @some_location и по-скоро символът @. По този начин ние си дефинираме виртуално местоположение само за вътрешна употреба. Основното му предназначение е при използване на error_page и try_files конфигурациите. Например:

location / {
root /some/path;
try_files $uri $uri.html $uri/index.html @not_found;
err_page 403 = @not_found;
err_page 500 = @not_found;
}
location @not_found {
try_files 404.html 500.html
}

Идеята тук е, че може да се ползва като заместител когато try_files не ...

Comments

Използване на django-imagekit за обработка на създаване на thumbnail изображения

Публикувано на

Когато правех галерията на този сайт, реших да не ползвам външна библиотека за генериране на умалените изображения. Тогава видях, че Image обектите от PIL библиотеката имат метод thumbnail и мога да ги създавам директно. В началото ми се видя добро решение, но все пак някак си save метода на модела Picture беше станал много грозен. За справка старият ми код. Използвах self.image._committed, правех неща преду super правех неща след super в следсвие от неща взети преди super. Не използвах default_storage, което означава, че кодът ми не е приложим ако медиа файловете не се намират на сървъра, на който се ...

Comments

Изключване на контекстното меню при F10 в gnome-terminal

Публикувано на

От както Ubuntu вече ползват Gnome 3, забелязах дразнещо поведение при натискане на F10 в gnome-terminal, a именно изкача контекстно меню, все едно съм натиснал дясното копче на мишката. Лично аз не смятам, че това не е най-подходящият клавиш за това действие, най-малко защото на клавиатурите вече си има бутон точно за това. Все пак когато съм в терминал искам да ползвам клавиатура, а не да хващам мишка и когато съм отворил htop изходът е с F10. Много е досадно всеки път да е появява контекстно меню.

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

Comments

Създаване на PDF от няколко изображения под Linux

Публикувано на

Днес ми се наложи да създам PDF файл от няколко изображения. В моя случай имах няколко PNG файла койито исках да сглобя. Потърсих в Google и първият резултат ми свърши работа. Примерът е даден за jpeg файлове но става за всякакви изображения. Командата която ми свърши работа е:

$ convert "*.png" my.pdf

Потдреждането на страниците ще стане по азбучен ред на файловете които отговарят на селектора (в моя случай "*.png").

И друг път съм ползвал тулчето convert но само за преоразмеряване на снимки, не и за създаване на PDF-и. За пореден път се убеждавам колко удобен е Linux когато човек ...

Comments

Измерване на време за изпълнение на код в Python

Публикувано на

Налагало ли ви се е да разберете за колко време се изпълнява даден код в Python? По принцип си има вградена функция която да помага за това. Документация за нея може да се намери в http://docs.python.org/2/library/timeit.html.

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

Comments

Всеки път забравям да слагам --set-upstream при създаване нов бранч

Публикувано на

Колко често ви се случва да създадете нов бранч в git, да го пушнете към origin, след това някой да го редактира и вие да искате да вземете промените изпълнявайки:

git pull

с надеждата, че промените ще се появят, а то да ви изкара:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.branches.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you ...
Comments

Активиране на Hibernate функцията в Ubuntu 12.04

Публикувано на

След като си взех нов лаптоп Asus N56VZ, естествено си сложих Ubuntu. Реших да използвам последата LTS версия, която към този момент е 12.04. Като разглеждах настройките на захранването установих че опцията Hibernate ми е неактивна. Поразрових се из интернет и попаднах на спасителната статия:

http://www.pauljoyceuk.com/codex/2012/howto-make-ubuntu-12-04-hibernate-successfully/

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

Comments

Проблем с Facebook Unsafe JavaScript attempt to access frame with URL

Публикувано на

Тези дни правих едно приложние за Facebook което използва Facebook Javascript-SDK за логин. Когато си отворя директо адреса на приложението всичко е ок, но когато искам да отвря приложението през неговия адрес от фейсбук (https://apps.facebook.com/app_id) в javascript конзолата започват да "хвърчат" грешки от типа:

Unsafe JavaScript attempt to access frame with URL: ....

Съответно и някой от нещата не искат да работят. Тази грешка прави Facebook ивентите да не се получават и ако има закачени функции към тези ивенти те няма да се изпълнят.

Проблема се оказва в протокола. Ако човек си е настроил винаги secure browsing ...

Comments

Проблем с Cookie-тата при използване на Facebook Javascript-SDK на localhost

Публикувано на

Днес ми се наложи да си играя с JavaScript API-то на Facebook. Трябваше да правя логин с фейсбук. Всичко върви по вода използвам примера от документацията на фейсбук:

FB.init({
    appId : '{{FACEBOOK_APP_ID}}',
    status : true,
    cookie : true,
    xfbml : true,
    oauth : true
});

Важното е cookie: true понеже искам да мога да взема signed_request-а от backend-a после. Да ама cookie няма. Порових се из интернет и попаднах на следната статия http://www.quora.com/Why-does-the-Facebook-Connect-Javascript-library-fail-to-set-cookies-when-developing-locally

Проблема е в домейна localhost. От Facebook явно са забранили на JavaScript-SDK–то да сетва cookie-та на localhost. Решението се оказва лесно. В /etc/hosts си измисляте някакъв хост, например  ...

Comments

Поправка на счупено GIT репо

Публикувано на

В рамките на една седмица ми се счупи два пъти да се рестартира машината на която работя (всъщност две машини една реална и една виртуална). И двата локалното GIT репо на проекта по който работех се счупи. Даваше грешка от рода:

error: object file .git/objects/bf/ad64aa6d1f4fd5920a7213654fdd35268ec25b is empty fatal: loose object bfad64aa6d1f4fd5920a7213654fdd35268ec25b (stored in .git/objects/bf/ad64aa6d1f4fd5920a7213654fdd35268ec25b) is corrupt

Когато ми се случи за първи път, не бях правил много неща (или поне така си мисля) и клинирах репото наново и си продължих работата. Когато обаче се случи за втори път имах известно количество работа която не ...

Comments

Конвертиране на текстов файл от един енкодинг в друг

Публикувано на

Преди врме си купих телевизор Panasonic Viera. Той има много функции, една от която е възпроизвеждане на файлове от USB носител и дори показване на Xvid субтитри. Това е много удобно, тъй като може да се копира филм на флашка и да се гледа директно на телевизора без никакъв компютър или някакво DVD устройство.

Когато пуснах филм обаче бях неприятно изненадан. Субтитрите бяха на "маймуница". Веднага ми светна че encoding-а на субтитрите не е правилен. Започнах да си играя да го сменям докато накрая мога да ги чета и установих че правилният за моя телевизор е ISO-8859-5.

Има различни текстови ...

Comments

Как да подкараме Django на Superhosting.bg

Публикувано на

EDIT: Направих си труда да проверя какво е положението със SuperHosting.bg половин година по-късно и ето резултата "Django на Superhosting половин година по-късно". Ако все пак ви интересува оригиналната статия, може да продължите с четенето.

 

Първо малко обща информация. В България трудно може да се намери подходящ Django хостинг,  може би заради това и Django не е нашумяло толкова още у нас, но се надявам това да се промени. Какви са разликите спрямо PHP. При PHP е лесно - вземаш кой да е хостинг (дори има и безплатни), копираш си сайта и той работи. За това може би повечето ...

Comments

Една нестандартна проверка

Публикувано на

Преди време докато си правих курсовата работа по C# реших да направя нещо нетипично за този език, което взаимствах от езика Python (на който пиша в момента). Преди да покажа "великото си творение", да кажа как стигнах до него. В Python е много лесно да провериш дали даден обект се намира в даден списък, като списъка не е нужно да бъде присвоен на променлива, ако не ни трябва никъде другаде освен в проверката. Например:

if my_var in [1, 3, 15, 20, 40, 80]:
    # do something ...

Стандартно в C# трябва да се напише:

if ( (my_var == 1)
     || (my_var == 3)
     || (my_var == 15)
     || (my_var ...
Comments

Използване на Ctrl+S в терминал

Публикувано на

Като бивш Windows потребител намирам Ctrl+s за много удобен шорткът за запис на текущия файл, който се редактира. Когато обаче се ползва текстов редактор през терминал при натискане на тази комбинация всичко замръзва. Някой хора дори се стресират (в това число съм бил и аз) и се е стигало до kill-ване на приложението. Това се случва тъй като Ctrl+S изпраща XOFF сигнал към терминала. Това означава, че се спира предаването на данни към терминала (в случая нашият екран). За да върне всичко в нормален режим трябва да се изпрати XON сигнал, което се прави с Ctrl+Q. Повече ...

Comments

Най-накрая Skype 4 за линукс

Публикувано на

В блога на скайп се появи статия за официалното пускане на дългоочакваната 4-та версия на програмата за Linux потребители. Прескочиха 3-та и направо вмъкнаха новостите от 4-та ( която за Windows и Mac потребителите отдавна е стара), като например:

  • нови емотикони
  • синхронизиране на хронологията
  • чат с много потребители в един прозорец

За радост интерфейса не е драстично променен и все още седи нативен. С пускането на тази версия се опроверга мнението, че Skype няма да правят повече верси за Linux след като бяха купени от Microsoft. Надяваме се и в бъдеще да има още подобрения и да не се налага да ...

Comments

Да обърнем внимание на форматирането на стринг

Публикувано на

Днес ми се случи един странен проблем, на който искам да обърна внимание свързан с форматиране на стрингове в Python. Всички знаем форматирането във версиите преди 2.7

>>> print "Some text %s" % 'other text'
Some text other text

>>> print "Some text %s %s" % ('other', 'text')
Some text other text

Това можем да го ползваме най-вече за подаване на съобщение от променлива

>>> message = u'This is the message'
>>> print 'The message is: %s' % message
The message is: This is the message

До тук всичко е ясно и не казвам нищо ново. Ето един пример и за '%r ...

Comments

Сайтът отново е Live!

Публикувано на

След пауза от около 3 седмици сайтът отново е "на крака". Вече съм в нова квартира, домашното сървърче е свързано, има интернет и най-важното има клавиатура! За жалост BIOS-а е малко странен и не иска да пали без закачена клавиатура. В най-скоро време ще има нови публикации в блога отностно Django и други неща свързани с IT областта.

Comments

Монтиране на Samba (Windows) Share под Линукс

Публикувано на

Потрбителите на графичната среда Gnome сигурно не са срещали подобен проблем, благодарение на GVFS. Когато под Nautilus отворим отдалечена файлове система през някой от протоколоте smb, ftp, sftp, тя се монитра автоматично и можем да си боравим с файловете все едно са текущата машина. На пръв поглед с файловият браузър на KDE - Dolphn можем да разглеждаме файлове, да ги отваряме и редактираме, но там принципът на работа е малко по-различен. Dolphin изтегля файла някъде в /tmp/ директориятя и го отваря с програма кояот е асоциирана за този тип. След като файлът бъде затворен, ако е променен той бива изпратен обратно ...

Comments

Използване на Extjs и Django1.3

Публикувано на

Вчера започнах да разглежда по-сериозно JavaScript Framework-ът ExtJs и бях изпрвавен пред сериозен проблем. Както знаем в Django1.3 има csrf protection дори и на Ajax рекуестите. За това на първо време туториълът, който исках да пробвам не искаше да работи. Опитах се да слагам csrf_exempt, но заради спецификата на extdirect това не важи. След известно ровене попаднах на тази статия. Тя е за ExtJs4, a на мен ми трябва за ExtJs3, за това се наложи да изтрия няколко реда и в краен резултат да се получи това:

// Add csrf token to every ajax request
var token = Ext.util.Cookies ...
Comments

Django и PostgreSQL върху Ubuntu

Публикувано на

Сайтът вече използва за база PostgreSQL вместо MySQL. Мигрирането стана без проблемно, без загуба на информация. Процесът по мигриране протече в следните етапи

Инсталиране на PostgreSQL и необходимите пакети за python:

$ sudo apt-get install postgresql python-psycopg2

Създаване на юзър и база данни за сайта:

$ sudo su - postgres
# createdb <sitename>
# createuser -A -D <sitename> -P

Конфигуриране на PostgreSQL:

Редактира се файла /etc/postgresql/<pgversion>/main/postgresql.conf

променя се

#listen_addresses = 'localhost'

на

listen_addresses = '*'

както и

#password_encryption = on

на

password_encryption = on

Редактира се файла /etc/postgresql/<pgversion>/main/pg_hba.conf

променя се

local all all peer

на

local all all password

Рестартирам ...

Comments

Почистване на Windows 7 от ненужни файлове

Публикувано на

По принцип не ползвам Windows, или по-скоро може да се каже, че не го ползвам често, но от време на време ми се налага. Много неприятно е когато за малкото време, в което го ползвам да ми хаби дисковото пространтсво.

Наболял проблем за Windows e папката C:\Windows\winsxs която с времето постоянно расте. Обяснението е, че там се пазят копия на dll-и за да може да не се срине системата (познатата ни грешка от Windows XP "dll is missing..."). Въпреки това не вярвам, че тази папка трябва да заема 11,5GB дисково пространство. След известно време прекарано в Google ...

Comments

Инсталиране на uTorrent Server на Ubuntu Linux

Публикувано на

Докато бях под Windows за торент програма ползвах естествено uTorrent, за съжаление под Linux единственият вариант е Server версията, която няма стандартно GUI, а разполага с WEB GUI (в браузъра отваряте http://localhost:8080/gui). По този начин не може да се интегрира лесно със стандартна Desktop среда.

Тъй като имам проблеми със mount-ването на мрежовия харддиск и да свалям директно на него е голям филм (Да не е толкова лесно колкото под Windows Cry), реших да инсталирам uTorrent Server на моя домашен сървър (Ubuntu Server 11.10), където е закъчен и външият ми хард.

  1. Изтегляме uTorrent Server от http://www ...
Comments

Сервиране на медия чрез middleware

Публикувано на

Сервирането на статичните файлове за dev сървъра на Django не е предвидено по подразбиране. По принцип се дават решения от типа:

if settings.DEBUG:
    urlpatterns = urlpatterns + patterns('django.views.static',
        url(r'^media/(?P<path>.*)$', 'serve', {
'document_root': settings.MEDIA_ROOT,
'show_indexes':True}),
)

Но така се пускат всички middleware-и, което е излишно действие. На нас ни трябва само статичните файлове, коиото по принцип на production сървъра ще ги сервира nginx или apache. За целта можем да си направим простичък Middleware който да го сложим да се изпълнява първи, като проверява дали текущият път започва със settings.MEDIA_URL. Ако е така значи не е ...

Comments

Използване на BASH и Zenity в Nautilus

Публикувано на

Както знаем стандартният файлов мениджър за Gnome има възможност да сложим наши скриптове, писани на който си искаме език, които от своя страна да ни помагат и автоматизират работата.

    Преди да направим какъвто и да е смислен скрипт първо трябва да започнем с някакво въведение. Първо можем да видим с какви променливи разполагаме (enviroment variables). За целта създаваме си примерен скрипт в директория ~/.gnome2/nautilus-scripts със следното съдържание:

#!/bin/bash
set | zenity --text-info --width=800 --height=600 --title="$PWD"

    Ако направим файла изпълним и след това кликнем някъде в nautilus с десния бутон на мишката и от под ...

Comments

Въведение в BASH и zenity

Публикувано на

Хората занимаващи се с линукс, знаят огромните възможности на bash шела. В света на графичният интерфейс искаме да направим нашият скрипт по интерактивен, за това на помощ идва малкото приложение zenity. Реших да напиша няколко елементарни примерчета и след това да покажа как може да се използват BASH и Zenity, за направата на скрипотве за Nautilus.

Ето го първият пример:

#!/bin/bash
(
  echo Hello World!
) | zenity --text-info --width=800 --height=600 --title="Hello World"

Това ще създаде текстов прозорец, който не може а бъде редактиран с размери 800x600,  в който ще пише "Hello World!". Някой може да забележи, че не ...

Comments