如果遇到困難,別急著憂慮,也許這將成為又一次發(fā)現(xiàn)驚喜的機(jī)會巡揍。
復(fù)習(xí)OM,結(jié)識Markdown
本周迎來了三門課程的期末考油够。其中由德彪老師授課的OM考試可以說緊緊抓住了所有人的心蚁袭。學(xué)期伊始,李老師就用最簡單的方式石咬,解決了在職讀研最容易出現(xiàn)的“出勤低揩悄,專注少”問題,對此鬼悠,有同學(xué)生動地做出了一個微信表情
按照李老師的說法删性,期末試題必將繼續(xù)延續(xù)課堂上“扣人心弦”的緊張氣氛,充分考慮在難度和題量上降低大家的“合作能力”焕窝。
簡而言之蹬挺,“復(fù)習(xí)不到位,咱們重修見它掂!”
此話一出巴帮,全班都沸騰了,作為“老父親”的班長更是比大家還著急虐秋,很快找到我們幾個OM課活躍分子榕茧,希望我們整理一份比較全面的復(fù)習(xí)文檔幫助一下大家鞏固知識。本來學(xué)習(xí)這事情就沒有誰必須幫助誰的說法熟妓,但是班長這“老父親”的諢名也不是白叫的雪猪,在這一年半的時間里,為了班級起愈,他可謂是勞心勞力只恨,于是,這活就很自然地接了下來抬虽。
等我們幾人一拿出各自的筆記就發(fā)現(xiàn)了問題官觅,大家用來記筆記的軟件各不相同,有的是page阐污,有的是印象筆記休涤,有的是微軟Note,甚至還有原始的手寫筆記笛辟。所謂的整合筆記功氨,自然不是簡單地把幾個人筆記全部導(dǎo)出一份pdf拼接起來,而是要盡可能整出一份讓上課走神的人也能根據(jù)筆記大致摸清復(fù)習(xí)思路的“OM小百科”手幢。這就涉及到多個文檔的矯正捷凄、融匯、標(biāo)注和排版了围来。
一開始我們想到了使用“騰訊文檔”這一在線多人同步編輯工具跺涤。但是在多次導(dǎo)出成doc后匈睁,發(fā)現(xiàn)一些字符可能會變成奇怪的“口”字,而且同時編輯的人越多桶错,文檔格式越容易出現(xiàn)問題航唆。更為要命的是,OM涉及大量數(shù)學(xué)公式院刁,騰訊文檔中卻只能以圖片的方式添加數(shù)學(xué)公式糯钙,想要稍微做一些修改都極其困難。
最終退腥,我們能想到的最好方式就是大家通過語音會議對筆記進(jìn)行校對超营,然后將所有文檔發(fā)到一個人手中進(jìn)行“融合”,自然阅虫,這個融合任務(wù)就光榮地落在了我身上。
拿到這些五花八門的文檔時不跟,我感到一陣暈眩颓帝。用word整合,耗時太長窝革;印象筆記排版不錯购城,但是排好的文檔卻無法導(dǎo)出。仿佛手頭上拿了一袋米虐译,卻找不到煮飯的工具”癜澹現(xiàn)在這樣的緊張時刻,適合再去學(xué)習(xí)一個新工具嗎漆诽?
我這次的答案是侮攀,如果學(xué)習(xí)成本低,現(xiàn)學(xué)現(xiàn)用也不錯厢拭。
那一刻兰英,我想到了一個朋友多次推薦給我的工具——markdown,它是一種有點像代碼一樣的標(biāo)記語言供鸠,在產(chǎn)生之初就是為專注于內(nèi)容而不善排版的程序員而開發(fā)畦贸。可以理解為內(nèi)置了多種樣式的文本編輯方案楞捂,當(dāng)需要改變段落樣式時不需要用鼠標(biāo)拖拽文字或者右鍵點擊薄坏,僅需在文字前輸入一些指定的字符便可以做到。比如設(shè)置各級別標(biāo)題寨闹,只需要輸入若干個“#”符號即可胶坠,而加粗就在文字兩頭加上“**”即可。更有甚者鼻忠,這個編輯方案可以輸入幾乎所有的數(shù)學(xué)公式涵但,不管是分號杈绸、開方,還是微積分符號都輕而易舉矮瘟,這簡直就是我此次完成任務(wù)最理想的工具了瞳脓。
說干就干,我迅速將文檔整理分成了幾步:
- 利用印象筆記的OCR功能澈侠,識別手寫筆記里的內(nèi)容劫侧,轉(zhuǎn)為電子版文字。
- 將所有純文字保存到初始MD中
- 提取其他文檔中的圖片內(nèi)容哨啃,存放在制定文件夾
- 使用代碼烧栋,批量給已定的章節(jié)名稱添加MD標(biāo)記
- 使用MD語法將公式嵌入到筆記中
- 使用相對路徑把剩下的圖片全部粘到筆記中
- 對筆記進(jìn)行內(nèi)容調(diào)整
到了第七步時,我已經(jīng)完全不需要考慮格式問題了拳球,只需要放心大膽地給筆記增加各種“備注”即可审姓。所有的排版與格式,都交給了markdown解決祝峻。
而整個過程除了在輸入數(shù)學(xué)公式時稍微耽擱了片刻魔吐,其他操作都非常順暢。只用了一晚莱找,我就將markdown語法背得爛熟酬姆,并且把大家的筆記也整合完畢。當(dāng)我把markdown格式的文件發(fā)給大家時奥溺,能感受到大家眼前一亮的喜悅辞色。
在這之后,我也有所思考浮定。往日我用習(xí)慣了印象筆記相满,雖然也常遇到一些不方便的情況,卻想著學(xué)習(xí)其他文檔工具的成本過大桦卒,便懶于尋找新的解決方案雳灵。而這次借著復(fù)習(xí)OM,有幸接觸到了Markdown闸盔,一見如故悯辙,竟十分后悔沒早一些使用∮常可見我對于新事物的接受程度躲撰,是一個飛躍式的上升曲線。這也反過來說明一些商業(yè)問題击费,許多自以為“無法被取代”的商品拢蛋,也許顧客的忠誠度并沒有商家所想的那樣堅挺。這有點像社交軟件的更替蔫巩,當(dāng)我第一次聽到微信時谆棱,我是不削一顧的快压,因為從QQ切換到微信太麻煩;當(dāng)我第二次聽到微信垃瞧,內(nèi)心有了一點波動蔫劣;當(dāng)我第三次聽到微信時,終于開始嘗試將常用社交軟件換成微信个从。而最終由QQ到微信的切換脉幢,也完全沒有我想象的那樣痛苦和麻煩。
是否可以設(shè)想嗦锐,客戶對某一商品的忠誠度嫌松,一方面來自于客戶對品牌本生的信賴,另一方面來自于客戶心中虛高的“轉(zhuǎn)換成本”呢奕污?
讀英文萎羔,自編單詞學(xué)習(xí)卡
這段時間依然揪著些零碎時間啃《The Innovator's Dilemma》,不過和復(fù)習(xí)期末考一比碳默,進(jìn)度就有點催人淚下了外驱。
讀著讀著,依然發(fā)現(xiàn)一些問題腻窒。
我讀英文一直都有邊讀邊背單詞的習(xí)慣。用的工具是“扇貝單詞”磅崭,但是最近背單詞總會有一種背了忘儿子、忘了背的痛苦情況。一番自我審查下砸喻,我覺得是背的方法出了問題柔逼,雖然單詞都來自于平日的閱讀,但是因為詞匯量已經(jīng)有了一些基礎(chǔ)割岛,所以往往查的詞意都并不一定是單詞的常用詞意愉适,而網(wǎng)絡(luò)上流行的這些背單詞軟件又不會刻意標(biāo)明你需要的是哪個詞意。這就容易出現(xiàn)查個“save”癣漆,在書中是“除非”的意思维咸,結(jié)果到了扇貝單詞里,背到的意思依然是“安全”惠爽。結(jié)果就是癌蓖,閱讀做了,單詞背了婚肆,但是英語能力卻沒怎么提高租副。
毫不夸張地說,市面上90%的背單詞軟件我都嘗試過较性,包括“墨墨”用僧、“百詞斬”结胀、“蝸詞”、“流利說”等责循,能滿足我需求的軟件沒有一個糟港。
腦子一轉(zhuǎn),既然我好歹算個程序員沼死,不如自己編寫一個背單詞工具吧着逐。
想罷,我將目標(biāo)瞄準(zhǔn)了初中時代我使用過的紙質(zhì)背誦小卡片——卡片正面寫上單詞意蛀,背面寫上釋義耸别,閑時就掏出口袋背一背,由于每一張卡片都是自制的县钥,內(nèi)容十分精準(zhǔn)秀姐,所以效果不賴。
首先若贮,我在Github上找到了一個背誦小卡片的源碼省有,是Anki的源碼,能實現(xiàn)自定義卡片的復(fù)習(xí)安排谴麦。接著蠢沿,我的問題就只剩如何“制作卡片”了。
制作卡片最重要的就是收集信息匾效。單詞的信息來源很簡單舷蟀,就是Kindle,通過一陣摸索面哼,我找到了其數(shù)據(jù)庫文件的存放位置野宜,還意外發(fā)現(xiàn)其數(shù)據(jù)庫文件格式用的是sqlite,這意味著如果我使用python來分析它的數(shù)據(jù)魔策,連第三方模塊都能省下了匈子。通過讀取它的“vocab.db”文件,我發(fā)現(xiàn)查詞時的例句也一并存于其中闯袒。用下面這個語句虎敦,就可以把數(shù)據(jù)庫中最關(guān)鍵的時間戳、單詞政敢、單詞原型原茅、例句、書名盡數(shù)查出堕仔,并存于pandas的DataFrame中擂橘。
sql = """SELECT b.timestamp,a.word,a.stem,b.usage,c.title FROM words a,lookups b,book_info c WHERE c.id=b.book_key and a.id=b.word_key"""
with sqlite3.connect('vocab.db') as db:
data = pd.read_sql(sql,con=db)
這下,單詞卡的正面內(nèi)容有了摩骨,還差背面內(nèi)容通贞,即翻譯內(nèi)容朗若。
這回,我想到了兩種方式:
- 使用爬蟲技術(shù)去訪問柯林斯的官方在線頁面昌罩,通過讀取返回的html文檔哭懈,抓取出單詞的準(zhǔn)確釋義。
- 利用其他翻譯軟件的API接口茎用,直接獲取翻譯內(nèi)容
最終遣总,出于穩(wěn)定性考慮,我選擇了第二種方式轨功,用的是有道云的付費(fèi)查詢接口旭斥。這個接口不僅能提供單詞與例句的釋義,還包含單詞音標(biāo)和發(fā)音的媒體文件古涧。其官網(wǎng)提供了python調(diào)用的案例代碼垂券,復(fù)制粘貼再稍作修改即可,這里我僅取了音標(biāo)的美式發(fā)音羡滑。
def search_word(word):
q = word
data = {}
data['from'] = 'EN'
data['to'] = 'zh_CHS'
data['signType'] = 'v3'
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = q
data['salt'] = salt
data['sign'] = sign
response = do_request(data)
res_content = str(response.content, encoding = "utf8")
res_content_json = json.loads(res_content)
tword={}
tword["tword"]=''
tword["us-phonetic"]=''
if res_content_json["errorCode"]=="0":
try:
tword["tword"] = "<br>".join(res_content_json["basic"]["explains"])
tword["us-phonetic"]=res_content_json["basic"]["us-phonetic"]
except KeyError:
print("%s可能存在查詢異常菇爪。"%word)
else:
print("%s查詢完畢。"%word)
time.sleep(5)
return tword
再之后就簡單了柒昏,利用pandas把這些信息都拼好后凳宙,添加分隔符,直接輸出成txt文檔职祷。再導(dǎo)入到那個卡片代碼中氏涩,一個專屬于我個人的單詞學(xué)習(xí)卡組就做好了。
為了讓自己以后使用方便堪旧,我還設(shè)置了時間戳,以此避免單詞的重復(fù)添加奖亚,這樣即使不清空kindle數(shù)據(jù)庫淳梦,每次制作的卡片,也不會和過去的卡片重復(fù)昔字。
最終的卡片效果如下:
題外話:本篇簡書正是由Markdown語法寫成