Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 48

18
votes
answers
35 views
+10

Graphical multiple file-pair comparison on Mac OS 10.7

Is it possible to view "svn diff" output graphically on Mac OS?

Most of the graphical diff programs allow you to view only one file per time. Which is very inconvenient when you use svn and have changed like 10 files.

For Linux I have found a solution in "kompare" program. I do:

svn diff > diffOut; kompare diffOut

and as result I work with graphical program and check all files at once like it shown on the picture.

Is there same thing for Mac OS?

P.S. "meld" programm seems to do the same (or it doesn't?), and I have already tried to install it, but got an error. Therefore I supouse that I can't install it under OSx 10.7.

+90

KDiff是一個開源的可視文本差異程序。您可以在windows,unix,linux和Mac OSX中使用它。試試吧。在Windows上,它會自動為svn diff添加自己。我不使用Mac OSX因此不能說這個功能也可用。

比較或合併兩個或三個文本輸入文件或目錄,

來自kdiff3網站的以下圖片網址顯示它比較目錄。

它不進行MULTIPLE文件比較,當時只有一個。這對我來說非常不方便。如果我錯了,請告訴我有關熱的更多細節,以類似於我使用“kompare”的方式在svn中使用它。 - klm123 12年8月19日20:28

@ klm123:當前版本(0.9.97)可以一次同步三個文件夾。我不確定這是你想要的。 - sinuhepop 2013年7月11日10:01

界面凌亂而且不直觀:/ - melanke 2014年1月29日12:40

該計劃緩慢而笨拙。即使是小文件也存在問題。不建議。 - SmallChess 2016年3月21日3:12

+40

DiffMerge既自由又精彩。也進行3路比較和合併。

我一直在使用DiffMerge,它很酷,但你只能從左到右合併,從右到左合併你必須以相反的順序打開這兩個文件夾 - melanke 2014年1月28日在18:16

我同意,它不如kdiff3那麼好。 - Attila Fulop 2014年1月29日9:43

是的,但kdiff3接口是凌亂的,我不明白如何使用 - melanke 1月29日'14在12:39

地板
+30
+50
  1. 有適用於Mac OS的kompare。它是KDE SDK的一部分,可以使用MacPorts獲取它:

    sudo port install kdesdk4
    launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist
    export PATH="/Applications/MacPorts/KDE4/kompare.app/Contents/MacOS:"$PATH
    

    它的工作原理!

  2. Svn支持所謂的外部差異

要使用它,應該創建svn-wrapper腳本,它將獲取“svn diff”命令返回的參數,並且調用因所需參數而異。

這是參數“svn diff”返回的示例:

-u -L code/Class1.h (revision 16518) -L code/Class1.h (working copy) code/.svn/text-base/Class1.h.svn-base code/Class1.h

opendiff需要最後兩個。因此,下一個bash 腳本將是合適的:

#!/bin/sh

if [ $# -lt 2 ]; then
    echo "usage: $0 [ignored args...] file1 file2" >&2
    exit 1
fi

# The last two arguments passed to this script are the paths to the files
# to diff.
while [ $# -gt 2 ]; do
    shift
done

exec opendiff $*

把這個腳本放在svnwrapper.sh文件中。Made file可執行文件:

chmod +x svnwrapper.sh

並把它放在一些公共路徑中,它被添加到$ PATH變量中。現在你可以使用svn調用

svn diff --diff-cmd=svnwrapper.sh

或者只是添加?/ .subversion / config文件中的[helpers]部分:

diff-cmd = svnwrapper.sh

在小牛隊,我得到沒有ksycoca4數據庫可用! - Wolfgang Fahl 2015年1月11日6:54

+20

如果你想從比較目錄結構和目錄中的文件快速切換,萬花筒是一個非常好的選擇。也可以比較2個以上的副本。我還有一種印象,比較文件(匹配塊和顏色代碼更改)的算法非常好。最後,可以進行為期15天的試用,而不是您需要支付的費用。

好吧,我買了它,我很高興用戶所以我推薦它。 - stymek 2014年1月30日13:51

0

我不太確定我是否理解正確,但是我在mac上使用帶有subclipse插件的Eclipse。

http://www.eclipse.org/downloads/?osType=macosx

請務必閱讀頁面以獲取正確的版本,並考慮您使用的svn版本。

http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=1BCECCE84434FF08FDE32136D13FF061?pageID=p4wYuA

安裝後,您可以選擇同步透視圖,查看所有衝突且需要更改的文件。

我不確定它是否會讓你說差異隨機文件,我認為你的問題。你可以嘗試一下。

它可以用作“svn diff | eclipse”或“svn diff --diff-cmd = eclipse”,結果顯示在帖子中的圖片上嗎? - - 2012年8月19日21:23 klm123

命令行沒有,抱歉。它是一個完整的IDE與subversion集成。同步視圖在樹視圖中顯示具有差異,衝突等的文件。然後,您可以編輯特定文件以在圖片中獲得相同類型的事件。基本上你不需要命令行。您只需右鍵單擊文件資源管理器中的文件,然後單擊“與...比較”>修訂版,或“從repos中更新”選擇修訂版,然後您將獲得差異視圖。 - 埃米爾2012年8月19日22:56

對不起,我不需要完整的IDE。 - - 2012年8月19日23:04 klm123

沒問題,添加了一個Grahams答案的鏈接,就像我檢查cmd線時發現的那樣。 - 埃米爾2012年8月20日9:14

stackoverflow.com/questions/187064/graphical-diff-for-mac-os-x還涵蓋了類似問題的許多其他答案。 - 埃米爾2012年8月20日9:16

0

這是一個很好的文件文件差異工具。P4Merge:http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

0

Bruno De Fraine編寫了一些腳本,為每個文件啟動OSX的FileMerge:http//www.defraine.net/~brunod/fmdiff/

安裝

> svn co http://soft.vub.ac.be/svn-gen/bdefrain/fmscripts/ fmscripts
> cd fmscripts
> make
> sudo make install

Diff(為每個文件啟動FileMerge)

> svn diff --diff-cmd fmdiff
0

超越比較不是免費的,但我已經使用它並喜歡它。

0

在這裡您可以找到最新版本的Meld for OSX .dmg安裝程序。

-20

Beyond Compare是您可以添加到列表中的另一個。它是免費和跨平台的(Windows,Mac,Linux)。

0
votes
answers
27 views
+10

cannot download, $GOPATH not set

I want to install json2csv using go get github.com/jehiah/json2csv but I receive this error:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Any help on how to fix this on MacOS?

沙发
0

如果在$GOPATH設置之後遇到此問題,可能是因為您使用不受支持的shell運行它。我正在使用fish它並沒有工作,啟動bash工作正常。

板凳
0

您可以像其他人建議的那樣使用“導出”解決方案。我想為您提供另一種永久方便的解決方案:運行Go命令時可以使用任何路徑作為GOPATH。

首先,你需要下載一個名為小工具gosthttps://github.com/byte16/gost/releases如果你使用ubuntu,你可以下載linux版本(https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz)。

然後,您需要運行以下命令來解壓縮它:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

你會得到一個可執行文件gost您可以移動它以/usr/local/bin方便使用:

$ sudo mv gost /usr/local/bin

運行以下命令,將要用作GOPATH的路徑添加到路徑空間 gost維護中。需要為路徑指定一個稍後將使用的名稱。

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

以下列格式運行您想要的任何Go命令:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

例如,要運行go get github.com/go-sql-driver/mysql/home/foobar/bar作為GOPATH,只是做如下圖所示:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

它可以幫助您設置GOPATH並運行命令。但請記住,你已經添加的路徑進入gostpathspace如果你在任何級別的子目錄下/home/foobar/bar,你甚至可以運行下面的命令,這將簡單地做同樣的事情:

$ gost get -- github.com/go-sql-driver/mysql

gost是一個簡單的Go工具,它可以幫助您管理GOPATH並運行Go命令。有關如何使用它來運行其他Go命令的更多詳細信息,您可以運行gost help goCmdName例如,您想了解更多信息install,只需輸入以下字詞:

$ gost help install

您還可以在項目的自述文件中找到更多詳細信息:https//github.com/byte16/gost/blob/master/README.md

地板
0

運行'go env'並查看您的GOPATH當前指向的位置。如果您切換到該目錄,那麼'go get..etc'命令應該可以正常工作。

4楼
0

樹莓派發生了這個問題。我已經通過VNC客戶端登錄了儘管設置並導出了GOPATH,問題仍然存在。然後在沒有sudo的情況下執行“go get”命令,它完美無缺。

5楼
-10

我必須以root身份運行應用程序(在端口80上打開一個Web服務器),這給我帶來了錯誤,因為sudo用戶的環境與普通用戶不同,因此沒有設置GOPATH。

如果其他人遇到此問題,請添加-E到該命令,這將保留用戶環境。

sudo -E go run main.go

有關更多信息,請參閱此處的討論:Google網上論壇 - GOPATH問題

0
votes
answers
44 views
+10

Bash - 在分開的子文件夾中合併文件

0

因此,我正在尋找一種方法來將多個子文件夾中的.html文件保存在自己的位置。Bash - 在分開的子文件夾中合併文件

實際情況:

$ Folder1 
. 
├── Subfolder1 
│ └── File1.html 
    └── File2.html 
├── Subfolder2 
│ └── File1.html 
    └── File2.html 

期望的結果:

$ Folder1 
. 
├── Subfolder1 
│ └── Mergedfile1.html 
    └── File1.html 
    └── File2.html 
├── Subfolder2 
│ └── Mergedfile2.html 
    └── File1.html 
    └── File2.html 

到目前爲止,我想出了這個:

find . -type f -name *.html -exec cat {} + > Mergedfile.html 

但這種結合了所有的所有文件Folder1子文件夾,而我想讓他們分開。

非常感謝!

+0

我想你想要的是'-maxdepth 1個型D'到你的'find'命令:) –

沙发
0
0

像由AK_說,你可以用找到的exec。

find Folder1/ -mindepth 1 -maxdepth 1 -type d -exec sh -c "rep='{}';cat "'"$rep"'"/*.html > "'"$rep"'"/Mergedfile.html" ; 
+0

你不能使用'{} 「就這樣!這是危險的,並不適用於所有版本的「find」。危險:如果有一個名爲''的文件會發生什麼? rm -rf /#'? POSIX明確指出[如果utility_name或參數字符串包含兩個字符「{}」,但不是兩個字符「{}」,則它是實現定義的,find是否會替換這兩個字符或不改變地使用該字符串。] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html)。所以你使用'{}'是危險的,不正確的。 –

+0

這工作完美! Justed運行另一個命令,以便在戰後再添加子文件夾名稱。非常感謝@ctac_! – Hugo

板凳
0
1

您可以循環在具有for聲明所有子文件夾:

for i in Folder1/SubFolder*; do 
    cat "$i"/File*.html > MergeFile$(echo "$i" | sed 's,.*([0-9]+)$,1,').html 
done 
+0

未加引號的變量將在這有限的情況下工作,但爲了您的代碼在公共角情況下工作,你應該*總是*引用包含帶雙引號的文件名的變量。另請參閱https://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-shell-variable – tripleee

+0

你是對的...我編輯我的帖子 – oliv

0
votes
answers
17 views
+10

在Mac上安裝npm高sierra

2

我想在mac high sierra上安裝node.js和npm。
https://gist.github.com/rcugut/c7abd2a425bb65da3c61d8341cd4b02d
我成功通過自制軟件安裝node.js,但無法安裝NPM
我該怎麼辦?在Mac上安裝npm高sierra


Hoyeongui-MacBook-Air:~ hoyeongkim$ node -v 
v8.9.1 
Hoyeongui-MacBook-Air:~ hoyeongkim$ curl -L https://www.npmjs.com/install.sh | sh 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 6255 100 6255 0  0 2628  0 0:00:02 0:00:02 --:--:-- 2629 
tar=/usr/bin/tar 
version: 
bsdtar 2.8.3 - libarchive 2.8.3 
install [email protected] 
fetching: https://registry.npmjs.org/npm/-/npm-5.5.1.tgz 
module.js:538 
    throw err; 
    ^

Error: Cannot find module '/private/var/folders/jn/6wwl3xfd25x94ky333nhcxb80000gn/T/npm.58735/package/bin/read-package-json.js' 
    at Function.Module._resolveFilename (module.js:536:15) 
    at Function.Module._load (module.js:466:25) 
    at Function.Module.runMain (module.js:676:10) 
    at startup (bootstrap_node.js:187:16) 
    at bootstrap_node.js:608:3 
added 1 package and removed 1 package in 0.846s 
/usr/local/Cellar/node/8.9.1/bin/npm -> /usr/local/Cellar/node/8.9.1/lib/node_modules/npm/bin/npm-cli.js 
/usr/local/Cellar/node/8.9.1/bin/npx -> /usr/local/Cellar/node/8.9.1/lib/node_modules/npm/bin/npx-cli.js 
+ [email protected] 
updated 1 package in 1.687s 
It worked 

Hoyeongui-MacBook-Air:~ hoyeongkim$ npm 
-bash: npm: command not found 
+0

HTH HTTPS ://gist.github.com/DanHerbert/9520689 –

+0

@MarkSetchell T hank,但它不起作用.. –

+0

爲什麼你不想通過Homebrew安裝npm?這是最簡單的解決方案:'brew install node'。 – bfontaine

沙发
0
2

我在詳細看了這個。我安裝node自制軟件並設置我的路徑有/usr/local/bin在一開始,所以我拿起所有自制軟件二進制文件。

所以,如果我檢查node其二進制和哪個版本,我看到我運行了一個由自制安裝:

which node 
/usr/local/bin/node 

,它是版本自制安裝:

node -v 
v8.9.1 

自制軟件安裝node也自動安裝npm只是如出一轍:

which npm 
/usr/local/bin/npm 

而且也是當前:

npm -v 
5.5.1 

所以,我不知道爲什麼你想從源代碼安裝npm - 只要使用由自制提供的一個。


如果我看有自制的安裝node相關的文件,我可以看到它包括npm

brew ls node --verbose | grep 'npm$' 

樣本輸出

/usr/local/Cellar/node/8.9.1/etc/bash_completion.d/npm 
/usr/local/Cellar/node/8.9.1/libexec/bin/npm 
/usr/local/Cellar/node/8.9.1/libexec/lib/node_modules/npm/bin/npm 
5
votes
answers
28 views
+10

Exported UTI for package/bundle

My Cocoa document-based app opens and writes custom packages/bundles.

Is this considered a proprietary format that needs to be exported via Exported UTIs (UTExportedTypeDeclarations)?

If so, what should be the values for:

  • Conforms To (UTTypeConformsTo)
  • Mime Types (public.mime-type)
  • Pboard Types (com.apple.nspboard-type)
  • OS Types (com.apple.ostype)

Finally, does the Exported UTI identifier (UTTypeIdentifier) need to be the same value than the Document Type identifier (LSItemContentTypes)?

沙发
+50
+50

Trial-and-error findings:

Is this considered a proprietary format that needs to be exported via Exported UTIs (UTExportedTypeDeclarations)?

Yes. While I couldn't find any explicit mention of this in the documentation, exporting the type was necessary for Finder to treat the directories as packages.

  • Conforms To (UTTypeConformsTo)

com.apple.package (source)

  • Mime Types (public.mime-type)

Empty. Directories don't have a Mime Type?

  • Pboard Types (com.apple.nspboard-type)

Empty. Pboard Types are deprecated?

  • OS Types (com.apple.ostype)

No clue.

Finally, does the Exported UTI identifier (UTTypeIdentifier) need to be the same value than the Document Type identifier (LSItemContentTypes)?

Yes, but I couldn't find any explicit mention of this in the documentation.

11
votes
answers
21 views
+10

How can i install Sphinx for Mac Os Lion?

I want to install latest stable version of Sphinx (sphinxsearch.com) on Mac OS X Lion. What is a right way to do that?

沙发
+70

I just checked and it's on brew, so you can just run if you have HomeBrew: brew install sphinx.

板凳
+30

What wasn't obvious from those instructions was that the main executables would be found in /usr/local/bin/searchd and /usr/local/bin/indexer... I was a bit puzzled after install when I couldn't find anything sphinx in /usr/local/bin.

地板
+10

You can try the easy Install.

-Open your terminal. -Execute the following command: sudo easy_install sphinx

Then it works.

0
votes
answers
45 views
+10

OpenGL在Mac上沒有繪製任何東西,Objective-C

0

我想繪製一些使用OpenGL與VAO和VBO對象的東西。要做到這一點,我只需要分類NSOpenGLView。默認情況下,使用OpenGL v2.1,所以,我放了一個PixelFormat,編寫代碼,並解決了所有打印錯誤。目前該應用運行良好,但沒有任何東西在窗口繪製,即使glClearColor也沒有效果。請幫助我找到並解決問題。我的操作系統是帶有OpenGL v4.1的Mac v10.12。OpenGL在Mac上沒有繪製任何東西,Objective-C

MyOpenGLView.m,第1部分:

#import "MyOpenGLView.h" 
#include <OpenGL/gl3.h> 
#include "error.h" 

static const char *vertexShaderSource = 
"#version 410
" 
"in vec3 posAttr;
" 
"in vec3 colAttr;
" 
"out vec3 col;
" 
"void main() {
" 
" col = colAttr;
" 
" gl_Position.xyz = posAttr;
" 
" gl_Position.w = 1.0;
" 
" col = colAttr;
" 
"}
"; 

static const char *fragmentShaderSource = 
"#version 410
" 
"in vec3 col;
" 
"out vec4 color;
" 
"void main() {
" 
" color.rgb = col;
" 
" color.a = 1.0;
" 
//" color = vec4(1,1,1,1);
" 
"}
"; 

// Shader properties 
GLuint m_posAttr; 
GLuint m_colAttr; 
GLuint program; 

// Arrays of positions and colors 
float fTriangle[9]; 
float fTriangleColor[9]; 

// Low-level VBOs and VBAs 
GLuint uiVBO[2]; 
GLuint uiVAO[1]; 


GLuint makeShader(GLenum type, const char *source) { 
    GLuint shader; 

    shader = glCreateShader(type); 
    GetError(); 
    glShaderSource(shader, 1, &source, NULL); 
    GetError(); 
    glCompileShader(shader); 
    GetError(); 

#if defined(DEBUG) 
    GLint logLength; 

    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); 
    GetError(); 
    if (logLength > 0) { 
     GLchar *log = malloc((size_t)logLength); 
     glGetShaderInfoLog(shader, logLength, &logLength, log); 
     GetError(); 
     NSLog(@"Shader compilation failed with error:
%s", log); 
     free(log); 
    } 
#endif 

    GLint status; 
    glGetShaderiv(shader, GL_COMPILE_STATUS, &status); 
    GetError(); 
    if (0 == status) { 
     glDeleteShader(shader); 
     GetError(); 
     NSLog(@"Shader compilation failed from code!"); 
     assert(0); 
    } 

    return shader; 
} 

MyOpenGLView.m,第2部分:

//// General staff 

@implementation MyOpenGLView 

- (void)awakeFromNib { 
    // Positions and colors of figures 
    fTriangle[0] = -0.4f; fTriangle[1] = 0.1f; fTriangle[2] = 0.0f; 
    fTriangle[3] = 0.4f; fTriangle[4] = 0.1f; fTriangle[5] = 0.0f; 
    fTriangle[6] = 0.0f; fTriangle[7] = 0.7f; fTriangle[8] = 0.0f; 
    fTriangleColor[0] = 1.0f; fTriangleColor[1] = 0.0f; fTriangleColor[2] = 0.0f; 
    fTriangleColor[3] = 0.0f; fTriangleColor[4] = 1.0f; fTriangleColor[5] = 0.0f; 
    fTriangleColor[6] = 0.0f; fTriangleColor[7] = 0.0f; fTriangleColor[8] = 1.0f; 


    NSOpenGLPixelFormatAttribute attrs[] = { 
     NSOpenGLPFADoubleBuffer, 
     NSOpenGLPFADepthSize, 24, 
     NSOpenGLPFAOpenGLProfile, 
     NSOpenGLProfileVersion4_1Core, 
     0 
    }; 
    NSOpenGLPixelFormat *pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; 
    if (!pf) { 
     NSLog(@"No OpenGL pixel format"); 
    } 
    NSOpenGLContext* context = [[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil]; 
    [self setPixelFormat:pf]; 
    [self setOpenGLContext:context]; 
    NSLog(@"%s", glGetString(GL_VERSION)); 
    GetError(); 

    GLuint vertexShader = makeShader(GL_VERTEX_SHADER, vertexShaderSource); 
    GLuint fragmentShader = makeShader(GL_FRAGMENT_SHADER, fragmentShaderSource); 

    program = glCreateProgram(); 
    GetError(); 
    glAttachShader(program, vertexShader); 
    GetError(); 
    glAttachShader(program, fragmentShader); 
    GetError(); 
    glLinkProgram(program); 
    GetError(); 
    GLint status; 
    glGetProgramiv(program, GL_LINK_STATUS, &status); 
    GetError(); 
    if (0 == status) { 
     NSLog(@"Failed to link shader program"); 
     assert(0); 
    } 

    m_posAttr = glGetAttribLocation(program, "posAttr"); 
    GetError(); 
    m_colAttr = glGetAttribLocation(program, "colAttr"); 
    GetError(); 

    glGenVertexArrays(1, &uiVAO[0]); 
    glGenBuffers(2, &uiVBO[0]); 
    GetError(); 
} 

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    glClearColor(0, 0, 0, 0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glUseProgram(program); 
    GetError(); 

    glBindVertexArray(uiVAO[0]); 
    GetError(); 

    glBindBuffer(GL_ARRAY_BUFFER, uiVBO[0]); 
    glBufferData(GL_ARRAY_BUFFER, 9*sizeof(float), fTriangle, GL_STATIC_DRAW); 
    glEnableVertexAttribArray(m_posAttr); 
    GetError(); 
    glVertexAttribPointer(m_posAttr, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    GetError(); 

    glBindBuffer(GL_ARRAY_BUFFER, uiVBO[1]); 
    glBufferData(GL_ARRAY_BUFFER, 9*sizeof(float), fTriangleColor, GL_STATIC_DRAW); 
    glEnableVertexAttribArray(m_colAttr); 
    GetError(); 
    glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    GetError(); 

    glDrawArrays(GL_TRIANGLES, 0, 3); 
    GetError(); 

    glDisableVertexAttribArray(m_posAttr); 
    glDisableVertexAttribArray(m_colAttr); 

    glFlush(); 
    GetError(); 
} 

- (void)dealloc { 
    glDeleteProgram(program); 
    glDeleteBuffers(2, uiVBO); 
    glDeleteVertexArrays(1, uiVAO); 
    GetError(); 
} 

@end 

error.h:

//// Prints OpenGL errors 

#ifndef __ERROR_H__ 
#define __ERROR_H__ 

#include <stdlib.h> 
#include <assert.h> 

#ifdef DEBUG 

#define GetError() 
{ 
for (GLenum Error = glGetError(); (GL_NO_ERROR != Error); Error = glGetError()) 
{ 
switch (Error) 
{ 
case GL_INVALID_ENUM:  printf("
%s

", "GL_INVALID_ENUM"  ); assert(0); break; 
case GL_INVALID_VALUE:  printf("
%s

", "GL_INVALID_VALUE" ); assert(0); break; 
case GL_INVALID_OPERATION: printf("
%s

", "GL_INVALID_OPERATION"); assert(0); break; 
case GL_OUT_OF_MEMORY:  printf("
%s

", "GL_OUT_OF_MEMORY" ); assert(0); break; 
default:                    break; 
} 
} 
} 

#else 

#define GetError() 

#endif /* DEBUG  */ 
#endif /* __ERROR_H__ */ 
+0

我看到的第一件事就是你必須在** glClear之前調用glClearColor **。否則它不起作用。下一步:在VAO設置代碼之後綁定VAO - >當VAO綁定時沒有存儲在VAO中的信息 - >所有設置均被重置。下一步:你不應該在每一幀重新創建VAO和VBO。它們應該生成一次,然後在繪圖方法中使用。 – BDL

+1

既然有太多不同的東西看起來不對,你應該考慮尋找一個好的教程。 – BDL

+0

@BDL謝謝!我會盡力解決它並更新問題。我搜索了很好的教程,但我只找到了舊教程。我試圖按照[這一個](https://github.com/beelsebob/Cocoa-GL-Tutorial) –

沙发
0
0

經過大量努力和代碼的修改,我發現:唯一真正的問題是NSOpenGLPixelFormatAttribute陣列中的NSOpenGLPFADoubleBuffer選項。評論這個選項後,我得到了所需的輸出。

在我看來,原因是我有2個輸出圖形緩衝區。但是,代碼只執行一次,第一個緩衝區被繪製,然後交換。所以,繪製了第二個空的緩衝區。

9
votes
answers
28 views
+10

Platforms for running memcached

Is there any reason in particular why it's recommended to run memcached on a Linux server? Is it really that bad an idea to run it on a Windows Server box? What about an OS X Server box?

The biggest reason that I read is about TCO. In other words, for each windows box that we run memcached on, we have to buy a copy of Windows Server and those costs add up. The thing is that we have several servers that have older processors but a lot of RAM - perfect for memcached use. All of these boxes already have Windows Server 2003 installed on them, so there's not really much savings to installing Linux. Are there any other compelling reasons to use Linux?

沙发
+30
+50

幾乎所有的FAQ和HOWTO都是從Linux的角度編寫的。Memcache最初只是為Linux創建的,端口來得晚了。有端口到Windows,但它還沒有在官方的memcache發行版中。Windows上的Memcache仍然是游擊隊風格。例如,x64 Windows沒有memcache。

從服務器上的MacOS X上的memcache開始:利基的利基市場。

如果,正如你所說的那樣,沒有win64版本的memcached,肯定會有效地排除它的使用,因為你將無法使用大部分RAM,除非使用多個實例,這可能會使應用程序不必要地複雜化。 - MarkR 2009年2月26日22:49

請參閱stackoverflow.com/questions/8896/memcached-on-windows-x64 - vartec 2009年2月27日8:40

+40

這個問題真的是“Linux作為服務器平台有什麼優勢”我將給出一些標準答案:

  • 更容易遠程管理(不需要RDP等)。所有內容都可以通過CLI編寫腳本或完成。
  • 像Ubuntu LTS(長期支持)版本這樣的發行版可以保證多年來的安全更新,並且軟件成本為零。可以通過命令行輕鬆安裝更新,通常不需要重新啟動。
  • 性能更高。Linux通常被認為在給定的硬件上提供“更多的降價”。這通常是由於較低的資源需求。
  • 降低資源需求。Linux在256MB或更少的RAM以及非常小的CPU上運行得非常好
  • 可用軟件和實用程序的廣度。
  • 免費。(如在啤酒中)
  • 免費。(與自由一樣)這意味著您可以查看,更改和提交針對您正在運行的代碼的錯誤,並直接與開發人員交談。

請記住,TCO包括您(管理員)維護機器所花費的時間。Linux的總體擁有成本較低,因為它更易於維護,您可以將時間花在管理服務器之外的其他事情上......

如果你正在運行memcached,你將在一個至少有8G內存的盒子上運行它,所以運行低內存幾乎不是操作系統的要求:) - MarkR 2009年2月26日在11:04

我認為Slacy意味著一般Linux系統的佔用空間很小,因此當在Linux與Windows中託管時,更多的資源將專用於memcached,其占用時間更長 - 此時安德烈時間2009年9月21日16:02

我同意你的大部分回應,但我確實對此問題有疑問“Linux的TCO較低,因為它更容易維護”這是一個非常可疑的說法,說Linux比Windows服務器更容易維護。特別是如果他已經習慣了Windows。 - pnewhook 2010年2月26日17:23

+10

在Windows中運行它似乎沒有任何技術上的缺點。這主要是成本的事情。如果許可證只是閒置在未使用狀態,那麼根本就沒有缺點。我確實記得在舊的Windows API中存在內存洩漏的舊窗口上的問題,特別是TCP的東西 - 但可能這些東西在現代窗口中都是固定的。

如上所述,技術上的缺點是x64 Windows沒有端口,最終將可用內存限制為2GB。 - 安德烈09年9月21日16:04

+10

如果要部署memcached,則可能有相當重要的基礎結構(已經部署了許多很多機器)。即使您將新機器專用於memcached,您也需要在其上運行其他軟件以進行系統管理,監控,硬件支持等。您的團隊可以為您的基礎架構定制該軟件。

因此,您的操作系統平台選擇將以您的運營團隊和硬件供應商將支持在生產中使用的內容為指導。

一些Windows許可證的成本可能相當低,而且您可能已經批量訂閱 - 事實上,服務器可能已經訂購了Windows許可證。

話雖如此,如果你正在運行memcached,你一定會想要一個64位操作系統 - 使用32位操作系統並不聰明,這意味著你的大部分RAM都不能使用(你將被限制在3G左右,具體取決於在操作系統上)。

我假設如果你正在部署memcached,那麼你將會在硬件上使用很多內存 - 畢竟這是毫無意義的。

0
votes
answers
33 views
+10

在Mac上用C打印整數的問題終端

-2

當我在C中打印整數時,它們會在終端中的新命令行旁邊結束。我如何阻止這種情況發生?在Mac上用C打印整數的問題終端

#include <stdio.h> 

#include <stdlib.h> 

int main() 
{ 
    printf("Hello World!
"); 
    printf("%d", 1200); 
    return 0; 
} 

輸出看起來像:1200MacBook-PRO:文件的用戶$

+0

'的printf( 「%d」,1200 );' - >'printf(「%d n」,1200);' –

+0

此行爲不是特定於Mac;它幾乎適用於任何基於Unix的機器,如果您處於命令行環境中,則可能適用於Windows。 (當然,它不會影響GUI應用程序。) –

沙发
0
2

你與Hello World!做同樣的事情:在末尾加一個換行符( )。

板凳
0
1

更改此:

printf("%d", 1200); 

這樣:

printf("%d
", 1200); 

(當然MacBook-Pro:File user$是不是你的程序的輸出的一部分)

4
votes
answers
23 views
+10

Need help linking to bundle on OS X

I'm an experienced Java coder, but I'm new to XCode and C++, so sorry for the dumb question.

I'm writing some c++ code in XCode that needs to instantiate a Java Virtual Machine. There is a method in the OS X Java plugin called JavaVM_GetJNIEnv(), and a header file in the source code from Sun/Oracle called JavaVM.h with these lines:

// Gets the JNIEnv* associated with the Java VM, creating the JVM
// instance if necessary. Note that the implementation of this routine
// must be prepared for it to be called from more than one thread.
JNIEnv* JavaVM_GetJNIEnv();

I added the .h file to my XCode project, but I don't know how to link to the binary file. I figured out how to force-load in the linker, like this:

-force_load /System/Library/Java/Support/Deploy.bundle/Contents/Resources/JavaPlugin2_NPAPI.plugin/Contents/MacOS/JavaPlugin2_NPAPI

(this file is a symbolic link; the real path is /System/Library/Java/Support/Deploy.bundle/Contents/Resources/JavaPlugin2_NPAPI.plugin/Contents/Resources/Java/libplugin2_npapi.jnilib)

But then I get this error message:

ld: in /System/Library/Java/Support/Deploy.bundle/Contents/Resources/JavaPlugin2_NPAPI.plugin/Contents/MacOS/JavaPlugin2_NPAPI, can't link with bundle (MH_BUNDLE) only dylibs (MH_DYLIB)
collect2: ld returned 1 exit status

So my question is, how do I link to code in a .jnilib file with XCode?

+20

You need to link to frameworks, not bundles. Choose 'Add Existing Framework' and select JavaVM.framework, and Xcode should handle the rest!

我的框架列表中已經有了JavaVM.framework ......也許這個函數是在不同的庫中定義的。我會用'nm'做一些搜索,試圖找出哪個二進製文件具有我正在尋找的功能; 也許我只需要添加一個不同的框架。 - Jesse Barnum 2011年7月11日19:55

好的,我找到了文件的真實位置。我使用'nm'來驗證我需要的功能是否包含在內。實際二進製文件的位置是'/System/Library/Java/Support/Deploy.bundle/Contents/Resources/JavaPlugin2_NPAPI.plugin/Contents/MacOS/JavaPlugin2_NPAPI'。由於我無法將捆綁包添加到XCode,我將如何鏈接到此? - Jesse Barnum 2011年7月11日20:10

在osx下,gcc包裝器接受-F 和框架 作為參數。-F / -workwork類似於-L / -l,但我認為sbooth是對的 - 如果它沒有正確鏈接,那麼某些東西是不可思議的。 - synthesizerpatel 2011年7月11日20:23

那麼如何鏈接到不是框架的代碼呢? - Jesse Barnum 2011年7月11日20:32

您嘗試鏈接的內容是Web瀏覽器的Java插件的一部分(因此路徑中的NPAPI)。你確定那是你想要的嗎? - user57368 2011年7月12日2:01

板凳
+20
+50

I figured it out. If you're trying to reference code stored in a .bundle, you don't actually link to it, you make calls to it at runtime and then reference the functions by name (ie. similar to Java's reflection, which I'm more familiar with).

NPError (*getEntryPoints)(NPPluginFuncs *aNPPFuncs); //Defines a variable which is a pointer to a function

CFURLRef bundleUrl = CFURLCreateWithFileSystemPath(NULL, CFSTR("/System/Library/Java/Support/Deploy.bundle/Contents/Resources/JavaPlugin2_NPAPI.plugin"), kCFURLPOSIXPathStyle, true);
CFBundleRef bundleRef = CFBundleCreate(NULL, bundleUrl);
getEntryPoints = (NPError (*)(NPPluginFuncs *))CFBundleGetFunctionPointerForName ( bundleRef, CFSTR("NP_GetEntryPoints" ) ); //Sets the pointer function to a function loaded from the bundle

if( getEntryPoints == NULL ) {
    printf("getEntryPoints is NULL");
} else {
    NPPluginFuncs pluginFuncs;
    pluginFuncs.size = sizeof(NPPluginFuncs);

    NPError err = getEntryPoints( &pluginFuncs ); //This is what actually calls the library function
    //... do more stuff with plugin API ...
}

As an aside, this didn't wind up being very useful for my purposes because as far as I can tell, the java plugin API is only designed to be called from Mozilla-based browsers, and I'm trying to embed Java in my own application.