之前看小眾軟件,發現一個游戲 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
1
from urllib import FancyURLopener
2
import urllib2
3
import sys
4
import re
5
import locale
6
"""
7
class 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
10
res = re.compile(r'(([a-zA-Z]+\.)+nasa.gov)')
11
12
myopener = MyOpener()
13
url = 'http://www.google.co.jp/search?&num=100&as_qdr=all&as_occt=any&as_sitesearch=nasa.gov'
14
li = []
15
for 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
"""
23
with 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()
51
for str in open('sitenasa_gov.htm'):
52
for aItem in res.findall(str):
53
print aItem[0]
54
55
#print str
56
str = 'www.xxx.nasa.gov/wwf.nasa.gov'
57
58
"""
59
60
61
#2200178118
62

3.1
1
from urllib.request import FancyURLopener
2
import urllib
3
import sys
4
import re
5
import locale
6
"""
7
class 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
10
res = re.compile(r'(([a-zA-Z]+\.)+nasa.gov)')
11
12
myopener = MyOpener()
13
url = 'http://www.google.co.jp/search?&num=100&as_qdr=all&as_occt=any&as_sitesearch=nasa.gov'
14
li = []
15
for 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
"""
23
fiPath = sys.argv[1]
24
with 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()
55
for str in open('sitenasa_gov.htm'):
56
for aItem in res.findall(str):
57
print aItem[0]
58
59
#print str
60
str = '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.tkk7.com/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;
到此為止,問題應該解決了。