Генерация md5 C#

Декабрь 13th, 2011 § 0 comments § Прямая ссылка

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

using System.Security.Cryptography;

public string GetMD5()
{
Random randNum = new Random();
MD5CryptoServiceProvider md5hash = new MD5CryptoServiceProvider();
byte[] genByte = Encoding.UTF8.GetBytes(randNum.NextDouble().ToString());
byte[] computeHash = md5hash.ComputeHash(genByte);
string result = String.Empty;
foreach (byte currentByte in computeHash)
result += currentByte.ToString("x2");
return result;
}

public string GenMD5(string text)
{
MD5CryptoServiceProvider md5Hash = new MD5CryptoServiceProvider();
byte[] textByte = Encoding.UTF8.GetBytes(text);
byte[] computeHash = md5Hash.ComputeHash(textByte);
string result = String.Empty;
foreach (byte currentByte in computeHash)
result += currentByte.ToString("x2");
return result;
}

Соглашение об именовании в C# (C# code convention)

Декабрь 8th, 2011 § 0 comments § Прямая ссылка

Начал гуглить на эту тему, т.к. надоело уже писать код не стандартизованный. Захотел придерживаться общепринятых правил. Нашел список в одном из учебников привожу его здесь. Для не знавших или забывших. Camel case это когда первая буква строчная остальные прописные пример: someVariable, anotherSomeVarible, someFunction. Pascal Case это когда все буквы прописные пример: SomeVariable, AnotherSomeVarible, SomeFunction.

Type Case Notes
Class / Struct Pascal Casing
Interface Pascal Casing Starts with I
Enum values Pascal Casing
Enum type Pascal Casing
Events Pascal Casing
Exception class Pascal Casing End with Exception
public Fields Pascal Casing
Methods Pascal Casing
Namespace Pascal Casing
Property Pascal Casing
Protected/private Fields Camel Casing
Parameters Camel Casing

.htaccess для CodeIgniter

Сентябрь 12th, 2011 § 0 comments § Прямая ссылка

Пришлось намучаться, для того что бы правильно работал роутинг на связке Windows+XAMPP+CodeIgniter. Привожу работающий пример для .htaccess CodeIgniter. Мне помог. По работающим я понимаю, когда вы можете обратиться к своему контроллеру http://localhost/codeigniter/signup вместо http://localhost/codeigniter/index.php/signup (имейте ввиду, что это для примера у вас будет другой контроллер и адрес, главное чтобы идея была ясна). Первою очередь удостоверьтесь, что Apache подключает mod_rewrite это можно сделать в xampp/apache/conf/httpd.conf проверяем, закомментирована ли загрузка (комментарии в конфиге Apache обозначаются символом #), если да то убираем и перезагружаем Apache что бы изменения вступили в силу.

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


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Настройка SSH тунелинг с помощью putty

Август 29th, 2011 § 0 comments § Прямая ссылка

По долгу службы нужно было настроить генерацию карты по данным из базы, но проблема оказалось в том, что база лежала на продакшене и открывать внешнему миру MySql спешить никто не хотел. Выход был использование тунелирования. Для этого берем Putty и производим следующие манипуляции. Открываем Putty выбираем вкладку SSH->Tunnels в поле Destination вводим (для примера мы конектимся к MySql, который виден исключительно с локалхоста) localhost:3306 Destination Port этот тот порт, который должен быть свободен на нашей локальной машине (к нему мы будем подключаться для осуществления проброса), оставляем настройку local и задаем версию протокола ipv4 или ipv6, но рекомендую оставить auto, если сомневаетесь. После этого щелкаем Add. Далее переходим во вкладку Session вводим адрес, нашего ресурса и порт SSH (если он был изменен с дефолтного, на какой либо другой). Подключаемся к серверу, авторизуемся. Вааля проброс настроен. Теперь мы можем подключится удаленно к базе просто указав хост, как localhost:(Destination Port) будто он находится у нас на локальной машине (это порт, который мы ввели при настройке в SSH).

PS

Не забывайте сохранять настройки, если часто пользуетесь, экономит нервную систему xDDD

 

Заметка об алгоритмах

Август 26th, 2011 § 0 comments § Прямая ссылка

После некоторого анализа, проведенного Халом Бурчем (Hal Burch). Все задачи на алгоритмы можно разделить на 16 категорий, причем несколько из них покрывают 80% предметной области. Причем наиболее сложной являются комбинаторные задачи. Ниже список:

Continue reading “Заметка об алгоритмах” »

Не удержался.

Август 25th, 2011 § 0 comments § Прямая ссылка

Не было бы так смешно, если было бы по другому. очень в цель.

управление проектами

Формат вывода даты

Август 24th, 2011 § 0 comments § Прямая ссылка

Сегодня упомяну о формате вывода даты, DateTime, не буду многословным сразу приведу примеры. Первая часть строки это то что передаем в ToString(); DateTime.Now.ToString(“MM/dd/yyyy”);


MM/dd/yyyy  08/22/2006
dddd, dd MMMM yyyy  Tuesday, 22 August 2006
dddd, dd MMMM yyyy  HH:mm Tuesday, 22 August 2006 06:30
dddd, dd MMMM yyyy  hh:mm tt Tuesday, 22 August 2006 06:30 AM
dddd, dd MMMM yyyy  H:mm Tuesday, 22 August 2006 6:30
dddd, dd MMMM yyyy  h:mm tt Tuesday, 22 August 2006 6:30 AM
dddd, dd MMMM yyyy HH:mm:ss  Tuesday, 22 August 2006 06:30:07
MM/dd/yyyy HH:mm  08/22/2006 06:30
MM/dd/yyyy hh:mm tt  08/22/2006 06:30 AM
MM/dd/yyyy H:mm  08/22/2006 6:30
MM/dd/yyyy h:mm tt  08/22/2006 6:30 AM
MM/dd/yyyy h:mm tt  08/22/2006 6:30 AM
MM/dd/yyyy h:mm tt  08/22/2006 6:30 AM
MM/dd/yyyy HH:mm:ss  08/22/2006 06:30:07
MMMM dd  August 22
MMMM dd  August 22
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK  2006-08-22T06:30:07.7199222-04:00
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK  2006-08-22T06:30:07.7199222-04:00
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'  Tue, 22 Aug 2006 06:30:07 GMT
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'  Tue, 22 Aug 2006 06:30:07 GMT
yyyy'-'MM'-'dd'T'HH':'mm':'ss  2006-08-22T06:30:07
HH:mm  06:30
hh:mm tt  06:30 AM
H:mm  6:30
h:mm tt  6:30 AM
HH:mm:ss  06:30:07
yyyy'-'MM'-'dd HH':'mm':'ss'Z'  2006-08-22 06:30:07Z
dddd, dd MMMM yyyy HH:mm:ss  Tuesday, 22 August 2006 06:30:07
yyyy MMMM  2006 August
yyyy MMMM  2006 August

Так же прилагаю pdf взятый отсюда и сслыку на MSDN по теме

Замеры выполнения кода

Август 23rd, 2011 § 0 comments § Прямая ссылка

Для таких нужд используются профайлеры, но бывает нужно оценить скорость выполнения того или иного запроса/операции. Для этого следует использовать System.Diagnostics.Stopwatch. Дает достаточно точные результаты, в отличие от того же таймера, т.к. для замеров собственно этот класс и создан. Пример использования:

System.Diagnostics.Stopwatch sw = new Stopwatch();
sw.Start();
...
sw.Stop();

Не забываем после этого делать sw.Reset(); иначе время будет суммироваться, что бы получить, замеренное время используем sw.Elapsed;

Получить аргументы, переданные в консоле

Август 23rd, 2011 § 0 comments § Прямая ссылка

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

string[] arguments = Environment.GetCommandLineArgs();

//------
static void Main(string[] args)
{
foreach (string arg in args)
{
...
}
}

Разница в них в том, что в первом варианте мы всегда получим первый аргумент, которым будет имя запущенной программы (абсолютное), во втором в массиве будут только аргументы. Не стоит забывать об этом. Enjoy C#.

Функции для работы с битами

Август 15th, 2011 § 0 comments § Прямая ссылка

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


void SetBit(DWORD& dw, int nBitNumber, int nBitValue)
{
 //dw - целое, в котором задаем бит
 //nBitNumber - номер бита, который задаем (0..31)
 DWORD dwMask = 1 << nBitNumber;// 0000100000....

 //nBitValue (0|1)
 if(nBitValue == 0)
 {//задаем 0
 dwMask = ~dwMask;// 1111011111....
 dw = dw & dwMask; // 0 & x = 0
 }
 else
 {//задаем 1
 dw = dw | dwMask;// 1 | x = 1
 }
}

int GetBit(DWORD dw, int nBitNumber)
{
 //dw - целое в котором узнаем бит
 //nBitNumber - номер бита, который узнаем (0..31)
 DWORD dwMask = 1 << nBitNumber;// 0000100000....
 dw = dwMask & dw;
 if(dw)
 return 1;
 return 0;
}

Взято отсюда

Смотреть фильмы онлайн