Вчера зарелизилась новая версия Убунты. Данное событие меня очень порадовало, т.к. в последнее время заинтересовался программированием на языках Ruby, Python и пришлось выбирать среди большого количества дистрибутивов Линукса. Долго не думал и поселил пару недель назад на своем ноутбуке самый популярный (Ubuntu 9.10). Переустанавливать и настраивать систему с нуля не хотелось, поэтому обновился. Пока «полет» нормальный.

Начиная с 2009 года я с интересом наблюдаю за Ruby и Python, а так же за их веб-фреймворками Ruby on Rails и Django. Но только сейчас решил серьезно заняться изучением одного из языков. Возникла проблема выбора.

Побродив по сети, понял что однозначного ответа на интересующий меня вопрос нет. Все обсуждения в форумах и блогах больше походили на холивары. Объективных же доводов в пользу Ruby или Python почти не приводилось, или они были весьма сомнительные и спорные.

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

Информации (как русскоязычной, так и англоязычной) по Рубину действительно очень много. Так же порадовало, наличие отечественного подкаста Ruby NoName Podcast. Всем интересующимся настоятельно рекомендую подписаться на их RSS.

Итак, за выходные прочел несколько статей на Хабре, написал небольшое приложение. Пока Ruby мне очень нравится и привлекает своей идеологией. Однако после рассмотрения основ все же коснусь и Python для сравнения. Думаю, что свое субъективное мнение не повредит. А затем уже решу какой язык применять в своих проектах.

В общем, поживем — увидим. :)

P.S.> Для платформы .NET есть реализации языков, которые называются IronRuby и IronPython соответственно.

P.S.> C# и .NET ни в коем случае забрасывать не собираюсь, поэтому ждите новых статей.

В HTML (начиная с версии 4.0) есть два полезных и редко используемых тега — <ins> и <del>. Их еще называют тегами вставки и удаления. Теги позволяют выделять нужные части документа как обновленные и отмечать старый материал, подлежащий замене.

Теги <ins> и <del>. Описание

Пример использования:

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
    <title>Редакторская разметка</title>
</head>
<body>
    Статью о тегах вставки и удаления написал
    <ins datetime=2010-02-14 cite="http://podcode.ru">
    Андрей Крисанов
    </ins>
    <del>Вячеслав Скрипин</del>
</body>
</html>

Обратите внимание на атрибуты datetime и cite, которые я использую в теге. С помощью них указывается дата вставки (обновления) документа и источник, на основании которого сделана вставка. Аналогично можно поступить и с <del>.

Результат отображения в браузере:

HTML: Редакторская разметка

Иногда у программиста бывают моменты, когда хочется написать что-то “just for fun”. В данном посте таким примером послужит простое консольное приложение, которое строит множество Мандельброта из определенных символов.

Множество Мандельброта C#

Немного теории. Каждая позиция в изображение множества Мандельброта соответствует комплексному числу вида N = х + y*i, где х представляет вещественную часть, у— мнимую, а i — квадратный корень из -1. Координаты х и у позиции на изображении  соответствуют частям х и у в комплексном числе. Для каждой позиции в изображении выполняется проверка аргумента N, получаемого вычислением квадратного корня из х*х + у*у. Если его значение больше или равно 2, тогда считается, что позиция, соответствующая данному числу, имеет значение 0. Если же значение аргумента оказывается меньше 2, тогда оно заменяется значением N*N — N (дающим в результате N = (х*х — у*у — х) + B*х*у — у) *i) и снова подвергается проверке. Если это значение оказывается больше или равно 2, тогда считается, что позиция, соответствующая этому числу, имеет значение 1. И этот процесс  продолжается до тех пор, пока либо не будет присвоено значение позиции в изображении, либо не будет выполнено определенное количество итераций. На основании тех значений, что присваиваются каждой точке в изображении, в графической среде на экране отображался бы пиксель определенного цвета. Однако
поскольку в данном примере используется текстовый режим, вместо пикселей на экран выводятся символы.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Построение множества Мандельброта "just for fun".
using System;

class Program
{
    static void Main(string[] args)
    {
        double realCoord, imagCoord; // Мнимая и вещественные части числа N
        // Переменные для временного хранения информации во время вычислений
        double realTemp, imagTemp, realTemp2, arg;
        int iterations; // Кол-во итераций

        // Циклы for для циклической обработки охватывающих все изображение координат
        for (imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05)
        {
            for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
            {
                // Инициализируем некоторые переменные
                iterations = 0;
                realTemp = realCoord;
                imagTemp = imagCoord;
                arg = (realCoord * realCoord) + (imagCoord * imagCoord);

                // Цикл while для выполнения итерации
                while ( (arg < 4) && (iterations < 40))
                {
                    realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
                    imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                    realTemp = realTemp2;
                    arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                    iterations += 1;
                }

                /* После сохранения значения для текущей точки в iterations применяется
                 * оператор switch для выбора символа, выводимого на экран. Здесь используются только 4
                 * разных символа вместо 40 возможных, а также операция % для того, чтобы значения 0,
                 * 4, 8 и т.д. давали один символ, значения 1, 5, 9 и т.д. — другой и далее в том же духе */

                switch (iterations % 4)
                {
                    case 0:
                        Console.Write (".") ;
                        break;
                    case 1:
                        Console.Write("o");
                        break;
                    case 2:
                        Console.Write("O");
                        break;
                    case 3:
                        Console.Write("@");
                        break;
                }
            }
            Console.Write("\n");
        }
        Console.ReadKey();
    }
}

Различают два вида многозадачности: с ориентацией на процессы и с ориентацией на потоки. Важно понимать различия между ними.

Процесс (Process) по сути представляет собой выполняемую программу. Следовательно, многозадачность, ориентированная на процессы – средство, позволяющее выполнять две или более программ одновременно. В процессно-ориентированной многозадачности программа является наименьшим элементом кода, который может манипулироваться планировщиком задач.

Нити (Threads) — управляемые единицы выполняемого кода в пределах одного процесса. Все процессы имеют по крайней мере одну нить. Процесс ничего не исполняет, он просто служит контейнером для нитей.

P.S. Что должен знать правильный .NET-разработчик

Удивительно, но многие начинающие JavaScript – программисты не знают об использовании URL-адреса со спецификатором псевдопротокола javascript: , позволяющего вычислять значения выражения и получать результат выполнения. Инструкции, которые следуют после псевдопротокола, отделяются точкой с запятой. Загружая URL с псевдопротоколом, браузер просто выполняет JavaScript-код. Значение последнего выражения в этом URL-адресе преобразуется в строку, которая отображается браузером в качестве нового документа.

Примеры:

1
2
3
4
5
javascript: 10-8;

javascript: d = new Date(); typeof d;

javascript: alert("Hello, World!");


Страница 1 из 212

© 2009 PodCode – IT-заметки | Powered by Wordpress