Офигеть! Сегодня узнал, что в C++ можно прямо в описании класса задавать значение статических членов.
class Foo
{
static int comeData = 10;
};
Офигеть! Сегодня узнал, что в C++ можно прямо в описании класса задавать значение статических членов.
class Foo
{
static int comeData = 10;
};
Автор:
Алексей
на
20:23
0
коммент.
Ярлыки: C++
Любая модель(ActiveRecord) в Rails умеет сохраняться в виде xml. Это позволяет без проблем в зависимости от запроса выдавать результат в html или xml виде. А это значит, что появляется возможность прикрутить клиент отличный от браузера.
Сделать это можно следующим образом.
class TestController < ApplicationController
def get_data
res = FooObject.find(params[:id])
respond_to do |format|
format.html
format.xml { render :xml => @res}
end
end
end
format.xml { render :xml => @res}
//создаём запрос
WebRequest request = WebRequest.Create(queryUrl);
request.ContentType = "text/xml";
WebResponse myWebResponse = request.GetResponse();
long len = myWebResponse.ContentLength;
byte[] buff = new byte[len];
//считываем результат в буффер
myWebResponse.GetResponseStream().Read(buff, 0, (int)len);
string responseXml =
new String(System.Text.Encoding.ASCII.GetString(buff).ToCharArray());
Автор:
Алексей
на
19:37
0
коммент.
Удобная IDE в состоянии сильно облегчить жизнь программисту. Для C++ и C# я практически всегда использую Visual Studio. Для Ruby я пробовл использовать несколько других редакторов.
Ну вот я и осилил первую часть книги Agile Web Development, в которой описывается, как создать простейший интернет-магазин. Далее идёт более детальное описание того, почему всё делается так, как делается. По объёму это примерно половина книги. Параллельно с чтением я решил попробовать написать свой небольшой проектик. Дело пошло, но оказалось, что значительные затруднения у меня вызвала собственно вёрстка страничек. Всё ж таки программирую я постоянно(на разных языках), а вот с html'ем я в последний раз работал года этак 3 назад. А CSS вообще выглядит магией =). Не говоря уже о всяких AJAX'ах.
После того, как я начал разбираться и использовать Ruby, я пришёл к мысли, что было бы неплохо разобраться и с Ruby On Rails - вэб-фрэймворком, который является важной движущей силой распространения языка. Как оказалось, разобраться с RoR совсем не просто. Этот фреймворк обладает значительным когнитивным сопротивлением. Хотя в определённой степени проблемы возникают из-за того, что для последней версии Rails ещё не появилось достаточно хороших туториалов, а старые не работают. Удалось найти только одну книгу, ориентированную на RoR 2.0 - Rails Way by Obie Fernandez. Это примерно 900 страниц на английском. На следующей неделе попробую взяться за эту книгу.
Автор:
Алексей
на
18:47
0
коммент.
Сегодня удалось добиться примерно десятикратного ускорения работы моего парсера. Проблема вообще возникла из-за того, что я относился к обработке строк в С/С++ стиле - преобразовывал строку с массив символов и переберал их для нахождения начала и окончания блоков. Делать это на Ruby - далеко не лучшая идея. На языке высокого уровня нет смысла использовать низкоуровневый подход. Если в С при переборе символов строки достаточно инкрементировать значение указателя, то здесь будет создан(а затем и уничтожен) объект для каждого символа. В общем совершенно ничего хорошего. Поэтому использовавние функции String#index с простейшим регекспом даёт значительный эффект. Что конечно же не может не радовать.
Для обзначения начала и окончания блоков используются символы '{' и '}'. Для поиска конца блока использовалась следующая функция
def find_end(str)
arr = str.split(//)
open_count = 0
close_count = 0
pos = 0
arr.each do |x|
open_count += 1 if(x == "{")
close_count += 1 if(x == "}")
if(open_count == close_count)
return pos
end
pos += 1
end
nil
end
def find_end(str)
open_count = 0
close_count = 0
pos = 0
while(pos != nil)
pos = str.index(/\{|\}/, pos)
if(pos != nil)
open_count += 1 if str[pos] == 123
close_count += 1 if str[pos] == 125
end
if(open_count == close_count)
return pos
end
pos += 1
end
nil
end
Автор:
Алексей
на
21:49
0
коммент.
Ярлыки: программирование, ruby
В проекте, над которым я сейчас работаю, достаточно активно используются файлы в xml-подобном формате. И я решил написать для него парсер на Ruby. Сделать это оказалось достаточно просто, но вылезла другая проблема - проблема производительности. Файл в 650 строк на моём стариньком ноутбуке (500 МГц P3) парсится примерно 20 секунд. В Ruby есть очень полезаная библиотека profiler, позволяющая посмотреть сколько именно времени занимает каждая из частей программы. Причём для того, чтобы её применить не нужно ничего менять в своём коде, а достаточно только подключить профайлер. Так вот использование профайлера показало мне, что больше всего работы происходит внутри Array#each. Сейчас думаю, каким образом можно всё ускорить. Возможность сделать всё быстро доказывается наличием парсера rexml, полностью написаного на Ruby.
Автор:
Алексей
на
10:43
0
коммент.
Ярлыки: программирование, ruby