Архив метки: Программирование

Чтение исходников

Почему возникает потребность читать исходники сторонних, стандартных библиотек?
1. В исходниках можно найти примеры инженерных решений
Можно подчеркнуть архитектурные решения, принципы взаимодействия компоненнтов и прочее и прочее.

2. Примеры кода
Если код писал профессионал, то можно утащить себе в копилку красивые решения. Обратная ситуация — говнокод — в копилочку как делать не надо

3. Исходники могут быть единственным источником документации
«…код должен быть самодокументированным…», «…комментарии — трата времени…». Если разработчик библиотеки был из этих, то в перед к чтению исходного кода.

4. Для поиска багов
Баги есть везде, даже в стандартных библиотеках. И возникают ситуации когда — программа ведет себя не так как описано в документации и ошибка явно не в собственном коде, придется опускаться на уровень ниже  и читать исходники библиотек.

Автор: Евгений Курочкин

RetroShare — клиент F2F сетей. Установка

Итак, начинаем серию статей про замечательную программу RetroShare, которая способна в некотором случае заменить и ICQ-клиент, и программу обмена данными, и SKYPE. В последнее время я пользуюсь исключительно этой программой в виду ее удобства при использовании. В данной статье рассмотрим описание этой программы и ее установку.
Что это и  с чем едят?
RetroShare — свободная программа бессерверного обмена письмами, мгновенными сообщениями и файлами с помощью шифрованной F2F (и опционально P2P) сети, построенной на GPG. Не является жестко даркнетом, т.к. пиры могут обмениваться сертификатами и IP адресами со своими друзьями.
 
Аутентификация и соединение
После установки пользователь или генерирует пару GPG ключей с помощью RetroShare, или выбирает существующую. После проверки подлинности и обмена асимметричным ключом, соединение устанавливается по SSH. Для шифрования используется OpenSSL. Друзья друзей по умолчанию не могут соединяться, но могут видеть друг друга если пользователи включили такую возможность.
 
Обмен файлами
Можно шарить папки между друзьями. Передача файлов идет  сегментировано через несколько точек (multi-hop swarming). В целом данные передаются только между друзьями, но путь от отправителя до конечного получателя конкретного сегмента может идти через нескольких друзей. Функцию анонимного поиска по нескольким точкам (multi-hop search) является ещё одним способом находить файлы по сети.
Файлы представляются в виде своих SHA-1 хэшей. HTTP совместимые ссылки на них могут экспортироваться, копироваться и вставляться из/в RetroShare, чтобы опубликовать их виртуальное расположение в сети.
 
Общение
RetroShare предлагает несколько сервисов для общения друзей. Приватный чат и собственная почтовая система обеспечивают защищённую связь между известными друзьям. Система форумов, разрешающая как анонимные, так и аутентифицированные форумы также используется для обмена сообщений между друзьями. Канальная система позволяет автоматически загружать файлы размещенные на конкретном канале каждому подписанному клиенту.
 
Интерфейс пользователя
Ядро RetroShare основано на базовой библиотеке, к которой могут подсоединяются два модуля пользовательского интерфейса: модуль командной строки, который не дает почти никакого контроля, и модуль графического интерфейса на Qt4, который будет более приятен большинству пользователей. В дополнение к популярным функциям другого ПО обмена файлами, таким как вкладки поиска и визуализация закачек. RetroShare дает возможность управлять своей сетью путем сбора дополнительной информации о соседних друзьях и отображения её в виде матрицы доверия или в виде динамического графа сети. 
 
Анонимность
F2F структура RetroShare сети затрудняет вторжение и делает почти невозможным мониторинг сети извне. Степень анонимности может быть улучшена деактивацией DHT и сервисов обмена IP/сертификатами, превращая таким образом сеть RetroShare в настойщий даркнет. Друзья друзей не могут напрямую соединяться друг с другом. Тем не менее, возможность анонимного обмена файлами с друзьями друзей существует, если она включена пользователем. Поиск, доступ, загрузка и скачивание таких файлов производится путем «маршрутизации» через ряд друзей. Это означает, что связь между источником данных (uploader) и получателем данных (downloader) является косвенной через общих друзей. Хотя друзья-посредники не могут определить источник отправления или пункт назначения, они могут просматривать содержимое проходящих через них пакетов.
 
Особенности программы
  • Поиск друзей
  • Поиск файлов
  • Мгновенный обмен сообщениями
  • Групповой чат
  • Каналы наподобие IRC
  • Анонимные/аутенфицированные форумы
  • Поиск файлов через несколько точек (multi-hop)
  • NAT перфорация
  • Сегментированная передача, как в BitTorrent
  • Кроссплатформенный UI на Qt4
  • Локализация на 9 языках
  • Анонимный обмен файлами с друзьями
  • URL схема общих файлов
  • Полная децентрализация 
  • Поддержка переадресации UPnP / NAT-PMP портов
  • Обзор всех общих файлов
  • Несколько одновременных загрузок / закачек
  • Поддержка плагинов
  • Голосовой чат через VoIP плагин
  • Интеграция в панель задач
  • Возобновление прерванной загрузки после выхода
  • Добавление загрузок через веб ссылки
  • Обзор внутренней статистики маршрутизатора
  • Мастер первоначальной настройки
  • Автоматическая настройка портов маршрутизатора
  • Открытый или анонимный обмен данными с друзьями

 

 
Установка программы
Установку программы можно осуществить двумя способами:
1. качаем deb-пакет с официального сайта.
2. устанавливаем из терминала. Для этого нам нужно добавить два репозитория:
sudo add-apt-repository ppa:csoler-users/retroshare 
sudo add-apt-repository ppa:csoler-users/retroshare-snapshots
 
после обновляемся:
sudo apt-get update
 
и соответственно устанавливаем саму программу:
sudo apt-get install retroshare
 
Находим RetroShare  в Меню-Интернет. При первом запуске RetroShare Вам будет предложено создать новый профиль. Вопросы стандартные: 
— Ваше имя пользователя;
— Ваша почта. Неважно, можете поставить любой набор символов;
— Ваш пароль. Соответственно пароль должен быть сложным и стойким ко взлому;
— расположение. Какое-либо имя для идентификации пользователя. Например Home Computer.
Затем нажмите «Создать новый профиль».
Вам будет предложено ввести Ваш пароль и программа запустится. 

 В следующих статьях мы рассмотрим более детально интерфейс программы.

Автор: Роман Дмитриевич

Сервис онлайн тестирования Quizful

    Недавно в блоге Алена С++ прочитал пост о бесплатном прохождении тестов на сайте Brainbench. Халява была ограниченна по времени, так что я задался вопросом найти бесплатный аналог и на русском. Больше всего мне понравился сайт онлайн тестов Quizful.

 На котором есть достаточно большое количество тестов по различным тематикам:

  • тесты по администрированию (Unix, Linux, Windows, MacOS)
  • тесты по программированию (C++, Java, C#, 1C, PHP, Python, Ruby, Delphi)
  • тесты по базам данных (SQL, Oracle, MS SQL, MySql)
  • тесты по веб-технологиям (HTML, CSS, JavaScript, HTTP)
  • тесты по управлению проектами (экстремальное программирование, Scrum)

Прохождение тестов для меня это возможность узнать свои слабые места и подтянуть знания.

Преимущества сервиса Quizful

  • Это некоммерческий сервис направленный на помощь IT сообществу
  • После прохождения тестов можно просмотреть правильные ответы с объяснениями
  • Сайт поддерживается сообществом и пройдя пару тройку тестов, можно добавить свои вопросы или задачи.  

Автор: Dmitriy Falko
Дата публикации: 2012-03-19T10:08:00.003+04:00

Python — генерация случайного числа с заданной вероятностью

Представим, что нам потребовалось создать на Питоне генератор случайных чисел, который выводит 1 или 0, причем 1 он выводит с вероятностью 0,2.
Это можно сделать следующим образом:

>>> import random
>>> for i in range(20):
…     x = random.random()
…     if x <= 0.2:
…             print 1
…     else:
…             print 0

0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0

Что мы здесь сделали?
Во первых, первой строкой подключили модуль random, затем сгенерировали случайное число с плавающей точкой в пределах от 0 до 1. В зависимости от того, меньше это число 0.2, или больше, мы вывели 1 или 0. Таким образом, задачу можно считать выполненной.

Автор: AlexWinner
Дата публикации: 2011-01-31T06:58:00.000-08:00

Python — сложение строк или конкатенация

В питоне складывать строки очень просто, вот примеры, из которых все понятно:
Пример №1

>>>print 'Привет! ' + 'Как дела?'
Привет! Как дела?

Пример №2

>>> a = 'Хорошо'
>>> b = ' А у тебя как?'
>>> c = a + b
>>> print c
Хорошо А у тебя как? 

Пример №3 (c преобразованием числа  в строку)

 >>> x = 12
>>> y = 6
>>> print '12 * 6 = '+str(x*y)
12 * 6 = 72

Автор: AlexWinner
Дата публикации: 2011-01-31T06:49:00.000-08:00

Краткое введение в программирование на Bash — часть II

Выкладываю перевод второй часть статьи про введение в программирование на bash, начатое здесь.

В своей второй статье Гарольд продолжает свое первоклассное введение в программирование на bash. На этот раз он объясняет, как выполнять арифметические операции в скриптах bash, как определить функции в своих программах. Завершается статья введением в такие продвинутые вещи как чтение пользовательского ввода, обработка скриптом аргументов, перехватывание сигналов и обработка кодов завершения программ.

Читать