Archive for the ‘Programming’ Category

Александр Степанов (STL). Лекции в Яндексе

Wednesday, June 16th, 2010

А здесь сборник его статей и книга

Must read для каждого серьезного программера

Future ORG technology

Thursday, January 14th, 2010

Осенила мысль:

Если основные компонентные технологии Microsoft назывались:

  • COM
  • .NET
    • то логично предположить, что следующей станет .ORG.
      Конечно есть еще варианты .EDU и .MIL (но последняя только в случае ядерной войны ;)

Появился VS 2010 Beta 2

Wednesday, October 28th, 2009

В отличие от 1-й Beta, этой уже вполне можно пользоваться.
Главное из добавлений:

  • поддержка C++0x: nullptr/nullptr_t, lambda-functions
  • MSBuild 4.0 – теперь IDE не привязана к конкретным инструментам и поностью настраиваема под любые компиляторы с помощью XML

Strongly typed enums in C++0x и их эмуляция в Visual C++

Sunday, August 2nd, 2009

Новый стандарт С++ включает удобную фичу Strongly Typed Enums, также называемую Scoped Enums:

enum class En {
    A = 2
};
En var = En::A;  // вместо En var = A;

Для поддержки этого в текущем компиляторе VC++ можно использовать такие макросы:

#define DEF_ENUM(name) struct enum_##name { enum E
#define END_ENUM(name) ; }; typedef enum_##name::E name; 

DEF_ENUM(En) {
    A = 2
} END_ENUM(En)

En var = En::A;  // вместо En var = A;

RC4 C# implementation

Wednesday, April 8th, 2009

Реализация криптоалгоритма RC4 для .NET:

using System;
using System.Security.Cryptography;

using Utils;

namespace Crypto {

internal class RC4Cryptor : ICryptoTransform {
	internal byte[] S;

	public bool CanReuseTransform { get { throw new NotImplementedException(); } }
	public bool CanTransformMultipleBlocks { get { throw new NotImplementedException(); } }
	public int InputBlockSize { get { throw new NotImplementedException(); } }
	public int OutputBlockSize { get { throw new NotImplementedException(); } }
	public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) {
		throw new NotImplementedException();
	}

	public void Dispose() {
	}

	public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) {
		byte[] r = new byte[inputCount];
		for (int i = 0, j = 0; i < inputCount; ) {
			j += S[++i % 256];
			Ut.Swap(ref S[i % 256], ref S[j % 256]);
			int t = S[i % 256] + S[j % 256];
			r[i-1] = inputBuffer[inputOffset + i - 1] ^ S[t % 256];
		}
		return r;
	}
}

public class RC4 : SymmetricAlgorithm {

	byte[] S = new byte[256];
	byte[] K = new byte[256];

	public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV) {
		throw new NotImplementedException();
	}

	public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV) {
		throw new NotImplementedException();
	}

	public override void GenerateIV() {
		throw new NotImplementedException();
	}

	public override void GenerateKey() {
		var rnd = new Random();
		var key = new byte[16];
		rnd.NextBytes(key);
		Key = key;
	}

	public override ICryptoTransform CreateEncryptor() {
		return new RC4Cryptor() { S = (byte[])S.Clone() };
	}

	public override ICryptoTransform CreateDecryptor() {
		return new RC4Cryptor() { S = (byte[])S.Clone() };
	}

	public override byte[] Key {
		set {
			base.Key = value;

			for (int i = 0; i < S.Length; ++i) {
				S[i] = (byte)i;
				K[i] = Key[i % Key.Length];
			}

			for (int i=0, j=0; i < S.Length; ++i)
				Ut.Swap(ref S[i], ref S[j = (j + S[i] + K[i]) % 256]);
		}
	}
}

}

Как программировать CD/DVD

Wednesday, February 27th, 2008

Программирование CD/DVD-приводов в LINUX”

Старые исходники BIOS для компьютера “Поиск”

Monday, January 14th, 2008

Исходники на ASM ROM-прошивки для первых компьютеров ПОИСК

Надеюсь расшифровать еще старые кассеты для БК-0010. Если удастся – тоже выложу. Думаю что придется искать или самому писать программу восстановления файлов формата кассет БК из WAV-файла.

NNTP front-end to PHPBB 3

Thursday, December 27th, 2007

Open Source NNTP front-end to PHPBB3 developed:
nntp-phpbb .
It provides access to PHPBB forum (Read and Post) by NNTP protocol.

Новая версия SocksChain

Tuesday, November 27th, 2007

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

Версия 3.12.152

Ruby

Monday, November 12th, 2007

Почитал книжку про Ruby

Программирование на Ruby

По впечатлениям: писать легче чем на Perl – ближе к Lisp