分類
讀書

17111513

我得意忘形,以至飲酒過量,本以為手頭威士忌極大豐富,卻意外發現有些吃緊了,便發明了長期享用威士忌的方法,介紹給諸位:準備好筷子、小冰塊,酒杯裡倒上威士忌三分滿,筷子夾冰浸酒,取出來吸吮,吸得只剩下冰的味道了,再次浸酒。期間冰溶於水,杯中酒不會減少,只會越來越乏味,這也沒辦法。喝到最後覺得沒意思了,端起酒杯一口悶,享受暢飲的快感。

分類
程序

時間比較




網頁版使用了moment.js。家裡的菲利普電飯鍋的預約功能需要輸入幾個小時後做好飯,而不是幾點幾分做好飯,每次都要扳着指頭數距離明天早上7點還有幾個小時。下面還有一個python版,可以放到termux里跑:

#!/data/data/com.termux/files/usr/bin/python
# -*- coding: utf8 -*-

#時間比較
import sys,datetime

#str轉換成datetime
def strTodaTime(s):
    if len(s)==19:
        return datetime.datetime(int(s[0:4]),int(s[5:7]),int(s[8:10]),
                                      int(s[11:13]),int(s[14:16]),int(s[17:19]))
    else:
        print("格式錯誤,--help查看幫助。")
        
#計算時間
def showTimeDuration(dtStr2='',dtStr1=''):
    if dtStr1 == '':
        datetime1 = datetime.datetime.now()
    else:
        datetime1 = strTodaTime(dtStr1)
    
    if dtStr2 == '':
        date2 = datetime.date.today() + datetime.timedelta(days=1)    
        time2 = datetime.time(7, 0)
        datetime2 = datetime.datetime.combine(date2, time2)
    else:
        datetime2 = strTodaTime(dtStr2)
        
    print(datetime2 - datetime1)

if __name__ == '__main__':
    if len(sys.argv) == 3 :
        showTimeDuration(sys.argv[1],sys.argv[2])
    elif len(sys.argv) == 2 :
        if sys.argv[1]=='--help':
            print('參數1默認是第二天早上七點,如2017-11-16T07:00:00。\n參數2默認是當前時間,格式同參數一。')
        else:
            showTimeDuration(sys.argv[1])
    else:
        showTimeDuration()
分類
讀書

17111413

我們口中所說的食物,實際上是其他生物的生命。

豬、牛自不必說,魚,哪怕稻米、菜葉說到根上也有生命。科學再如何進步,那也是改變不了的事實。

人類是依靠殺害其他生物存活的。

這大概誰都知道。

如果真有這樣的認知,面對擺放在自己面前的食物,就不應該輕易地評價好吃或不好吃。

我現在回想起來從前母親認為說食物不好吃很粗魯,是不是也有這個意味在裡面。

要吃雞肉,就要殺雞拔毛。要吃豬肉,就要殺豬切宰。這些場景時常就在人的近旁出現。大家都會有殺掉生物吃他們的實感。

只要有親眼看見雞的生命在自己手中消失的經驗,我想無論是誰,對吃這件事多少也會心存一些謙虛。

而現在,肉和魚變成只不過是陳列在超市貨架上的商品。

在這個意義上,現代人道德墮落了。

牛啊豬啊是如何被飼養,被宰殺,被加工成肉,最後變成我們的食物的,不只是用嘴巴說,更要讓小孩實地去親眼觀看,感受。

之前有一個想要自己養豬來讓小孩體驗這整個過程的老師。我覺得可行。有人批評說太殘忍,其實不對。殺豬如果殘忍的話,那人不殘忍就無法生存。

我認為以隱瞞事實的方式來培養小孩更加殘忍。

知道了事情的真相,孩子的內心會有所感悟。至於說什麼樣的感悟,可能每個小孩都有所不同。若被問到你為什麼要這麼做的時候,只要依據自己的想法表達出來就好。

--北野武《真相殘忍》

分類
讀書

17111320

……我還是很羨慕能用哪怕是一種外語自如交流的人。意大利人梅佐凡提,不僅能像說母語般流利地說出五十四國語言,還懂得六十國語言。丹麥的拉姆斯.克里斯蒂安.拉斯克教授更是了得,聽說他學會了兩百三十種語言。在我的想象里,他們一定長着火星人的臉。日本的普遍現象是,讀外文著作沒問題,一開口就出事,學的是啞巴外語。我父親早年赴歐時,與一位專攻德語的教師結伴同行。列車在法國境內行駛期間,此君一語不發,嫻靜的很,一到德國,耳聞目睹德語,頓時來了精神,又是買報紙,又是逮住車站員工與之對話。誰知他的德語德國人聽不懂,對方忍無可忍,說:「speak English?(講英語否?)」教師憤憤然,用德語咆哮道:「為什麼我非得說英語?」可惜對方還是聽不懂他說的。
分類
說說

17111020

蘋果X發售時間是15:00,阿迪達斯新鞋搶購發售時間是16:00,雙十一搶購是00:00。

我不是蘋果的用戶(索尼粉),也不是阿迪的用戶(迪卡儂粉),淘寶……

分類
方法

從深圳南山去香港趕早班飛機

香港是國際大都市,擁有更多的航線和更廉價的航班,所以我們出國基本都從香港走。下面是一些有用的網站:

  • 香港乘車易,官方提供的公共交通查詢網站,好用。
  • B3X,從深圳灣口岸到屯門市中心,首班車06:45,標稱15分鐘一班,高峰期經常彈性增加班次,票價11元,約24分鐘。
  • B3,從深圳灣口岸經屯門市中心到屯門碼頭,首班車06:55,20或30分鐘一班,票價11元,到屯門市中心約20分鐘,到屯門碼頭約40分鐘。
  • 富裕小輪時刻表,從屯門碼頭到東涌,通常25分鐘18元。
  • S56,從東涌碼頭到機場,首班車05:50,通常15分鐘一班,票價3.8元,約15分鐘。
  • E33,屯門市中心到機場,首班車05:00,十分鍾左右一班,票價13.9元,約70分鐘。還有一個A33,也是從屯門市中心到機場,票價27.7元,約80分鐘。

所以既然是趕飛機的話,早上需要約個出租車以在06:30到達關口,然後趕上06:45或06:55去屯門市中心的巴士,然後約07:20從屯門市中心坐E33去機場,加20分鐘堵車時間(有遇到過),09:00到達機場。如果飛機是10:00的,應該是沒問題的。

如果坐到屯門碼頭坐船,07:40到碼頭,趕上08:00的船,08:30到東涌碼頭,轉S56(或坐出租車(記得給小費))差不多也是09:00到達機場。

其實還有一種辦法,可以趕上更早的飛機,就是從蛇口碼頭直接坐船到香港機場,無奈搜了半小時,找不到蛇口碼頭的網站,只知道票價較貴,時間很短。

分類
方法

python selenium 常用命令記錄

記錄一些常用命令(待更新)。

from selenium import webdriver
#等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
#鍵盤
from selenium.webdriver.common.keys import Keys
#select元素
from selenium.webdriver.support.ui import Select

##配置並開啟火狐
firefox_profile = webdriver.FirefoxProfile()
#語言設置為zh-CN,en-US
firefox_profile.set_preference('intl.accept_languages','zh-CN')
#UA設置為iphone6 plus
firefox_profile.set_preference("general.useragent.override", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1")
#2關閉瀏覽器圖片
firefox_profile.set_preference('permissions.default.image', 2)
driver = webdriver.Firefox(firefox_profile=firefox_profile)  
#窗口大小
driver.set_window_size(414,736) 
#窗口最大化,可解決一些元素因窗口太小為顯示而無法點擊的情況
driver.maximize_window()
#頁面超時
driver.set_page_load_timeout(50)

##給火狐設置 http 或 socks 代理
firefox_profile = webdriver.FirefoxProfile()
proxy_ip = "127.0.0.1"
proxy_port = 18409
firefox_profile.set_preference("network.proxy.type", 1)
#http代理需要設置下面四行
firefox_profile.set_preference("network.proxy.http", str(proxy_ip))
firefox_profile.set_preference("network.proxy.http_port", int(proxy_port))
firefox_profile.set_preference("network.proxy.ssl", str(proxy_ip))
firefox_profile.set_preference("network.proxy.ssl_port", int(proxy_port))
#socks 代理只需設置下面兩行
firefox_profile.set_preference("network.proxy.socks", str(proxy_ip))
firefox_profile.set_preference("network.proxy.socks_port", int(proxy_port))
#可選
firefox_profile.set_preference("network.http.use-cache", False)
#可選
firefox_profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=firefox_profile)
#在無界面模式下運行 headless
from selenium.webdriver.firefox.options import Options as FirefoxOptions
options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(firefox_profile=firefox_profile,options=options)

##driver的完整初始化參數
webdriver.Firefox(firefox_profile=None, firefox_binary=None,
capabilities=None, proxy=None,
executable_path=DEFAULT_EXECUTABLE_PATH, options=None,
service_log_path=DEFAULT_SERVICE_LOG_PATH,
service_args=None, service=None, desired_capabilities=None,
log_path=DEFAULT_LOG_PATH, keep_alive=True)
#https://github.com/SeleniumHQ/selenium/blob/trunk/py/selenium/webdriver/firefox/webdriver.py#L44
##頁面操作
#打開頁面
try:
    driver.get("https://reportaproblem.apple.com")
except:
    try:
        #長時間沒加載完頁面時,可能是卡在了某個資源,按下Esc停止等待
        driver.find_element_by_xpath('//body').send_keys(Keys.ESCAPE)
    except:
        return 'fail'

#有時鏈接會打開新窗口,切換到新窗口
driver.switch_to_window(driver.window_handles[-1])
#當前頁面鏈接
driver.current_url
#當前頁面標題
driver.title

#等待元素出現
try:
    WebDriverWait(driver, 60).until(lambda the_driver: the_driver.find_element_by_xpath("//iframe[@id='aid-auth-widget-iFrame']").is_displayed())
except:
    pass
##定位元素
#frame
driver.find_element_by_xpath("//iframe[@id='aid-auth-widget-iFrame']")
#ID
driver.find_element_by_id("appleId")
#根據屬性定位元素
captchaInput = driver.find_element_by_xpath("//input[@placeholder='键入图中的字符']")
#獲取輸入框中的值
inputValue = captchaInput.get_attribute('value')
#向輸入框中寫入字符
captchaInput.send_keys("你好")
#清空輸入框
captchaInput.clear()
#按下Tab鍵
driver.find_element_by_xpath('//body').send_keys(Keys.TAB)

capDivImg=driver.find_element_by_xpath("//div[@class='form-cell']//img")
#獲取圖片的鏈接
imgSrc=capDivImg.get_attribute('src')

#點擊包含“繼續”的按鈕
driver.find_element_by_xpath("//button[contains(text(),'继续')]").click()
#根據CSS定位button
driver.find_element_by_xpath("//button[@class='button button-primary last nav-action']")

#點擊值為“步行”的選項
driver.find_element_by_xpath("//option[text()='步行']").click()

#定位一組元素
labels = driver.find_elements_by_css_selector("label.labelClass")
answerInputs = driver.find_elements_by_xpath("//input[@placeholder='答案']")
questions = []
for label in labels:
    questions.append( label.get_attribute('innerHTML') )

#等待包含特定字符的元素
WebDriverWait(driver, 3).until(lambda the_driver: the_driver
           .find_element_by_xpath("//p[@class='subtitle content-item tk-label'][contains(text(),'已超时')]")
           .is_displayed())

#獲取select元素
typeS = Select(driver.find_element_by_id("searchDropdownBox"))
#根據值來選中select元素
typeS.select_by_visible_text('行山')
#獲取元素顯示的文字
driver.find_element_by_xpath("//tr[@class='updateblock']//td[@class='timer']").get_attribute("innerText")
driver.find_element_by_xpath("//tr[@class='updateblock']//td[@class='timer']").get_attribute("innerHTML")

命令行啟動瀏覽器

firefox -width 1440 -height 960
google-chrome --window-size="1440,960"

本文更新於 2024/09/01。