SSH:如何修復「未保護的私鑰」錯誤
問題
當我下載了 .pem
檔案以便 SSH 連線到我的 AWS 實例時,我遇到了以下的錯誤:
解決方案
為了解決此問題,在你的終端機執行下列的指令:
將 xxx.pem
換成你的 .pem
檔案的名稱。
此指令會修改鑰匙的權限,使其僅能被你閱讀。
當我下載了 .pem
檔案以便 SSH 連線到我的 AWS 實例時,我遇到了以下的錯誤:
為了解決此問題,在你的終端機執行下列的指令:
將 xxx.pem
換成你的 .pem
檔案的名稱。
此指令會修改鑰匙的權限,使其僅能被你閱讀。
當我嘗試在Mac OS X Yosemite上安裝一個gem時,我遇到了以下錯誤:
錯誤:在執行gem時...(Gem::FilePermissionError)您沒有/Library/Ruby/Gems/2.0.0目錄的寫入權限。
首先,您需要安裝Rbenv和Ruby-build:
接下來,將Rbenv添加到~/.zshrc
中,使其自動啟動:
註:如果您不使用Zsh,請修改您的~/.bash_profile
,而不是~/.zshrc
。
關閉您的終端並重新打開它以應用更改。
現在,安裝Ruby並將其設置為您的全局Ruby版本:
現在您可以繼續安裝gems,而不會遇到權限問題。
您的gem現在應該成功安裝了!
Aleumdaun! 這是韓國人用來形容 "可愛" 的詞語。他們經常用這個詞來形容釜山,慶州,以及晉海,在春天樱花盛开时的風景之美。
誰不喜歡旅行?韓國是一個尚未被充分探索的國家,大部分的遊客通常不會超出首爾的界限。我們每個人都有自己的旅行優先事項和偏好。對我來說,我喜歡即興的旅行,因為它讓我可以從日常的工作行程中走出來。把自己放在一個我不知道語言,甚至手機都沒有互聯網的陌生情況讓我覺得充滿刺激。這是我走出舒適區的大膽一步。
以下是一些非韓語使用者在釜山旅行的生存秘訣:
在住宿公寓而不是酒店的時候,我遇到了一位精明的商人,一位才華橫溢的醫生,以及一位可愛的ajumma(韓語阿姨)。雖然我的韓語技能有限,與那些不會說英語的人進行口頭交流有些困難,但是請記住,人類互動的三分之二是非語言的。友好的笑容和熱情的問候是通用的。我用了一個下午的時間與他們通過圖片和手勢進行對話。韓國人有一種讓陌生人變成朋友的天分。他們不僅有禮貌,而且是我所遇到的最善良的人。如果你想保持聯系,那麼可以考慮下載Kakao Talk應用程序。
在開始探索之前,先獲取城市的概覽,避免迷路。釜山塔高120米,提供了絕佳的全景視角。從塔頂看到的壯麗的廣安橋和釜山的360度全景。
海雲台海灘非常特別,至少可以說。海洋的景色會讓你屏息。附近有一些景點,如鵝鹿島,APEC Naru公園和水族館。如果你累了,像TwoSome Place ,Tom n Tom ,或Caffeine Gurunaru 這樣的咖啡店都提供舒適的空間。另外,別忘了世界最大的百貨公司新世界中的SpaLand Centum City ,這是放鬆身心的完美去處。
釜山的魅力不僅體現在其旅遊景點上;即使是在街上的簡單行走也是吸引人的。從豬腸到鬆餅,市場上的美食展示了傳統與現代的獨特融合。對於美食街,你可以前往釜山國際影展(BIFF)的广场。如果你是购物狂,你一定会喜欢西面的地下购物中心和南浦站附近的繁忙地区。另外,对于海鲜爱好者来说,札嘎其海鲜市场是必须要去的地方。
位於釜山北部的慶州,曾經是新羅王朝的首都直到一千年。它是一個遺產景點,那裡有古代皇族的草墓。在遊客的列表上,佛國山寺經常處於首位。進入這個世界遺產的入場費只需4,000韓元。
每年春天,位於釜山西部的晉海區會舉辦為期十天的樱花节。長1.5公里的花隧道是必看的。當一陣風吹來時,花瓣飄落,這是一種超現實而浪漫的場景。
所以,拿起你的護照,和我一起來釜山進行一場令人興奮的周末之旅吧!希望本文能激勵你探索韓國,沉醉在它的文化中。坦白說,我的身體可能已經返回了辦公室,但我靈魂依然在韓國。把我加到你的旅行伙伴名單中吧,我希望能發現更多美麗的地方,並和你分享。Kamsa-Hamnida,這是韓國人說表示衷心感謝你的方式。
我正在學習Java。理解是否函數參數是通過複製還是引用傳遞的一個重要觀念。
複製傳遞意味著當一個變數被傳遞給函數時,會製作該變數的一個副本。引用傳遞則意味著函數中的程式碼運作在原始變數上,而非其副本上。
在Java中,變數始終會通過複製來傳遞。讓我們通過以下三種情況來探索這一點:
void incrementValue(int inFunction) {
inFunction++;
System.out.println("In function: " + inFunction);
}
int original = 10;
System.out.println("Original before: " + original);
incrementValue(original);
System.out.println("Original after: " + original);
結果如下:
原始值並未變動。
void incrementValue(int[] inFunction){
inFunction[0]++;
System.out.println("In function: " + inFunction[0]);
}
int[] arOriginal = {10, 20, 30};
System.out.println("Original before: " + arOriginal[0]);
incrementValue(arOriginal);
System.out.println("Original after: " + arOriginal[0]);
結果如下:
原始值有變動!這是因為複雜對象變數是引用。引用變數指向內存中的位置。當變數被傳遞到函數時,始終會創建新的引用。兩個引用都指向原始對象或值。
兩個陣列元素都指向相同的內存位置。
void changeString(String inFunction){
inFunction = "New!";
System.out.println("In function: " + inFunction);
}
String original = "Original!";
System.out.println("Original before: " + original);
changeString(original);
System.out.println("Original after: " + original);
結果如下:
請記住,字符串是不變的。當傳遞給函數時,會創建新的字符串,使原始字符串保持不變。
2015年3月3日在香港JavaScript和Node.js聚會上的記錄:
今天,我想談談React,一個用於創建用戶界面的JavaScript庫。我在幾個項目中使用過它,並且越多地與它共事,我就越欣賞其功能。我將解釋為什麼我覺得React如此引人入勝,以及為什麼你應該考慮使用它。
作為一名軟件工程師,我明白開發人員每天面臨的挑戰。在使用React之前,寫程式碼經常會讓人感到不適,尤其是在構建用戶界面的時候。可能的狀態有很多,並且測試所有狀態都是不切實際的。你可能會遇到可變DOM問題或無法預測的用戶輸入。你的用戶界面可能行為不正常,或者在大型應用程式中無法良好地擴展。
程式設計是一門藝術,特別是組織復雜性的藝術。在建立UI時,ReactJS幫助您管理這種復雜性。
什麼是 React?
React 是 MVC(Model-View-Controller)中的 'view'。與像MeteorJS這樣的全面框架不同,React 主要專注於 UI。 它由 Facebook 和 Instagram 開發,並被用於他們的生產環境中。例如,您在Facebook.com 上看到的評論框就是一個 React 組件。
為什麼選擇 React?
我將重點關注三個關鍵點:React 組件,效能,以及處理動態數據。
1. React 組件
在我之前作為 MeteorJS 開發人員的角色中,我發現像 Handlebars 或 Spacebars 這樣的傳統模板語言很有限。相反,React 使用組件而不是模板。這種模組化的方法允許更大的靈活性,可重用性和可測試性。
2. 效能
由於發明了虛擬 DOM,React 提供了令人印象深刻的速度。傳統的方法通常需要對整個頁面進行重新渲染,即使是對微小變化也是如此。 虛擬 DOM 通過僅更新 DOM 的變更部分來最小化這種昂貴的操作。
3. 管理動態數據
狀態管理是 UI 開發中的一大挑戰。 React 通過採用單向資料流來解決這個問題,從而提高了可維護性並簡化了調試。
結語
總結,React因其簡單和強大而脫穎而出。它使得可以開發可重複使用、可測試的組件。它提供出色的效能和有效管理動態數據。
就到這裏!有任何問題嗎?
這裡是幻燈片:幻燈片介紹
問題:
如果你正在使用Mac,並且通過從官方網站下載的pkg文件安裝了Node.js,那麼當你嘗試全局安裝一個npm模塊時,你可能會遇到以下的錯誤信息:
我的解決方案:
不要用sudo
命令來安裝包!
有些人在Stack Overflow上推薦上述解決方案,但我強烈建議不要用sudo
來管理包。這種解決方案可能會暫時解決你的問題,但你將可能會在以後遇到更多問題。
下面是推薦的做法:
步驟1:使用以下命令確定你的用戶名:
例如,我的用戶名是victorleungtw。
步驟2:更改node模塊文件夾的擁有權:
執行這些步驟後,你將來在安裝npm包時就不必再使用sudo
了。
問題
Sublime Text 3 包括一個命令行工具, subl。 不幸的是,當你在 OS X Yosemite 上安裝了編輯器後,這個工具無法直接工作。
我的解決方法
安裝Sublime Text 3後,使用以下命令創建一個符號鏈接:
在這裡,
/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl
是應用程式在您的應用程式目錄中的存放位置。/usr/local/bin
是您希望符號鏈接存在的選擇路徑。要將Sublime Text設置為各種命令的默認編輯器,該命令提示輸入,請按照如下方式配置您的 EDITOR
環境變量:
-w
標誌確保 subl
命令在文件關閉之前不會退出。
另外,您可以使用此命令將Sublime Text設置為您的默認Git編輯器:
ECMAScript 6 是 JavaScript 標準的下一個版本。
以下是您需要知道的有關 ES6 的12個酷事:
1. 箭頭函數
類似於 CoffeeScript,ES6 允許你使用肥箭頭語法定義一個函數。
2. 箭頭範疇
‘this’關鍵字可能會令人困惑,因為它指的是調用它的東西。例如,當使用 setTimeout
時,‘this’ 指的是窗口物件。箭頭函數表達式解決了這個問題,將‘this’綁定到函數本身。
function yo() {
this.name = "Victor"
setTimeout(() => {
console.log("yo " + this.name)
}, 5000)
}
// Output: yo Victor
3. 字串模板
就像 CoffeeScript 一樣,ES6 包含了一個使用 ${}
語法用於變數的字串內插特性。注意下面的例子在第 2 行使用了反勾號而非單引號。
var person = { name: "Victor", age: 24 }
var hello = `My name is ${person.name} and I am ${person.age} years old`
4. Let 範疇
let
聲明了一個區塊範疇的本地變數。換句話說,它不會覆寫外部範疇中的變數值。
5. 陣列解構賦值
您不必逐一聲明多個變數,可以像這樣在一行中賦值給它們:
6. 物件解構賦值
同樣地,您也可以為物件使用解構賦值:
7. 物件字面量
您可以使用簡寫符號來構造一個物件,而不是寫 {firstName: firstName, lastName: lastName}
。
8. 默認參數
您可以像這樣為參數分配默認值:
9. 展開運算符
展開運算符(...
)允許您將一個陣列的每個元素作為參數傳遞。
function threeNumbers(x, y, z) {
console.log(x, y, z) // 0, 1, 2
}
var args = [0, 1, 2]
threeNumbers(...args)
10. 類別
就像其他物件導向的程式設計語言一樣,ES6 允許您使用新的類別語法來定義一個用於構建物件的藍圖。
11. 類別繼承
您可以使用 extends
關鍵字來擴展一個類別。
12. 產生器
產生器是可以被退出並稍後重新進入的函數。調用一個產生器函數並不會立即執行其內容。當迭代器的 next()
方法被調用時,產生器函數的內容會被執行,直到遇到第一個 yield
表達式。
function* idMaker() {
var index = 0
while (true) yield index++
}
var gen = idMaker()
console.log(gen.next().value) // 0
console.log(gen.next().value) // 1
console.log(gen.next().value) // 2
ECMAScript 6中有許多新特性。更多細節,請參考 MDN。官方發表過程於2015年3月在Mozilla開始,並預計於2015年6月完成。敬請期待!
我參加了在香港的第二屆Hack Reactor Remote Beta,以提高我的JavaScript技術技能。
該課程結構嚴謹,提供了許多優秀的講座和先進技術的實戰經驗。
我從學習遞歸,閉包,和數據結構開始。一旦我對基礎有了堅實的掌握,我就轉向學習各種JavaScript框架,包括BackboneJS, AngularJS, 和 NodeJS,所有這些都是由各自領域的專家教導。為了完成課程,我進行了多個項目,這些項目讓我全面接觸到像ThreeJS和ReactJS這樣的新工具。對於我的論文項目,我建立了一個機器學習服務器來推薦啤酒,這既有挑戰性又很有趣。
與其他遠程學生的協作是一種非常有價值的經驗。我們密切合作,使用Floobits進行配對編程,並使用Google Hangouts進行每日站立會議。員工在HipChat上非常活躍,並且總是熱衷於提供幫助。講師們非常擅長教學,即使你不是電腦科學專業的人,他們也能使複雜的主題變得容易理解。我感謝他們為提供這種高質量的遠程課程而付出的努力。
我強烈推薦這個課程給任何對編程感興趣的人。它提供了五星級的學習體驗。
問題:
我們都愛啤酒。然而,今天我們面臨的是前所未有的選擇多樣性,讓我們感到不知所措和猶豫不決:我們下一個該喝什麼?
我的解決方案:
在我們的Hack Reactor論文計畫中,我構建了一個使用PredictionIO作為啤酒推薦引擎的機器學習服務器。廣義地說,該應用基於兩個主要策略:
內容過濾方法:這使用每種啤酒的各種特性來識別其性質。例如,我們利用breweryDB來確定特定啤酒的風格,其酒精度(ABV)和其國際苦味單位(IBU)。然後我們查詢數據庫以找到風格相似的啤酒。
協同過濾方法:這完全依賴於過去的用戶行為,特別是你的啤酒評級。它使用交替最小二乘法(ALS)算法的矩陣因子分解技術。我們通過從啤酒評級模式中推斷出來的因子向量來描述啤酒和用戶。啤酒和用戶因子之間的高度相關性將導致推薦。
使用矩陣因子分解的一個優點是其能夠加入附加資訊。當沒有顯性反饋(即,你的評級)時,我們可以使用隱性反饋,如你的瀏覽歷史和搜尋模式,來推斷出用戶偏好。
結果,OnTapp將你和適合你口味的啤酒配對起來。要獲得啤酒推薦並嘗試我們的示例,請訪問:http://ontappapp.com/.