
&referrer=)




文章來(lái)源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!722.entry













我是豆瓣的會(huì)員,又用的是MSN Spaces的BLOG,目前用得還不錯(cuò),都不打算退出。但是豆瓣提供的那個(gè)豆瓣秀服務(wù),在MSN Spaces上用不成
沒(méi)辦法,只能自己動(dòng)手了。實(shí)際效果,見(jiàn):http://spaces.msn.com/members/zbw25/
1、搞一個(gè)Custom HTML
2、在公司的服務(wù)器上,裝一個(gè)軟件,ImageMagick。下載地址:http://www.imagemagick.org/download/binaries/ImageMagick-6.2.5-4-Q16-windows-dll.exe
3、下載一個(gè)JMagick。下載地址:
http://www.yeo.id.au/jmagick/quickload/win-6.2.4/jmagick-6.2.4-1-IM-6.2.5.zip
4、將dll文件,copy到Windows的System32目錄下。將jar文件copy到某lib目錄下。
5、寫一個(gè)Servlet,代碼如下:
2
3 import java.io.*;
4 import java.text.*;
5 import java.util.*;
6 import javax.servlet.*;
7 import javax.servlet.http.*;
8 import java.net.MalformedURLException;
9 import java.net.URL;
10 import java.net.URLConnection;
11
12 import magick.ImageInfo;
13 import magick.MagickImage;
14 import magick.MontageInfo;
15
16 public class PutBooks extends HttpServlet {
17
18 //根據(jù)url,取得圖片的byte[]
19 private static byte[] getImageBytes(String url){
20 try {
21 return StreamUtils.read((new URL(url)).openStream());
22 } catch (Exception e) {
23 return null;
24 }
25 }
26
27 //根據(jù)url,取得文字
28 private static String getImageText(String url){
29 try {
30 URL u=new URL(url);
31 URLConnection uc=u.openConnection();
32
33 //要做足功夫,不然豆瓣就會(huì)拒絕你的請(qǐng)求
34 uc.setRequestProperty("Host","www.douban.com");
35 uc.setRequestProperty("Accept","*/*");
36 uc.setRequestProperty("Referer","http://www.douban.com/");
37 uc.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)");
38 uc.setRequestProperty("Pragma","no-cache");
39 uc.setRequestProperty("Cache-Control","no-cache");
40 uc.setRequestProperty("Connection","close");
41
42 //StreamUtils是一個(gè)輔助工具,就不再給出了
43 return new String(StreamUtils.read(uc.getInputStream()),"utf-8");
44 } catch (Exception e) {
45 return "";
46 }
47 }
48
49 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
50 //取得參數(shù)
51 String uid=req.getParameter("uid");
52 String n=req.getParameter("n");
53 String columns=req.getParameter("columns");
54 String select=req.getParameter("select");
55 String picsize=req.getParameter("picsize")+"";
56 String show=req.getParameter("show");
57
58 try {
59 //設(shè)置JMagick的ClassLoader,否則會(huì)報(bào)錯(cuò)
60 System.setProperty("jmagick.systemclassloader","no");
61
62 String str= getImageText("http://www.douban.com/service/badge/"+
63 uid+"/?show="+show
64 +"&select="+select
65 +"&n="+n
66 +"&picsize="+picsize
67 +"&columns="+columns);
68
69 int getSize=Integer.parseInt(n);
70 int colSize=Integer.parseInt(columns);
71 int len=getSize/colSize;
72
73 //申請(qǐng)一個(gè)數(shù)組
74 MagickImage images[] = new MagickImage[getSize];
75
76 //用最簡(jiǎn)單的辦法解析字符串,因?yàn)槎拱甑妮敵鍪枪潭ǖ?/SPAN>
77 String imgstr[]=str.split(".jpg");
78
79 for(int i=0;i<getSize;i++){
80 if(i<imgstr.length){
81 String picurl="";
82
83 //根據(jù)圖片大小的設(shè)定,解析有所不同
84 if(picsize.equals("medium")){
85 String temps[]=imgstr[i].split("http://www.douban.com/mpic/");
86 picurl="http://www.douban.com/mpic/"+temps[1]+".jpg";
87 } else {
88 String temps[]=imgstr[i].split("http://www.douban.com/spic/");
89 picurl="http://www.douban.com/spic/"+temps[1]+".jpg";
90 }
91 MagickImage image = new MagickImage(new ImageInfo(),getImageBytes(picurl));
92 images[i]=image;
93 }
94 }
95
96 //建立一個(gè)圖片組
97 MagickImage seqImage = new MagickImage(images);
98
99 //建立一個(gè)圖片框架
100 MontageInfo montageInfo = new MontageInfo(new ImageInfo());
101
102 //setGeometry(String)設(shè)置圖片的幾何特征
103 if(picsize.equals("medium")){
104 montageInfo.setGeometry("99x149+1+1>");
105 } else {
106 montageInfo.setGeometry("66x99+1+1>");
107 }
108
109 //NxM的一個(gè)表格
110 montageInfo.setTile(colSize+"x"+len);
111 montageInfo.setBorderWidth(0);
112
113 //得到一張組合后的圖片
114 MagickImage montage = seqImage.montageImages(montageInfo);
115 montage.writeImage(new ImageInfo());
116 montage.setMagick("JPG");
117
118 //輸出到byte[]
119 byte data[]=montage.imageToBlob(new ImageInfo());
120
121 //通過(guò)Servlet輸出
122 res.setContentType("image/*");
123 OutputStream toClient=res.getOutputStream();
124 toClient.write(data);
125 toClient.close();
126 }
127 catch (Exception ex) {
128 }
129 }
130 }
6、在MSN Spaces的Custom HTML中,寫以下HTML:

7、搞定,收工。
新家注冊(cè)成功,特此告示。


文章來(lái)源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!701.entry
軟件開(kāi)發(fā)的定義:“軟件開(kāi)發(fā),就是在一個(gè)受到限制的環(huán)境中,利用環(huán)境提供的可能性,修改或添加環(huán)境允許的各種狀態(tài),去滿足某一組需求。”1) 軟件開(kāi)發(fā)所處的環(huán)境,不僅僅是一個(gè)限制,同時(shí)也是一個(gè)可能性。軟件的能力,局限性與硬件的能力,比如說(shuō),如果計(jì)算機(jī)沒(méi)有喇叭,那么任何軟件都不能使計(jì)算機(jī)播放音樂(lè)。但是,另一個(gè)必須考慮的方面是,同樣有能力發(fā)聲的計(jì)算機(jī),要想使他播放音樂(lè),可能很容易,也可能很困難。用專業(yè)一點(diǎn)話來(lái)描述就是:“有些硬件的API設(shè)計(jì)很合理,有些則非常愚蠢。”由于我們對(duì)于軟、硬件的定義是一個(gè)連續(xù)體,因此,這個(gè)觀點(diǎn)不只是可以用來(lái)評(píng)價(jià)硬件API設(shè)計(jì),也可以用來(lái)評(píng)價(jià)語(yǔ)言、虛擬機(jī)、框架、平臺(tái)等等軟件的一個(gè)方面的優(yōu)缺點(diǎn)——是否有利于二次開(kāi)發(fā),這是一個(gè)重要的評(píng)價(jià)標(biāo)準(zhǔn)。
2) 修改、添加狀態(tài),比較拗口,其實(shí)就是編程的意思。在一個(gè)受限制的范圍內(nèi)編程,我們需要考慮很多東西,語(yǔ)法、接口、規(guī)范、內(nèi)存大小諸如此類,當(dāng)然,不同級(jí)別的,不同領(lǐng)域的編程,需要考慮的限制是有巨大差別的。軟件開(kāi)發(fā)的水平高低也就體現(xiàn)在,滿足同樣的需求,有些方法速度更快,有些方面卻要慢很多。而軟件開(kāi)發(fā)的方法的選擇,受到很多因素的影響:環(huán)境限制,經(jīng)驗(yàn)多少以及對(duì)于需求的了解程度等等。
3) 滿足需求,是啊!提起這個(gè)需求,每一個(gè)程序員都會(huì)有好多的苦水要倒出來(lái)。為什么滿足需求就這么難呢?因?yàn)椋瑢?duì)于程序員來(lái)說(shuō),那是另外一個(gè)世界(這是比較客氣的說(shuō)法),那些提需求的家伙根本不懂怎么說(shuō)話(這個(gè)說(shuō)法稍為激烈一些),那是一些不知道自己要什么的蠢貨(你遇到過(guò)這樣的用戶嗎?)作為程序員,我知道我有很多同行,非常苦惱于與客戶談需求這樣的任務(wù)——“至少電腦不會(huì)出現(xiàn)前后矛盾的邏輯錯(cuò)誤”——這就是做程序員的難處。如果我們不僅僅是抱怨的話,也必須承認(rèn),程序員是非常挑戰(zhàn)的職業(yè),一個(gè)好的程序員,不但得是軟件開(kāi)發(fā)領(lǐng)域的專家,還得是他開(kāi)發(fā)的那一類軟件所在領(lǐng)域的專家。但事實(shí)上,其他行業(yè)的人,只需要做一種專家就能夠混得很好了。
軟件開(kāi)發(fā)的實(shí)質(zhì),與軟件開(kāi)發(fā)的特征之間,還是有區(qū)別的。畢竟我的前一篇文章,是從技術(shù)的角度出發(fā)來(lái)看軟件開(kāi)發(fā),而現(xiàn)在我們的要討論的是從管理的角度來(lái)看待,它又有哪些特征呢?
軟件開(kāi)發(fā)的管理特征,在外行看來(lái),也就是一堆人在做個(gè)東西。但是,軟件開(kāi)發(fā)的獨(dú)特之處就在于,軟件開(kāi)發(fā)是由一堆獨(dú)特的人,以獨(dú)特的方式,做獨(dú)特的東西。我們先來(lái)看看軟件開(kāi)發(fā),遇到了哪些獨(dú)特的困難:
1、溝通困難:同為軟件開(kāi)發(fā),可能面對(duì)的思維模式,是完全不同的世界。比如二進(jìn)制的世界,函數(shù)的世界、邏輯的世界、過(guò)程的世界、對(duì)象的世界、二維表的世界等等等等。在這些不同的世界中開(kāi)發(fā)軟件,需要的思考方式、思維習(xí)慣都是不同的。開(kāi)發(fā)項(xiàng)目大到一定程度以后,不同的世界必須在一個(gè)完整的項(xiàng)目中和諧并存,這些差異,有時(shí)候就會(huì)帶來(lái)溝通障礙。再加上技術(shù)與需求世界之間的差異,溝通成為一個(gè)非常重要的工作。軟件開(kāi)發(fā)中的人與事,如何才能有效溝通,是一個(gè)非常重大的課題。
2、控制困難:程序員都是些怪人,至少都是些聰明人。要讓他們聽(tīng)話,很難啊。一個(gè)項(xiàng)目,要想順利進(jìn)行,程序員們能夠接受的,必須是“穩(wěn)定而合理的命令”。而在軟件開(kāi)發(fā)過(guò)程中,往往需求頻繁變動(dòng),領(lǐng)導(dǎo)層層疊疊,用戶花樣百出,計(jì)劃一改再改。程序員們經(jīng)常會(huì)接到朝令夕改的命令,而且還來(lái)自于那些莫名其妙,連說(shuō)話的邏輯都成問(wèn)題的家伙。如何才能知道,那些小伙子是在嚴(yán)格地執(zhí)行命令而不是在那里磨洋工呢?
3、評(píng)價(jià)困難:要控制,必須要能夠賞善罰惡,但是在軟件開(kāi)發(fā)中,何為善?何為惡?如何評(píng)價(jià)一個(gè)程序員的工作?我們當(dāng)然可以在項(xiàng)目計(jì)劃該結(jié)束的時(shí)候,再去問(wèn)他們,做完了嗎?但是如果他們那時(shí)候沒(méi)有完成,再要挽救就來(lái)不及了。必須在項(xiàng)目開(kāi)發(fā)過(guò)程中建立即使有效的反饋機(jī)制。以小而高密度的評(píng)價(jià)手段,來(lái)對(duì)開(kāi)發(fā)過(guò)程進(jìn)行較為準(zhǔn)確的控制,這一切,都必須建立在合理的評(píng)價(jià)機(jī)制的基礎(chǔ)上。但是,這樣一套評(píng)價(jià)機(jī)制,非常困難。什么才算是好的需求分析?好的代碼?好的設(shè)計(jì)?好的測(cè)試用例?沒(méi)有定論。舉個(gè)例子:兩三年前,在項(xiàng)目中加入EJB的成分,越多越好。現(xiàn)在呢?設(shè)計(jì)人員,隨時(shí)都可能被人指責(zé)濫用EJB。這風(fēng)向變得也太快了。
4、估算困難:這個(gè)在上一章我們也討論到了,軟件開(kāi)發(fā)與其它行業(yè)的一個(gè)重大區(qū)別,就在于對(duì)于軟件開(kāi)發(fā)的估算成本,不能忽略不計(jì)。想要估算變動(dòng)劇烈的項(xiàng)目的時(shí)間、人力、成本,簡(jiǎn)直就是不可能的任務(wù)。
怎么辦?
(未完待續(xù))
&referrer=)

文章來(lái)源:http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!693.entry
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | |||
15 | 16 | 17 | 18 | 19 | 20 | 21 | |||
22 | 23 | 24 | 25 | 26 | 27 | 28 | |||
29 | 30 | 1 | 2 | 3 | 4 | 5 |
常用鏈接
留言簿(20)
隨筆檔案
- 2006年10月 (1)
- 2006年7月 (1)
- 2006年6月 (3)
- 2006年5月 (2)
- 2006年4月 (3)
- 2006年3月 (9)
- 2006年2月 (1)
- 2006年1月 (9)
- 2005年12月 (7)
- 2005年11月 (20)
- 2005年10月 (3)
友情BLOG
- 我在MSN的Blog
- 范凱(Robbin)的BLOG
- 據(jù)說(shuō)不會(huì)有什么技術(shù)文章
搜索
最新評(píng)論

- 1.?re: AjaxOpenDoc源代碼下載
- 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
- --syt
- 2.?re: [導(dǎo)入]回顧我的BBS生涯——在網(wǎng)易的6年(1)
- 從來(lái)沒(méi)有深入的去想一想自己有什么信仰,雖然對(duì)工作和生活熱情,卻不知道是靠什么驅(qū)使的,想在你這里找到一些答案,能來(lái)給我一些指導(dǎo)?或者一些推薦的書籍。
- --greatghoul
- 3.?re: 還賬——1
-
是在搜索你博客主題的時(shí)候找到了你的站
感覺(jué)思考偏重于技術(shù)
呵呵 - --老鷹訓(xùn)練營(yíng)
- 4.?re: XP應(yīng)該是老板的最愛(ài),而不是程序員的首選
-
您好,我們公司是一家中國(guó)境內(nèi)的專業(yè)翻譯公司,從事各專業(yè)翻譯服務(wù),包括筆譯、口譯、同聲傳譯和同聲傳譯設(shè)備租賃等。我們需要招聘兼職翻譯、同傳譯員和外籍英文校對(duì)人員。
希望有機(jī)會(huì)合作. - --replica watch
- 5.?re: AjaxOpenDoc源代碼下載
- sdg
- --gsdg