Обновить
8
0

Пользователь

Отправить сообщение
это аналогично такому

    std::string a = "aaaaaaaaaaa";
    const char* b =  a.c_str();
    a.append("wwwwwwwwwwwwwwwwwwwww"); 
1) при настройке VCS Root очень удобно в поле default branch подставить какое-нибудь property %system.BranchName%

таким образом в разных конфигурациях можно использовать повторно один и тот же VCS Root
просто задавая через property имя нужного бранча

2) если у вас стоит Checkout mode = on server, то удобно использовать VCS Checkout Rules отфильтровывая всё лишнее.
Если репозитори большой, а собирается маленькая часть, то за счёт этого clean checkout будет банально быстрее.

3) кажется этот плагин confluence.jetbrains.com/display/TW/Deployer+plugin вам пригодится в фазе заливки на сервер

PS: список плагинов confluence.jetbrains.com/display/TW/TeamCity+Plugins
уточнение:
все property вида env.* и system.* доступны внутри msbuild скрипта

задали property system.Configuration
а внутри msbuild можете получить значение $(Configuration)

ну и ещё нюанс вдогонку. если property например такое system.A.B.C то переменная будет ${A_B_C}

а вместо Team Room'a прям скайп напрашивается…
было дело, делал аналог в такой же связке по экспорту фоток из livejournal'а
в С++ как раз частенько итераторы очень даже нужны
вот вам пример сходу (извините если вдруг, где-нибудь ошибся)

std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
int b[3] = {4,5,6};
int* c = new int[3];
c[0] = 7;
c[1] = 8;
c[2] = 9;
std::map<int, int> d;
d[1] = 10;
d[2] = 10;
d[3] = 10;
	
print(a.begin(), a.end());
print(&b[0], &b[0] + 3);
print(c, c + 3);
print(d.begin(), d.end());

где
std::ostream& operator << (std::ostream& stream, const std::pair<int, int>& element)
{
    stream << element.first + element.second;
    return stream;
}

template<class T>
void print(const T& begin, const T& end)
{
    for(T current = begin; current!=end;++current)
    {
        std::cout << (*current) << std::endl;
    }
}
есть Launchy, очень неплохая замена Win+R
#test3.py
def test1():
    n = 5
    with open("./pg2600.txt", "r") as f:
        s = f.read()
    d={}
    for x in re.findall(r'\w+',s):
        if x in d:
            d[x] += 1
        else:
            d[x] = 1
    print repr([k for k,v in d.items() if v == n])
#чуть модифицированный test3.py
def test2():
    n = 5
    with open("./pg2600.txt", "r") as f:
        s = f.read()
    d=defaultdict(int)
    for x in re.findall(r'\w+',s):
        d[x] += 1
    print repr([k for k,v in d.items() if v == n])


test1 : 0.518
test2 : 0.468
Поддерживаю. Вынужден постоянно носить на флешке portable версию, чтобы rss дома/на работе не перечитывать. (про гуглридер в курсе, но oper'овская читалка как то «более приятна»)
Да, сохранять данные никак не получится.
У heiaheia для меня один плюс — она очень простая.
По сути простой и удобный сервис сохранить «результаты» с красивым веб-интерфейсом.

для бега использую sigma RC 1209
пульсометр+шагомер (для записи треков есть отдельный навигатор, но для тренировок имхо лишнее)
данныые руками сохраняю в heiaheia
живучесть вполне (пару суточных мультигонок пережил)
к слову
сэмпл используя boost::python (windows, boost 1.51, release)

#include <boost/python.hpp>
using namespace boost::python;

namespace Test
{ 
     unsigned long long sumrange(unsigned long long arg)
     {
          unsigned long long i, x;
          x = 0;
          for (i = 0; i < arg; i++) {
               x = x + i;
          }
          return x;
     }
}


BOOST_PYTHON_MODULE(boost_python_module)
{
     def("sumrange", Test::sumrange);
}

import timeit
from boost_python_module import sumrange as sumrange2

def sumrange1(arg):
    return sum(xrange(arg))

for power in (2, 8, 9):
    loops = 10**power
    t = timeit.Timer(lambda : sumrange1(loops))
    print("Loops: {0} Time: {1}".format(loops, t.timeit(1)))
print()
for power in (2, 8, 9):
    loops = 10**power
    t = timeit.Timer(lambda : sumrange2(loops))
    print("Loops: {0} Time: {1}".format(loops, t.timeit(1)))

Результат:
Loops: 100 Time: 8.08813168841e-06
Loops: 100000000 Time: 14.5755965742
Loops: 1000000000 Time: 143.893784101
()
Loops: 100 Time: 2.51157773619e-05
Loops: 100000000 Time: 0.173007690962
Loops: 1000000000 Time: 1.69442229668
Согласен это лучше чем было.
Но если я верно понимаю, остаётся и старый способ скрытия методов. То есть читая декларацию класса с вопросом «Можно ли объект копировать? Как?» вынужден проверять оба сценария. Отсюда и сомнения. Тут проще, там сложнее. А вместе как? (вопрос риторический, реальное использование покажет что к чему)

Вот auto + decltype это да. Действительно существенно упрощают синтаксис.
главное чтобы не двигалось в сторону «больше слов, меньше дела»

вот из С++11
у меня сомнения проще это, или дополнительные нюансы синтаксиса…
struct A
{
 A() = default; 
 virtual ~A() = default; 
 A& operator =(const A&) = delete;
 A(const A&) = delete;
 A(int v) : {} 
 A(int a, int b): A(0) {}
};

А почему бы не сделать привязку на основе любого open ID провайдера
захотел привязал хабр
захотел livejournal
захотел ещё что-нибудь из списка доступных

Заказчик увидел ссылку на блог/профиль
Зашёл, почитал. Не понравилось — пометил для себя и прошёл мимо.
было бы неплохо сделать так: аккаунт отдельно, а «роли» для пользователя отдельно

регишься и выбираешь себе роли (а какие то возможно назначаются. схема когда работадатель собирает команду.)

читатель
исполнитель
работадатель
и тп
про «ноги» жестковато, но в общем
обе крайности забавно описаны
Вот оно как оказывается :) А то я как то наткнулся в help'e msiexec
на строчку
/a <Product.msi> Administrative install — Installs a product on the network
и в дальнейшем исходил из того что это некий специфический способ установки по сети. Да и в msdn'e как то невнятно написано, что это.

Информация

В рейтинге
Не участвует
Откуда
Минск, Минская обл., Беларусь
Зарегистрирован
Активность