SQL для начинающих


Это статья исключительно для ознакомления с SQL. Главной целью была доходчивость, чтобы читатель проичитал за минут 5. Расчитана чисто для тех, кто вообще не знаком с SQL. Поэтому тут вы не найдете супер сложных запросов.
Думаю, разговорами про SQL и базы данных уже никого не удивишь, но очень много встречаю людей, которые слышали про SQL, но ни разу так и не пощупали его."


Читать дальше →

Квест-головоломка для программистов

Предлагаю всем программистам и околоайтишному народу попробовать пройти этот квест-головоломку.

Квест состоит из 9 этапов, на каждом этапе нужно решить определенную задачу. Надеюсь задачи получились не слишком хардкорными :). Если найдете какие-то баги, сообщите мне по указанному на сайте емейлу.

Удачи!

Android. Density independent pixel (dp).

Довольно давно пишу различные статьи про программирование на своем блоге.
В коллективных блогах пробую публиковаться первый раз, если что-то не так — прошу не обижаться.
Здесь публикую свою последнюю заметку с блога, возможно будет интересна тем, кто начинает разбираться с программированием под Android.

Вопрос про единицу измерения длины «dp» постоянно появляется на различных форумах и сайтах посвященных разработке приложений под ОС Android. В большинстве случаев, в качестве ответа более опытные программисты приводят цитату с официального сайта:

Density-independent pixel (dp)
A virtual pixel unit that you should use when defining UI layout, to express layout dimensions or position in a density-independent way.
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a «medium» density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.


В целом, мотивы создания dp-единицы описаны довольно ясно. Никому не хочется делать множество различных версток для экранов с разным разрешением и плотностью точек.
Тем не менее, давайте посмотрим более подробно на указанную выше формулу:

px = dp * (dpi / 160)

Здесь главное не запутаться. Если px — это длина в пикселях, а dp — длина в д-пикселях, то для dpi = 240 получится:

px = (dpi/160) * dp = 1.5 * dp

По указанной выше формуле получим, что если dp = 1, то px = 1.5.

Попробуем разобрать ситуацию по существу. Ввод единицы измерения длины dp, нужен был для того, чтобы на экранах с разным количество точек на дюйм размеры графических элементов были одинаковыми.
Например, если взять экран с 160dpi (160 точек на линейный дюйм) и с 240dpi, то для того, чтобы физический размер кнопки был одинаковый, нужно на экране с 240dpi размер кнопки в пикселях делать в 1.5 раз больше.

Здесь важно определиться в понятиях размер, разрешение и плотность:
Размеры (3'', 10'' и т.д.) — физические размеры экрана. В Android-е это разные группы ресурсов: small, normal, large, and extra large. Измеряются в dp.
Разрешение (QWGA, HVGA и т.д.) — количество точек на экране (например: 1024x720).
Плотность (DPI) — количество точек на линейный дюйм. В Android-е это разные группы: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high).

Итак понятно, что единица dp — это такой виртуальный пиксель, который на плотных экранах занимает большее количество пикселей, а на разреженных меньше.
Цель — сохранить единообразие в пользовательском интерфейсе.

Дальше самое интересное. Чтобы лучше понять, как происходит преобразование dp в px на самом деле, думаю имеет смысл посмотреть в исходный код:

Читать дальше →

Конкурс «Юзабилити и дизайн в разработке программного обеспечения»

Компания «НАТ Казахстан», при поддержке «Ассоциации IT-компаний Казахстана», проведет конкурс «Юзабилити и дизайн в разработке программного обеспечения».

Конкурс проводится в целях популяризации и развития IT-технологий в Республике Казахстан среди молодежи, стимулирования развития процесса разработки качественного отечественного программного обеспечения (ПО), стимулирования использования нестандартных и инновационных подходов в области программирования.

В целях обеспечения прозрачности оценивания конкурсных работ, в жюри конкурса будут приглашены сторонние эксперты в IT-сфере.

Для того, чтобы принять участие в конкурсе необходимо пройти регистрацию на сайте конкурса (доступ к ресурсу будет открыт 10 мая 2012 г.), ознакомиться с техническим заданием и прислать свою работу с заполненной анкетой участника.

Доступ к Техническому заданию будет открыт с 20 мая, в целях обеспечения равнозначных условий участникам конкурса. Прием конкурсных работ будет производиться до 16 июля, итоги конкурса будут подведены после 27 июля 2012 года.

PHP check url if valid

полезная функция для проверки ссылки на доступность:

function is_valid_url ( $url )
{
$url = @parse_url($url);

if ( ! $url) {
return false;
}

$url = array_map('trim', $url);
$url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
$path = (isset($url['path'])) ? $url['path'] : '';

if ($path == '')
{
$path = '/';
}

$path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : '';

if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) )
{
if ( PHP_VERSION >= 5 )
{
$headers = get_headers("$url[scheme]://$url[host]:$url[port]$path");
}
else
{
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);

if ( ! $fp )
{
return false;
}
fputs($fp, "HEAD $path HTTP/1.1rnHost: $url[host]rnrn");
$headers = fread ( $fp, 128 );
fclose ( $fp );
}
$headers = ( is_array ( $headers ) ) ? implode ( "n", $headers ) : $headers;
return ( bool ) preg_match ( '#^HTTP/.*s+[(200|301|302)]+s#i', $headers );
}
return false;
}

QBasic на Ubuntu

Сперва, откроем терминал и установим DOSBox:
sudo apt-get install dosbox 


Затем:
wget http://download.microsoft.com/download/win95upg/tool_s/1.0/w95/en-us/olddos.exe 


Откройте домашнюю папку и откройте архивным менеджером olddos.exe, затем распакуйте его в папку QBasic.

Вводим в терминале:
dosbox 


В открывшемся окне выполняем последовательность команд:
mount c /home/username/QBasic/ 
C: 
QBASIC.EXE 


Всё, QBasic должен запуститься

wxWidgets – пишем программы для Ubuntu

Впервые о Code::Blocks (далее – СиБи) я узнал несколько лет назад на страницах «Вестей» из статьи В. Станкевича. Прочитал, да и забыл… После перехода по ряду соображений на «Линукс» стал подбирать «сиплюсплюсный» RAD-инструментарий, и СиБи сам о себе напомнил. Если верить «Гуглу», то Кьют примерно в 4 раза популярнее, чем СиБи, однако СиБи моложе и быстро набирает рейтинг, потому что благодаря плагинам может работать с разными фреймворками. Последние в программировании – это библиотеки интерфейсных классов, НЕ зависящие от среды разработки. Вот библиотека VCL – не фреймворк, а MFC – фреймворк, но не кроссплатформенный. Использовать фреймворк без IDE – занятие малопроизводительное. Поэтому обычно с фреймворками работают в какой-нибудь IDE. В кроссплатформенном СиБи чаще всего работают с кроссплатформенным фреймворком wxWidgets второго поколения. Да и сама среда построена на этом фреймворке. В «Линуксе» фреймворк wxWidgets именуют wxGTK, что отражается на наименованиях пакетов, но не классов.Чтобы почувствовать, что такое СиБи, как кроссплатформенная RAD-среда, напишем «под Линукс» работающее приложение, аналогичное тому, которое было в статье о Кьюте («КВ» №1/2009), и оценим, что получилось. Однако обо всём по порядку.
Читать дальше →