В текущем проекте через svn:externals подключается 25 либ, причем не в единый корень, а в нескольких местах (в 5 или 6 местах).
Написал тут скрипт, который автоматически выставляет экстерналы на нужные ревизии.
2010-12-20
2010-12-14
[boost.build][trick] Ускорение сборки в boost.build
boost.build всем хорош, кроме скорости.
К примеру, анализ того, какие файлы надо пересобрать, на моем проекте (30+ либ + boost) занимает 42 секунды.
Оказывается, решение было найдено полтора года назад.
http://lists.boost.org/boost-build/2009/04/21734.php
Человек переписал стандартный анализатор инклюдов так, чтоб тот игнорировал файлы по регекспу.
добавив "в игнор" стандартные хедеры (у них нет расширения) и хедеры буста (^boost/) - получил время анализа в 22 секунды.
Уже можно жить...
К примеру, анализ того, какие файлы надо пересобрать, на моем проекте (30+ либ + boost) занимает 42 секунды.
Оказывается, решение было найдено полтора года назад.
http://lists.boost.org/boost-build/2009/04/21734.php
Человек переписал стандартный анализатор инклюдов так, чтоб тот игнорировал файлы по регекспу.
добавив "в игнор" стандартные хедеры (у них нет расширения) и хедеры буста (^boost/) - получил время анализа в 22 секунды.
Уже можно жить...
2010-11-26
рабочее
Бета-тестер: кста что интересно оказалось
ты собираешь инсталлятор foo_bar.exe
я его переименовываю для вебщиков в foo_bar_baz.exe
а они его для сайта переименовывают в foo_bar.exe
ты собираешь инсталлятор foo_bar.exe
я его переименовываю для вебщиков в foo_bar_baz.exe
а они его для сайта переименовывают в foo_bar.exe
2010-10-11
Одобе такое одобе
Есть проект, сохраненный как Flash CS5 Uncompressed Document.
Так вот, если файл DOMDocument.xml (хранящий содержимое основного таймлайна) чем-то занят (да хотя-бы просматривается по f3 из FAR-а), то при сохранении Adobe Flash CS5 конечно-же упадет.
И заберет DOMDocument.xml с собой в Валхаллу.
Понятное дело, что после перезапуска этот проект уже не откроется.
Хорошо хоть проект был заHGшен.
Так вот, если файл DOMDocument.xml (хранящий содержимое основного таймлайна) чем-то занят (да хотя-бы просматривается по f3 из FAR-а), то при сохранении Adobe Flash CS5 конечно-же упадет.
И заберет DOMDocument.xml с собой в Валхаллу.
Понятное дело, что после перезапуска этот проект уже не откроется.
Хорошо хоть проект был заHGшен.
2010-09-28
программирование похоже на ходьбу по лабиринту -- можно замерить и даже увеличить линейную скорость ходьбы, но это не заменит намного более важного правильного выбора на перекрестках.
(c)
(c)
2010-09-08
2010-08-26
Странное (о выравнивании)
MSVC: bool 2 3 4 char 2 3 4 short 4 6 8 int 8 12 16 GCC bool 2 3 4 char 2 3 4 short 2 4 4 int 4 8 8
2010-06-25
Обрезалка ресурсов.
В VC2008sp1 и VC2010 в состав MFC входят новые классы для Ribbon-like UI.
Можно выбрать одну из пяти тем для приложения (aqua, blue, black, silver, windows7).
При статической компиляции внутрь экзешника попадают ресурсы всех тем.
Если в приложении есть переключение тем, это гуд.
А если Ваше приложение всегда должно быть одного цвета -- как то жалко тратить больше 700 KB на ресурсы, которые никогда не используются.
А если учесть то, что это PNG и они плохо жмутся пакерами...
Вот, набросал за часик на коленке питонячий скрипт, который это лечит.
Можно выбрать одну из пяти тем для приложения (aqua, blue, black, silver, windows7).
При статической компиляции внутрь экзешника попадают ресурсы всех тем.
Если в приложении есть переключение тем, это гуд.
А если Ваше приложение всегда должно быть одного цвета -- как то жалко тратить больше 700 KB на ресурсы, которые никогда не используются.
А если учесть то, что это PNG и они плохо жмутся пакерами...
Вот, набросал за часик на коленке питонячий скрипт, который это лечит.
import sys
from ctypes import *
w32 = windll.kernel32
def get_res_list(fname):
handle = w32.LoadLibraryW(fname)
if not handle:
return None
types = []
def types_callback(handle, t):
try:
types.append(cast(t, c_wchar_p).value)
except:
pass
return True
types_callback_t = CFUNCTYPE(c_void_p, c_wchar_p, c_long)
fun = types_callback_t(types_callback)
w32.EnumResourceTypesW(handle, fun, 0)
result = []
def names_callback(h, t, n):
try:
t = cast(t, c_wchar_p).value
n = cast(n, c_wchar_p).value
result.append((t,n))
except e:
print e
return True
names_callback_t = CFUNCTYPE(c_void_p, c_wchar_p, c_wchar_p, c_long)
fun = names_callback_t(names_callback)
for t in types:
w32.EnumResourceNamesW(handle, c_wchar_p(t), fun, 0)
w32.FreeLibrary(handle)
return result
NOT_USED = ('AQUA', 'SILVER', 'WINDOWS7', 'BLACK')
is_not_used = lambda x: x[1].split('_')[0] in NOT_USED
def remove_resources(fname, not_used):
handle = w32.BeginUpdateResourceW(fname, False)
if not handle:
return False
ok = True
try:
for t,n in not_used:
w32.UpdateResourceW(handle, t, n, 0x409, None, 0)
except e:
print e
ok = False
w32.EndUpdateResourceW(handle, not ok)
return ok
fname = u'd:\\app.exe'
not_used = filter(is_not_used, get_res_list(fname))
print remove_resources(fname, not_used)
Подписаться на:
Сообщения (Atom)
