Java

Codeswarm 軟體項目視覺化:如何在現代 64 位 Linux 系統上使用 opengl 渲染進行設置?

  • October 24, 2014

Codeswarm項目提供了一個Java軟體項目儲存庫視覺化工具。該軟體利用從儲存庫生成的日誌中的送出資訊。渲染說明了使用有機節點視覺渲染的開發工作。顏色應用於指定的文件副檔名,以區分從一種語言到另一種語言,或從程式碼到文件或圖像等。這是使用 Rubygit儲存庫的範例螢幕截圖:

在此處輸入圖像描述

支持(D)VCS的以下“類型” :Subversion、CVS、Git、Mercurial、Perforce、VSS、Starteam、Wikiswarm、Darcs。

從頭開始總結使用此軟體所涉及的過程可能會有所幫助:

  1. 確保我們擁有所需的軟體
  • apache-ant以及它拉動的東西,即openj*glu
  • mesa-demos(其中包括的包glxinfo
  • git(或我們需要用於儲存庫訪問和複製的軟體)
  • python 2.x(嘗試“python”+tab 看看你有什麼……)
  • 某種java JRE_
  1. 確保video driver正確OpenGL設置並正確設置(如果我們想使用 OpenGL) - 嘗試glxinfo | grep OpenGL查看是否有任何錯誤。
  2. 複製一個儲存庫git clone somerepourl.git
  3. 通過執行特定git log命令從儲存庫目錄生成日誌
  4. 將該 .log 文件帶到我們的軟體目錄中bin,我們將在其中執行python腳本到convert.xml 文件
  5. 將該輸出 .xml 文件帶到我們的軟體data目錄以在執行時使用
  6. (第一次執行)確保java發出命令的 run.sh 腳本包含適當的組件和library path
  7. 確保我們sample.config在 /data 中正確配置
  8. 轉到頂層目錄並執行./run.sh,它會編譯軟體然後執行它

那麼如何在現代 Linux 平台上進行設置呢?

相關目錄結構

使用 解壓縮Rictic 的 fork 存檔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=yyyy-mm-dd,但我從未能夠完成這項工作)。或者我們可以稍後直接編輯 xml 數據並將其去除我們不想要的事件。

將我們的 .log 文件轉換為 .xml 文件

然後我們將此文件帶到bin目錄並使用提供的python腳本進行轉換(確保使用 python2.x):

python2.7 convert_logs.py -g activity.log -o activity.xml

例如,您可以在此處實際在文本編輯器中打開 .xml 文件並刪除不需要的行。現在您可以將該 .xml 文件複製到您的data目錄中。

Sample.config 配置文件

將預設sample.config文件重命名為另一個名稱,創建一個空文件,將以下內容放入其中,然後將其另存為sample.config. 軟體預設讀取目錄中的這個文件名,data所以使用起來很方便。因此,當軟體以互動方式詢問 .config 文件時,您只需按 Enter 鍵(每次都會這樣做):

# 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 來說是致命的。

爪哇

正確設置它非常重要,因為它可以成為一個真正的展示者。當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不再以獨立的方式存在,並且不再需要進行此工作(請參閱編輯歷史記錄)。


(選修的)

特徵。對 code_swarm.java 文件的一些更改src可以改進一些功能。例如,渲染中有一個稱為流行節點的功能。當codewarm 渲染時,您可以按“p”來顯示流行的節點,即編輯最多的文件(觸摸)。預設情況下,它出現在渲染的右上角,但顏色編碼顯示出現在左上角。更改預設行為可以使其自動顯示(因此您按“p”將其關閉),而將其放在左側的彩色顯示器下方有助於將資訊重新組合到一個位置。要實現這一點,請找到以下程式碼塊並相應地更新值 (3, 105; 10, 105) - 這是該段的更新版本(結果顯示在 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;
     }
   }
 } 

在原始碼的頂部,您會發現:

boolean showPopular = true;

添加= true使流行節點預設出現。這僅在 run.sh 執行期間的第一次執行時編譯ant(除非您有 java 問題並且根本沒有編譯)。因此,如果您修改原始碼,如果 code_swarm.jar 已經存在於dist目錄中,則必須重新編譯。如果你想重新啟動程序(這需要幾秒鐘),只需刪除已經編譯的版本,修改原始碼,然後run.sh再次執行以重新編譯。


執行 Codeswarm

最後,現在我們已經生成了activity.xml文件,為我們的設置設置sample.config了修改後的run.sh腳本,我們可以執行 Codeswarm

./run.sh

使用“space”暫停渲染,使用“q”退出。

啟用 OpenGL 渲染

UseOpenGL=true在你的sample.config文件中設置。

引用自:https://unix.stackexchange.com/questions/108158