Пока обживал наткнулся на проблему, правда не связанную с багом от Intel. Видеокарта перегревалась и ноут уходил в бсод =(. Сделал манибек. Подумаю буду ли повторять.
Просто сегодня хочу купить, буду внимательно смотреть. Мне интересно если в магазине будут все после 9 числа, то на сколько быстро в сервисном центре заменят материнку? Если это важно, то я в Питере.
Видел, но только для перемножений матриц брать её не имеет смысла. У них для 2d используется матрица 2x2 — у меня 3x3, что позволяет заодно и смещения считать, крутить вокруг нужной точки, отражать вокруг нужной точки. Плюс возможность цепочки трансформаций. Добавление новой функциональности сводится к добавлению 9 строк кода и новой матрицы в них.
В моём случае поддержка и расширение легче и, самое главное, кода намного меньше.
Да и условия лицензии не надо исполнять ;-)
Я сейчас для развлечения и изучения canvas пишу игру Scorch, мне там понадобилась совмещать трансформации, крутить вокруг выбранной точки, для этого просто написал Matrix2d
Очень удобно пользоваться:
new Matrix2d().
Rotate(angle, rotationPoint).
FlipY(rotationPoint).
CreateTransform(context);
function Matrix2d () {
var _matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
var CalcOffset = function (matrix) {
var x = matrix[0][2] * matrix[0][0] + matrix[1][2] * matrix[0][1];
var y = matrix[0][2] * matrix[1][0] + matrix[1][2] * matrix[1][1];
matrix[0][2] -= x;
matrix[1][2] -= y;
return matrix;
}
var Multiply = function (matrix) {
var mulMatrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
for (var x = 0; x < 3; x++) {
for (var y = 0; y < 3; y++) {
var sum = 0;
for (var dim = 0; dim < 3; dim++) {
sum += _matrix[y][dim] * matrix[dim][x];
}
mulMatrix[y][x] = sum;
}
}
_matrix = mulMatrix;
}
this.Rotate = function (angle, point) {
var sin = Math.sin(angle);
var cos = Math.cos(angle);
Multiply(CalcOffset([
[cos, -sin, point.x],
[sin, cos, point.y],
[0, 0, 1]
]));
return this;
}
this.FlipY = function (point) {
Multiply(CalcOffset([
[-1, 0, point.x],
[0, 1, point.y],
[0, 0, 1]
]));
return this;
}
this.FlipX = function (point) {
Multiply(CalcOffset([
[1, 0, point.x],
[0, -1, point.y],
[0, 0, 1]
]));
return this;
}
this.FlipXY = function (point) {
Multiply(CalcOffset([
[-1, 0, point.x],
[0, -1, point.y],
[0, 0, 1]
]));
return this;
}
this.CreateTransform = function (context) {
context.transform(
_matrix[0][0],
_matrix[1][0],
_matrix[0][1],
_matrix[1][1],
_matrix[0][2],
_matrix[1][2]);
return this;
}
}
Есть какой нибудь способ проверить, что userKey валидный? Что нибудь типа я отправляю user и userKey со стороны сервера, а он мне говорит valid/invalid? Можно, если не сложно, вернуть как раньше было, без учёта Referer?
Уже подправили, надо добавить Referer: habrastorage.org/ в запрос к habrahabr.ru/whoami/. А жаль. Я хотел авторизацию хабра прикрутить к блогу, было бы удобно, а так подделывать referer это не по фен шую.
GET habrahabr.ru/whoami/ HTTP/1.1
Host: habrahabr.ru
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Safari/533.4
Referer: habrastorage.org/
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: :-)
Это настолько узкоспециализированно, что я думаю у вас должна быть документация, что именно надо реализовать из Radius'а. Но если нет, то вполне можно начать здесь — en.wikipedia.org/wiki/RADIUS. Внизу присутствуют ссылки на все RFC, дело остаётся за малым =)
В моём случае поддержка и расширение легче и, самое главное, кода намного меньше.
Да и условия лицензии не надо исполнять ;-)
Очень удобно пользоваться:
function Matrix2d () { var _matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; var CalcOffset = function (matrix) { var x = matrix[0][2] * matrix[0][0] + matrix[1][2] * matrix[0][1]; var y = matrix[0][2] * matrix[1][0] + matrix[1][2] * matrix[1][1]; matrix[0][2] -= x; matrix[1][2] -= y; return matrix; } var Multiply = function (matrix) { var mulMatrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; for (var x = 0; x < 3; x++) { for (var y = 0; y < 3; y++) { var sum = 0; for (var dim = 0; dim < 3; dim++) { sum += _matrix[y][dim] * matrix[dim][x]; } mulMatrix[y][x] = sum; } } _matrix = mulMatrix; } this.Rotate = function (angle, point) { var sin = Math.sin(angle); var cos = Math.cos(angle); Multiply(CalcOffset([ [cos, -sin, point.x], [sin, cos, point.y], [0, 0, 1] ])); return this; } this.FlipY = function (point) { Multiply(CalcOffset([ [-1, 0, point.x], [0, 1, point.y], [0, 0, 1] ])); return this; } this.FlipX = function (point) { Multiply(CalcOffset([ [1, 0, point.x], [0, -1, point.y], [0, 0, 1] ])); return this; } this.FlipXY = function (point) { Multiply(CalcOffset([ [-1, 0, point.x], [0, -1, point.y], [0, 0, 1] ])); return this; } this.CreateTransform = function (context) { context.transform( _matrix[0][0], _matrix[1][0], _matrix[0][1], _matrix[1][1], _matrix[0][2], _matrix[1][2]); return this; } }GET habrahabr.ru/whoami/ HTTP/1.1
Host: habrahabr.ru
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Safari/533.4
Referer: habrastorage.org/
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: :-)
HTTP/1.0 200 OK
Server: nginx
Date: Wed, 01 Sep 2010 09:08:15 GMT
Content-Type: text/html; charset=utf-8
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Proxy-Connection: close
user=«Frozik»;userKey=«blah»;