Estrutura de diretórios relevante
Depois de ter extraído Rictic's fork arquivo com unzip
, dê uma olhada rápida na estrutura do diretório:
/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
Clone um repositório
Selecione um repositório de projetos e, em seguida, clone-o localmente:
git clone https://github.com/someproject.git
Gerar um arquivo de log
Prossiga para o diretório de repositório recém-criado e gere um git log
formatado corretamente da seguinte forma:
git log --name-status --pretty=format:'%n------------------------------------------------------------------------%nr%h | %ae | %ai (%aD) | x lines%nChanged paths:' > activity.log
Para projetos longos, pode ser importante especificar um intervalo de datas para se concentrar em um período de tempo específico (por exemplo, --since=yyyy-mm-dd
, mas nunca consegui fazer isso funcionar). Ou podemos editar diretamente os dados xml mais tarde e retirá-los dos eventos que não queremos.
Converta nosso arquivo .log em um arquivo .xml
Em seguida, trazemos esse arquivo para o diretório bin
e o convertemos com o script python
fornecido (certifique-se de usar o python2.x):
python2.7 convert_logs.py -g activity.log -o activity.xml
É aqui que você realmente abre o arquivo .xml em um editor de texto, por exemplo, e apara as linhas que não deseja. Agora você pode copiar esse arquivo .xml para o diretório data
.
arquivo de configuração do Sample.config
Renomeie o arquivo sample.config
padrão para outro nome, crie um arquivo vazio, coloque o seguinte nele e salve-o como sample.config
. O software lê esse nome de arquivo no diretório data
por padrão, portanto é conveniente usá-lo. Assim, você poderá simplesmente pressionar enter quando o software solicitar um arquivo .config de forma interativa (isso acontece sempre):
# 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
Você pode, eventualmente, comparar essas configurações com o arquivo sample.config
original e ajustar os parâmetros. Os erros de digitação neste arquivo são fatais para o java.
Java
É muito importante configurá-lo corretamente, pois pode ser um verdadeiro obstáculo. Quando o script run.sh
é executado, ele valida se code_swarm.jar está presente em dist
e, caso contrário, compila com ant
. Depois de compilado, ele é executado. Infelizmente, o script é voltado para MacOSX para execução. Para remediar isso, edite o run.sh e coloque a seguinte linha, certificando-se de que outras linhas semelhantes sejam comentadas (#):
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
Você precisa corresponder ao que tem no diretório 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
Nota opengl.jar não está mais presente de maneira independente e não é mais necessário para que isso funcione ( veja histórico de edição).
(opcional)
Recursos. Algumas alterações no arquivo code_swarm.java em src
podem melhorar alguns recursos. Por exemplo, há um recurso no processamento chamado nós populares . Quando o codeswarm renderizar, você pode pressionar "p" para mostrar os nós populares, ou seja, os arquivos que são mais editados (toques). Por padrão, isso aparece no canto superior direito da renderização, mas a exibição da codificação por cores aparece no canto superior esquerdo. Alterar o comportamento padrão pode fazer isso aparecer automaticamente (então você pressiona "p" para desligá-lo), enquanto colocar isso abaixo da tela colorida para a esquerda ajuda a reagrupar as informações em um ponto. Para implementar isso, localize o seguinte bloco de código e atualize os valores de acordo (3, 105; 10, 105) - esta é uma versão atualizada desse segmento (resultado mostrado em Q):
/**
* TODO This could be made to look a lot better.
*/
public void drawPopular() {
CopyOnWriteArrayList <FileNode> al=new
CopyOnWriteArrayList<FileNode>();
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<FileNode> 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;
}
}
}
No topo da fonte, você encontrará:
boolean showPopular = true;
Adicionar = true
faz com que os nós populares apareçam por padrão. Isso é compilado somente na primeira execução com ant
durante a execução do run.sh (a menos que você tenha problemas com o java e não seja compilado). Portanto, se você modificar o código-fonte, deverá recompilar se o code_swarm.jar já estiver presente no diretório dist
. Se você quiser reiniciar o processo (o que leva alguns segundos), apenas apague a versão já compilada, modifique a fonte e execute run.sh
novamente para compilar novamente.
Em execução do Codeswarm
Por fim, agora que geramos o arquivo activity.xml
, configuramos o script sample.config
e o run.sh
modificado para nossa configuração, podemos executar Codeswarm com:
./run.sh
Use "espaço" para pausar a renderização e "q" para sair.
Ativando a renderização do OpenGL
Defina UseOpenGL=true
no seu arquivo sample.config
.