<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Maniac Programmer's Blog &#187; Программинг</title>
	<atom:link href="http://2lx.ru/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://2lx.ru</link>
	<description>Блог помешанного программиста</description>
	<lastBuildDate>Fri, 20 Jan 2012 10:46:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Работа с HTTP в Qt</title>
		<link>http://2lx.ru/2012/01/rabota-s-http-v-qt/</link>
		<comments>http://2lx.ru/2012/01/rabota-s-http-v-qt/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 10:46:03 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=606</guid>
		<description><![CDATA[Для отправки HTTP-запросов в Qt используется класс QNetworkAccessManager. В качестве входных параметров ему передается класс QUrl, а на выходе отдается класс QNetworkReply.
Процесс отправки запроса проходит в три этапа: Инициализация QNetworkAccessManager, отправка запроса, прием ответа.
1. Создаем новый QNetworkAccessManager и начинаем ожидать от него сигнала finished:

 nam = new QNetworkAccessManager(this);
 QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
 ...]]></description>
		<wfw:commentRss>http://2lx.ru/2012/01/rabota-s-http-v-qt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Рекурсивный поиск файлов на Qt</title>
		<link>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-qt/</link>
		<comments>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-qt/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 10:40:58 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[рекурсия]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=604</guid>
		<description><![CDATA[Ранее я уже писал о рекурсивном поиске файлов на WinAPI. Вот кроссплатформенная реализация на Qt.
Мне известны два способа рекурсивно искать файлы во вложенных подпапках с помощью Qt:
1. С помощью стандартного рекурсивного вызова функции чтения содержимого папок;
2. С помощью класса QDirIterator.
Функция, представленная ниже, ищет и выводит на экран имена файлов в ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-qt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Рекурсивный поиск файлов на WinAPI</title>
		<link>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-winapi/</link>
		<comments>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-winapi/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 10:38:44 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[WinAPI]]></category>
		<category><![CDATA[рекурсия]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=603</guid>
		<description><![CDATA[Функция рекурсивного поиска файлов с использованием функций WinAPI

void FindRecursive(char *path, char *mask){
	WIN32_FIND_DATA finddata;
	char p[512], buf[512];
	HANDLE hFind;
	bool removed;

	// ищем файлы
	sprintf(p,&#34;%s\\%s&#34;,path, mask);
	hFind = FindFirstFile(p,&#38;finddata);
	if(hFind!=INVALID_HANDLE_VALUE)
	{
		do
		{
// Делаем что-нибудь с найденными файлами

		}while(FindNextFile(hFind,&#38;finddata));
	}
	FindClose(hFind);

	// ищем подпапки
	sprintf(p,&#34;%s\\*&#34;,path);
	hFind = FindFirstFile(p,&#38;finddata);
	if(hFind!=INVALID_HANDLE_VALUE)
	{
		do
		{
			if ((finddata.dwFileAttributes &#38; FILE_ATTRIBUTE_DIRECTORY))
			{
				if (strcmp(finddata.cFileName,&#34;..&#34;) &#38;&#38; strcmp(finddata.cFileName,&#34;.&#34;))
				{
					FindRecursive(buf, mask);
				}
			}
		}while(FindNextFile(hFind,&#38;finddata));
	}
	FindClose(hFind);
}

]]></description>
		<wfw:commentRss>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-winapi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP-логгер на PHP</title>
		<link>http://2lx.ru/2011/12/ip-logger-na-php/</link>
		<comments>http://2lx.ru/2011/12/ip-logger-na-php/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 10:37:14 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=602</guid>
		<description><![CDATA[Самый простейший логгер посещений вашего сайта на PHP

&#60;?php
$logfile= &#039;/full_path_to/log.html&#039;;
$IP = $_SERVER[&#039;REMOTE_ADDR&#039;];
$logdetails= date(&#34;F j, Y, g:i a&#34;) . &#039;: &#039; . &#039;&#60;a href=http://dnsstuff.com/tools/city.ch?ip=&#039;.$_SERVER[&#039;REMOTE_ADDR&#039;].&#039;&#62;&#039;.$_SERVER[&#039;REMOTE_ADDR&#039;].&#039;&#60;/a&#62;&#039;;
$fp = fopen($logfile, &#34;a&#34;);
fwrite($fp, $logdetails);
fwrite($fp, &#34;&#60;br&#62;&#34;);
fclose($fp);
?&#62;

]]></description>
		<wfw:commentRss>http://2lx.ru/2011/12/ip-logger-na-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Симулятор компиляции</title>
		<link>http://2lx.ru/2011/11/simulyator-kompilyacii/</link>
		<comments>http://2lx.ru/2011/11/simulyator-kompilyacii/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 10:35:38 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Программинг]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=601</guid>
		<description><![CDATA[Скрипт симулирует бесконечную компиляцию, чтобы Вы тем временем могли спокойно ничего не делать.
while true; do awk '{ print ; system("let R=$RANDOM%10; sleep $R") }' compiler.log; done
Для выключения остановите задачу с помощью CTRL-Z, а затем убейте командой kill.
]]></description>
		<wfw:commentRss>http://2lx.ru/2011/11/simulyator-kompilyacii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sleep в Qt</title>
		<link>http://2lx.ru/2011/11/sleep-v-qt/</link>
		<comments>http://2lx.ru/2011/11/sleep-v-qt/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 10:33:08 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=600</guid>
		<description><![CDATA[В Qt нет встроенной функции Sleep, да и все говорят, что в подходе &#171;Сигнал-Слот&#187; она не нужна. Однако она все-таки бывет нужна, и вот как ее можно реализовать:

#include &#60;QWaitCondition&#62;
void Sleep(int ms)
{
 QWaitCondition sleep;
 QMutex mutex;
 sleep.wait(&#38;mutex, ms);
}

Использовать так:

int milliseconds = 10 * 1000;
Sleep(milliseconds);

PS: а если хотите все-таки пойти путем &#171;Сигнал-Слот&#187;, ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/11/sleep-v-qt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Получение списка установленных программ на WinAPI</title>
		<link>http://2lx.ru/2011/11/poluchenie-spiska-ustanovlennyx-programm-na-winapi/</link>
		<comments>http://2lx.ru/2011/11/poluchenie-spiska-ustanovlennyx-programm-na-winapi/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 10:31:09 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[система]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=599</guid>
		<description><![CDATA[

#include &#60;windows.h&#62;
#include &#60;stdio.h&#62;

int main()
{
 DWORD dwIndex = 0;
 LONG ret;
 DWORD cbName = 256;
 TCHAR szSubKeyName[256];
 char szDisplayName[256];
 DWORD dwSize;
 DWORD dwType;

 // Открываем ветку реестра со списком установленных программ
 HKEY hKey;
 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, &#34;Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall&#34;, 0, KEY_READ, &#38;hKey) != ERROR_SUCCESS)
 return;

 // Поочередно проходим по каждому вложенному разделу
 while ((ret ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/11/poluchenie-spiska-ustanovlennyx-programm-na-winapi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Base64 в C++</title>
		<link>http://2lx.ru/2011/10/base64-v-c/</link>
		<comments>http://2lx.ru/2011/10/base64-v-c/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 10:25:54 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=597</guid>
		<description><![CDATA[В C++ нет встроенных функций для работы с Base64, однако есть готовые сторонние библиотеки.
Очень хорошую библиотеку для кодирования/декодирования Base64 в C++ можно найти тут.
Скачиваем с ранееупомянутой ссылки файлы base64.cpp и base64.h, и подключаем их к своемуц проекту.
Теперь достаточно просто воспользоваться функциями base64_encode и base64_decode:

#include &#34;base64.h&#34;
#include &#60;iostream&#62;
#include &#60;fstream&#62;

using namespace std;

int main(){
 ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/10/base64-v-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Даунгрейд проекта Visual Studio</title>
		<link>http://2lx.ru/2011/10/daungrejd-proekta-visual-studio/</link>
		<comments>http://2lx.ru/2011/10/daungrejd-proekta-visual-studio/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 10:25:44 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=596</guid>
		<description><![CDATA[Файлы проектов Visual Studio (.vcproj, .csproj) не имеют обратной совместимости. Например, проект, созданный в Visual Studio 2008 отлично открывается в Visual Studio 2008, но наоборот не открывается.
Этот Perl-скрипт позволит продаунгрейдить проект чтобы он открылся в более ранней версии Visual Studio

#!/usr/bin/perl -w

use strict;

my $targetver= 9;
my %veryear= ( 8 =&#62; 2003, 9 ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/10/daungrejd-proekta-visual-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Использование Proxy с QwebView</title>
		<link>http://2lx.ru/2011/10/ispolzovanie-proxy-s-qwebview/</link>
		<comments>http://2lx.ru/2011/10/ispolzovanie-proxy-s-qwebview/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 05:26:20 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Сеть]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=595</guid>
		<description><![CDATA[Пока писал свой просмотрщик фотографий Вконтакте столкнулся с необходимостью выполнения запросов виджета QwebView через прокси-сервер. В интернете нашелся следующий код:

int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 MainWindow w;
 QNetworkProxy proxy;
 proxy.setType(QNetworkProxy::HttpProxy);
 proxy.setHostName(QString(&#34;http://192.168.1.1&#34;));
 proxy.setPort(8080);
 QNetworkProxy::setApplicationProxy(proxy);
 w.show();
 return a.exec();
}
Но он почему-то не работает.
Оказывается это можно сделать еще проще:
webView-&#62;page()-&#62;networkAccessManager()-&#62;setProxy( QNetworkProxy( QNetworkProxy::HttpProxy, &#34;192.168.1.1&#34;, ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/10/ispolzovanie-proxy-s-qwebview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

