一个专注于技术的IT男
Jacky
该用户没有分享资料
Jacky
Inception
九 6th
昨天去看了《Inception》,的确是部不错的科幻悬疑动作片,科幻与悬疑尺度适中,剧情紧凑,且不需要很高的智商也能看。
大场面绝对不会让你失望,雪地场景像是抄call of duty的,但不口否认效果非常棒!
好莱坞的特效真的超强,看的时候明明知道是特效做出来的,可就是不觉得眼前是假的东西。
相比之下国产或者港产片的特效太低级弱智了 –>《未来警察》《全城戒备》
这部片剧情方面也丝毫不枯燥,只恨145分钟片长太短了,意犹未尽。
看完电影还没懂的可以去豆瓣,早有高人解析梦境结构,穿越条件,剧情逻辑等等。
link的地址以斜线开头完全没有道理啊
八 25th
在内部搭一个类stackoverflow的系统,选了个基于django的开源的osqa,部署的时候陆陆续续发现源码里有点小问题,比如用户相关的很多link是这样写的:
<a href="/users/{{ user.id }}/{{ user.username|slugify }}/">{% gravatar user 32 %}</a>
这么搞的话link就指向了服务器的documentRoot,但是我不会把osqa这个应用直接挂在根域名下,这样的hard code我觉得挺愚蠢的。
其实同样的问题也存在我们的jsp里面,这个编程习惯不好,要改正其实也不难,手工做的话可以取得app的rootPath就行了,或者用url标签来帮我们自动搞定。(django&jsp都有的)
另一个Note:osqa第一次装的时候会把配置信息写到forum_keyvalue表里面,后面修改上传路径等的配置没有用,必须到数据库修改。
mysql> update forum_keyvalue set value="S'/upfiles/logo.png'
"> p0
"> ." where id=26;
mysql> update forum_keyvalue set value="S'/var/lib/osqa/forum/upfiles'
"> p0
"> ." where id=33;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from forum_keyvalue where id=33;
+----+----------------+-------------------------------------+
| id | key | value |
+----+----------------+-------------------------------------+
| 33 | UPFILES_FOLDER | S'/var/lib/osqa/forum/upfiles'
p0
. |
+----+----------------+-------------------------------------+
Something more:
Larry wrote 2 useful CSS related posts:
CSS – small tips (设置图像最大宽度,打印分页)
CSS – sprites, manage images (图像合并切割)
END
久疏战阵
八 13th
语言这玩意是熟能生巧的,久疏战阵必然导致一些遗忘,虽说我常写些小玩意玩玩,但也扛不住关于java语言细节的拷问,感觉中国人面试就喜欢的问这样的问题,抗议
昨天被问到的问题是这样的,父类A有一个方法申明抛出异常ExceptionA,继承自A的子类B能不能覆盖这个方法,且声明抛出ExceptionA和ExceptionB?
回答这个问题的时候我不是非常确定,认为可以,因为印象中看到过类似的代码。
面试官却说这个是不可以的,相信他这么说的原因肯定是因为众多java编程书里面都有这么一点,方法覆盖的时候,子类方法不能抛出比父类方法更多的异常
然而这句话对么?结束之后,抱着怀疑的态度,我就在eclipse试了一下,其实这句话不完全对。
第一种情况:子类抛出的是父类声明异常的子类,这句话不适用
class A
{
public void method() throws Exception{}
}
class B extends A
{
public void method() throws ClassNotFoundException, IOException{}
}
class C extends A
{
public void method() throws Exception, IOException{}
}
第二种情况:子类声明多出来的异常是unchecked Exception,这句话不适用
class A2Exception extends RuntimeException
{
}
class B2Exception extends RuntimeException
{
}
class A2
{
void method1() throws A2Exception{}
}
class B2 extends A2
{
@Override
void method1() throws A2Exception,B2Exception{}
}
第三种情况:唯有这种情况下,编译不能通过,这句话能够适用
class AException extends Exception
{
}
class BException extends Exception
{
}
class A1
{
void method1() throws AException{}
}
class B1 extends A1
{
@Override
void method1() throws AException,BException{}
}
追求完美引发的杯具
七 20th
项目需要,借了个BroadWorks Application Server新版的环境,上去之后发现很多“垃圾”数据
我们发SOAP消息创建出来的数据也不容易找到,就想弄一个“干净的测试环境”,然后我删除了一些“垃圾”数据,由于数据太多,加上上周五头痛,我还没来得及把数据都删除了
这周收到了BroadSoft Engineer和Manager的邮件,说上面的数据已经存了几年了,是多么有价值,还威胁我们说考虑是不是不再借这个测试环境给我们。。。
杯具呀,追求完美有时候也会惹麻烦,以后还是尽量十全九美吧,积累RP
惭愧,我也做了一回痴情的苹果粉丝
七 10th
我一直认为不管做谁的粉丝都是一件无聊的事情,浪费感情、时间、精力、钱
对于“当粉丝”这件事情的反感,基本上开始于看了湖南卫视超女中粉丝的疯狂情绪
我相信有信仰是好事,但是各种粉丝群体盲目的崇拜不是理性思维的我愿意接受的
惭愧的是,今天我也做了一回痴情的苹果粉丝
早上5:30起床,6:00出发坐地铁,不到7:00就到达陆家嘴国金中心苹果浦东店,然后等10:00的开业,委实不是件理性的事情
我也不太明白为何自己如此兴奋,以至于早上闹钟没响我就醒了
是何原因将我吸引至此呢?肯定不是为了苹果发一件T-shirt
难不成我也成了苹果粉丝一族?惭愧。。。
早上到的时候,天还不怎么亮,透明玻璃房里的苹果LOGO发光还能得到
在工作人员的引导下排入了广场最外圈的那队,看我前一圈的人有编号牌275,估计了一下我应该在500以内的。
排在我后面的是个秃顶的大爷,精神可嘉,早饭没吃路过看到人多,他也进来排队了,虽然怀疑过苹果的创立者是不是比尔盖茨,后来被一个中年大叔忽悠他是巴菲特,他自己还念叨这巴菲特好像是炒股的,然后中年大叔告诉他是巴菲特的另一个产业,他也就信了。不过这大爷还知道苹果不是Windows操作系统,真不错,佩服!
由于年龄的原因,他懂的不多,但是他还蛮好学的,问了不少搞笑的外行问题,逗得我们恨开心。
虽然他对苹果懂的不多,但是从他安心排队的这件事情上来看,比某些穿着打扮仪表堂堂却恬不知耻硬是插队的中年叔叔们,素质高了N倍。
排在我前面隔着两个人是一家三口,这个小女孩穿了件印有Apple Logo的衣服,在爸妈的怀里碗iPad上的植物大战僵尸,俨然是今天的明星,被好多镜头拍了N多次,貌似会上apple的新闻,还签了肖像使用协议,P.S.可能我的腿会出现在背景中,哈哈。
我用手机拍的这张,她妈用《独唱团》帮她挡太阳呢,话说今天看到好几个人都带了这本书,用来消遣排队时间。
Apple对顾客就是上帝这个理念今天展示得很不错,排队的时候会给你发水喝,主动收集空瓶子,再给你水;遇到突然下雨,这时候工作人员捧出好多有Apple Logo的雨伞发放,引起粉丝们一阵欢呼雀跃,有的人竟然收起自己带来的雨伞,向工作人员索要苹果的,工作人员也解释说伞要回收的,然后就听到好多人议论怎么能偷一把出去,当然偷这件事情不好,但是某种程度上反应了粉丝们对任何于苹果有关的东西的狂热心态。
这是一张下沉式广场四圈对的全景图,我从新浪找的,嘿嘿,发现了我的身影,还好我的衣服比较明显,哈哈!陈鎏也在上面某个点上,HSBC附近?我不太确定了。。。
开门前30分钟,苹果店员的加油呐喊口号,有点象传销组织上课培训那感觉,汗一个。。。
正式开门的时候,排第一个的哥们被抬进去了,我排在第四圈也很快就被放进去了,一路都有苹果店员跟你击掌欢迎,气氛好不热烈,沿透明台阶涉级而下,踏入地下一层的时候,会发给你一个贴有Apple封条的白色长方形盒子,里面有一件红色纪念T恤。
下图中另一款黑色T恤是街旁网签到赠送的,街旁的工作人员还拍了一张我手持T恤照片。
下图是在AppleStore浦东店才有的东方明珠版MAC包和iphone外壳,本想买一个iphone外壳的,结果一看400多,太贵了,属于奢侈品,以后淘宝克隆版吧!!!
差不多11点的时候,我从Apple店出来,找到街旁的工作人员,拿到了黑色的T恤,这时候外面排队的还是很多很多,估计还有1000+
中饭和女朋友参加她的同学聚会,下午在一个音响效果比较差的但是价钱还行的地方K歌,唉,很久没K歌了,忘记我的水准了,结果再一次发现我唱歌很难听,悲剧!!!
劳累一天后,8点到家,发帖到现在。。。
总结:苹果就像是邪教,种种疯狂,想不明白为什么
GoDaddy域名续费
六 30th
赶在7月1号之前续费了我这个域名,因为7月1号之后GoDaddy就要涨价了
续了两年,使用优惠码节省了6$,最后支付了15$
google搜索出来的第一个link超有用:Godaddy promo code and coupons list for 2010
tips: 要选取适合的优惠码,有的是百分比的,有的是注册域名打折的,有的是全场通用型的
还有就是信用卡网上美元支付很方便,就是很没安全感
用户的输入总是很有创意的
六 24th
有时候看似天衣无缝的代码遇到极具创意的用户是不得不低头的
且看下面一段简单的shell代码,检查用户输入如果是合法的文件,然后做一个copy
-r 测试文件存在且可读
-d 检测是否是目录
如果文件存在且可读而且不是目录,(这里不关心文件内容),那么这个输入是否合法呢?
#!/bin/sh echo "Enter the name of the new licence key file" echo "licencekeyfile=\c" read _afile if [ ! -r $_afile ] then echo "File does not exist" exit 1 fi if [ -d $_afile ] then echo "Licence key file must be a regular file" exit 1 fi #Copy new licenceKey to /var/sog/etc/.licenses/licenseKey if [ "$_afile" != "/var/sog/etc/.licenses/licenseKey" ] then cp $_afile /var/sog/etc/.licenses/licenseKey fi ...
用户如何break这个貌似天衣无缝的条件检测的?
Enter the name of the new licence key file licencekeyfile=/home/user/.licenses/lic*
如果 /home/user/.licenses/lic* 匹配多个文件的情况下,-r 和 -d 判断都能通过,接下来运行到cp 就杯具了
会报下面这个错:
cp: Target /var/sog/etc/.licenses/licenseKey must be a directory Usage: cp [-f] [-i] [-p] [-@] f1 f2 cp [-f] [-i] [-p] [-@] f1 ... fn d1 cp -r|-R [-H|-L|-P] [-f] [-i] [-p] [-@] d1 ... dn-1 dn
真的佩服用户输入的创意啊,为了避免匹配多个文件的情况,不得不用下面的代码来修bug
matches=`ls $_afile | wc -l | sed 's/ //g'` if [ $matches != 1 ] then echo "Your input of the new licence key file is not valid, it matches $matches files :" ls $_afile exit 1 fi
My Latest News in 7 Days Vacation
六 18th
Today is the fifth day of my 7 days vacation.
This was a great holiday for sure.
Having watched the E3 press conferences, I add N3DS to my wish list
Have to say Nintendo press conference was the most successful one compare to Microsoft and SONY.
In Nintendo World:
Still the Nintendo official games was the best ones in its consoles like always.
For me, I almost do not care about the 3rd party games, even Kojima’s Metal Gear Solid, because I can play Metal Gear Solid in another console with amazing screen effects. This point might change later since N3DS offers unique 3D experience now.
Reggie… gorilla …
Miyamoto was not so good at playing Zelda.
Iwata’s English sounds familiar…
In XBOX World:
The new XBOX 360 looks OK, kinda cool, but not still so attractive to me.
Maybe it was caused by the feeling that XBOX games always gets Windows version. (Maybe wrong)
As a matter of fact Microsoft press conference was also great, inherited the fantastic gaming show style, the great games heated the atmosphere.
The Project Natal renamed to Kinect, the full body motion sensor enables you to play with your body, no additional game controllers needed.
I can’t go to E3 to try the Kinect myself, so I have a little bit doubt about the gaming experience.
When will Microsoft design a portable game device?
In SONY World:
PS move did’t bring so much surprise for SONY fans. It is just learning from Wii, plus it gets a stupid light in the front. I don’t like that design.
No new console update, which is reasonable, PS3 is still the most advanced console till now.
In this 3D year, SONY played the card of 3D gaming which is reasonable too, but still feels like not so close to us.
In WorldCup season, everyone is excited, I do watched several matches.
Argentina was the brightest team with the world’s brightest stars.
The two Koreas did played tough role in the field. I think every opponent can never underestimate the two Koreans.
NBA Final champion finally won by LAKERS this moring!
Fall behind in the first three quarters, but take the lead in the last quarter.
This was a great show even in the NBA history.
Somthing goes on in my life:
Finally I get the driving license. For the last time the coach ‘Blackmailed’ us 60RMB for its paper fee.
We invite the coach to dinner for teaching us how to drive.
I got so tongue-tied that the coach also brings his concubine – 40-50 year old, heavy makeup, shows cleavage, looks good…
Our coach was definitely an ugly looking guy. Surprisingly unbelievable !!!
I matched a new pair of glasses, when choose the frame I just go for the good looking one, didn’t ask for the price.
When everything was decided, the price scared me a little.
After paid 1211RMB in cash desk, felt like my legs went weak.
This should be an impulsive buying, normally I do not do that.
At last I want to note one important thing, Helen and I choose 35度创意摄影 to take our wedding-photos.
Everything was decided, we just waiting for the day to film, will show photos when it’s ready.
Just I can’t get used to all my moustache shaved.
jQuery Tips : 给AJAX回调函数传递额外参数
六 5th
讨论这个问题基于如下场景:点击页面上某个按钮之后,触发click事件,事件处理函数内部发送一个AJAX请求,AJAX回调函数更新页面的某一个部分
具体到这个例子,我们希望button1和button2点击之后,用AJAX的方式取example.html的内容,然后动态更新页面的id=callbackdemo3的div
HTML如下:
<div id="callbackdemo1">
<button id="button1">ajax load1</button><br/>
</div>
<div id="callbackdemo2">
<button id="button2">ajax load2</button><br/>
</div>
<div id="callbackdemo3" class="log"></div>
<button onclick="$('.log').html('');">clear</button>
第一种做法:
适用于最简单的情况,也是比较直观的做法,就是在ajax回调函数中,使用jQuery的id选择器$(“#callbackdemo3″)得到id为callbackdemo3的div后更新其HTML内容
$("#callbackdemo1>#button1").click(
function load(){
$.get("example.html",{ 'param[]': ["var1", "var2"] },
function f1(data, textStatus, XMLHttpRequest)
{
$("#callbackdemo3").html(data);
}
);
}
);
第二种做法:
定义好一个接受额外参数的回调函数,然后在默认回调函数的内容调用这个预先定义好的回调函数
这样就能达到传递额外参数的目的了,较之第一种方法,此方法能比较方便的利用各个回调函数的上下文。
function callback_with_extraParam(data,param)
{
param.html(data);
}
$("#callbackdemo2>#button2").click(
function load(){
var extraParam = $("#callbackdemo3")
$.get("example.html",{ 'param[]': ["var1", "var2"] },
function f2(data)
{
callback_with_extraParam(data,extraParam);
}
);
}
);
对于额外参数的重要性,不妨看一个稍微复杂一点点的HTML情况,我们希望更新button3下面的那个div的HTML,这个div没有id,那么如何做呢?
<div id="callback_complexdemo">
<button id="button3">ajax load3</button><br/>
<button onclick="$('div',$(this).closest('div')).html('');">clear</button><br/>
<div></div>
</div>
当然使用#callback_complexdemo>div也是可以的,但是如果是更加复杂的HTML页面呢?如果没有id=callback_complexdemo呢?嵌套很深呢?
这种情况下,我们就需要有效利用上下文参数这个特性了。
在click的事件处理函数load()中,我们可以方便的获得当前元素的位置var whereAmI = $(this);
这个whereAmI是个jQuery对象,然后在AJAX回调函数f3中,我们利用whereAmI即被点中的这个button想办法去获得想要的div
这一行代码新手有的人看不懂:$(‘div’,$(whereAmI).closest(‘div’))
首先$closest_parent_div = $(whereAmI).closest(‘div’)即查询获得whereAmI最近的父div对象
然后$(‘div’,$closest_parent_div) 即在最近的父div对象这个上下文中,查找内部的div对象
$("#callback_complexdemo>#button3").click(
function load(){
var whereAmI = $(this);
$.get("example.html",{ 'param[]': ["var1", "var2"] },
function f3(data)
{
console.log(whereAmI);
$('div',$(whereAmI).closest('div')).html(data);
}
);
}
);
希望通过这个小例子,能让大家学会如何给AJAX回调函数传递额外参数,以及实用且重要的上下文参数。






