之前看小众软件,发现一个游戏 http://www.appinn.com/vitamini-game/ ,看到游戏作者过来留言,还特意用google翻译成中文,说只要在twitter上follow他就可以拿游戏完整版。
我就试了下。当时是1月21日,很久没看到回信,就忘了,今天突然看到他的回信,说他女友在他们结婚前给了他一周时间,就像电影《The Boat that Rocked》。原文 My girl left me a week before our wedding :-) Just like in the "The Boat that Rocked" film. 这是他在解释为何这么晚才回信。不过这句话我有些不明白的是,这一周是指哪一周?他是否已结婚了?
好吧,先不管这些,他公布了游戏完全版的地址,并说游戏很快就会免费,以下地址可随意使用。
http://www.vitaminigame.com/friends/
另外,Google昨天发布了Google Buzz,可在邮箱和手机上使用。不过我的常用邮箱里没出现(日文界面)。另外2个邮箱出现了,这两个邮箱都选用的英文界面。Google的很多新功能都先出现在英文界面里,于是将日文界面换成英文的,不过Buzz仍然没出现。想必很快就会有人如何调出Buzz了吧。
如同twitter一样,Buzz对我意义也不大,仅是尝鲜而已……
昨天
SAE第二批邀请码申请和发放开始 (
已结束)
http://blog.sae.sina.com.cn/?p=50
今天申请了数次,终于得到了邀请码!
申请地址
http://sae.sina.com.cn/?m=inviterequest
为了更快申请到,有些地方时必须注意的
1.个人博客这一栏不是没有红星标记,不是必须的,但不写,基本上得不到
申请得早不一定能得到邀请码。
我昨晚9点多申请过一次,没写blog,今天看到别人今天申请的都收到邀请码了,就知道希望不大。仔细看了下,那些人都有自己的网站,开发过web。
有Web开发经验者优先发放就是由blog体现出来的。另外,blog和web没关系也可以写,譬如我的这个blog就没几篇和web有关的。
虽然我用过GAE,但相关内容没写在blog上,一样获得了邀请码。
我总共申请了4次,主要不同点就在于个人博客那一栏。
昨晚9点多申请了第一次。没写blog,没收到邀请码。
第二次没写blog,没收到邀请码。
第三次blog地址写错,没收到邀请码。
今天下午3点多,申请了第四次,写上blog,6点半左右收到了邀请码邮件。
2.邮箱申请过一次后,就没法再申请了,如果想重新填写申请内容,就得换个邮箱。
3.邀请码申请和注册时的内容可以不同。
4.必须要有手机,接收短信验证码。
以上。
祝各位喜欢尝鲜者能顺利申请到邀请码!
hax01tips
注意:本文之后极有可能设为私有
题目
hax01
Your mission is the following: Simply enter a URL into the box. The domain of the URL must be or end with 'nasa.gov'. The URL will be fetched right away. The content returned should contain the string: "2200178118" in the first 10 Kbytes of data. 404/403/etc error pages are not accepted. Remember, do not do anything illegal. Make sure you type the right URL, do not guess.
Hint: google is your friend.
http://google.com/search?q=site:nasa.gov
当时我的思路是找出所有以nasa.gov结尾的域名,然后遍历这些网址。之后我真的写了个python程序,取了google检索出来的前1000个页面,取出域名,保存起来,去除重复的有500多个。接着,读取html页面,判断是否还有字符串。其间,遇到了个网速的问题,超时后经常会跑到电信的114搜索上去。验证了170多个页面后,我发现自己理解错题目了,这里的URL并不是指URL以nasa.gov结尾,而是指URL的域名以nasa.gov结尾。我无语了,这相当于域名下的所有网页都有可能。这个工作量巨大得几乎是不可能的。暂时中止。
以下代码可供参考,修改了n次,可能现在已经没法直接运行。
2.5
1from urllib import FancyURLopener
2import urllib2
3import sys
4import re
5import locale
6"""
7class MyOpener(FancyURLopener):
8 version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)Gecko/20071127 Firefox/2.0.0.11'
9
10res = re.compile(r'(([a-zA-Z]+\.)+nasa.gov)')
11
12myopener = MyOpener()
13url = 'http://www.google.co.jp/search?&num=100&as_qdr=all&as_occt=any&as_sitesearch=nasa.gov'
14li = []
15for i in range(0, 10):
16 url = url + '&start=' + str(i*100)
17 page = myopener.open(url)
18 str1 = page.read()
19 for aItem in res.findall(str1):
20 if not aItem[0] in li:
21 li.append(aItem[0])
22"""
23with open('nasa.txt') as li:
24#li = open('nasa.txt')
25#print li.count
26 m = 0
27 for a in li:
28 #print 'http://'+a
29 m = m + 1
30 print m
31 url = a
32 req = urllib2.Request(url)
33 try:
34 response = urllib2.urlopen(req)
35 the_page = response.read()
36 with open(url + '.txt') as nasa:
37 write(the_page)
38 if the_page.find(r'daohang.118114.cn') <> -1 :
39 print '114'
40 elif the_page.find('2200178118', 0, 10240) <> -1 :
41 print url
42 else :
43 print ''
44 except urllib2.URLError, e:
45 print e.reason
46
47"""
48#gUrl = 'http://www.google.co.jp/search?hl=ja&source=hp&q=site%3Anasa.gov&lr=&aq=f&oq='
49#google = urllib.urlopen(gUrl)
50#str = google.read()
51for str in open('sitenasa_gov.htm'):
52 for aItem in res.findall(str):
53 print aItem[0]
54
55#print str
56str = 'www.xxx.nasa.gov/wwf.nasa.gov'
57
58"""
59
60
61#2200178118
62
3.1
1from urllib.request import FancyURLopener
2import urllib
3import sys
4import re
5import locale
6"""
7class MyOpener(FancyURLopener):
8 version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)Gecko/20071127 Firefox/2.0.0.11'
9
10res = re.compile(r'(([a-zA-Z]+\.)+nasa.gov)')
11
12myopener = MyOpener()
13url = 'http://www.google.co.jp/search?&num=100&as_qdr=all&as_occt=any&as_sitesearch=nasa.gov'
14li = []
15for i in range(0, 10):
16 url = url + '&start=' + str(i*100)
17 page = myopener.open(url)
18 str1 = page.read()
19 for aItem in res.findall(str1):
20 if not aItem[0] in li:
21 li.append(aItem[0])
22"""
23fiPath = sys.argv[1]
24with open(fiPath) as li:
25#li = open('nasa.txt')
26#print li.count
27 m = 0
28 for a in li:
29 #print 'http://'+a
30 m = m + 1
31 #print m
32 url = a
33 req = urllib.request.Request(url)
34 try:
35 response = urllib.request.urlopen(req)
36 the_page = response.read()
37 with open(url[7:-1] + '.txt', 'wb') as nasa:
38 nasa.write(the_page)
39 nasa.flush()
40 if the_page.decode('utf8').find(r'icc.qonc.com') != -1:
41 print('114')
42 elif the_page.decode('utf8').find('2200178118', 0, 10240) != -1:
43 print(url)
44 else :
45 print('')
46 except urllib.error.URLError as e:
47 print(e.code)
48 except UnicodeDecodeError as UDE:
49 print(UDE)
50
51"""
52#gUrl = 'http://www.google.co.jp/search?hl=ja&source=hp&q=site%3Anasa.gov&lr=&aq=f&oq='
53#google = urllib.urlopen(gUrl)
54#str = google.read()
55for str in open('sitenasa_gov.htm'):
56 for aItem in res.findall(str):
57 print aItem[0]
58
59#print str
60str = 'www.xxx.nasa.gov/wwf.nasa.gov'
61
62"""
63
64
65#2200178118
66
而后,过了大概几个月,变换思路,解决,意外的简单……
事实上,只要向服务器提交数据,一般服务器也会将该数据返回到页面上。该题最后的hint不是让我们来搜该域名,而是告诉我们怎样在google.com的页面上显示我们想要的数据。譬如
http://www.google.co.jp/search?q=2200178118 该页面的前10K里应该包含了该字符串。接下来,我们只需要在nasa.gov上找个页面提交数据就行了。
over
以前曾写过PL/SQL,当时还是第一次接触,什么都不明白
顺手写了篇 《Oracle内建包UTL_FILE使用说明 》的博文,没想到还被转载(譬如百度搜索utl_file,第一篇就是,不过没写我的出处,可惜……)
http://www.blogjava.net/liwei/archive/2007/01/10/92902.html
当时项目做完就没接触PL/SQL了,时隔2年半,又要写PL/SQL了,而且遇到的问题居然还是和UTL_FILE有关。
于是上网找了些资料
http://www.shift-the-oracle.com/plsql/utl_file/utl_file_dir.html
http://www.shift-the-oracle.com/plsql/utl_file/create-directory.html
日文的,不得不说,日本人做事实在是认真,资料非常详细,看完之后,我就觉得我是高手了,可以整理点东西出来教别人了……哈哈
废话少说,开始
现在一般跑UTL_FILE.FOPEN时会出现ORA-29280的错误,出现这个错误主要有2个原因
1.文件夹没有读写权限
2.文件夹没有进行Oracle读写配置
注意:这里讨论的Oracle是在Unix类(包括linux,Solaris等)主机下安装的。
对于第1个原因,直接设定文件夹权限即可,譬如
# chmod 700 /u05/file_storage/recv_dir
这个没啥好说,不是我要说的重点。
第2个原因,可以好好说说。
Oracle进行文件夹读写配置有2种方式
1.设定UTL_FILE_DIR
2.使用DIRECTORY 对象
1.设定UTL_FILE_DIR
Oracle 8i之前,貌似没有DIRECTORY这个概念,所以只有一种方式。
编辑 initORACLE_SID.ora 文件(ORACLE_SID是个变数,因DB设定有所不同),添加
UTL_FILE_DIR='/u05/file_storage/recv_dir','/u05/file_storage/send_dir'
即可。
Oracle 9i之后还可以利用ALTER SYSTEM 命令进行设定
ALTER SYSTEM SET
UTL_FILE_DIR='/u05/file_storage/recv_dir','/u05/file_storage/send_dir'
SCOPE = SPFILE ;
也可以用命令来确认设定是否正确
SELECT NAME, VALUE FROM V$PARAMETER2 WHERE NAME='utl_file_dir' ;
注意:Oracle 8i 之后的DB不推荐使用这种方式,主要是情报泄露方面,日本很在意这个。
另外,让所有文件夹有效可使用('*')。
这种方法不方便的就是,设定了之后必须重启Oracle才能使设定有效。
使用例
CREATE OR REPLACE PROCEDURE RIVUS.UTL_FILE_DIR_WRITE_SAMPLE
AS
vHandle UTL_FILE.FILE_TYPE;
vDirname VARCHAR2(250);
vFilename VARCHAR2(250);
vOutput VARCHAR2(32767);
BEGIN
vDirname := '/u05/file_storage/send_dir'; -- 绝对路径
vFilename := 'test.txt';
vHandle := UTL_FILE.FOPEN(vDirname ,vFilename,'w', 32767);
vOutput := '利用 UTL_FILE_DIR 进行的文件处理';
UTL_FILE.PUT_LINE(vHandle, vOutput);
UTL_FILE.FCLOSE(vHandle);
EXCEPTION WHEN OTHERS THEN
UTL_FILE.FCLOSE_ALL;
RAISE;
END;
2.使用DIRECTORY 对象
从Oracle 9i 开始UTL_FILE就能使用CREATE DIRECTORY了。
首先文件夹必须存在,要有权限,我就不多说了。
然后做成DIRECTORY 对象
CREATE DIRECTORY recv_area AS '/u05/file_storage/recv_dir';
CREATE DIRECTORY send_area AS '/u05/file_storage/send_dir';
当recv_area已存在时,会出错,可使用下面这句
CREATE OR REPLACE DIRECTORY recv_area AS '/u05/file_storage/recv_dir';
接着,赋予用户该DIRECTORY 对象的读写权限
GRANT READ ON DIRECTORY recv_area TO user_name ;
GRANT WRITE ON DIRECTORY send_area TO user_name ;
同时读写权限
GRANT READ,WRITE ON DIRECTORY recv_area TO user_name ;
做好这些就可以确认了
SELECT * FROM ALL_DIRECTORIES ;
看到自己做成的DIRECTORY了吧
这里需要注意的是,当初CREATE DIRECTORY的时候是小写recv_area,现在这里是大写RECV_AREA
之后利用该DIRECTORY 对象时必须用大写。
还有,该DIRECTORY对象不包括上层目录(这个是当然的),也不包括子目录。
要利用子目录需要再定义一个子目录的DIRECTORY对象。
使用例
CREATE OR REPLACE PROCEDURE RIVUS.CREATE_DIR_WRITE_SAMPLE
AS
vHandle UTL_FILE.FILE_TYPE;
vDirname VARCHAR2(250);
vFilename VARCHAR2(250);
vOutput VARCHAR2(32767);
BEGIN
vDirname := 'SEND_AREA'; -- 必须用大写
vFilename := 'test.txt';
vHandle := UTL_FILE.FOPEN(vDirname ,vFilename,'w', 32767);
vOutput := '利用CREATE DIRECTORY进行的文件处理';
UTL_FILE.PUT_LINE(vHandle, vOutput);
UTL_FILE.FCLOSE(vHandle);
EXCEPTION WHEN OTHERS THEN
UTL_FILE.FCLOSE_ALL;
RAISE;
END;
到此为止,问题应该解决了。