很多人有很多的壞習慣,如:看電視,打麻將,喝酒,泡舞廳,他們也知道這樣的習慣不好,但是他們?yōu)槭裁床辉敢飧淖兡兀恳驗楹芏嗳藢幵溉淌苣切┎缓玫纳罘绞剑膊辉敢馊淌芨淖儙淼耐纯?/div>
你在生活中喜歡那些人呢?是那些整天愁眉苦臉,整天抱怨這個抱怨哪個的人,還是喜歡那些整天開開心心的人。如果你在生活中是那些抱怨的,消極的人的話,你一定要改變你性格中的缺陷。如果你不改變的話,你是很難適應這個社會的。你也是很難和別人合作的。
生活當中你要知道,你怎樣對待生活,生活也會怎樣對待你,你怎樣對待別人,別人也會怎樣對待你。所以你不要消極,抱怨。你要積極,永遠的積極下去,就是那句話:成功者永不抱怨,抱怨者永不成功
如果你想成功,一定要學會管理好這五個因素,為什么把情緒放在第一位呢?把健康放在第二位呢?是因為如果你再強的身體,如果你情緒不好,就會影響到你的身體,現(xiàn)在一個人要成功20%靠的是智商,80%靠的是情商,所以你要控制好你的情緒,情緒對人的影響是非常大的。人與人之間,不要為了一點點小事情,就暴跳如雷,這樣是不好的。
即使他們的確有毛病,那應該怎么辦呢?這時是不是應該給他們建議,在生活中你會發(fā)現(xiàn)有這樣一個現(xiàn)象,有人給別人建議的時候,別人能夠接受,但是有建議的時候別人就會生氣。其實建議的方式是最重要的,就是"三明治"贊美,建議,再贊美!
其實人和動物之間有很多的相似之處,動物的自我保護意識比人更強(嬰兒與小豬)但是,人和動物最大的區(qū)別在于,人會學習,人會思考。人是要不斷學習的,你千萬不要把你的天賦潛能給埋沒了,一定要學習,一定要有一個空杯的心態(tài)。我們象誰去學習呢?就是直接向成功人士學習!
你要永遠學習積極正面的東西,不看,不聽那些消極,負面的東西。一旦你吸收了那些有毒的思想,它會腐蝕你的心靈和人生 的。在這個知識經濟的時代里,學習是你通向未來的唯一護照。在這樣一個速度,變化,危機的時代,你只有不斷的學習你才不會被這個時代所拋棄,一定要有學習,歸零的心態(tài)。去看每一個人的優(yōu)點,"三人行,必有我?guī)熞玻ⅲ?/div>
人不成熟的第五個特征:做事情不靠信念,靠人言。
我們說相信是起點,堅持是終點。很多人做事不靠信念,喜歡聽別人怎么說。對自己所做的事業(yè),沒有100%的信心,相信和信念是兩個不同的概念,相信是看得見的,信念是看不見的。
信念是人類的一種態(tài)度,但是很多的人他們做事,不靠信念的,而是要聽別人怎么說,你要登上山峰,要問那些爬到山頂?shù)娜?,千萬不能問沒有爬過山的人。
這里不是說別人的建議不要去聽,你可以去參考,但是你要記住,你來做這個生意是為了實現(xiàn)你的夢想,實現(xiàn)你自己的價值。其他的人是不會關心你的夢想的,只有你自己關心你自己的夢想,只有你自己關心你自己能否真正的成功。這才是最重要的!
只要你的選擇是正確的,永遠不要在乎別人怎么說,以上的人不成熟的五個特征,你們自己去對照,那一個特征是你有的,你一定要在最短的時間里改正,只要你相信你自己能夠戰(zhàn)勝自己的不成熟,你就會逐漸的成長,成熟起來,你就會得到你想要的那種生活。你就會實現(xiàn)你時間自由、財務自由、精神自由的人生夢想!
posted @
2013-11-20 16:17 哈哈的日子 閱讀(240) |
評論 (0) |
編輯 收藏
設置了 scanPeriod 之后,過了好長時間,都不生效,后來 debug 代碼。發(fā)現(xiàn)了下面這段。
private volatile long mask = 0xF;
@Override
public FilterReply decide(Marker marker, Logger logger, Level level,
String format, Object[] params, Throwable t) {
if (!isStarted()) {
return FilterReply.NEUTRAL;
}
// for performance reasons, skip change detection (MASK-1) times out of MASK.
// Only once every MASK calls is change detection code executed
// Note that MASK is a variable itself.
if (((invocationCounter++) & mask) != mask) {
return FilterReply.NEUTRAL;
}
long now = System.currentTimeMillis();
synchronized (configurationWatchList) {
updateMaskIfNecessary(now);
if (changeDetected(now)) {
// Even though reconfiguration involves resetting the loggerContext,
// which clears the list of turbo filters including this instance, it is
// still possible for this instance to be subsequently invoked by another
// thread if it was already executing when the context was reset.
disableSubsequentReconfiguration();
detachReconfigurationToNewThread();
}
}
return FilterReply.NEUTRAL;
}
這行 if (((invocationCounter++) & mask) != mask) {
mask = 0xf,其實要每循環(huán) 0xf 次,也就是 15 次,才會去 check 一次是否要更新,也就是說,不管過了多久,如果沒到這 15 次,也不會去檢查是否更新配置。
也就是說,我多打幾次 log,配置文件就生效了。
@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted @
2013-11-12 14:25 哈哈的日子 閱讀(1615) |
評論 (0) |
編輯 收藏
spring security(下簡寫為 ss)控制的安全主要有兩方面,Web 和 Method Call,這兩個方面的權限控制有比較多的相通的設計,也有一些特別的功能。比如 Method Call 可以做 After Invocation 控制,而 Web 可以做 Ip 地址控制。
這里面有兩個最基本的概念:authentication manager 和 access decision manager,前者控制認證,后都控制鑒權。
1. 在 ss 的認證系統(tǒng)中,默認的實現(xiàn)幫助我們提供了三個概念,用戶(user),角色(authority,一般存 role)和組(group),三者的關系是,組、角色與用戶都是多對多關系,組和角色間沒關系,默認是不啟用組的。后續(xù),在 Acl 權限管理中,可以看到角色之間,是可以有包含(樹形?)關系的。
2. 在 ss 的鑒權系統(tǒng)中,明顯會比認證復雜得多。有 AccessDecisionManager, AccessDecisionVoter(前置), AfterInvocationProvider(后置), RoleHierarchy, SidRetrievalStrategy, LookupStrategy, PermissionGrantingStrategy, SecurityExpressionHandler, AclService, MutableAclService, AclCache 概念過多了,要一個一個解釋
a) 中心是 AccessDecisionManager,主要負責 AccessDecisionVoter 的管理,默認提供了3種實現(xiàn):1. AffirmativeBased 如果有任何一個投票器允許訪問,請求將被立刻允許,而不管之前可能有的拒絕決定。2. ConsensusBased 多數(shù)票(允許或拒絕)決定了結果,平局的投票 和空票(全是棄權的)的結果是可配置的。3. UnanimousBased 所有的投票器必須全是允許的,否則訪問將 被拒絕。
AccessDecisionManager 在用于 Web 和 Method Call 兩種情況下,可能是不一致的,因為功能也不一致。
b) Method Call 除了使用 AccessDecisionManager 進行權限判斷外,還可以增加 AfterInvocationProvider 來進行出口數(shù)據的判斷,默認提供了 3 種。
1) PostInvocationAdviceProvider: 需要提供一個 PostInvocationAuthorizationAdvice,默認實現(xiàn)只有一個,就是 ExpressionBasedPostInvocationAdvice,可以通過 spel 來進行權限判斷。注意 ExpressionBasedPostInvocationAdvice 中需要提供一個 MethodSecurityExpressionHandler,能夠創(chuàng)建出一個 MethodSecurityExpressionOperations,放到 spel context 中,供 spel function 調用,這樣的方式,在后續(xù)很常見。
2) AclEntryAfterInvocationProvider 和 AclEntryAfterInvocationCollectionFilteringProvider : 這兩種都差不多,主要依賴 AclService, ObjectIdentityRetrievalStrategy, SidRetrievalStrategy 來配合,檢查返回值的權限。Collection 版本的,可以把無權限的數(shù)據去掉,只留下有權限的數(shù)據。
c) RoleHierarchy 提供了角色之間的關系,提供了兩個實現(xiàn),一個是沒關系的,直接把 user 的 role 返回,另外一個是有繼承關系的。繼承關系實現(xiàn)挺有意思的,能夠處理多級的 include 關系,比較好用。
RoleHierarchy 的使用比較復雜,會被 AccessDecisionVoter, SidRetrievalStrategy, SecurityExpressionHandler 用到,SecurityExpressionHandler 又會被 AccessDecisionVoter 用到,所以還是有點兒混亂。
具體的說 SecurityExpressionHandler 會用到 PermissionEvaluator 和 RoleHierarchy,PermissionEvaluator 的一個實現(xiàn) AclPermissionEvaluator 會用到 SidRetrievalStrategy。
d) SidRetrievalStrategy 和 RoleHierarchy 的功能比較接近,比 RoleHierarchy 高一個抽象層次,功能上也有所區(qū)別,是從一個 authentication 拿到所有相關的 Sid(包括 Role(GrantedAuthoritySid) 和 User(PrincipalSid)),而 RoleHierarchy 只包括了 Role(GrantedAuthoritySid)的繼承關系。
e) LookupStrategy 通過 ObjectIdentity 和 Sid 把相關的 Acl 查詢出來??梢栽?LookupStrategy 擴展 Acl 和 Ace 的功能,比如在 Ace 上面加上時間的條件限制,就需要自己定義 LookupStrategy,把時間條件從數(shù)據庫查詢出來,并放到自定義的 Ace 當中。
但這件事情非常麻煩,因為默認實現(xiàn)的 BasicLookupStrategy 是個 Final 的類,所以只能自己直接實現(xiàn)接口,無法使用現(xiàn)有的功能。
LookupStrategy 會生成 Acl,而最終的權限驗證是由 Acl 完成的,如果想驗證帶時間條件的 Ace,需要給 Acl 設置自定義的帶有檢查時間功能的 PermissionGrantingStrategy,實際上,這個 PermissionGrantingStrategy 會首先設置給 LookupStrategy,LookupStrategy 在創(chuàng)建 Acl 的時候,再放到 Acl 中去。
f) SecurityExpressionHandler 能夠執(zhí)行 spel,得到是否可以訪問的結果,它的子類都是繼承自 AbstractSecurityExpressionHandler 的,有一個非常重要的方法是 SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, T invocation),創(chuàng)建一個 SecurityExpressionOperations 放到 EvaluationContext 中去,提供 spel 中執(zhí)行的方法實現(xiàn)。比如 SecurityExpressionOperations 的一個抽象實現(xiàn) SecurityExpressionRoot 中,就包含了大量的權限驗證方法,如 hasRole, hasPermission 等常用的功能。
g) AclService, MutableAclService, AclCache 概念比較簡單,AclService 是通過 LookupStrategy 查詢 Acl,自已可以查詢 ObjectIdentity 的父子關聯(lián)關系,MutableAclService 提供了修改的能力,AclCache 為 AclService 提供緩存,默認的實現(xiàn)了一個 EhCacheBasedAclCache。
3. ss 的鑒權模型 Sid, ObjectIdentity, Acl, Ace, Permission
a) Sid: 是中心,所有的授權會關聯(lián)在 Sid 上面,Sid 和之前的 Role Base Permission 會有些相同的地方,但也明顯不同,Sid 默認實現(xiàn)情況下,分為 GrantedAuthoritySid 和 PrincipalSid,其實就是 Role 和 User,通過 SidRetrievalStrategy 拿到一個 Authentication 的 Sid。
b) ObjectIdentity: 可以理解成 Resource,就是可訪問的目標資源,有 id 和 type 兩個字段,默認實現(xiàn)的 ObjectIdentityImpl 會直接調用目標 domainObject 的 getClass 和 getId 方法拿到兩個參數(shù)。在 PermissionEvaluator, AfterInvocationProvider 中,會用到 ObjectIdentityRetrievalStrategy 和 ObjectIdentityGenerator,ObjectIdentityRetrievalStrategy 會根據 domainObject 拿到 ObjectIdentity,然后使用 Acl 進行鑒權,ObjectIdentityGenerator 會在系統(tǒng)提供的不是 domainObject,而是 type, id 的時候,拿到 ObjectIdentity,然后進行 Acl 鑒權,這兩個接口有一個共同的實現(xiàn) ObjectIdentityRetrievalStrategyImpl,如果需要在 ObjectIdentity 進行新的抽象,需要用新的實現(xiàn),到得不同的 ObjectIdentity,比如將業(yè)務對象分類鑒權這樣的需求。
c) Acl, 每個 ObjectIdentity 最多對應一條 Acl,Acl 中包含了很多,包括 parental,說明 Acl 是有繼承關系的?其實不是,呵呵,是 ObjectIdentity 有繼承關系而已。有一個 ObjectIdentity,有很多 Sid,還有一個叫做 Owner 的 Sid,有從 LookupStrategy 傳過來的 PermissionGrantingStrategy,進行實際的鑒權,還有 AclAuthorizationStrategy 檢查有沒有權限進行 Acl security check。實現(xiàn)時間條件檢查,就擴展 PermissionGrantingStrategy。
為什么沒有 RoleHierarchy 或是 SidRetrievalStrategy 存在呢?是因為調用 Acl 進行權限檢查之前,已經把相關的 Sid 得到了,再給 Acl 的。
d) Ace, Permission: Ace 存儲 Sid, Permission,提供給 Acl 鑒權用。增加時間條件的話,最基本的,就是要在 Ace 中,增加時間條件字段。Permission 是用二進制存儲的,但默認實現(xiàn)的數(shù)據庫存儲并不是,是一個一條,存在數(shù)據庫里面的。
好吧,概念還是非常多的,不過鑒于權限控制本身就是個復雜的話題,ss 這些設計的我覺得已經非常好,也基本夠用了。
@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted @
2013-11-12 14:25 哈哈的日子 閱讀(658) |
評論 (0) |
編輯 收藏
Security.setProperty("ssl.SocketFactory.provider", "com.datayes.cloud.util.TrustAllSSLSocketFactory");
package com.datayes.cloud.util;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class TrustAllSSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public TrustAllSSLSocketFactory() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[]{tm}, null);
}
@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {
return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
}
@Override
public Socket createSocket(String host, int port) throws IOException {
return sslContext.getSocketFactory().createSocket(host, port);
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException {
return sslContext.getSocketFactory().createSocket(host, port, localHost, localPort);
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
return sslContext.getSocketFactory().createSocket(host, port);
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
return sslContext.getSocketFactory().createSocket(address, port, localAddress, localPort);
}
@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
@Override
public String[] getDefaultCipherSuites() {
return new String[0];
}
@Override
public String[] getSupportedCipherSuites() {
return new String[0];
}
}
posted @
2013-09-10 12:30 哈哈的日子 閱讀(1590) |
評論 (0) |
編輯 收藏
主要是遇到的一些問題吧,順便感謝一下幫助了我的人。安裝之前,聽說安裝正式環(huán)境的 OpenStack 挺麻煩的,所以,出發(fā)點就是安裝一個能測試使用的 Dev 環(huán)境就可以了,不求全,時間緊張,能用就行。所以,定位到 devstack(http://devstack.org),一鍵安裝 OpenStack
問題
1. 想用 CentOS 來著,沒原因,習慣了,后來發(fā)現(xiàn),devstack 默認支持 ubuntu,為了簡單,改用 ubuntu
2. 安裝過程中,需要大量的網絡下載,網速如果不快,挺急人的。
3. 安裝到 stack.sh 的 191 行,會報錯 [ERROR] ./stack.sh:191 g-api did not start,這個問題折騰了我好久,最后按照 https://answers.launchpad.net/glance/+question/231020 辦法解決了,非常感謝 Marc PINHEDE (pinhede-marc) ,但在 https://bugs.launchpad.net/devstack/+bug/1119428 里,有人說只要修改 /etc/default/locale LANG="POSIX",就可以了,其實我兩個都改了,也不知道是哪個產生了作用。但,第一種方法,需要安裝到一半,失敗了,才會有提到的 /opt/stack/glance/glance/notifier/notify_kombu.py 文件,但第二種方法,剛開始就可以嘗試,所以我如果下次安裝的話,會先把第二種配置修改好,如果安裝失敗了,再使用第一種方法繼續(xù)。
posted @
2013-08-06 10:19 哈哈的日子 閱讀(625) |
評論 (0) |
編輯 收藏
在 compile hadoop-common 的時候,提示 protobuf 出錯,查了一下,需要安裝 protobuf(是一個非 Java 的組件)
先到 homebrew 上找到安裝 homebrew 的方法 ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
然后不能直接 brew install protobuf,因為會安裝 1.5.0,也沒辦法編譯過的,我試了。
需要先 brew versions protobuf,然后 cd `brew --prefix`(我默認的是 cd /usr/local),直接招待剛才 brew versions 出來的那個 git clone 方法。
然后再次 brew install protobuf ,就安裝 1.4.1 了,繼續(xù) maven 就沒有問題了。
posted @
2013-07-24 13:24 哈哈的日子 閱讀(377) |
評論 (0) |
編輯 收藏
在 .bash_profile 中增加一行 export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 就可以了。
posted @
2013-07-24 13:20 哈哈的日子 閱讀(389) |
評論 (0) |
編輯 收藏
一直以來,總有人說 IDEA 這個 IDE 要比 Eclipse 好。中間也做過幾次嘗試,均告放棄。原因雖然各種各樣,但歸結起來,就是沒時間,畢竟熟悉一個 IDE 是要時間的,項目中很少會有這么輕松的時候,又不愿意過多使用業(yè)余時間,就這樣放下了。
最近有了一些時間,又把這東西拾起來看了看。不得不說,有些地方,做得還是很好的,當然,也有比 Eclipse 差的地方,我估計已經有無數(shù)人對比過了,我也不再比了,focus 在我的關注點上:“快捷鍵”
IDEA 因為使用的是原生的 Java 而不是 swt,對于平臺集成方面,不如 Eclipse。
比如在 Eclipse 中,可以設置 Option + B 這樣的快捷鍵,而 IDEA 不行,因為 Option + B 在 Mac 下是有輸出字符的。
為了解決這個問題,我到 KeyRemap4MacBook 中,把 Option + B 改成 Option + Left,同理,把 Option + F 改成 Option + Right
這時,在 IDEA 中比較常用的快捷鍵 Command + Option + B 就變成了 Command + Option + Left,成了后退了。
還需要在 KeyRemap4MacBook 中把 Command + Option + B 恢復成他自己,而且一定要放在 Option + B 前面,否則就沒用了。
最終,我得到了這樣的 private.xml
<?xml version="1.0"?>
<root>
<item>
<name>haha</name>
<identifier>private.haha</identifier>
<autogen>--KeyToKey-- KeyCode::P,VK_CONTROL, KeyCode::CURSOR_UP</autogen>
<autogen>--KeyToKey-- KeyCode::N,VK_CONTROL, KeyCode::CURSOR_DOWN</autogen>
<autogen>__KeyToKey__ KeyCode::F,VK_OPTION, KeyCode::CURSOR_RIGHT,VK_OPTION</autogen>
<autogen>__KeyToKey__ KeyCode::B,VK_OPTION,VK_COMMAND, KeyCode::B,VK_OPTION,VK_COMMAND</autogen>
<autogen>__KeyToKey__ KeyCode::B,VK_OPTION, KeyCode::CURSOR_LEFT,VK_OPTION</autogen>
<autogen>__KeyToKey__ KeyCode::D,VK_OPTION, KeyCode::FORWARD_DELETE,VK_OPTION</autogen>
</item>
</root>
posted @
2013-07-22 13:22 哈哈的日子 閱讀(332) |
評論 (0) |
編輯 收藏
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()) {
// load next
}
});
posted @
2012-12-19 18:10 哈哈的日子 閱讀(434) |
評論 (0) |
編輯 收藏
把這個文件放到 WEB-INF/classes 下面,隨便申請一個臨時 License 就可以了,會變成 Enterprice 的,其它信息保留。
posted @
2012-12-14 17:23 哈哈的日子 閱讀(553) |
評論 (0) |
編輯 收藏
今天想在 log 里加上當前機器的 ip,找了一些文檔,logback 支持 MDC(Mapped Diagnostic Contexts),可以很容易的把 ip 放到 log 中。
方法:
1. 先在代碼中加上一行 MDC.put("ip", InetAddress.getLocalHost().getHostAddress())
2. 然后在 logback 的 pattern 中加上 %X{ip} 即可
posted @
2012-12-14 14:58 哈哈的日子 閱讀(5139) |
評論 (0) |
編輯 收藏
vi /etc/yum.conf 將exclude=kernel* 去掉
posted @
2012-12-14 13:45 哈哈的日子 閱讀(379) |
評論 (0) |
編輯 收藏
1. 建立 winexe 環(huán)境,build winexe 并不麻煩,只不過官方文檔比較少,下載到 source 之后,也不知道要如何 build。后來找到一個文檔,介紹了過程
cd winexe-1.00/source4
./autogen.sh
./configure
make
./bin/winexe -U “<user>%<password>” //<windows system> cmd.exe
2. 如何遠程執(zhí)行,命令比較很簡單,但又是環(huán)境問題,我們在 windows 下面建立了一個 administrators 組的用戶,但無法執(zhí)行,后來打開了 administrator 這個用戶,終于命令可以執(zhí)行了。
我們的腳本有兩個步驟,1. 殺掉舊進程,2. 啟動新的進程,如下:
winexe -U "administrator%admin" //172.16.107.243 "taskkill /F /T /im java.exe"
cat < /dev/null | winexe -U "administrator%admin" //172.16.107.243 "java -jar c:\agent\job-agent.jar" >> /home/glodon/logs/agent243.log 2>&1 &
啟動新進程的時候,遇到了非常麻煩的事情,只能前臺執(zhí)行,nohup , & 這些完全不靈,如果 nohup,就會報錯,后來得到了一個方法,cat < /dev/null | winexe 解決了這個問題。
3. jenkins 執(zhí)行,jenkins 使用 Post Shell Plugin 來調用這個腳本,調用的時候一定要 nohup start.sh > /dev/null &,否則在執(zhí)行完之后,會發(fā)個 sign,會把進程結束掉。
注意,還必須要 > /dev/null,否則就會出錯,實在搞不明白原因。
弄好了這個,以后就方便了,心情也挺好。
posted @
2012-12-14 13:25 哈哈的日子 閱讀(459) |
評論 (0) |
編輯 收藏
呵呵,有圖有真相。
用 ipad 發(fā)的 imessage,挺有意思的,不知不覺,孩子已經這么大了。

@import url(/css/cuteeditor.css);
posted @
2012-11-21 16:24 哈哈的日子 閱讀(651) |
評論 (0) |
編輯 收藏
主要完成了下面4個工作
1. 創(chuàng)建一個本地的目錄結構,以存放 rpm 包
2. 啟動一個 apache,使這些文件能夠遠程訪問
3. 寫一個 spec,并且用 rpmbuild 做成一個安裝包,用來在機器上安裝新的 repository 位置
4. 使用 yum downloadonly plugin 將需要的 rpm 包放到本地目錄下,然后使用 createrepo 命令創(chuàng)建 metadata
本來是希望能有一個類似于 nexus 這樣的 proxy host server 將遠程的 package cache 下來,找來找去,也找到了一個 nexus yum plugin,但這個 plugin 只支持手工的 deploy rpm package 到 nexus 上面,不能做 proxy 方式的。
寫寫步驟和遇到的問題吧。
準備工作
- 安裝 createrepo, yum install createrepo
- 安裝 yum download only plugin, yum -y install yum-downloadonly
- 安裝 rpmbuild, yum -y install rpm-build
- 確認已經安裝了 apache nginx 之類的 http server
服務器步驟
- 首先是創(chuàng)建目錄結構,比如 mkdir -p /data/yum/centos/6/x86_64
- 先增加 chef 的源,rpm -Uvh http://rbel.frameos.org/rbel6
- 然后是通過 yum -y install rubygem-chef-server –downloadonly –downloaddir=/data/yum/centos/6/x86_64
- 這時,已經可以去掉 chef 的公共源了,rpm -e rbel6-release
- 創(chuàng)建本地庫的 metadata,createrepo /data/yum/centos/6/x86_64,還有一些參數(shù)可用,比如 -p, pretty xml, -d create sqlite database files
- 配置 apache,修改 /etc/httpd/conf/httpd.conf,修改 DocumentRoot 和 Directory 位置,改為 /data,并啟動 httpd -k start,也可以使用 chkconfig –level 3 https on,每次開機啟動
客戶端步驟
- 首先要制作安裝 repository 位置的 rpm 包
- 創(chuàng)建文件 haha.repo,放到 /root/rpmbuild/SOURCES 目錄下,這個是將來 copy 到客戶端的 /etc/yum.repos.d/ 目錄下的配置文件,內容為
[haha]
name=haha
baseurl=http://192.168.157.131/yum/centos/$releasever/$basearch/
enabled=1
gpgcheck=0
- 再創(chuàng)建文件 build spec 文件,放到 /root/rpmbuild/SOURCES 目錄下,是為了創(chuàng)建 rpm 包用的,haha.spec
Summary: haha
Name: haha
Version: 0.1
Release: 1
Source0: haha
Group: Applications/Internet
License: GPLv2+
URL: http://192.168.157.131/yum/
#BuildRoot: %{_tmppath}/%{name}-%{version}-root
BuildArch: noarch
%description
The haha yum repo
#%prep
#%setup -q
%install
mkdir -p $RPM_BUILD_ROOT/etc/yum.repos.d
install -m 0644 -p %{SOURCE0} $RPM_BUILD_ROOT/etc/yum.repos.d
%clean
rm -rf ${RPM_BUILD_ROOT}
%files
/etc/yum.repos.d/haha.repo
- 使用 rpmbuild -ba haha.spec,做出一個 rpm 包,位置在 /root/rpmbuild/RPMS/noarch 下面
- 制作一次 rpm 后,就可以一直使用了,rpm -ivh xxx.rpm 就可以了
參考了
1. 自建yum源與制作RPM安裝包yum源
2. yum只下載rpm包不自動安裝方法
3. Installing Chef Server 0.10 in RHEL 6
posted @
2012-11-07 21:39 哈哈的日子 閱讀(318) |
評論 (0) |
編輯 收藏
最近很少用鼠標了,觸摸板還是沒有鼠標靈活的,所以,很大希望都寄托在鍵盤上面了,快捷鍵就變成了優(yōu)先級最高的關注點。
Sublime Text 的快捷鍵總是零零散散記了一些的,今天才發(fā)現(xiàn),原來在 Preferences -> Key Bindings - Default 里面有全部的快捷鍵定義,以后不知道什么的時候,來看一眼就好了。
posted @
2012-10-26 15:47 哈哈的日子 閱讀(272) |
評論 (0) |
編輯 收藏
想了好久好久了,終于買到了。老婆送的生日禮物,老婆大人實在是太體貼了!
之前給朋友買了一個紅軸的機械鍵盤,只玩了幾把 dota 就給人了,也沒感覺到什么,反正我玩 dota 的水平提升了 10%,呵呵。
先說說拿到 hhkb 的感覺吧。
1. 個頭,比想象的還要小,60 鍵的小鍵盤實在是太小了,喜歡!
2. 鍵盤包,我還順便買了一個放 hhkb 的包,也是從日本帶回來的(最近因為某人釣魚的問題,搞得我怪緊張的),拿回來了才發(fā)現(xiàn),made in china,nnd,這東西國內居然還買不到!實在是無語
3. 鍵位,剛開始的時候,對 Delete 的位置很不習慣,大概用了一個小時左右,大概習慣了。Ctrl 的位置是之前一直在用的,所以非常舒服。比較糾結的是方向鍵,我之前還以為左邊會有一個 fn 鍵給我組合,沒想到 pro 沒有,只有 lite 才有,pro 只有右邊有一個 fn,只好在需要方向鍵的時候,手離開主鍵盤區(qū)了。
4. 手感,手感實在是無與倫比了,用了這個打字之后,就不太愿意回到 mac 的巧克力鍵盤上了,差別的確有些大。
5. 聲音,這玩意聲音還有點兒大啊,比我之前想得還要大一些,在辦公室的環(huán)境下,應該是不會影響到什么的,之前還是有點兒心虛,怕影響到別的,后來漸漸習慣了,發(fā)現(xiàn)別人根本就聽不到,也就慢慢的放心了。呵呵
工作中遇到問題吧
因為主要是 Java 開發(fā),所以 IDE 主要用的是 Eclipse,Eclipse 里面用 hhkb 有兩個比較麻煩的地方:
1. 經常要用到方向鍵,比如語法提示之后,需要用上下來選擇你要的那個,這個我用 keyremap4mac 把 Ctrl + N 和 Ctrl + P 直接改成上下了,可以用了。
2. Eclipse 經常要用到 Fx 鍵,這個相當麻煩,比如,切換 Editor 要 Cmd + F6,換 View 要 Cmd + F7,換視圖要 Cmd + F8,執(zhí)行最后執(zhí)行的程序要 Cmd + Shift + F11,這時候,我就會發(fā)現(xiàn),我已經有點兒搞不定了,沒辦法,我估計我要去修改 Eclipse 的快捷鍵了,因為那個 Cmd + F11 實在是太常用了。
遇到開心的事兒
在 Terminal 下面,用起來非常舒服的,這個鍵盤本來就是為了 vi , emacs 之類的東西存在的,在 Termial 標準的 Emacs 快捷鍵下,用起來非常好,基本不用想什么,就一切都很順利了。
在 OS X 系統(tǒng)下,大部分時候 Emacs 的快捷鍵 Ctrl + fbnpaek 這些快捷鍵都是好用的,也是比較舒服的原因之一,但 Option + fbd 這類的快捷鍵經常不能用,比較郁悶。
無論如何,這個鍵盤還是帶給了我不少的快樂,首先達到了 Happy 的效果,以后慢慢的來體會 Hacking 的感覺吧。
加油!
posted @
2012-10-13 09:33 哈哈的日子 閱讀(1750) |
評論 (1) |
編輯 收藏