среда, 27 января 2016 г.

RFC 3921 - WHOIS Protocol Specification (конспект)

 
WHOIS-протокол используется для предоставления информации всем пользователям Интернета о существующих сервисах.

WHOIS сервер слушает 43 порт для запросов от клиентов.
Ответ от сервера приходит в понятном для человека виде.
Сервер после посылки ответа, сразу же закрывает соединение.

Отсутствуют средства для определения кодировки.
Отсутствуют механизмы защиты.

вторник, 26 января 2016 г.

RFC 821 - Simple Mail Transfer Protocol (конспект)


Описание

Наименование: Simple Mail Transfer Protocol
Среда передачи: TCP и подобные
Модель SMTP: [отправитель]<-----команда/ответ---->[получатель]
Вид узлов: промежуточный и конечный.

Команда: команда и параметры
Ответ: код и описание

среда, 20 января 2016 г.

Требования к идеальному сайту

Внешний вид

  • Красивый и аккуратный дизайн.
  • Уникальность дизайна.
  • Ухоженность: отсутствие битых ссылок, актуальность дат и т.п.
  • Удобная ширина текста и приятный шрифт (читабельность).
  • Наличие мобильной версии сайта, резинового дизайна.
  • Возможность отключить фоновое видео, если оно имеется.
  • Возможность для людей с ограниченными возможностями взаимодействовать с сайтом.
  • Переключение языков, если это имеет смысл.
  • Не изменяйте оформление указателя мышки, если сайт не игровой.
  • Отсутствие всплывающих окон и других html/js плюшек: если же они есть, то должна быть возможность их закрыть, желательно сразу же.
  • Отсутствие неуместных плюшек в принципе: календари, часы и т.п.
  • Отсутствие фонового звука.
  • Отсутствие вымогательства на какое-либо действие. Пример: сначала отображается нормальная страница, затем через некоторое время всплывающее окно с просьбой зарегистрироваться для дальнейшего просмотра.

вторник, 19 января 2016 г.

Шаблон проектирования Одиночка

Одиночка используется когда необходим ровно один экземпляр какого-то класса, доступный для остальных элементов программы.

Два примера реализации:
package Singleton;
use strict;
use warnings;
use feature 'state';

my $singleton = { rand => int(rand(100)) };

sub instance {
    ref $singleton eq __PACKAGE__ 
        ? $singleton : bless $singleton, shift;
}

sub instance_with_state { 
    state $singleton = { rand => int(rand(100)) };
    ref $singleton eq __PACKAGE__ 
        ? $singleton : bless $singleton, shift;
}

1;

и тестирование для них:

суббота, 16 января 2016 г.

Изучаем содержимое стека в программе на Assembler: вычисления факториала

В качестве примера возьмём программу вычисления факториала из книги Programming from the Ground Up и исследуем стек программы во время её выполнения.

.text                        # Здесь начинается текст программы.

.globl _start                # Указываем, где расположена точка входа.

.type factorial, @function   # Помечаем factorial как функцию.
factorial:
                             # (S2), (S7)
    nop                      # Нулевая операция, удобно для отладки.
    pushl %ebp               # Сохраняем %ebp в стек. (S3), (S8)
    movl  %esp, %ebp         # Теперь %ebp указывает на вершину стека.
    movl  8(%ebp), %eax      # Помещаем в %eax 1-й аргумент функции.
    cmpl  $1, %eax           # Если он равен 1 (базовый случай),
    je    end_factorial      # то переходим к выходу из функции.

    decl  %eax               # Уменьшаем на единицу аргумент функции и
    pushl %eax               # помещаем его в стэк. (S6)
    call  factorial          # Вызываем саму себя из функции.
    movl  8(%ebp), %ebx      # Помещаем 1-й аргумент функции в %ebx.

    imull %ebx, %eax         # В %eax помещаем результат %eax * %ebx.

    end_factorial:        
        movl %ebp, %esp      # Делаем %ebp вершиной стека. (S12)
        popl %ebp            # Помещаем из стека в %ebp. (S10), (S13)
        ret                  # Выходим из функции. (S11), (S14)

_start:
    pushl $2         # Помещаем аргумент функции factorial
                     # в стек. (S1)

    call factorial   # Вызываем функцию factorial.     
    addl $4, %esp    # Очищаем стек от аргумента функции. (S15)

    movl %eax, %ebx  # Результат функции используем как код
                     # выхода из программы.

    movl $1, %eax    # Заказываем системный вызов exit
    int $0x80        # и вызываем его.
Собираем и запускаем программу:

четверг, 14 января 2016 г.

Уголовный кодекс

Список статей УК РФ, имеющих отношение к ИТ.


воскресенье, 10 января 2016 г.

Язык программирования Assembler

Для тех, кто всё-таки решился его изучить. Отличные небольшие видео-уроки с кучей практических примеров по этой теме, правда на английском языке.
  1. Assembly Primer For Hackers (Part 1) System Organization - изучаем упрощённую схему компьютера: CPU, память, устройства ввода/вывода и шину, а так же регистры и их структуру.
  2. Assembly Primer For Hackers (Part 2) Virtual Memory Organization - изучаем распределение адресов в виртуальной памяти для каждого процесса в системе Linux, исследуя файл /proc/{proc_id}/maps.
  3. Assembly Primer For Hackers (Part 3) Gdb Usage Primer - отлаживаем простую C программу в отладчике gdb, дизассемблируем её, изучаем содержимое памяти, стэк и регистры.
  4. Assembly Primer For Hackers (Part 4) Hello World - разбираем структуру Assembler программы, смотрим коды системных вызовов и пишем классику "Hello world".

пятница, 8 января 2016 г.

Язык программирования Perl

Особенности работы с файловыми дескрипторами в Perl

#!/usr/bin/perl 

use strict;
use warnings;

use Benchmark qw(:all);
use FileHandle;

cmpthese(100000, {
    fh_1 => sub {
        open my $fh1, "<", "a.txt" or die $!;
        my @whole_file = <$fh1>;
    },
    fh_2 => sub {
        open my $fh2, "<", "a.txt" or die $!;
        my @whole_file = $fh2->getlines;
    },
    fh_3 => sub {
        my $fh3 = FileHandle->new;
        $fh3->open("< a.txt") or die $!;
        my @whole_file = $fh3->getlines;
    }
});

__END__
        Rate fh_3 fh_2 fh_1
fh_3 29155/s   -- -36% -43%
fh_2 45872/s  57%   -- -11%
fh_1 51282/s  76%  12%   --


Во-первых, для того чтобы использовать объектные методы для файлового дескриптора (варианты fh_2, fh_3), необязательно прибегать к помощи модуля FileHandle, в чьей компетенции находится предоставление подобного функционала. Можно обойтись и без него, если прочитать пару строк из документации perlobj:

четверг, 7 января 2016 г.

Навыки

Пополняющийся список навыков, технологий и прочего необходимого для программистов.

Общее

  1. Английский язык.
  2. Русский язык.
  3. Навык десятипальцевой печати.


Математика

  1. Математическая логика.
  2. Комбинаторика.
  3. Теория вероятностей.
  4. Криптография.
  5. Теория игр.

Теория ИТ

  1. Алгоритмы и структуры данных.
  2. Шаблоны проектирования.
    1. Одиночка
  3. Архитектура системы.

Тестирование

  1. Тестирование элементов (Unit testing)

Технологии

  1. Язык программирования Assembler
  2. Язык программирования C.
  3. Язык программирования Perl
  4. Язык программирования Clisp.
  5. Язык программирования JavaScript.
  6. Язык написания скриптов Shell.
  7. Язык разметки HTML.
  8. Каскадные таблицы стилей CSS.
  9. SQL (Postgres, SQLite).

 

Физический уровень

  1. Архитектура компьютера.
  2. Сетевые технологии.

Инструменты

  1. Система контроля версий (git)
  2. Редактор (vim)

Проектирование

  1. Требования к идеальному сайту

Администрирование

Безопасность


Обучение

  1. stackoverflow.com и его русская версия ru.stackoverflow.com
  2. slideshare.net - лекции обо всём на свете на разных языках.

Юриспруденция

  1. Трудовой кодекс.
  2. Уголовный кодекс

Трудоустройство 

  1. Список вакансий на moikrug.ru
  2. Список резюме на moikrug.ru
  3. Вакансии на stackoverflow.com

Экономика и финансы 

Управление временем

Здоровье и спорт