Skip to content

zh

在Objective-C中,.h和.m檔案之間的連接

當你首次在Xcode中打開一個Objective-C專案,.h和.m檔案可能會讓你感到困惑。理解這些簡單的連接以及背後的隱藏程式碼是很重要的。

這些檔案被用來分離類別的公開和私有部分。.h檔案充當你的類別的公開宣告的標頭檔案,功能就像一個API,而.m檔案則包含私有的實現。

當你需要從其他檔案中調用一個函數時,你只需匯入.h檔案來做參考。例如,

    #import <Foundation/Foundation.h>

在.h檔案中,你可以宣告類別的公開@property屬性,可以從外部訪問:

    @property (strong, nonatomic) NSString *something;

在此,@property是一個指向其類別為NSString的對象的指標。所有对象都居住在堆中,所以我们需要星號(*)。另外,"strong"的意思是"我將這個屬性設置為nil之前,保持此對象在記憶體中。" "Nonatomic"的意思是"這個屬性的訪問不是線程安全的;" 否則,編譯器將生成鎖定程式碼。

在.m檔案中,這個屬性的"取值方法"和"設值方法"會被自動地在背後生成,使得@property實例可訪問:

    @synthesize something = _something;
    - (NSString *) something
    {
      return _something;
    }
    - (void)setSomething:(NSString *)something
    {
      _something = something;
    }

請注意,默認情況下,支持變數的名稱與屬性的名稱相同,但在前面有一個下劃線。除非你想覆寫方法並做一些不同的事情,否則你不需要寫上述程式碼。

當你創建一個新方法,你需要將聲明放在.h檔案中:

    - (int)newMethod:(ArgType *)arg;

然後在你的.m檔案中寫實際的細節。

    - (int)newMethod:(ArgType *)arg
    {
      int num = 0;
      // 方法中的某些東西...
      return num;
    }

此外,對於私有宣告,你可以像這樣將它們包含在.m檔案中:

    @interface Something()
    // 私有宣告...
    @end

最後,當你第一次讀別人的程式碼時,你只需要查看.h檔案來獲取專案的概述。如果需要深入了解細節,那就看.m檔案。

了解上述的基本概念將使你開始理解其餘的程式碼。:D

在AWS Ubuntu實例上安裝Hadoop

第一步: 在AWS上創建一個Ubuntu 14.04 LTS實例。

第二步: 連接到該實例。

chmod 400 yourKey.pem
ssh -i yourKey.pem ubuntu@your_instance_ip

第三步: 安裝Java。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo update-java-alternatives -s java-6-oracle
sudo apt-get install oracle-java6-set-default

第四步: 添加一個Hadoop用戶。

sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser

第五步: 為免密碼登錄創建一個SSH鍵。

su - hduser
ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

第六步: 測試連接。

ssh localhost
exit

第七步: 下載並安裝Hadoop。

cd /usr/local
sudo wget [http://apache.01link.hk/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz](http://apache.01link.hk/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz)
sudo tar -xzvf hadoop-1.2.1.tar.gz
sudo mv hadoop-1.2.1 hadoop
chown -R hduser:hadoop hadoop
sudo rm hadoop-1.2.1.tar.gz

第八步: 更新.bashrc

su - hduser
vim $HOME/.bashrc

# 在文件末尾添加以下內容:
export HADOOP_PREFIX=/usr/local/hadoop
export JAVA_HOME=/usr/lib/jvm/java-6-sun
unalias fs &> /dev/null
alias fs="hadoop fs"
unalias hls &> /dev/null
alias hls="fs -ls"
export PATH=$PATH:$HADOOP_PREFIX/bin

然後用:wq保存並執行.bashrc

source ~/.bashrc

第九步: 配置Hadoop,以hduser身份登錄。

cd /usr/local/hadoop/conf
vim hadoop-env.sh

# 在文件中添加以下行:
export JAVA_HOME=/usr/lib/jvm/java-6-oracle
export HADOOP_CLASSPATH=/usr/local/hadoop

使用:wq保存並退出。

第十步: 為Hadoop創建一個臨時目錄。

exit
sudo mkdir -p /app/hadoop/tmp
sudo chown hduser:hadoop /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp

第十一步: 添加配置段落。

su - hduser
cd /usr/local/hadoop/conf
vim core-site.xml

# 將以下內容放在<configuration> ... </configuration>標籤之間:

在這裡插入您的Hadoop配置。

# 使用 :wq保存並退出

如有需要,請繼續配置您的其他文件。

第十二步: 格式化HDFS。

/usr/local/hadoop/bin/hadoop namenode -format

第十三步: 啟動Hadoop。

/usr/local/hadoop/bin/start-all.sh

第十四步: 檢查所有進程是否正在運行。

jps

第十五步: 要停止Hadoop,輸入以下命令:

/usr/local/hadoop/bin/stop-all.sh

第十六步: 要再次啟動Hadoop。

/usr/local/hadoop/bin/start-all.sh

你現在已經準備好開始了!祝你玩得開心 :)

在 Mac OS X 上安裝 MongoDB

首先,安裝 Homebrew,這是 OS X 缺少的套件管理工具:

> ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

接著,更新公式:

> brew update

然後,安裝 MongoDB:

> brew install mongodb

要讓 launchd 在登入時開始 MongoDB,執行:

> ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents

要立即加載 MongoDB,執行:

> launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

或者,如果你不想或不需要 launchctl,你可以簡單地執行:

> mongod --config /usr/local/etc/mongod.conf

同時,創建數據目錄:

> sudo mkdir -p /data/db

不要忘記更改權限:

> sudo chown "$(whoami)" /data/db

最後,啟動您的數據庫:

> mongod

啟用 OS X El Capitan 的自動登錄

問題

我剛剛進行了 OS X El Capitan 的全新安裝。我試圖啟用自動登錄,但是它仍然被鎖定。這讓我感到困惑。

解決方案

  1. 前往系統偏好設定並選擇安全與隱私權。為磁盤關閉FileVault。
  2. 導航到使用者與群組並點擊更改密碼
  3. 我選擇使用另一個密碼而不是使用我的 iCloud 密碼來登錄並解鎖這台Mac。
  4. 我設定了我的新密碼。
  5. 我點擊了登錄選項並為我的帳戶啟用自動登錄。

耶,它成功了!

Ember注入控制器

我遇到的問題:

在將我的Ember專案更新到1.13.5版本後,我在瀏覽器控制台中收到以下警告:

_棄用警告: Controller#needs 已被棄用。請改用 Ember.inject.controller() 。_

然而,我找不到任何關於如何實現新語法的文檔。

解決方案:

雖然它在Ember文檔中被標記為私有方法,但你可以選擇“私有”複選框來查看它。

使用Ember.inject.controller()有兩種方式:指定和不指定控制器名稱。

_應用程序.貼文控制器 = Ember.控制器.extend({ 文章: Ember.inject.控制器() });_

當你不指定控制器的名稱時,Ember會使用屬性名來查找,例如:

文章: Ember.注入.控制器('文章').

只有在屬性名稱和控制器名稱不同的情況下,你才需要指定控制器名稱。

_應用程序.貼文控制器 = Ember.控制器.extend({ 我的帖子: Ember.注入.控制器('文章') });_

這樣,您就可以成功地將您的專案更新以符合新的Ember指南。

在越南河內可以做的有趣事情

我的志向是環遊世界,雖然我意識到這可能有點過於雄心勃勃。

我在軟件工程中學到的一個重要課程是如何管理復雜性。通過把一個大挑戰分解成小而更好管理的部分,我們可以一步一步地完成有意義的目標。到越南週末度假就是一種簡單的快樂,不需要使用年假。

以下是一些在河內可以做的有趣事情:

下龍灣皮划艇 - 我的Instagram照片可能有多層濾鏡,但下龍灣的風景無需任何Photoshop就如明信片般美麗。雖然從城市出發需要四小時,但這個聯合國教科文組織世界遺產非常值得。皮划艇是我最喜歡接近壯觀的石灰石形成的方式。如果你去,記得帶一個防水袋來保護你的iPhone,以防你掉入水中。

自然奇觀 -東天宮洞 - 經過數千年風和水的塑造,東天宮洞令人驚嘆。用點想像力,你可能會在五彩斑斕的石筍中看到一條龍,一頭獅子,甚至一種乳房形狀的形成。有趣的是,一些迷信的女性在該岩石前祈福以求母乳充足。

在夜市導航 - 這種體驗既奇妙又厲害。在中秋節時,我參觀了繁華的夜市,但我也發現自己陷入群眾中。街上似乎每個人都有一個冰淇淋,所以我也買了一個。薄荷味的味道像牙膏,但在潮濕的熱夜裡很提神。在摩托車繁多的河內過馬路是一項真正的挑戰。無論紅燈還是綠燈,人們都在移動。成功地在來自所有方向的汽車,摩托車和手推車中穿過街道需要勇氣。謝天謝地,我安然無恙。

享受街頭美食 - 如果你敢於冒險,一定要準備品嚐各種當地美食。當我在那裡的時候,我試圖記住食物的越南名稱,但現在我回家了,它們已經從我的記憶中消失了。儘管語言聽起來很有旋律,我仍然無法理解其細膩的語調。

蛋咖啡 - 在你試過之前不要嘲笑它;它並不像聽起來那麼令人不悅。越南傳統的蛋咖啡(Cà Phê Trứng)主要在河內能找到。感謝當地的導遊,我在一家隱藏在樓上的咖啡店品嚐了這種飲料,對於遊客和本地人來說價格差不多。作為一名咖啡愛好者,我必須再次參觀歷史悠久的咖啡店品嚐那著名的煉乳咖啡——甜與苦的完美融合。

參觀和勞監獄博物館 - 讓我澄清一下,我沒做錯什麼!我參觀了法式的聖若瑟主教座堂後,參觀了和勞監獄博物館。我一直都對人性的黑暗面,如折磨和懲罰,感到著迷。反思歷史,我感到幸運能在沒有壓迫性政治政權和主要衝突的時代和地方生活。越南戰爭不僅僅是電影主題,它是一個建立在不明確政治理由上的真實歷史事件。每個士兵都有一個家庭,每個死亡都帶給他們悲痛。那一刻,我發現自己想念我的伴侶,並希望她持續安全。

所以,現在是時候開始規劃你的旅行了。河內有那麼多可以看和做的事情,我差點錯過回家的飛機。我打算繼續探索世界並看看世界可以提供什麼。迫不及待想要進行下一次冒險!如果你提早預定,你甚至可能找到一些很好的優惠。

使用ImageMagick批量裁剪圖像

今天,我進行的任務之一涉及批量裁剪許多圖片。我發現ImageMagick在縮放和裁剪圖像方面非常有用。Mogrify,一個在ImageMagick包內的命令,使我們能夠對多個圖像進行各種操作。我發表這篇指南作為自己未來的參考,也許對其他人也有所幫助。

第一步:安裝MacPorts

https://www.macports.org/install.php

完成安裝後,如果你遇到以下錯誤:

> _sudo: port: command not found_

问题可能是因为MacPorts二进制文件安装在/opt/local/bin。你需要手動更新你的shell的環境以適配MacPorts:

> _export PATH=$PATH:/opt/local/bin_
> _source .profile_
> _sudo port -v selfupdate_

第二步:安裝 ImageMagick

http://www.imagemagick.org/script/binary-releases.php

執行以下命令進行安裝:

> _sudo port install ImageMagick_

port指令會下載ImageMagick和許多來自它的委託庫。如果你遇到像這樣的錯誤:

> _convert: command not found_

MAGICK_HOME環境變量設置為你提取ImageMagick文件的路徑:

> _export MAGICK_HOME="$HOME/ImageMagick-6.9.1"_

如果解壓包的bin子目錄還不在你的可執行搜尋路徑中,添加它:

> _export PATH="$MAGICK_HOME/bin:$PATH"_

設置DYLD_LIBRARY_PATH環境變量:

> _export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib"_

第三步:添加遺失的解碼庫

如果你嘗試轉換JPEG圖像並獲得以下錯誤消息:

> _“convert: no decode delegate for this image format”_

1.訪問 http://www.imagemagick.org/download/delegates/ 下載需要的或缺失的代理庫,如jpegsr9a.zip。 2.解壓縮該檔案。 3.更改目錄到解壓縮後的文件夾:

> _cd jpeg-9a_

4.然後執行:

> _./configure; make; make test; make -n install_

第五步:使用方式

為了避免覆蓋原始圖像文件,創建一個新文件夾,並在那裡備份圖像。

如果要將一個單獨的圖像大小調整為600px的高度,同時保持相同的縱橫比,運行:

> _convert input.png -geometry x600 output.png_

如果你想轉換文件夾中的所有圖像,更改到該目錄並使用:

> _mogrify -geometry x600 *.png_

要將圖像縮小到200像素:

> _convert myPhoto.jpg -resize 200x200^_

從圖片中央裁剪圖片:

> _convert myPhoto.jpg -gravity Center -crop 200x200+0+0 +repage newPhoto.jpg_

-gravity south選項指定裁剪應該從圖像的底部開始。-chop 0x135選項從高度中切割135個像素:

> _mogrify -gravity south -chop 0x135 *.jpg_

要將當前目錄中的所有圖像大小調整為800的寬度(高度將按比例減少):

> _mogrify -resize 800 *.jpg_

要旋轉圖片90度:

> _mogrify -rotate 90 *.jpg_

閱讀更多:

請訪問 http://www.imagemagick.org.

從Sublime Text切換到Atom

Atom文本編輯器剛剛發布了其1.0版本。有很多理由從Sublime Text切換過來。也許你熱愛開源的概念,或者你是GitHub社區的一員。雖然Atom有著不同的外觀和感覺,但安裝以下的包可以快速提高你的生產力。

1. 安裝Monokai語法主題

有很多酷炫的主題,但我習慣於Sublime的默認色彩方案。通過訪問以下頁面,安裝Monokai語法主題:

https://atom.io/themes/monokai

2. 將標籤轉換為空格

通過前往以下網址安裝"tabs-to-spaces"包:

https://atom.io/packages/tabs-to-spaces

然後在您的設定 cson 文件中添加這行代碼:

'tabs-to-spaces': 'onSave': 'untabify'

3. 軟標籤

默認情況下,堅硬的標籤為4個字符長,這可能導致由於過多的縮進而使代碼難以閱讀。我建議在用戶設定中啟用"Soft Tabs"選項,這將用空格替換標籤。

4. 顯示空白位

在設定中,勾選"Show Invisibles"。這將在代碼中加入小點來顯示縮進空格。

5. 在保存時修剪尾隨的空白位

這個功能會在保存編輯器時去掉尾隨的空格並添加一個尾隨的換行。

https://atom.io/packages/whitespace

6. 括號高亮

"Bracket-matcher"是一個必需的包,用於高亮各種括號:() [] {} "" '' <>。

https://github.com/atom/bracket-matcher

7. Emmet

Emmet對網頁開發者來說是必不可少的工具包。它可以用快捷方式節省大量時間。例如,輸入以下的代碼然後按Tab鍵:

div#container>ul>li.item

這將輸出相應的HTML標籤。

另一個例子:開始輸入lorem,它會自動輸出整個"Lorem Ipsum"文本。

https://github.com/emmetio/emmet-atom

8. Git Plus

此包允許您在Atom Editor內進行Git操作,無需打開終端,節省了您的工作流程的一些時間:

https://atom.io/packages/git-plus

9. Git Diff

此功能在編輯器的邊界標識出自上次提交以來被添加、編輯或刪除的行:

https://github.com/atom/git-diff

10. Linter和JSHint

要檢查您的代碼,請訪問:

https://atom.io/packages/linter

對於JSHint,請前往:

https://atom.io/packages/linter-jshint

11. Alignment

此包提供了一個簡單的鍵綁定,用於對齊多行、多光標和多選擇。例如,使用快捷鍵ctrl+cmd+a的前後對比:

Before:

var a = b;
var ab = c;
var abcd = d;
var ddddd = d;

After:

var a     = b;
var ab    = c;
var abcd  = d;
var ddddd = d;

https://atom.io/packages/atom-alignment

12. 將Atom設定為Git的預設編輯器

如果你不習慣使用Vim撰寫Git提交,可以通過執行以下命令將Atom設為預設編輯器:

git config --global core.editor "atom --wait"

包提供了開發人員提高生產力和工作流程的工具。你安裝了哪些包?告訴我你的最愛是什麼。

如何透過命令行升級您的Ghost博客

步驟1:導航至您的Ghost博客目錄

首先,將目錄更改為您的Ghost博客安裝的路徑。例如,在我的情況下,它位於:

cd /var/www

步驟2:使用wget下載最新版本

使用wget下載Ghost的最新版本:

wget https://ghost.org/zip/ghost-X.X.X.zip

注意:您可以在官方網站上找到當前的版本:https://ghost.org/download/

步驟3:移除舊的核心代碼

刪除舊的核心目錄:

rm -rf ghost/core

步驟4:解壓下載的文件

將您下載的文件解壓縮到ghost目錄:

unzip -uo ghost-0.6.4.zip -d ghost

步驟5:變更所有權和權限

更新Ghost文件的所有權和權限:

chown -R ghost:ghost ghost/

步驟6:安裝新的依賴關係

返回到您的Ghost目錄並安裝新的依賴關係:

cd /var/www/ghost
npm install

步驟7:重新啟動Ghost

最後,重新啟動您的Ghost博客:

pm2 restart ghost

注意:如果您不使用pm2,則可以使用以下命令:

service ghost start

您的Ghost博客現在應該已成功升級!


SSH:如何修復「未保護的私鑰」錯誤

問題

當我下載了 .pem 檔案以便 SSH 連線到我的 AWS 實例時,我遇到了以下的錯誤:

警告:未保護的私鑰檔案!

'blog.pem' 的權限 0640 過於開放。要求您的私鑰檔案不能被其他人訪問。將忽略此私鑰。壞的權限:忽略鑰匙:blog.pem 權限被拒絕 (publickey)。

解決方案

為了解決此問題,在你的終端機執行下列的指令:

ssh -i xxx.pem root@52.74.3.53

xxx.pem 換成你的 .pem 檔案的名稱。

此指令會修改鑰匙的權限,使其僅能被你閱讀。