









Уорън Бъфет, известен като “Оракулът от Омаха”, е един от най-успешните инвеститори в света. Неговите съвети са ценни, особено за начинаещи инвеститори. Ето топ 20 от тях:
Следвайки тези съвети, начинаещите инвеститори могат да изградят стабилна основа за своите инвестиционни начинания.
Някои полезни команди, които ползвам в Linux.
// Листване на всички директории, чието съдържание е по-малко от 100 000 байта:
du --max-depth=1 | awk '$1<100000 {print $1 "\t" $0}'
// Листване пълния път на всички файлове и селектиране на тези с най-дълъг път
find $PWD | awk 'length>200 {print length "\t" $1}'
// Конвертиране на множество png-картинки в анимиран gif
convert -delay 10 -dispose 3 -loop 0 *.png animated.gif
// Сравняване на две директории рекурсивно
diff -qr A B
Ще се опитам да опиша простичко, как се разработва прост extension add-on за Chrome. Понякога е много полезно да се работи с подобни скриптове, особено при скрапване на web-съдържание, когато конвенционалните методи не работят или изискват прекалено много усилия.
За да се създаде подобен скрипт с потребителски интерфейс ще са ни необходими няколко файла:
manifest.json – всяка добавка (extension) за Chrome (а и за другите браузери) съдържа подобен скрипт, който предоставя важна информация на браузера. Повече тук: Manifest File Format
popup.html – стандартно наименование на файла с потребителския интерфейс, който се появява при клик с мишката върху добавката. Разбира се, можем да създадем добавка, която няма нужда от потребителски интерфейс, но в случая аз искам да имам. Името на този файл се посочва в manifest.json.
popup.js – файл, който се зарежда чрез popup.html. Можем и да нямаме подобен файл и да поместим javascript кода направо в popup.html. Но тенденциите в модерното програмиране съветват да се диференцира всичко – стилове, скриптове, html. В моя случай popup.js е двигателя на Chrome добавката. Той посочва какво, кога и къде да се активира.
getPagesSource.js – файл за инжектиране в web-страницата и извлича информацията от нея. Този файл се зарежда от popup.js.
icon.png – някаква иконка, която да се показва в листата с добавките на Chrome.
Нека създадем скрипт, който извлиза съдържанието на определени тагове, като използваме javascript функцията querySelectorAll(). Много приятна функция, която заменя в известна степен нуждата от XPath при web-скрапинга.
Да започваме! Първо създаваме manifest.json, като описваме какво прави тая добавка:
1 2 3 4 5 6 7 8 9 10 11 | { "name": "Simple web scraper", "version": "1.0", "manifest_version": 2, "description": "Get content from tags through querySelector", "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "permissions": ["tabs", "<all_urls>"] } |
След това си правим потребителския интерфейс popup.html – бутончета, поленца, форми, стилове, каквото ни е кеф. В случая ще се огранича на минимума за моите нужди – текстово поле, бутон, слой за резултата:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html style=''> <head> </head> <body style="width:400px;"> <input type="text" id="selector" style="width:300px;" /> <button id="getselector">Get Selector</button><br /><hr /> <div id='message'>Injecting Script....</div> <script src='popup.js'></script> </body> </html> |
В по-горния скрипт се вижда, че зареждам popup.js. Неговото съдържание е следното:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | chrome.runtime.onMessage.addListener(function(request, sender) { if (request.action == "getSlectedContent") { message.innerHTML = request.source; } }); document.querySelector('#getselector').addEventListener('click', winLoad); function winLoad() { var message = document.querySelector('#message'); var inputSel = document.querySelector('#selector').value; var queryInfo = { active: true, currentWindow: true }; chrome.tabs.query(queryInfo, function(tabs) { chrome.tabs.sendMessage( tabs[0].id, { customSelector: inputSel }, function(response) { }); }); chrome.tabs.executeScript(null, { file: "getPageContent.js" }, function() { if (chrome.runtime.lastError) { message.innerText = 'There was an error injecting script : \n' + chrome.runtime.lastError.message; } }); } |
Чрез popup.js зарежда javascripta, който се инжектира в страницата – getPageContent.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | chrome.runtime.onMessage.addListener(function(request, sender) { selElements(document, request.customSelector); }); function selElements(document_root, s){ // Tova go dobaviam zaradi kefa da polzvam foreach() v JavaScript var forEach = function (array, callback, scope) { for (var i = 0; i < array.length; i++) { callback.call(scope, i, array[i]); } }; var myNodeList = document.querySelectorAll(s); var concatenateall = ''; forEach(myNodeList, function (index, value) { concatenateall = concatenateall + value.innerHTML + "<hr />"; }); // return concatenateall; chrome.runtime.sendMessage({ action: "getSlectedContent", source: concatenateall }); } |
Това е.
Сега остава да заредим добавката в Chrome. Това става като отворим More Tools -> Extensions. След това кликаме на бутона Load unpacked и избираме директорията с файловете на нашата добавка.
На базата на тази добавка могат да се направят много други, тъй като съдържа базата за писане на добавки за Chrome.
Сорс кода може да се изтегли от тук: Chrome_Extension-Simple.zip
Кратко видео, което показва как може да се ползва добавката:
Понякога, при преинсталация на Windows, забравям от къде в Realtek HD Audio се включваха едновременно слушалите и говорителите. Обикновено слушалките са ми перманентно включени в предния панел. Не знам защо от Realtek са решили, че щом съм си включил слушалките, значи не искам да слушам през говорителите.
Ей така се оправя проблема:
Start -> Run: Realtek
Избира се приложението Realtek HD Audio Manager:
След това посочваме, че не искаме да детеква дали са включени или изключени слушалките, като чекваме “Disable front panel jack detection“:
В читанката има много готини книжки, които искам да прочета, но за съжаление са с гриф “Произведението е временно забранено за четене. Ще бъде достъпно отново през 2018-а година.“. Много неприятно. Обаче открих, че тия книжки спокойно могат да се свалят на мобилно устройство в epub-формат през OPDS-каталога на читанка: https://chitanka.info/catalog.opds. Което си е гот. Обаче пък е неудобвство после да си преравяш телефона, за да ги прехвърлиш на компа или в архива ти с книжки на преносимия хард.
За моето решение на проблема е необходим само инсталиран Firefox.
Ето и кратко видео, как се прави пиниза:
Няколко пъти ми се е налагало да се опитвам да отпуша дюзите на глава на мастилено струен принтер. Пробвал съм с какво ли не – спирт, дестилирана вода, лакочистител, кислородна вода, бабешко баене и други магии. Почти нищо не дава добри резултати.
Сега вече знам! Единственият начин за почистване на глава на мастиленоструен принтер става с екстракционен бензин! С клечки за уши и малко екстракционен бензин се случват чудеса!
Такъв бензин може да се вземе в Пловдив от Рай-хим. Цената е прилична – 10лв без ДДС:
Каталог на Рай-Хим химикали 2016-та
Освен това, екстракционният бензин може да се ползва и за други неща – много добър обезмаслител, почиства петна, дори от перманентен маркер, може да извлича различни масла от растителни и животински продукти.
Защо, чак сега го разбрах…. 🙁
1. Използване на клавиатурата
Този метод се базира на стандартните клавиатури за PC. Естествено трябва да се запомни нещо простичко. Примери:
1.1. Запомняме буквата “T по часовниковата стрелка” без Shift и с Shift. Получават се символите:
6ygfr^YGFR
1.2. Запомняме “2 по диагонал” без Shift и с Shift
2wsx#EDC
1.3. Запомняне на 2 букви “RO по часовниковата” без Shift и с Shift
5tfde)PLKI
Изключително лесен метод за запомняне на сложни пароли! А вариантите са безкрайни.
2. Парола по лични данни
Можете да правите различни комбинации от личните си данни. Примерно с името и ЕГН-то
Да речем, че името ви на латински е: Lambri Lazarov
А ЕГН-то ви е: 7404113358
Можете да запомните “първите три” и примерна парола може да е:
първите три букви от името: Lam
първите три цифри от ЕГН-то: 740
първите три букви от фамилията: Laz
Паролата става: Lam740Laz
Може да се комбинира и с последните три: bri358rov
Или всякакви други комбинации, примерно първите три, средните четири, последните три: Lam4113rov
3. Парола по таблица с лични данни
В този случай пак лесно и достъпно можете да запомните паролата си. Примерно помните първите 4 колони:
LL7aa4mz0ba4
Получи се идеална 12-символна парола с малки и големи букви и цифри! Естествено отново могат да се правят всякакви комбинации.
Към техниките от т.1 и т.2 могат да се добавят и други данни, които винаги са ви в главата. Примерно град на раждане, презимето и т.н.
4. Използване на криптиращ алогитъм.
Отново много простичък метод, който обаче изисква да имате под-ръка интернет или криптираща програма, ако забравите паролата.
За начало можем да потърси в google за някакъв генератор на чек-суми по дума. Пълно е с такива за MD5 и SHA1 криптиращи алгоритми. Ето два примерни за MD5:
https://www.miraclesalad.com/webtools/md5.php
https://www.md5.cz/
С помощта на генератора генерирах чек-стринг на малкото име “lambri”. Резултата е:
948a01f083bd635e81acaa336e3ba4a4
Сега от тази поредица символи можем да вземем първите 10 символа и имаме готова достатъчно сигурна парола “948a01f083“.
Ако я забравим, ще е достатъчно да потърсим в google отново за md5-генератор и да напишем “lambri”. MD5-генератори има вградени във всяка Linux дистрибуция, може да се изтегли такъв и за Windows, така, че да не зависим от интернет.
Има и удобни хеш-генератори за телефони, които също могат да се използват. Лично аз ползвам HashDroid за Android
Целия стринг може да се принтира и да си го сложите в портфейла, като само вие ще знаете кои точно символи използвате за парола.
5. Карти с пароли от passwordcard.org
Тази техника изисква да помните дължината на паролата и някакви други маркери, като цвят, символ, ред. Може да се държи на видно място и се генерират добри пароли, но трябва да си пазите картата.
6. Таблици с пароли
Идеята е да помните 5 символна дума и на нейна база генерирате парола. Да видим как работи. Ако се казвате Ламбо, можете да си генерирате доста уникална парола, като само трябва да си помните името, изписано на латиница.
В случая “lambo” би изглеждало, като парола, така: L6CK3Xsaenb
А как се получи?! Много е просто! Имаме име от 5 букви и таблица с 5 реда. Всеки ред отговаря на поредния символ от името:
1-ви символ “l” – ред едно, колона “KL” -> L
2-и символ “a” – ред втори, колона “AB” -> 6C
3-ти символ “m” – ред трети, колона “MN” -> K3
4-ти символ “b” – ред четвърти, колона “AB” -> Xsa
5-ти символ “о” – ред пети, колона “OP” -> enb