C#, вывод цветного текста на консоль и изменение цвета фона консоли.

Делается очень просто, цветом текста управляет свойство ForegroundColor объекта Console, а цветом фона — свойство BackgroundColor, которые принимают значения из перечисления ConsoleColor.

Например, если установить свойства таким образом:

Console.BackgroundColor = ConsoleColor.DarkGray;
Console.ForegroundColor = ConsoleColor.Green;

то при выводе текста, например, командой:

Console.WriteLine("Demo Text");

мы получим зеленый текст:

Demo Text

на темно-сером фоне.

Всего консоль поддерживает 16 цветов.

Сброс цветовой схемы консоли

Для возврата к цветовой схеме по умолчанию используется метод Console.ResetColor();

Пример

Демонстрационный пример на GitHub (выводит все цвета текста и фона)

Скриншоты

Браузеры для Pentium II/III для процессоров без поддержки инструкций SSE2

Нашел еще одну подборку браузеров для процессоров без поддержки инструкций SSE2, способных работать на старых компьютерах Pentium III (некоторые должны и на Pentium II) под Windows XP.

Продолжая эту тему (копия)

Скачать с Mega.nz

Chrome 33 (Standalone Setup)
Firefox Setup 45.9.0 ESR none SSE2
Firefox Setup 48.0.2 none SSE2
Opera 20.0.1387.91 none SSE2
Chromium 35.0.1870.2 portable

Программа для генерации и чтения QR-кодов для Windows

Преамбула

На самом деле достали эти QR-коды и не только «от модной болезни», но и вообще. Лезут таки изо всех щелей. А лопат идиот-фонов я с собой не ношу, во всяком случае в ГОРФ, они мне тут без надобности, благо есть мягенькое креслице и уютный десктоп с полноценной клавой и мышью, ну или, на на худой конец, ноутбук. А телефон должен звонить и принимать СМС (от банка, о поступлениях на счет). Впрочем, преамбула превращается в минутку ворчания…

Итак, как же генерировать и читать QR-коды на десктопе или ноутбуке под Windows?

Нашел программу CodeTwo QR Code Desktop Reader & Generator.

Возможности программы

+ Работает полностью оффлайн, не требует соединение с Интернетом.
+ Небольшие системные требования (см. ниже)
+ Бесплатная, как для домашнего, так и для коммерческого использования
+ Может генерировать QR-коды
+ Имеется возможность читать и декодировать QR-код с экрана (захват экрана с выделением области)
+ Из буфера обмена
+ С изображений с веб-камеры
+ Из файла

— Не OpenSource

Системные требования

+ Поддерживает версии Windows от Windows XP SP3 до Windows 10
+ Поддерживаются как x86 (32-разрядные), так и 64-разрядные версии ОС
+ Размер на диске 2,5 Мб

Необходим .NET Framework 4.0 или выше.

Скачать

Сайт разработчика

Официальная страница (краткая инструкция на буржуйском, скрины, ссылка на скачивание)

Копия установщика на mega.nz

C#, как сделать транслитерацию. Перевод русской строки в latinitsu.

Преамбула

Думаю, что объяснять, что такое транслит, никому не нужно — это написание русских слов latinskimi bukvami, понадобилось сделать это на C#.

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

Русская буква А Б В Г Д Е Ё Ж
Латинская буква или буквосочетание A B V G D E Yo Zh
Русская буква З И Й К Л М Н О
Латинская буква или буквосочетание Z I J K L M N O
Русская буква П Р С Т У Ф Х Ц
Латинская буква или буквосочетание P R S T U F Kh Ts
Русская буква Ч Ш Щ Ъ Ы Ь Э Ю
Латинская буква или буквосочетание Ch Sh Shch » Y E Ju
Русская буква Я
Латинская буква или буквосочетание Ja

Вторая проблема — этот стандарт проблематично использовать для транслитерации URL или имен файлов, надо что-то делать с пробелом (который в именах файлов и URL смотрится, как говно), так что в другом варианте таблицы, для замены Ъ, Ь и пробела, был выбран знак подчеркивания (_).

Класс, для транслитерации символов и строк

Создаем новый класс Translit:

public class Translit
{
	
}

В класс Translit добавляем словарь (Dictionary), который, в качестве ключа, будет использовать тип char (русскую букву), а в качестве значения string, содержащий ее латинский эквивалент. Думаю, ясно, почему string — некоторые русские буквы передаются латинскими буквосочетаниями:

private Dictionary<char, string> TranslitDict = new Dictionary<char,string>();

Теперь надо создать две функции, которые будут заполнять словарь нужными значениями.

Для общего случая:

private void FormDictStandart()
{
    TranslitDict.Clear();

    //Заглавные буквы (общий случай)
    TranslitDict.Add('А', "A");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('Ъ', "''");
    TranslitDict.Add('Ы', "Y");
    TranslitDict.Add('Ь', "'");
    TranslitDict.Add('Э', "E");
    TranslitDict.Add('Ю', "Ju");
    TranslitDict.Add('Я', "Ja");

    //строчные буквы (общий случай)
    TranslitDict.Add('а', "a");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('ъ', "''");
    TranslitDict.Add('ы', "y");
    TranslitDict.Add('ь', "'");
    TranslitDict.Add('э', "e");
    TranslitDict.Add('ю', "ju");
    TranslitDict.Add('я', "ja");
}

И для «режима совместимости»:

private void FormDictCompat()
{
    TranslitDict.Clear();

    //Заглавные буквы (режим совместимости)
    TranslitDict.Add('А', "A");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('Ъ', "_");
    TranslitDict.Add('Ы', "Y");
    TranslitDict.Add('Ь', "_");
    TranslitDict.Add('Э', "E");
    TranslitDict.Add('Ю', "Ju");
    TranslitDict.Add('Я', "Ja");

    //строчные буквы (режим совместимости)
    TranslitDict.Add('а', "a");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('ъ', "_");
    TranslitDict.Add('ы', "y");
    TranslitDict.Add('ь', "_");
    TranslitDict.Add('э', "e");
    TranslitDict.Add('ю', "ju");
    TranslitDict.Add('я', "ja");
	
    //пробел
    TranslitDict.Add(' ', "_");
}

Теперь необходимо добавить в класс свойство, чтобы переключать режимы и переформировывать словарь. Классически, добавляем внутреннюю переменную compatibility типа bool, для хранения текущего значения свойства, и само свойство, при изменении которого, будет вызываться одна из вышеуказанных функций:

private bool compatibility = false;
  
public bool Compatibility
{
    get
    {
        return compatibility;
    }
    set
    {
        if (value)
        {
            FormDictCompat();
            compatibility = true;
        }
        else
        {
            FormDictStandart();
            compatibility = false;
        }
    }
}

Добавим простой конструктор класса:

public Translit(bool Compat)
{
    Compatibility = Compat;
}

Транслитерация символа

Алгоритм простой: надо проверить, содержится ли переданный в функцию символ в словаре, если да, то выдать соответствующее значение, если нет (т.е. передана латинская буква, знак препинания, цифра, или что-то иное), выдать этот же символ, преобразованный в строку:

public string TranslitChar(char Rus)
{
    if (TranslitDict.ContainsKey(Rus))
    {
        return TranslitDict[Rus];
    }
    else
    {
        return Rus.ToString();
    }
}

Проверка строки на наличие русских символов.

Это я уже делал в маленьком примере (копия), так что просто вставлю функции оттуда:

//русские буквы
public static bool ContainsRus(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]", RegexOptions.IgnoreCase);
}

//русские буквы и пробелы
public static bool ContainsRusOrSpace(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]|\s", RegexOptions.IgnoreCase);
}

Транслитерация строки

1. Проверяем, содержит ли строка русские буквы или русские буквы и пробел, в зависимости от режима работы.

Примечание: Сильно работу алгоритма это замедлить не должно, а вот ускорить, в случае какой-нибудь гигантской строки может, т.к. Regex, который используется в функции поверки, работает со строкой напрямую в памяти, средствами .NET.

Если искомого нет — возвращаем оригинальную строку.

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

Примечание: Для формирования новой строки лучше использовать StringBuilder вместо простой конкатенации, опять же, на случай, если строка может оказаться гигантской. См. подробности в статье на Хабре

public string TranslitString(string Rus)
{
    string sBuf = "";
    StringBuilder sb = new StringBuilder();

    if (compatibility)
    {
        if (!ContainsRusOrSpace(Rus)) return Rus;
    }
    else
    {
        if (!ContainsRus(Rus)) return Rus;
    }

    for (int i = 0; i < Rus.Length; i++)
    {
        if (TranslitDict.ContainsKey(Rus[i]))
        {
            sBuf = TranslitDict[Rus[i]];
        }
        else
        {
            sBuf = Rus[i].ToString();
        }
        
        sb.Append(sBuf);
    }

    return sb.ToString();
}

Исходники

Класс Translit на GitHub
Тестовый пример на GitHub