Соответствующая структура каталогов
После извлечения форка Rictic'а архива с помощью unzip
, взгляните на структуру каталогов:
/code_swarm-master
|_bin <----convert tools
|_data <----activity.xml(converted .log file), sample.config
|_dist <----compiled code_swarm.jar
|_lib <----libraries and other .jar files required for java
|_src <----code_swarm.java source
/run.sh <----to run codeswarm
Клонирование репозитория
Выберите репозиторий проекта и клонируйте его локально:
git clone https://github.com/someproject.git
Создайте файл журнала
Перейдите в только что созданный каталог репозитория и создайте правильно оформленный git log
, например:
git log --name-status --pretty=format:'%n------------------------------------------------------------------------%nr%h | %ae | %ai (%aD) | x lines%nChanged paths:' > activity.log
Для длинных проектов может быть полезно указать диапазон дат, чтобы сфокусироваться на определенном временном интервале (например. --since=yyy-mm-dd
, но я никогда не мог заставить это работать). Или мы можем напрямую отредактировать данные xml позже и очистить их от ненужных нам событий.
Конвертируем наш .log файл в .xml файл
Затем мы переносим этот файл в каталог bin
и конвертируем его с помощью предоставленного python
скрипта (обязательно используйте python2.x):
python2.7 convert_logs.py -g activity.log -o activity.xml
Здесь вы можете открыть .xml файл, например, в текстовом редакторе и вырезать ненужные строки. Теперь вы можете скопировать этот .xml файл в каталог data
.
Образец.config
Переименуйте файл по умолчанию sample.config
в другое имя, создайте пустой файл, поместите в него следующее, затем сохраните его как sample.config
. Программа по умолчанию читает это имя файла в каталоге data
, поэтому удобно использовать именно его. Таким образом, вы сможете просто нажать Enter, когда программа запросит файл .config в интерактивном режиме (она делает это каждый раз):
# Input file
InputFile=data/activity.xml
ParticleSpriteFile=src/particle.png
# Basics - leave UseOpenGL to false until you manage to run this in software mode - if you use Virtualbox on a Wintel host, you may have issues so beware!
UseOpenGL=false
Width=800
Height=600
# FramesPerDay: for a short and focused range with high level of detail, use maybe 144. Or use 25 when there is no prior knowledge of how the project unfolds and maybe "2" for a "quick run" with long projects that haven't been constrained to a specific time frame. The smaller this value is, the faster the render goes. Performance may be a consideration when outputting frames to file. In snapshot mode, I have successfully used 720p with 12 frames per day
FramesPerDay=25
# Save each frame to an image?
TakeSnapshots=false
# Where to save each frame
SnapshotLocation=frames/code_swarm-#####.png
# You have to add extension blocks depending on the languages and types of files involved in the project:
ColorAssign1="C",".*(\.c|\.cpp|\.h|\.mk)", 255,0,0, 255,0,0
ColorAssign2="Python",".*(\.py|\.pyx)", 65,105,225, 65,105,225
ColorAssign3="CSharp",".*(\.cs|\.csproj)", 255,255,0, 255,255,0
ColorAssign4="Other Source Code",".*(\.rb|\.erb|\.hs|\.sql|\.m|\.d|\.js|\.pl|\.sh|\.lhs|\.hi|\.hpp|\.cat|\.inf|\.sys|\.dll|\.as|\.cmake\.java)", 255,99,71, 255,99,71
ColorAssign5="Documents/Images",".*(\.txt|\.html|\.tex|\.tmpl|\.css|\.xml|\.yml|\.json|\.rdoc|\.md|\.png|\.jpg|\.gif|\.jpeg|README|COPYING|LICENSE|AUTHORS|\.asciidoc|HACKING)", 138,43,226, 138,43,226
ColorAssign6="Tests",".*test.*", 153,255,255, 153,255,255
ColorAssign7="Localizations","(.*(\.mo|\.po))|(.*\.lproj.*)",110,200,90, 110,200,90
DrawNamesHalos=false
ShowUserName=true
MaxThreads=2
#BoldFont=
Font=SansSerif
FontSize=9
BoldFontSize=10
FontColor=245,245,245
Background=0,0,0
DrawNamesSharp=true
DrawNamesFuzzy=false
DrawFilesFuzzy=true
DrawFilesJelly=true
DrawFilesSharp=false
ShowLegend=true
ShowHistory=true
ShowDate=true
ShowEdges=true
EdgeDecrement=-8
FileDecrement=-3
PersonDecrement=-2
NodeSpeed=7.0
#FileSpeed=5.0
#PersonSpeed=2.0
FileMass=2.0
PersonMass=9.0
EdgeLife=140
EdgeLength=12
FileLife=1000
PersonLife=750
HighlightPct=8
PhysicsEngineConfigDir=physics_engine
PhysicsEngineSelection=PhysicsEngineOrderly
В конечном итоге вы сможете сравнить эти настройки с исходным файлом sample.config
и скорректировать параметры. Опечатки в этом файле фатальны для java.
Java
Очень важно правильно настроить этот параметр, так как он может стать настоящей остановкой работы. Когда выполняется сценарий run.sh
, он проверяет, присутствует ли code_swarm.jar в dist
, и если нет, то компилирует его с помощью ant
. После компиляции он будет выполнен. К сожалению, скрипт ориентирован на выполнение на MacOSX. Чтобы исправить это, отредактируйте run.sh и поместите следующую строку, убедившись, что другие подобные строки закомментированы (#):
if java -d64 -Xmx1000m -classpath dist/code_swarm.jar:lib/gluegen-rt.jar:lib/jogl-all.jar:lib/jogl-natives-linux-amd64.jar:lib/core.jar:lib/xml.jar:lib/vecmath.jar:. -Djava.library.path=lib/ code_swarm $params; then
Вы должны соответствовать тому, что у вас есть в каталоге lib
:
code_swarm-master/lib]$ ls -l
core.jar
export.txt
freebase
gluegen-rt-natives-linux-amd64.jar
gluegen-rt-natives-linux-i586.jar
gluegen-rt-natives-macosx-universal.jar
gluegen-rt-natives-windows-amd64.jar
gluegen-rt-natives-windows-i586.jar
gluegen-rt.jar
jogl-all-natives-linux-amd64.jar
jogl-all-natives-linux-i586.jar
jogl-all-natives-macosx-universal.jar
jogl-all-natives-windows-amd64.jar
jogl-all-natives-windows-i586.jar
jogl-all.jar
svnkit.jar
swing-layout-1.0.3.jar
vecmath.jar
xml.jar
Примечание opengl.jar больше не присутствует в отдельном виде и не требуется для работы этого скрипта (см. историю редактирования).
(Optional)
Features. Несколько изменений в файле code_swarm.java в src
могут улучшить некоторые возможности. Например, в рендеринге есть функция под названием популярные узлы. При рендеринге codeswarm можно нажать "p", чтобы показать популярные узлы, т.е. файлы, которые редактируются чаще всего (касания). По умолчанию это отображается в правом верхнем углу рендера, но цветовая кодировка отображается в левом верхнем углу. Изменив поведение по умолчанию, можно сделать так, чтобы он появлялся автоматически (чтобы отключить его, нажмите "p"), а размещение его под цветовым отображением слева поможет сгруппировать информацию в одном месте. Для реализации этого найдите следующий блок кода и обновите значения соответствующим образом (3, 105; 10, 105) - это обновленная версия этого сегмента (результат показан в Q):
/**
* TODO This could be made to look a lot better.
*/
public void drawPopular() {
CopyOnWriteArrayList al=new
CopyOnWriteArrayList();
noStroke();
textFont(font);
textAlign(LEFT, TOP);
fill(fontColor, 200);
text("Popular Nodes (touches):", 3, 105);
for (FileNode fn : nodes.values()) {
if (fn.qualifies()) {
// Insertion Sort
if (al.size() > 0) {
int j = 0;
for (; j < al.size(); j++) {
if (fn.compareTo(al.get(j)) <= 0) {
continue;
} else {
break;
}
}
al.add(j,fn);
} else {
al.add(fn);
}
}
}
int i = 1;
ListIterator it = al.listIterator();
while (it.hasNext()) {
FileNode n = it.next();
// Limit to the top 10.
if (i <= 10) {
text(n.name + " (" + n.touches + ")", 10, 105 + (10 * i++));
} else if (i > 10) {
break;
}
}
}
В верхней части источника вы найдете:
boolean showPopular = true;
Добавление = true
заставляет популярные узлы отображаться по умолчанию. Это компилируется только при первом запуске с ant
во время выполнения run.sh (если только у вас нет проблем с java, и она не компилируется вообще). Поэтому, если вы измените исходный код, вы должны перекомпилировать его, если code_swarm.jar уже присутствует в каталоге dist
. Если вы хотите запустить процесс заново (что занимает несколько секунд), просто удалите уже скомпилированную версию, измените исходный код, затем снова запустите run.sh
для компиляции заново.
Запуск Codeswarm
Наконец, теперь, когда мы создали файл activity.xml
, установили sample.config
и модифицированный скрипт run.sh
для нашей установки, мы можем запустить Codeswarm с помощью:
./run.sh
Используйте "пробел" для приостановки рендеринга и "q" для выхода.
Включение рендеринга OpenGL
Установите UseOpenGL=true
в вашем sample.config
файле.
Отредактируйте /etc/ssh/sshd_config
для создания этих настроек:
GSSAPIAuthentication no
GSSAPIKeyExchange no
GSSAPIStoreDelegatedCredentials no
LookupClientHostnames no