中二李國慶

  本文由蓋飯特寫工作室出品,原載於公眾號「蓋飯人物」,微信號:gffeature”

  文/唐婉婷

  編輯/席驍儒

  來源: 蓋飯人物 ThePeople(ID:gffeature)

  1986 年,北大還是個在校規里明令禁止學生談戀愛的地方。

  這也可以理解。畢竟,那年頭哪怕穿個喇叭褲上街,也會換來路過的朝陽大媽們一句“不男不女,顛倒乾坤”的鬥爭腔式指責,臨走再啐上一口:呸,流氓。

  就是在這種時代環境里,時任北大學生代表大會會長的李國慶大咧咧地抱着一沓信封站在女生宿舍樓下,時不時落落大方地向路邊自以為偽裝得很好的情侶們遞上一個。信封上明晃晃印着幾個大字——“北京高等教育思想政治研究會”。

  路過的情侶看到這幾個大字,心裏暗暗犯怵,忐忑不安地接過打開一看,臉頓時憋得通紅。

  裏面裝的是避孕套。

  Part 1

  業內大嘴        

  噹噹剛上市的時候,李國慶與網友打賭“噹噹股價如果跌破發行價 16 美元,我找驢踢我腦袋。” 後來噹噹網股價跌破 16 美元。李國慶在深圳衛視的《百佬會》上說“我現在認,願賭服輸。大家誰來踢我一下?”

  中國自古有直男格言:兄弟如手足,妻子如衣服。對李國慶來說,公司大權越來越多落在妻子手中,老婆已經不是衣服,簡直是衣食父母。而兄弟呢,如果不是連續兩次挺身而出插兄弟兩刀,公眾都快忘了江湖上還有一個懟天懟地的李大嘴了。

  第一刀插在剛向婦聯道完歉的俞敏洪身上。他覺得俞敏洪“中國是因為女性的墮落導致國家的墮落”的觀點沒毛病,企業家嘛,就要敢於說出自己的真實想法。這話說完后,大家都沒怎麼較真,畢竟李國慶也不是第一次公開吐槽自己這個北大學弟,事就這麼過去了。

  還沒低調幾天,第二刀又穩穩插在剛躲過一劫的劉強東身上。李國慶說他這次只是婚外性,不是情,沒嫖娼,沒強姦,對自家太太和社會公序良俗都沒什麼損害,“雖殺風景,但劃得來”。還不忘順便傳授了一把早年的騙炮經驗。

  如果兄弟真是手足,那李國慶這就叫自殘,幸虧男人的兄弟和女人的閨蜜一樣,大都是說說而已。無論俞敏洪還是劉強東,在此之前,李國慶和這二位都多有齟齬。本意大概是想通過說反話再落井下石一波,沒成想,這回卻玩脫了。

  沒人關心他說話的動機,輿論反饋幾乎是罵聲一片。

  李國慶的微博個人簡介是“我口無遮攔,多有得罪,請海涵”,這話不是自謙。不僅他自己清楚,太太俞渝也看得明白。俞渝曾經說,“李國慶就是一個性情中人”,然後繼續解釋,這個“性情中”是“比較二”的意思。

  混到自家太太能把話說得如此直白的地步,那肯定是因為李國慶口無遮攔已經不是一天两天了。

  2010 年的 12 月,噹噹以 B2C 第一股在紐交所成功敲鐘上市。慶功宴上,投資人老虎基金、承銷投行摩根士丹利和俞渝三方觥籌交錯,說著漂亮的場面話,沒人對李國慶異樣的情緒有覺察,但後來他自己說,“當時一看見投行的人就氣得手抖”。

  李國慶為啥這麼生氣?當然因為覺得自己被投行坑了。上市之前,摩根士丹利將噹噹的股價定為 16 美元每股,一直勉強維持着噹噹收支平衡的李國慶立馬以這個價格賣了 650 萬普通股出去,一共套現 8 千多萬。結果錢還沒算清,股市開盤了,噹噹的股價蹭蹭蹭地漲到 24.5 美元,截至收盤,又漲到了 29.91 美元。開盤當天,股價總計上漲 86.94%。

  回去之後,他終於憋不住了,以往凡事都要和俞渝商量,這次算是破例:“王八蛋們明知次日開盤就會 20 億;還定價 16,也就 11 億。次日開盤,CFO 被股價嚇得尿急,我說忍了這口氣,過了靜默期,我再操你媽了個x”。

  大學時期,李國慶喜歡崔健,故而哪怕是一段諷刺投行壓低噹噹 IPO 發行價的罵街話語,看起來都像是自帶節拍韻律。

  很快,一位自稱是“摩根士丹利工作人員的”微博用戶出現,對李國慶的指責進行逐條回應。或許是因為仍不解氣,還反過來質疑噹噹的經營問題。

  摩根士丹利被圈內昵稱為大摩。投行的江湖不好混,除了不動刀棍之外,論競爭之慘烈、手段之下作,古惑仔也要認輸。大摩的人能是省油的燈嗎?公事談完,這位女工作人員繼續朝着下三路走,攻擊李國慶的婚姻和私德。

  李國慶倒是不顧身份,頂着黃V跟這位來路不清不楚的微博用戶你來我往拉鋸月余,基本上是把雙方的親戚都問候遍了,罵到兩個人都筋疲力竭,才漸漸偃旗息鼓。

  中國一直沒有自己的世界級投行,國內公司想海外上市,抱大投行的大腿都來不及,更別說問候人家母親。一時間,李國慶成了令人側目的“罵投行第一人”。而時至今日,已經沒什麼人還記得那位“大摩女”,眾人沒法忘掉的是,一月的時間,李國慶生生把噹噹的市值懟掉 20 億。

  但也不是全無好處。“大戰大摩女”事件后,中國數億網民也因此知道衣冠楚楚的商界精英群里出了個口無遮攔的李國慶,他的微博粉絲因此暴漲。

  果然沒讓粉絲們失望,幾個月後,李國慶又將正在過第一個本命年的阿里巴巴拉進了戰場——2011 年 315 晚會前,李國慶一連發了好幾條微博吐槽淘寶假貨泛濫。

  經過數輪叫陣,支付寶的白鴉(現為有贊 CEO)在微博設賭,說俞渝無法忍受李國慶,後者會被離婚,被下崗。

  白鴉不是無名之輩,雖然現在有贊因為從服務到商品各種問題被吐槽的很多,但他在中國互聯網的用戶體驗設計圈可是大神級人物和佈道者的角色。李國慶一點也不在乎,不慌不忙地在下午兩點回了一條:“估計您要輸,剛交了公糧,挺 HIGH 的”。

  Part 2

  特立獨行        

1997 年,李國慶創辦噹噹網之前苦讀 MBA

  1964 年的國慶節,北京城裡正轟轟烈烈地進行着中華人民共和國成立 15 周年大閱兵,大街小巷一派肅穆祥和。李增雙就出生在這麼個普天同慶的日子里。

  生在國慶節,是喜上加喜。所以樸實的爹娘就給他起了個小名叫“國慶”,後來“國慶國慶”地叫順口,大名反而漸漸沒人再喊,“李增雙”就理所當然成了“李國慶”。

  那個年代,“五講四美”、“雙增雙節”的口號鋪天蓋地,所以從本質上講,換個“國慶”的名字,也並無任何根本上的不同——它們都帶着深刻的時代烙印。

  雖然家境普通,但說到底,北京是文化名城,又是紅色首都,李國慶小時候也是個愛看書的文藝少年。只是那時的書還是奢侈品,不興買,興租。不算闊綽的小學生李國慶就每天省下 3 分錢的冰棍錢,跑去租書看。在 70 年代北京前門的新華書店,經常能看到他來去匆匆的身影。

  後來,可能是因為北京城的夏天這麼熱,老不吃冰棍也不是個事兒。李國慶就跑去了離家不遠的一家叫“少年之家”的圖書館,死皮賴臉地求館里的老師答應了讓自己做圖書管理員。這個決定,不僅僅是給他省下了冰棍錢,從某種意義上講,也影響到他未來的人生路徑。

  在這裏,他看了一本據說對自己影響非常大的書——羅曼·羅蘭的《約翰·克里斯朵夫》。主人公是一位迫切地渴望被社會認可,而後又迫切要反叛主流認可的角色。他在李國慶心理種下了英雄主義的種子。

  所以也就可以理解,李國慶後來在大學和商場里老想標新立異,動不動就踹人一腳的行事風格,多半事出有因。

  1983 年,李國慶以第一名成績考入了北大社會學系,成為北大社會學重建以來的第一屆學生,再晚幾屆、後來被神奇地稱為“出行教父”的李斌,是他同門師弟。當時的校長丁石孫評價他:李國慶很鬧,但都是正統地鬧。

  這話說在李國慶大三的時候——當時北大宿舍樓的電話壞了,好幾天也沒人來修。李國慶知道后立馬氣勢洶洶跑去總務處,推門一看,“校長也在哈,校長您好。”

  寒暄完畢,轉身就換了張臉,開始質問總務長:“宿舍電話壞了為什麼老不給修?”總務長皺了皺眉頭:“不修,省得你們利用電話談戀愛”。李國慶這時的反應是憤怒地用手敲擊桌子:“你這個老昏庸,你的責任是讓它暢通無阻,你管他是談戀愛還是不談戀愛?”

  這話說得有節但不是很有禮,不卑卻稍微有點亢。總務長沒見過這般個性學生,一時竟無語凝噎。

  李國慶不是省油的燈,更不缺那個年代里罕有的特立獨行。總之,在北大校園裡,他做學生代表大會會長,貼大字報、辦演講、創立北大學生首屆藝術節。

  當時號稱中國搖滾之父的崔健正被限制演出,據說是因為用搖滾風格演繹了紅色歌曲,但是李國慶還是邀請他去北大唱歌,一時間風光無限。

  某天夜裡,李國慶從女寢樓下路過,看到有女生因談戀愛錯過了落鑰時間,而被宿管大娘拒之門外。一種使命感油然而生,他立即走上前,大手一揮:“大娘,我是學生代表大會會長,我現在要求你把門打開,而且從此不許鎖!”

  大娘不買賬,學生代表大會會長是啥官?沒聽說過啊。見官僚頭銜鎮不住對方,李國慶改用武裝鬥爭,“呵,我今天還必須把你這個封建的枷鎖砸開”,說完上前一步,脫下腳上一隻鞋,兩鞋底子把鎖給砸開了。親證如此天生神力,大娘驚得眼珠子差點掉出來。

  英雄夢想驅使下,李國慶鐵了心要做“影響中國的 100 人”。大二下學期的時候,他寫下一本書,題為《中國社會改造之我見》。北大教授袁方、於光遠看后嘖嘖稱奇:“國慶,你就好好搞學術吧,我保你三十歲必成名家”。學校領導也看到了,開玩笑和他說:“你這水平,大學一畢業,我給你找個縣委書記噹噹”。李國慶則毫不客氣:“副書記也行,保守點”。

  縣委書記自然是沒做成的,程序上講,下基層鍛煉是重用的前奏,那時的李國慶還差點火候。好在畢業之後,他還是進入了國務院發展研究中心和中共中央書記處農村政策研究室,在當時,這是個號稱“中南海翰林院”的地方。

  擺在青年李國慶面前的,是一派光明的政治前途。

  然而,規規矩矩坐了四五年辦公室后,李國慶發現,自己還是不甘違背內心,只做一個寂寞的辦公室文員。

  他渴望鮮花和掌聲。

  Part 3

  文青下海        

  2010 年 12 月,噹噹在紐交所敲鐘上市。李國慶問紐交所主席能不能敲兩下,寓意“噹噹”

  上世紀八九十年代,是一個號稱“靠擺地攤都能奔小康”的年代——會做生意的資本家,在此前幾十年的歷次政治運動中被消滅得七七八八,僵化的計劃經濟進行了幾十年。到改革開放前,國民經濟已經瀕臨崩潰。

  改革開放開啟中國大陸第一次創業熱潮,只要踏實肯干,就到處都有錢可賺,“造導彈的不如賣雞蛋的”等經典時代俗語也流傳開來。商界一派萬物初生、春光大好的景象,後來變成網絡梗的溫州皮革廠、山西煤老闆們,已經在襁褓中醞釀。

  乘着改革春風,李國慶微調整了一下自己的夢想——做“中國最富的 100 人”,然後就頭也不回地放棄公職下海了。

  作為一個名校畢業的頂級知識分子,李國慶一直對自己俗氣的名字耿耿於懷。所以,他要求自己公司的名字一定要有內涵。沉思半晌,李國慶大筆一揮,就叫“北京市科文經貿總公司”。如果不看後面的“公司”二字,旁人多半會誤以為這是哪個政府部門。

  名字起好了,賣什麼呢?李國慶繼續想,自己投筆從商一介書生,還是要面子的,肯定不能跟着人家鬧哄哄地擺地攤賣百貨。於是決定賣書,主打心靈雞湯,小目標是賺兩輛奔馳——當時,巨富們喜歡開奔馳 320,標價 32 萬。李國慶倒算一通后發現,要賣出去 10 萬套書才夠錢。

  揣着一顆火熱的奔馳夢,李國慶拎上樣書就往武漢和上海跑,隨即遭受人生第一個重大打擊——他一套也沒賣出去,連樣書都用來在火車上跟服務員換了兩盒盒飯。也幸好當年那位列車服務員的素質高,有知識需求,不然,還沒萌芽的噹噹網,就得早早倒在單程 17 小時車程的京滬線上了。

  多虧李國慶後來功成名就,才能嬉皮笑臉地回憶那段往事:那套書沒賣出去,是因為其中有一本名叫《乘着 9 路車去天堂》。而當年武漢剛好有一趟 9 路車,終點是火葬場。

  一番折騰下來,李國慶欠了一屁股債,債主怕他跑,就在他家樓下租個房子,成天守着他。在校園裡風光無限的李國慶哪裡過過這種憋屈日子,他開始反省:行走江湖,還是要把風險管控擺在第一位才靠譜。

  這一信念在二十一世紀初那場轟動全球的互聯網泡沫中更堅定了。

  2000 年,也是李國慶和俞渝一起成立噹噹的第二年,300 萬的年增長額讓李國慶雄心萬丈,彷彿又恢復了在北大校園裡揮斥方遒的時候,他斥巨資拉起一支超豪華管理團隊,大家拿着大把公司期權,憋着一口氣要把噹噹推上納斯達克。

  突然,美國股市崩盤的消息傳來,互聯網概念昨天還是香餑餑,轉眼就成了臭雞蛋,慘狀堪比今天的區塊鏈。上市的夢想就地破碎,高管們紛紛離去,李國慶和俞渝登時成了“一腳踹經理”,夫妻倆掩上門,差點抱頭痛哭。

  只是哭也沒用,該面對的還是要面對,互聯網相信數據相信忽悠相信出身相信錢,就是不相信眼淚。李國慶仔細反思了彼時的互聯網思維,覺得靠“燒錢換點擊率”不靠譜,儘管這一點現在已經成為了行業共識。俞渝也開始縮緊公司開支,預留一筆錢“過冬”。

  那段日子,倆人一邊看着一家家互聯網企業倒閉,一邊憂心忡忡地盤算自家的賬單,誰知,資本寒冬對噹噹火箭般的成長速度竟毫無影響。即便夫妻倆極力控制發展規模,噹噹依然以每年 200% 的增速成長着。靠着謹小慎微,噹噹熬過了這個冬天。

  至此,謹慎保守成了噹噹行走江湖的圭臬,然而尷尬的是,也成了最終將這個互聯網老大哥推向下坡路的重要因素。

  2010 年底,京東開啟全品類戰略,打着“三年不賺毛利,五年不賺凈利”的價格戰略侵入噹噹的命根子圖書領域,噹噹本來就不大的圖書市場硬生生被掰去一大塊,李國慶被這個隔壁學校的小學弟氣得吹鬍子瞪眼,但又無可奈何,只得再去找市場。

  經歷過資本寒冬的李國慶和俞渝仍然堅信“錢必須握在手裡才踏實”,在每一項投資中都畫上了一條價格紅線。但眾所周知,在日新月異的互聯網泡沫江湖裡,資本才是開疆拓土的核武器。

  後來這些年,噹噹做百貨,做平台,做电子書,做雲閱讀,時髦的,一樣沒落下,一樣也沒成功。大家都說這挺符合李國慶文藝青年的標籤,電影話劇小說詩歌,沒有名字不熟的,就是不能往深了問。

  說來也怪,從徐小平被俞敏洪請出新東方改扮中國年輕女創業者知音,到戴威的 ofo 獨角獸夢想破滅自己被限制高消費,再到現在噹噹面臨的尷尬局面,北大“老中青”三代創業文青,都沒能逃過半途傾覆的命運。

  2004 年,噹噹初具規模,亞馬遜提出要以 1.5 億美元收購噹噹 70% 到 90% 的股份,那時噹噹一年的銷售額才 1 億人民幣。俞渝興奮地在廚房走來走去,但李國慶不同意:“再給我三四年的時間,噹噹能翻一番”。

  當時汪延還是新浪網的總裁,他聽說李國慶不肯賣噹噹,火急火燎地帶着老婆撲到李國慶家,他說:“趕緊賣吧,別做夢了,你看我們新浪網剛上市時 16 塊一股,現在 1 塊錢一股,什麼時候爬上來?趕緊賣吧,賣了干點別的也行”。

  汪延何許人也?人家世代書香門第,他爺爺是中國著名物理學家,他爹自己是 1949 年後第一批駐法國外交官,拿過法國騎士勳章,幾個伯伯不是院士就是大學校長,比李國慶的出身顯赫太多了。他能上門規勸,應該也是真關心噹噹。

  李國慶沒理他。

  2013 年到 2014 年,噹噹又先後被百度和騰訊兩大巨頭看上,李國慶依然不肯讓步,死守占股不能超過 25% 的底線,看到這架勢,騰訊也不再多費唇舌,轉身就找了李國慶口中“傻大黑粗”的劉強東。京東在劉強東不太順利的美國求學之旅后,市值依然高達 310 億美元,而噹噹作價 75 億賣身海航失敗,至今無人接盤。

  當老大是每個文青的倔強,即使這個老大隻是一個“聯合老大”。

  Part 4

  行差踏錯        

  1995 年,31 歲的李國慶與 30 歲的俞渝相識於美國。那時候的俞渝在華爾街已經小有名聲,而李國慶還是個在紐約街頭到處求人買版權的小書商

  最早看清噹噹宿命的,是蔚來汽車的 CEO 李斌。不過那會兒,他還是個剛學會敲代碼的小伙子。

  1996 年,李斌在北大一邊輔修法律和計算機,一邊創辦了“南極科技”,偶然結識剛從美國“開眼界”回來的李國慶。李國慶覺得這位比自己小整整十歲的學弟是個不錯的苗子,就拉上了他一起創業。第二年,李斌以總經理身份參與了噹噹網前身“科文書業”創辦,李國慶任董事長。

  沒想一年後,李國慶將自己剛從美國娶回來的俞渝也安插成了董事長,李斌一看,這不成夫妻店了嗎?趕緊撤了。

  事實證明,李斌對企業管理的眼光比對電動汽車的判斷高太多了,非常有先見之明。

  後來噹噹的高層一見到李國慶和俞渝鬧分歧,立馬繞得遠遠:“無論站哪方,都要得罪另一方;哪方都不站吧,又要說我別有用心”。鬧久了,李國慶也後悔,多次在公開場合表示,如果有機會能再來一次,“一定不和俞渝一起創業”。

  噹噹創立后,李國慶的身份一直是“聯合總裁”,外人常對着這個奇怪的頭銜滿臉問號。俞渝說,這是為了顧及李國慶的自尊心,畢竟“副總裁”不太好聽,國慶還是要出去接受媒體採訪的。

  一物降一物,世事大抵如此。

  在俞渝之前,李國慶交往過六個女朋友,無一例外都出國了,他整個一出國培訓班班長。在當年,連申請護照都需要層層審批、說明嚴肅理由,可不是一般人能奢望的事情,由此也可見李國慶的社交質量之高。

  30 歲那年,李國慶覺得是時候找個人安定下來了,但他非海歸不可,卻沒聽說有哪個已經出去的真願意回國變成“海歸”。

  他決定出國找一找。

  1995 年,李國慶已近 32 歲,他在美國碰到俞渝,後來的事情就變得理所應當。俞渝是紐約大學 MBA 畢業,在華爾街做風投,已經開始嶄露頭角。兩人花了三個月時間了解,然後迅速結婚滾床單,一同回國。對於和俞渝結婚這事,李國慶承認他目標明確,是“早有預謀”。

  後來的十幾年裡,不同於功成勇退現在又出山的“百度第一夫人”馬東敏,號稱“中國第一個從索羅斯手中拿到錢的女人”的俞渝一直擔任着噹噹的聯合總裁,與李國慶平起平坐。即使李國慶氣急拍着桌子叫罵“俞渝你給我閉嘴,這事聽我的,你就好好當 CFO”,俞渝也寸步不讓。

  在噹噹任職過的老員工都說,企業領導做決策,要考慮數據、市場、競爭對手等一系列因素。但在噹噹,夫妻關係也成為影響決策的因素,而且還是重要因素。為了做成一件事,李國慶會花上足夠多的時間說服俞渝,或者反之,如果兩人意見統一不了,那就再推遲三個月做決定。

  更激烈的版本說,開會時吵得厲害,李國慶甚至會做出家暴的姿態,當然從來沒敢真正付諸實施。噹噹的產品項目組,如果彙報關係分屬夫妻兩人,最後李國慶的項目都是被砍掉的命,這也是互聯網產品圈裡公開的秘密。

  2004 年底,噹噹剛熬過寒冬,去哪兒網的聯合創始人戴政還是噹噹旗下的市場和廣告總監,在目睹了噹噹總裁辦年度總結會上的一幕後,他第一次萌生出離開的想法。當時,由於 2004 年整體業績沒有達到預期,俞渝當著所有人的面對李國慶以近乎質問的語氣說“怎麼沒有完成?”

  一分鐘沉默后,李國慶當場向俞渝提出辭職,第二天,沒有來公司,但到了第三天,就沒事人一樣地回來了。

  夫妻本是同林鳥,一起創業老想分。對於這段關係,李國慶自己在朋友圈總結:“所謂的婚姻就是有時候很愛他,有時候想一槍崩了他,大多時候是在買槍的路上遇到了他愛吃的菜,買了菜卻忘記了買槍,回家過幾天想想,還得買槍”。

  Part 5

  相愛相殺        

  2015 年的雙十一過後,李國慶與劉強東在北京一家餐館喝酒,同席的是聚美優品的陳歐

  和李國慶賣書起家一樣,早年只做 3C 的劉強東,最初在中關村租了個攤位賣刻錄機和光盤,後來生意做大,搬到了海龍大廈。據說倆人離得最近的時候,從李國慶辦公室的窗戶往外探頭,就能看到劉強東在海龍大廈底下搬箱子。

  或許是因為兩人都在創業維艱時期被初戀拋棄過,惺惺相惜,所以在很長一段時間里,李國慶和劉強東走得很近,經常約在北大西門一起喝大酒吹牛,情到深處,還和凡客的陳年一起來了個三方之約:

  你在海龍做 3C,我在書店街做圖書,陳年在凡客賣背心,我們一起干馬雲!

  聽起來怪嚇人的,雖然傑克馬打得一手好太極,但是以一敵三也讓人揪心。誰知道,馬雲還沒有被干倒,劉強東就率先打破了這份君子協議。

  2010 年底京東商城啟動全品類戰略,切入了大哥的圖書領域。大哥受不了這個氣,立即在 2011 年對數碼電器自殺式降價,“我為什麼賣 3C 啊?很簡單,為了解氣。京東賣圖書我就賣 3C,我有錢!”李國慶還不忘氣勢滿滿地到處揚言“京東的資金熬不過年底”。

  劉強東也很生氣,他最討厭別人質疑他的經濟實力。索性在微博上邀請李國慶來查賬,京東賬上若低於 60 億現金,劉強東個人捐款 1000 萬元,否則對方捐 500 萬元。

  後來,這場賭局不了了之,這大概就是所謂商業默契。所以心裏亮堂堂的這兩位,肯定不會對雷軍和董明珠的 10 億賭約有過多期待。

  不過那時的李國慶面對京東價格戰,確實信心滿滿,在他眼裡,劉強東就是個不懂事的小弟,拋出一句“噹噹網做 3C 產品只是權宜之計,若對手放手噹噹也會放棄”。意思是,你京東要玩我就花錢陪你玩,反正你也玩不了多久。

  但李國慶沒想到,京東還真把這場價格戰打到底了——全場圖書 1 折起,滿 200 減 100、免費送、折上折……8000 萬的降價補貼,直接讓噹噹的 4000 萬補貼如同燒紙。

  李國慶這才開始着急,罵劉強東“既沒有戰略,又不懂事”,放着 4000 億的服裝市場不佔,跟噹噹搶 300 億圖書的小生意,沒出息啊。

  然而,此時已穩穩掌握主動權的劉強東,絲毫不受這位大哥的嘴炮攻擊影響,清點完戰場后,立馬又向老東家老虎基金和 DST 要了 15 億,調轉炮口開始壓制蘇寧和國美。2015 年,京東第三季度的總營收出爐——441 億美元,噹噹同期總營收僅為 23.71 億,相差整整 20 倍。

  到了 2016 年 9 月,噹噹網完成私有化退市,市值 5.37 億美元,不到上市高峰時刻的四分之一。一片唏噓和指責聲中,劉強東又陰陽怪氣地上來補了一刀:“國慶在微博說我壞話最多了,但我對李國慶從來沒有討厭過,我喜歡跟他喝酒,跟他聊天”。

  Part 6

  終        

早年俞渝在接受《人民日報》採訪時說,嫁給李國慶是為了“做柔軟的幸福女人”

  噹噹上市的時候,李國慶沒顧忌俞渝就在旁邊,把自己的前女友也請來敲鐘,一夜夫妻百日恩,居然還給了些親友股。對於此事,他常常引以為傲。俞渝也不太在意,說給親友股,那是自己建議給的。

  究竟是誰的主意,已經沒必要去深究。那時候李國慶還是噹噹第一大股東,公司控制權牢牢攢在他手裡。

  這麼些年過去,噹噹每況日下,完成私有化以後,俞渝持股上升到 64.2%,而李國慶則只佔 27.51%。噹噹實際控制人已經變成了俞渝。

  待到李國慶評論劉強東事件的微博發出,噹噹網官方微博迅速撇清和他的關係,說李國慶早已離開噹噹管理層。除了對其言論進行“強烈譴責”,還勒令李國慶換掉其個人微博頭像中的噹噹 LOGO。

  遙想當年,李國慶在公開場合炫耀起自己的“六個女朋友”,俞渝只是波瀾不驚地在旁回了一句:

  李國慶在我生活里有很重要的位置,但是我想說的就是一個幸福的女人後面她一定有十個甚至二十個她的男朋友,這些男朋友在我們家名詞中間都叫超級備胎,有陪着買衣服的,有指導做飯的,有幫着讀書的,有帶孩子滑雪的,這些人都是男性,都是我的好朋友,他們中間大概有些人跟國慶也不錯。

  【參考資料】

  【1】陳實:《李國慶:活在“襠”下》.藍媒匯

  【2】吳曉波:《吳曉波:謝謝李國慶》.虎嗅網

  【3】黃秋麗:《豪客許家印》.中國企業家

  【4】王芳潔:《中國版蓋茨比許家印》.中國企業家

  【5】熊劍輝:《力挺俞敏洪的他,用 11 年干成老大,卻在之後 6 年掉隊到“寄人籬下”》.華商韜略

  【6】嚴沁雯:《隕落與上升李國慶和王興的格局對話》.財聯社

  【7】唐三角、呂蓓卡:《噹噹,你媽貴姓?》.山河路人

  【8】陳墨:《噹噹李國慶的三場炮戰》.每日人物

  【9】王燕青:《出版業想念當年的李國慶》.南方人物周刊

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

Java開發中常用jar包整理及使用

本文整理了我自己在Java開發中常用的jar包以及常用的API記錄。

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

common-lang3

簡介

一個現在最為常用的jar包,封裝了許多常用的工具包

依賴:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

主要常見的類如下:

  • 數組工具類 ArrayUtils
  • 日期工具類 DateUtils DateFormatUtils
  • 字符串工具類 StringUtils
  • 数字工具類 NumberUtils
  • 布爾工具類 BooleanUtils
  • 反射相關工具類 FieldUtils、MethodUtils、MemberUtils、TypeUtils、ConstructorUtils
  • 對象工具類 ObjectUtils
  • 序列化工具類 SerializationUtils

API介紹

這裏我只介紹經常使用的幾個工具類及方法,ArrayUtils,StringUtils,NumberUtils,DateUtils,其他的請查看官方API文檔吧

1.ArrayUtils

方法名 說明
add
remove
clone 複製數組
addAll
removeAll 第二個參數傳入需要刪除的下標(可以指定多個下標)
toObject 把數值(int[],double[])轉為包裝類(Int[],Double[])
indexOf 在數組按順序查找,找到第一個滿足對應的數值的下標
lastIndexOf 在數組按順序查找,找到最後一個滿足對應的數值的下標
contains 數組是否包含某個值
isEmpty 判斷數組是否為空
isNotEmpty 判斷數組是否不為空
reverse 數組反轉
subarray 指定區間截取數組,區間為半開區間,不包含末尾
toArray 接收一個多個對象,把這幾個對象轉為對應類型的數組
toMap 將一個二維數組轉為Map

2.NumberUtils

方法名 說明
min 比較三個數,返回最小值 或比較指定的幾個數,返回最小值
max 比較三個數,返回最大值 或比較指定的幾個數,返回最大值
createInt 從傳入的String中創建對應類型的數值,createDouble,createFloat…
toInt 將指定字符串轉為Int類型,可以選擇指定默認數值,如果字符串為null則返回默認數值,除此之外,還有toDouble,toLong…等轉為不同類型的方法
compare 比較兩個同類型數值的大小
isDigits 判斷字符串是否只包含数字
isParsable 判斷字符串是否可轉換為Long,Int等類型
isNumber 判斷字符串是否為數值(0x,0X開頭等進制數值)

3.DateUtils

方法名 說明
parseDate 將Date對象轉為字符串
isSameDay 判斷兩個Dated對象是否為同一天
isSameDay 判斷兩個Dated對象是否為同一天
addHour 將指定的Date對象加上指定小時,除此之外,還有addMonth,addDay..等

DateFormatUtils正如其名,是用來把時間轉為字符串,這裏就不再多說

4.StringUtils

方法名 說明
join 將指定的數組連接成字符串,並添加指定的分割字符
containOnly 字符串是否只包含某個字符串
substringBefore 截取指定字符串前面的內容
substringAfter 截取指定字符串後面的內容(不包括指定字符串)
substringBetween 截取字符串某區間內容,如substringBetween(“abcde”,”a”,”e”)=”bcd”
difference 比較兩個字符串,返回兩個字符串不同的內容,具體可以看API文檔給出的示例
isBlank 判斷字符串是否為空白,null,””,” “這三個結果都是為true
isEmpty 判斷字符串是否為空(只要不為null,或傳入的String對象的長度不為0即為true)
countMatches 判斷指定的字符串在某個字符串中出現的次數
deleteWhitespace 刪除字符串中的空格
defaultIfBlank 如果字符串為空白,則返回一個指定的默認值(null或某個String)
defaultIfEmpty 如果字符串為空,則返回一個指定的默認值(null或某個String)
capitalize 將指定字符串首字母大寫
abbreviate 將指定字符串的後面三位轉為…
swapCase 將字符串中的字母大小寫反轉,如aBc變為AbC
lowerCase 將字符串的字母全部轉為小寫
upperCase 將字符串的字母全部轉為大寫
left 取字符串左邊幾個字符,如left(“hello”,3)=”hel”,right與此相反
leftPad 字符串的長度不夠,則使用指定字符填充指定字符串,如leftPad(“hel”,5,”z”)=”zzhel”,rightPad方法與此相反
prependIfMissing 指定字符串不以某段字符串開頭,則自動添加開頭,如prependIfMissing(“hello”,”li”)=”lihello”
prependIfMissing 指定字符串不以某段字符串開頭(忽略大小寫),則自動添加開頭
getCommonPrefix 獲得多個字符串相同的開頭內容,接收參數為多個字符串
removeEnd 刪除字符串中結尾(滿足是以某段內容結尾),如removeEnd(“hello”,”llo”)=”he”
removeEndIgnoreCase 與上面一樣,忽略大小寫
removeStart 與上面的相反
remove 刪除字符串中的指定內容,如remove(“hello”,”l”)=”heo”
removeIgnoreCase 刪除字符串中的指定內容,如remove(“hello”,”l”)=”heo”
strip 清除字符串開頭和末尾指定的字符(第二個參數為null,用來清除字符串開頭和末尾的空格),如strip(” abcxy”,”xy”)=” abc”,strip(” abcxy”,”yx”)=” abc”
stripStart 清除字符串開頭指定字符
stripEnd 清除字符串末尾指定的字符

common-io

簡介

常用的IO流工具包

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

API

我們主要關心的就是Utils後綴的那幾個類即可,可以看到,common-io庫提供了FileUtils,FileSystemUtils,FileNameUtils,FileFilterUtils,IOUtils

FileUtils

  • 寫出文件
  • 讀取文件
  • 創建一個有父級文件夾的文件夾
  • 複製文件和文件夾
  • 刪除文件和文件夾
  • URL轉文件
  • 通過過濾器和擴展名來篩選文件和文件夾
  • 比較文件內容
  • 文件最後修改時間
  • 文件校驗

FileSystemUtils

關於文件系統的相關操作,如查看C盤的大小,剩餘大小等操作

IOUtils

字面意思,是封裝了IO流的各種操作的工具類

Log4j

簡介

Log4J 是 Apache 的一個開源項目,通過在項目中使用 Log4J,我們可以控制日誌信息輸出到控制台、文件、GUI 組件、甚至是數據庫中。

我們可以控制每一條日誌的輸出格式,通過定義日誌的輸出級別,可以更靈活的控制日誌的輸出過程,方便項目的調試。

依賴:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

結構

Log4J 主要由 Loggers (日誌記錄器)、Appenders(輸出端)和 Layout(日誌格式化器)組成。

其中Loggers 控制日誌的輸出級別與日誌是否輸出;
Appenders 指定日誌的輸出方式(輸出到控制台、文件等);
Layout 控制日誌信息的輸出格式。

日誌級別:

級別 說明
OFF 最高日誌級別,關閉左右日誌
FATAL 將會導致應用程序退出的錯誤
ERROR 發生錯誤事件,但仍不影響系統的繼續運行
WARN 警告,即潛在的錯誤情形
INFO 一般和在粗粒度級別上,強調應用程序的運行全程
DEBUG 一般用於細粒度級別上,對調試應用程序非常有幫助
ALL 最低等級,打開所有日誌記錄

我們主要使用這四個:Error>Warn>Info>Debug

使用

我們可以使用兩種方式來運行Log4j,一種是java代碼方式,另外一種則是配置文件方式

例子(Java方式)

public class Log4JTest {
    public static void main(String[] args) {   
        //獲取Logger對象的實例(傳入當前類)         
        Logger logger = Logger.getLogger(Log4JTest.class);
        //使用默認的配置信息,不需要寫log4j.properties
        BasicConfigurator.configure();
        //設置日誌輸出級別為WARN,這將覆蓋配置文件中設置的級別,只有日誌級別低於WARN的日誌才輸出
        logger.setLevel(Level.WARN);
        logger.debug("這是debug");
        logger.info("這是info");
        logger.warn("這是warn");
        logger.error("這是error");
        logger.fatal("這是fatal");
    }
}

例子(配置文件方式)

上面的例子,我們想要實現打印Log,但是每次都要寫一遍,浪費時間和精力,所以,Log4j提供了另外一種方式來配置好我們的信息

創建一個名為log4j.properties的文件,此文件需要放在項目的根目錄(約定),如果是maven項目,直接放在resources文件夾中即可

log4j.properties

#控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#log jdbc
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=WARN
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

#log mybatis設置
#log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.org.apache.ibatis.jdbc=error
log4j.logger.org.apache.ibatis.io=info
log4j.logger.org.apache.ibatis.datasource=info

#springMVC日誌
log4j.logger.org.springframework.web=WARN

# 文件輸出配置
log4j.appender.A = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File = D:/log.txt #指定日誌的輸出路徑
log4j.appender.A.Append = true
log4j.appender.A.Threshold = DEBUG
log4j.appender.A.layout = org.apache.log4j.PatternLayout #使用自定義日誌格式化器
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n #指定日誌的輸出格式
log4j.appender.A.encoding=UTF-8 #指定日誌的文件編碼

#指定日誌的輸出級別與輸出端
log4j.rootLogger=DEBUG,Console,A

#指定某個包名日誌級別(不能超過上面定義的級別,否則日誌不會輸出)
log4j.logger.com.wan=DEBUG

之後使用的話就比較簡單了

//Logger的初始化(這個推薦定義為全局變量,方便使用)
Logger logger = Logger.getLogger(Log4JTest.class);
//輸出Log
logger.info("這是info");

參考鏈接:

lombok

簡介

平常我們創建實體類的時候,需要get/set方法,極其麻煩,雖然IDEA等IDE都是有提供了快捷生成,不過,最好的解決方法還是省略不寫

而lombok就是這樣的一個框架,實現省略get/set方法,當然,lombok的功能不只有此,還有equal,toString方法也可以由此框架自動生成

lombok的原理是使用註解,之後就會在編譯過程中,給Class文件自動加上get/set等方法

不過IDEA似乎無法識別,代碼檢查還是會報錯,所以,使用IDEA的時候還得安裝一個插件,在plugin搜索lombok,之後安裝重啟即可,如圖

之後為Java項目添加依賴

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

使用示例

1.實體類省略get/set
估計Kotlin中的data關鍵字就是參照着lombok實現的

//這裏我們只需要為類添加Data註解,就會自動生成對應屬性的get/set方法,toString,equal等方法
@Data
public class User {
    private String username;
    private String password;
}

2.需要無參構造以及get/set方法

@Getter
@Setter
@NoArgsConstructor
public class User {
    private String username;
    private String password;
}

3.鏈式調用set方法

@Data
@Accessors(chain = true)
public class User {
    private String username;
    private String password;
}

//使用
User user = new User();
user.setUsername("helo").setPassword("123");

4.參數不為空

//如果調用此方法,就會抱一個空指針錯誤
public String print(@NotNull String str){
    ...
}

5.只需要toString

@ToString(callSuper=true, includeFieldNames=true)
public class User {
    private String username;
    private String password;
    //省略的get/set方法
}

6.builder模式創建實體類對象

@Data
@Builder
public class User {
    private String username;
    private String password;
}
//使用
User user1 = User.builder().username("user1").password("123").build();

7.工具類

@UtilityClass
public class MyUtils{
    //會將此方法自動轉為靜態方法
    public void print(String str){
        ...
    }
}
//使用
MyUtils.print("hello");

8.自動關閉流

public static void main(String[] args) throws Exception {
    //使用Cleanup會自動調用close方法
    @Cleanup InputStream in = new FileInputStream(args[0]);
    @Cleanup OutputStream out = new FileOutputStream(args[1]);
    byte[] b = new byte[1024];
    while (true) {
        int r = in.read(b);
        if (r == -1) break;
        out.write(b, 0, r);
    }
}

9.省略Logger時的初始化

@Log4j
@Log
public class User{
    //會自動添加此語句
    //Logger logger = Logger.getLogger(User.class);
    ...
}

參考:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

人臉檢測和人臉識別原理,微調(Fine-tune)原理

一、MTCNN的原理

  搭建人臉識別系統的第一步是人臉檢測,也就是在圖片中找到人臉的位置。在這個過程中,系統的輸入是一張可能含有人臉的圖片,輸出是人臉位置的矩形框,如下圖所示。一般來說,人臉檢測應該可以正確檢測出圖片中存在的所有人臉,不能用遺漏,也不能有錯檢。  

   

  獲得包含人臉的矩形框后,第二步要做的就是人臉對齊(Face Alignment)。原始圖片中人臉的姿態、位置可能較大的區別,為了之後統一處理,要把人臉“擺正”。為此,需要檢測人臉中的關鍵點(Landmark),如眼睛的位置、鼻子的位置、嘴巴的位置、臉的輪廓點等。根據這些關鍵點可以使用仿射變換將人臉統一校準,以盡量消除姿勢不同帶來的誤差,人臉對齊的過程如下圖所示。

   

  這裏介紹一種基於深度卷積神經網絡的人臉檢測和人臉對齊方法—-MTCNN,它是基於卷積神經網絡的一種高精度的實時人臉檢測和對齊技術。MT是英文單詞Multi-task的縮寫,意思就是這種方法可以同時完成人臉檢測的人臉對齊兩項任務。相比於傳統方法,MTCNN的性能更好,可以更精確的定位人臉,此外,MTCNN也可以做到實時的檢測。

  MTCNN由三個神經網絡組成,分別是P-Net、R-Net、O-Net。在使用這些網絡之前,首先要將原始圖片縮放到不同尺度,形成一個“圖像金字塔”,如下圖所示。

   

  接着會對每個尺度的圖片通過神經網絡計算一遍。這樣做的原因在於:原始圖片中的人臉存在不同的尺度,如有的人臉比較大,有的人臉比較小。對於比較小的人臉,可以在放大后的圖片上檢測;對於比較大的人臉,可以在縮小后的圖片上進行檢測。這樣,就可以在統一的尺度下檢測人臉了。

  現在再來討論第一個網絡P-Net的結構,如下圖所示

   

  P-Net的輸入是一個寬和高皆為12像素,同時是3通道的RGB圖像,該網絡要判斷這個12×12的圖像中是否含有人臉,並且給出人臉框和關鍵點的位置。因此對應的輸出應該由3部分組成:

  (1)第一個部分要判斷該圖像是否是人臉(上圖中的face classification),輸出向量的形狀為1x1x2,也就是兩個值,分別為該圖像是人臉的概率,以及該圖像不是人臉的概率。這兩個值加起來應該嚴格等1。之所以使用兩個值來表示,是為了方便定義交叉熵損失。
  (2)第二個部分給出框的精確位置(上圖中的bounding box regression),一般稱之為框回歸。P-Net輸入的12×12的圖像塊可能並不是完美的人臉框的位置,如有的時候人臉並不正好為方形,有的時候12×12的圖像塊可能偏左或偏右,因此需要輸出當前框位置相對於完美的人臉框位置的偏移。這個偏移由四個變量組成。一般地,對於圖像中的框,可以用四個數來表示它的位置:框左上角的橫坐標、框左上角的縱坐標、框的寬度、框的高度。因此,框回歸輸出的值是:框左上角的橫坐標的相對偏移、框左上角的縱坐標的相對偏移、框的寬度的誤差、框的 高度的誤差。輸出向量的形狀就是上圖中的1x1x4。
  (3)第三個部分給出人臉的5個關鍵點的位置。5個關鍵點分別為:左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。每個關鍵點又需要橫坐標和縱坐標來表示,因此輸出一共是10維(即1x1x10)

  上面的介紹大致就是P-Net的結構了。在實際計算中,通過P-Net中第一層卷積的移動,會對圖像中每一個12×12的區域做一次人臉檢測,得到的結構如下圖所示:

   

  圖中框的大小各有不同,除了框回歸的影響外,主要是因為將圖片金字塔的各個尺度都使用P-Net計算了一遍,因此形成了大小不同的人臉框。P-Net的結果還是比較粗糙的,所以接下來又使用R-Net進一步調優。R-Net的網絡結構如下圖所示。

   

  這個結構與之前的P-Net非常類似,P-Net的輸入是12x12x3的圖像,R-Net是24x24x3的圖像,也就是說,R-Net判斷24x24x3的圖像中是否含有人臉,以及預測關鍵點的位置。R-Net的輸出和P-Net完全一樣,同樣有人臉判別、框回歸、關鍵點位置預測三部分組成。

  在實際應用中,對每個P-Net輸出可能為人臉的區域都放縮到24×24的大小,在輸入到R-Net中,進行進一步的判定。得到的結果如下圖所示:

   

  顯然R-Net消除了P-Net中很多誤判的情況。

  進一步把所有得到的區域縮放成48×48的大小,輸入到最後的O-Net中,O-Net的結構同樣與P-Net類似,不同點在於它的輸入是48x48x3的圖像,網絡的通道數和層數也更多了。O-Net的網絡的結構如下圖所示:

   

  檢測結果如下圖所示:

   

  從P-Net到R-Net,最後再到O-Net,網絡輸入的圖片越來越大,卷積層的通道數越來越多,內部的層數也越來越多,因此它們識別人臉的準確率應該是越來越高的。同時,P-Net的運行速度是最快的,R-Net的速度其次,O-Net的運行速度最慢。之所以要使用三個網絡,是因為如果一開始直接對圖中的每個區域使用O-Net,速度會非常慢慢。實際上P-Net先做了一遍過濾,將過濾后的結果再交給R-Net進行過濾,最後將過濾后的結果交給效果最好但速度較慢的O-Net進行判別。這樣在每一步都提前減少了需要判別的數量,有效降低了處理時間。

  最後介紹MTCNN的損失定義和訓練過程。MTCNN中每個網絡都有三部分輸出,因此損失也由三部分組成。針對人臉判別部分,直接使用交叉熵損失,針對框回歸和關鍵點判定,直接使用L2損失。最後這三部分損失各自乘以自身的權重再加起來,就形成最後的總損失了。在訓練P-Net和R-Net時,更關心框位置的準確性,而較少關注關鍵點判定的損失,因此關鍵點判定損失的權重很小。對於O-Net,關鍵點判定損失的權重較大。

二、使用深度卷積網絡提取特徵

  經過人臉檢測和人臉對齊兩個步驟,就獲得了包含人臉的區域圖像,接下來就要進行人臉識別了。這一步一般是使用深度卷積網絡,將輸入的人臉圖像轉換為一個向量的表示,也就是所謂的“特徵”。

  如何針對人臉來提取特徵?可以先來回憶VGG16的網絡結構(見),輸入神經網絡的是圖像,經過一系列卷積計算后,全連接分類得到類別概率。

  在通常的圖像應用中,可以去掉全連接層,使用卷積層的最後一層當作圖像的“特徵”。但如果對人臉識別問題同樣採用這種方法,即使用卷積層最後一層做為人臉的“向量表示”,效果其實是不好的。這其中的原因和改進方法是什麼?在後面會談到,這裏先談談希望這種人臉的“向量表示”應該具有哪些性質。

  在理想的狀況下,希望“向量表示”之間的距離可以直接反映人臉的相似度

  對於同一個人的兩張人臉圖像,對應的向量之間的歐幾里得距離應該比較小。對於不同人的兩張人臉圖像,對應的向量之間的歐幾里得距離應該比較大。

  例如,設人臉圖像為$x_{1}$,$x_{2}$,對應的特徵為$f(x_{1})$,$f(x_{2})$,當$x_{1}$,$x_{2}$對應是同一個人的人臉時,$f(x_{1})$,$f(x_{2})$的距離$\left \| f(x_{1}),f(x_{2}) \right \|$2應該很小,而當$x_{1}$,$x_{2}$是不同人的人臉時,$f(x_{1})$,$f(x_{2})$的距離$\left \| f(x_{1}),f(x_{2}) \right \|$2應該很大。

  在原始的CNN模型中,使用的是Softmax損失。Softmax是類別間的損失,對於人臉來說,每一類就是一個人。儘管使用Softmax損失可以區別出每個人,但其本質上沒有對每一類的向量表示之間的距離做出要求。

  舉個例子,使用CNN對MNIST進行分類,設計一個特殊的卷積網絡,讓其最後一層的向量變為2維,此時可以畫出每一類對應的2維向量(圖中一種顏色對應一種類別),如下圖所示:

   

  上圖是我們直接使用softmax訓練得到的結果,它就不符合我們希望特徵具有的特點:

  (1)我們希望同一類對應的向量表示盡可能接近。但這裏同一類(如紫色),可能具有很大的類間距離;
  (2)我們希望不同類對應的向量應該盡可能遠。但在圖中靠中心的位置,各個類別的距離都很近;

  對於人臉圖像同樣會出現類似的情況,對此,有很改進方法。這裏介紹其中兩種:一種是三元組損失函數(Triplet Loss),一種是中心損失函數。 

三、三元組損失的定義

  三元組損失函數的原理:既然目標是特徵之間的距離應該具備某些性質,那麼我們就圍繞這個距離來設計損失。具體的,我們每次都在訓練數據中抽出三張人臉圖像,第一張圖像記為$x_{i}^{a}$,第二張圖像記為$x_{i}^{p}$,第三張圖像記為$x_{i}^{n}$。在這樣的一個“三元組”中,$x_{i}^{a}$和$x_{i}^{p}$對應的是同一個人的圖像,而$x_{i}^{n}$是另外一個不同的人的人臉圖像。因此,距離$\left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}$應該較小,而距離$\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}$應該較大。嚴格來說,三元組損失要求下面的式子成立:

   $\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}+\alpha <\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}$

  然後計算相同人臉之間與不同人臉之間距離的平方

   $\left [ \left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}^{2}+\alpha -\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}^{2} \right ]_{+}$

  上式表達相同人臉間的距離平方至少要比不同人臉間的距離平方小α(取平方主要是為了方便求導),據此,上式實際上就是相當於一個損失函數。這樣的話,當三元組的距離滿足 $\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}+\alpha <\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}$時,不產生任何損失,此時$L_{i}=0$。當距離不滿足上述等式時,就會有值為$\left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}^{2}+\alpha -\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}^{2}$的損失。此外,在訓練時會固定$\left \| f(x) \right \|_{2}=1$,以保證特徵不會無限地“遠離”。

  三元組損失直接對距離進行優化,因此可以解決人臉的特徵表示問題。但是在訓練過程中,三元組的選擇非常地有技巧性。如果每次都是隨機選擇三元組,雖然模型可以正確的收斂,但是並不能達到最好的性能。如果加入”難例挖掘”,即每次都選擇最難分辨率的三元組進行訓練,模型又往往不能正確的收斂。對此,又提出每次都選擇那些“半難”(Semi-hard)的數據進行訓練,讓模型在可以收斂的同時也保持良好的性能。此外,使用三元組損失訓練人臉模型通常還需要非常大的人臉數據集,才能取得較好的效果。

四、中心損失的定義

  與三元組損失不同,中心損失(Center Loss)不直接對距離進行優化,它保留了原有的分類模型,但又為每個類(在人臉模型中,一個類就對應一個人)指定了一個類別中心。同一類的圖像對應的特徵都應該盡量靠近自己的類別中心,不同類的類別中心盡量遠離。與三元組損失函數相比,使用中心損失訓練人臉模型不需要使用特別的採樣方法,而且利用較少的圖像就可以達到與單元組損失相似的效果。下面我們一起來學習中心損失的定義:

   還是設輸入的人臉圖像為$x_{i}$,該人臉對應的類別為$y_{i}$,對每個類別都規定一個類別中心,記作$c_{yi}$。希望每個人臉圖像對應的特徵$f(x_{i})$都盡可能接近其中心$c_{yi}$。因此定義中心損失為:

    $L_{i}=\frac{1}{2}\left \| f(x_{i})-c_{yi}\right \|_{2}^{2}$

  多張圖像的中心損失就是將它們的值加在一起:

   $L_{center}=\sum\limits_{i}L_i$

  這是一個非常簡單的定義。不過還有一個問題沒有解決,那就是如何確定每個類別的中心$c_{yi}$呢?從理論上來說,類別$y_{i}$的最佳中心應該是它對應的所有圖片的特徵的平均值。但如果採取這樣的定義,那麼在每一次梯度下降時,都要對所有圖片計算一次$c_{yi}$,計算複雜度就太高了。針對這種情況,不妨近似一處理下,在初始階段,先隨機確定$c_{yi}$,接着在每個batch內,使用$L_i=\|f(x_i)-c_{yi}\|_2^2$對當前batch內的$c_{yi}$ 也計算梯度,並使用該梯度更新$c_{yi}$ 。此外,不能只使用中心損失來訓練分類模型,還需要加入Softmax損失,也就是說,最終的損失由兩部分構成,即$L = L_{softmax}+\lambda L_{center}$,其中$\lambda $是一個超參數。

  最後來總結使用中心損失來訓練人臉模型的過程。首先隨機初始化各个中心$c_{yi}$,接着不斷地取出batch進行訓練,在每個batch中,使用總的損失$L$,除了使用神經網絡模型的參數對模型進行更新外,也對$c_{yi}$進行計算梯度,並更新中心的位置。

  中心損失可以讓訓練處的特徵具有“內聚性”。還是以MNIST的例子來說,在未加入中心損失時,訓練的結果不具有內聚性。再加入中心損失后,得到的特徵如下圖所示。 

   

從圖中可以看出,當中心損失的權重λ越大時,生成的特徵就會具有越明顯的“內聚性” 。

五、使用特徵設計應用

當提取出特徵后,剩下的問題就非常簡單了。因為這種特徵已經具有了相同人對應的向量的距離小,不同人對應的向量距離大的特點,接下來,一般的應用有以下幾類:

  • 人臉驗證(Face Identification)。就是檢測A、B是否屬於同一個人。只需要計算向量之間的距離,設定合適的報警閾值(threshold)即可。
  • 人臉識別(Face Recognition)。這個應用是最多的,給定一張圖片,檢測數據庫中與之最相似的人臉。顯然可以被轉換為一個求距離的最近鄰問題。
  • 人臉聚類(Face Clustering)。在數據庫中對人臉進行聚類,直接用K-means即可。

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

YAMAHA 與 Gogoro 合作首款電動速克達 EC-05 於 8 月上市,售價 99,800 元

台灣山葉(YAMAHA)和 Gogoro 在 2018 年宣布展開合作之後,不少消費者都好奇兩家公司會擦出什麼樣的火花。YAMAHA 終於在 6 月 27 日正式發表電動速克達 EC-05,也是雙方合作的第一款機車。

EC-05 採用 Gogoro 市售車種的平台架構,搭配 YAMAHA 的原創設計,未來也會掛上 YAMAHA 的品牌。EC-05 會以換電為動力來源,支援 Gogoro 旗下的換電站 GoStation,不過車主在購車後需要另行和 Gogoro 簽約購買換電服務。新款的電動速克達由 Gogoro 負責製造,並透過 YAMAHA 的通路進行銷售。

EC-05 的動力系統是 G2 鋁合金水冷永磁同步馬達(S-Version),配合 MOSFET 水冷馬達控制器。安全極速達到時速 90 公里,靜止加速到時速 50 公里僅需 3.9 秒。空車重量為 106 公斤,加上電池則為 126 公斤,擁有 25L 的置物空間。EC-05 可以連結智慧型手機和 Apple Watch,並使用 NFC 和藍牙進行連結。

EC-05 的電池位於車身當中,座墊底層結構、置物箱的開口部位與收納空間都和 Gogoro 現有車種相同,不過重塑車身線條的設計風格。里程表則根據 Gogoro 原有的元件進行調整,略為提高並向前方移動,減少騎乘者所需的視線移動。坐墊結構與材質沿用 Gogoro 的現行車種,不過座墊後方略為墊高,提供加速時的止滑和支撐。

EC-05 的電池位於車身內部,擁有 25L 的置物空間。

EC-05 的里程表和 Gogoro 的車種類似,不過略為提高並向前方移動。

EC-05 的頭燈。

EC-05 的尾燈。

YAMAHA 表示,EC-05 能夠幫助擴展台灣市場的產品線,不僅回應多樣化顧客的需求,也向電動車領域跨出一步。YAMAHA 指出 EC-05 將為 YAMAHA 未來的電動機車家族打下基礎,似乎暗示未來會推出更多與 Gogoro 合作的車款。YAMAHA 台灣總經理小川真司表示,YAMAHA 日本母公司與其他大廠合作的機車聯盟目前只限於日本國內的市場,因此並不會影響台灣子公司和 Gogoro 的合作。

小川真司認為雖然 EC-05 內部與 Gogoro 的車種相同,但 YAMAHA 的風格與 Gogoro 不同,而且雙方的消費族群也不一樣,可以給不同生活方式的族群不同的選擇。此外,YAMAHA 在台灣市場已經深耕多年,有更多的經銷商夥伴,無論是銷售或保養都能更貼近消費者。YAMAHA 對 EC-05 頗具信心,喊出了一年 2 萬台的銷售目標。

EC-05 提供藍灰色、深黑色、深藍灰色和白銀色 4 種顏色讓消費者選擇,定價為台幣 99,800 元,補助最多的桃園市汰換二行程機車換購電動機車補助 33,000 元,因此最低台幣 66,800 元起。預計將在 7 月 1 日開放預購,8 月 1 日正式上市。YAMAHA 將在台北、台中和高雄展開 EC-05 的巡迴賞車活動,活動期間參與的消費者將有機會抽中電動速克達 EC-05。

EC-05 共推出藍灰色、深黑色、深藍灰色和白銀色四款顏色。

(合作媒體:。圖片來源:)

延伸閱讀:

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

區塊鏈成重要突破口,與幣圈無關卻與5G有關

  幾乎是一夜之間,區塊鏈就成了更熱門的話題,此前,如果我們還在說“物聯網、大數據、雲計算、人工智能和 5G”,那麼,以後這一長串的背後可能就要加上“區塊鏈”。

  誠然,國家將區塊鏈當成戰略來發展,並“要把區塊鏈作為核心技術自主創新的重要突破口,明確主攻方向,加大投入力度,着力攻克一批關鍵核心技術,加快推動區塊鏈技術和產業創新發展”,這對整個區塊鏈產業都是巨大的利好,但是,這種利好卻實實在在與現在網絡上那些頂着區塊鏈帽子實際卻是在搞傳銷的“幣”們,毫無關係。如果有關係,那也一定是負面。

  在國內,區塊鏈技術佔據優勢的公司依然是 BAT,特別是阿里巴巴和螞蟻金服。在 2018 年的世界互聯網大會上,螞蟻金服“自主可控金融級商用區塊鏈平台”與“阿里雲 supET 工業互聯網平台”同時入選 15 項世界互聯網領先科技成果之列。前者的區塊鏈因素顯而易見,後者實際上也在由區塊鏈提供製造生產質量追溯和供應鏈管理服務。

  據全球知名智能信息服務機構科睿唯安公布信息,截至 2019 年 4 月 30 日,阿里巴巴以 290 件區塊鏈專利方案數量穩居全球第一。結合權威知識產權產業媒體 IPRdaily 過去兩年發布的“全球區塊鏈專利企業排行榜”显示,阿里巴巴申請的區塊鏈專利數量已經連續三年全球第一。2019 上半年全球區塊鏈企業發明專利排行榜(TOP100) 中,阿里巴巴以 322 件專利位列第一,中國平安以 274 件專利排名第二,Nchain 以 241 件專利排名第三。此外,百度( 7 名)、騰訊( 13 名)、京東( 14 名)、華為( 28 名)、獵豹( 40 名)、中國移動( 44 名)等均榜上有名。

  從上面的數據可以看出來,真正在區塊鏈的研究上佔據優勢且不斷應用的,沒有一個是“發幣”的,都是實實在在的在落地。

  當然了,也許與幣有關。此前有消息傳言,央行可能將在未來幾個月內正式推出國家支持的数字貨幣“DCEP”,初期將向中國工商銀行、中國建設銀行、中國銀行、中國農業銀行、阿里巴巴、騰訊以及銀聯七家機構發行。如果成行,那將是世界上是首個法定数字貨幣,意義深遠。

  在官方發布的新聞中,將區塊鏈發展方向定位為四個方面:

  1、要探索“區塊鏈+”在民生領域的運用,积極推動區塊鏈技術在教育、就業、養老、精準脫貧、醫療健康、商品防偽、食品安全、公益、社會救助等領域的應用,為人民群眾提供更加智能、更加便捷、更加優質的公共服務。

  2016 年,螞蟻金服聯合中國紅十字基金會等公益機構上線區塊鏈試驗項目,使捐款人可以追蹤善款的完整流轉情況。2017 年 3 月,支付寶愛心捐贈平台全面引入區塊鏈技術,所有捐贈數據上鏈。實現了實時賬目公示,有助於解決公益財務透明的“痛點”。螞蟻金服公益運用區塊鏈技術追蹤籌款,建立起第三方公示體系區塊鏈資金流公示,為公益機構進行數據統計、項目執行跟蹤提供便利。區塊鏈具有不可篡改的特性,任何寫入區塊鏈的記錄均不能更改,可以供公眾監督及審計。而“區塊鏈+公益”正是利用這一特性,發揮公眾賬本的價值,不論用戶是捐十塊、二十塊還是幾百塊,讓用戶所獻出的每一筆都記錄在區塊鏈上,有跡可循,持續追溯。

  2016 年 10 月,阿里與微軟、小蟻、法大大等合作開發“法鏈”,推出基於阿里雲平台的郵箱存證產品,通過法鏈上備份的电子郵件和雲服務,阿里將使中國法院能大規模採用数字證據郵件。

  2017 年 3 月,阿里巴巴與普華永道合作,打造可追溯的跨境食品供應鏈,用於跟蹤產品從生產者到消費者之間的整個流程。

  2017 年 8 月,阿里健康與江蘇常州市合作推出我國首個基於醫療場景的區塊鏈應用――“醫聯體+區塊鏈”試點項目。

  2017 年 10 月 11 日,螞蟻金服 CTO 程立在螞蟻金服金融科技開放峰會上首度披露未來的技術布局――“BASIC”戰略,其中的B對應的就是區塊鏈(Blockchain),同時,技術實驗室宣布開放區塊鏈技術,支持進口食品安全溯源、商品正品溯源等,第一個落地場景將是海外奶粉品牌的追蹤,先是產自澳洲、新西蘭的 26 個品牌的奶粉。2017 年 11 月 24 日,天貓國際宣布升級全球原產地溯源計劃,未來將覆蓋全球 63 個國家和地區,3700 個品類,14500 個海外品牌,也將向全行業開放,賦能整個行業。2018 年 2 月,菜鳥與天貓國際官方消息,已啟用區塊鏈技術跟蹤、上傳、查證跨境進口商品的物流全鏈路信息,涵蓋生產、運輸、通關、報檢、第三方檢驗等商品進口全流程,為每個跨境進口商品打上獨一無二的“身份證”,供消費者查詢驗證。

  騰訊旗下的微眾銀行於 2016 年 6 月開發出面向金融業的聯盟鏈雲服務 BaaS,並在 2017 年 1 月落地了第一個商業場景,即微黃金項目。微黃金是騰訊的一項在線黃金交易服務,用戶可以在微信低門檻靈活購買黃金,其背後正是由騰訊開發底層基礎架構的聯盟鏈。騰訊、工商銀行等多個節點共同參与記帳。2018 年 4 月底,騰訊發布第一款區塊鏈遊戲《一起來捉妖》,試圖通過區塊鏈技術保障了遊戲稀有內容投放的公開公平性,同時用戶可以將稀有妖怪上鏈永久保存。

  2017 年 12 月,沃爾瑪、京東、IBM、清華大學电子商務交易技術國家工程實驗室共同宣布成立安全食品區塊鏈溯源聯盟,運用區塊鏈技術搭建“京東區塊鏈防偽追溯開放平台”。該平台推出之後,用戶只需打開京東 APP 找到購物訂單,通過“一鍵溯源”或直接掃描產品溯源碼,即可獲取溯源信息。

  2018 年 10 月,百度正式發布自主研發的區塊鏈網絡系統——超級鏈。同時,宣布與海南省政府合作,區塊鏈實驗室及度鏈公司落戶海南,並推出“區塊鏈+大閘蟹溯源”應用。

  2、要推動區塊鏈底層技術服務和新型智慧城市建設相結合,探索在信息基礎設施、智慧交通、能源電力等領域的推廣應用,提升城市管理的智能化、精準化水平。

  5 月 22 日,上海、浙江、江蘇、安徽 4 地法院成立全國首個區域司法鏈,實現從起訴到執行全程上鏈,極大提高了訴訟效率和法院公信力,降低訴訟成本。最早引入區塊鏈技術的杭州互聯網法院,上鏈半年,其知識產權糾紛案件的調撤率上升至 95.3%。

  2017 年 5 月,阿里投資 Symbiont,該公司致力於利用區塊鏈技術打造一個發行和交易智能證券的平台。此外,深圳財富文化集團已經打造了一個文化產權交易的區塊鏈平台,並與螞蟻雙鏈打通,解決文化藝術品流通、交易和一系列金融服務。

  2017 年 11 月 8 日,阿里巴巴集團、螞蟻金服集團與雄安新區簽署了戰略合作協議,阿里巴巴與螞蟻金服將承建数字雄安區塊鏈實施平台。

  另外,國網電商公司已建成國家電網公司系統內首個司法級可信區塊鏈公共服務平台,作為唯一央企與北京互聯網法院“天平鏈”互信互通,掛牌工信部區塊鏈重點實驗室電力應用實驗基地,參与首個區塊鏈國家標準制定,實現了區塊鏈技術在電力積分通兌、光伏簽約、票據繳費、电子發票等多場景落地應用。

  3、要利用區塊鏈技術促進城市間在信息、資金、人才、徵信等方面更大規模的互聯互通,保障生產要素在區域內有序高效流動。

  在 9 月末舉行的雲棲大會·螞蟻區塊鏈生態峰會上,螞蟻金服集團副總裁蔣國飛透露,螞蟻區塊鏈已落地 40 多個應用。含括跨境支付、供應鏈金融、通用溯源、电子票據等多個行業領域。並於同期宣布了與全球最大的種子和農藥公司拜耳合作,應用方向進一步擴展。

  螞蟻金服 8 月份宣布,基於區塊鏈技術的供應鏈協作網絡——螞蟻區塊鏈“雙鏈通”全面升級開放。這一服務運用區塊鏈技術可解決供應鏈金融中的信任難題,同時讓小微商家也能享受高效便捷的金融服務。目前,這一模式已在成都率先應用。通過與成都商業銀行、成都中小企業融資擔保公司的合作,“雙鏈通”完成了供應鏈金融的全鏈路覆蓋。上鏈后,整個融資流轉過程清晰留痕、不可篡改,所有參与方都要通過“雙鏈通”進行身份核實和意願確認,数字簽名實時上鏈,杜絕了資金挪用等風險。

  4、要探索利用區塊鏈數據共享模式,實現政務數據跨部門、跨區域共同維護和利用,促進業務協同辦理,深化“最多跑一次”改革,為人民群眾帶來更好的政務服務體驗。

  3 月,杭州地鐵聯合支付寶、螞蟻區塊鏈推出了區塊鏈电子發票。全程手機操作,耗時不到 10 秒,上班族再也不用前往窗口排隊取票了。支付寶聯合雲南省相關部門,在醫療、教育等多個民生服務場景落地區塊鏈电子票據。從地鐵电子發票到法院訴訟案件,再到电子票據平台,螞蟻區塊鏈在過去近 3 年時間里,相繼落地了 40 多個場景。其中長三角佔比超過一半。“上鏈”后長三角人辦事效率大大提升,不少事項可享受“秒級”服務。

  我們看到,在 5G 時代,無差別計算能力的流通成本會大幅下降,無差別計算能力是 AI 最重要的勞動要素,而區塊鏈就是 AI 最重要的勞動要素。阿里巴巴達摩院在《2019 十大科技趨勢》中提到,5G 和區塊鏈是未來十年的發展方向。《福布斯》發布的《2020 十大科技趨勢》也提到,5G 和區塊鏈都將於 2020 年崛起,未來與人們日常生活相關的每一個行業都會被變革。還是那句話,“誰能把當前的技術和資源用到最充分,誰就是這個時代的最強者”,也許 5G 的流量充沛,正是區塊鏈的黃金歲月。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門

人生苦短,我用 Python

前文傳送門:

Docker 基礎

首先說一件事情,就在本文寫作前一天,Mirantis 這家公司宣布收購了 Docker 的企業業務和團隊。並且在官網上也掛出了相關的文字。

沒別的意思,相關的新聞通告一下。

Docker 官網地址:

什麼是 Docker ?

emmmmm,說實話,Docker 是什麼並不好說,下面通過四點大致解釋下 Docker 到底是個什麼東西。

  1. Docker 是全球領先的軟件容器平台。
  2. Docker使用Google公司推出的Go語言進行開發實現,基於Linux內核的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。
  3. 由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器。Docke最初實現是基於LXC。
  4. 用戶可以方便地創建和使用容器,把自己的應用放入容器。

Docker 容器的特點:

  1. 輕量化:在一台機器上運行的多個Docker容器可以共享這台機器的操作系統內核;它們能夠迅速啟動,只需佔用很少的計算和內存資源。鏡像是通過文件系統層進行構造的,並共享一些公共文件。這樣就能盡量降低磁盤用量,並能更快地下載鏡像。
  2. 標準化:Docker容器基於開放式標準,能夠在所有主流Linux版本、Microsoft Windows以及包括VM、裸機服務器和雲在內的任何基礎設施上運行。
  3. 安全:Docker賦予應用的隔離性不僅限於彼此隔離,還獨立於底層的基礎設施。Docker默認提供最強的隔離,因此應用出現問題,也只是單個容器的問題,而不會波及到整台機器。

為什麼要用Docker:

  • Docker的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現“這段代碼在我機器上沒問題啊”這類問題;——一致的運行環境
  • 可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。——更快速的啟動時間
  • 避免公用的服務器,資源會容易受到其他用戶的影響。——隔離性
  • 善於處理集中爆發的服務器使用壓力;——彈性伸縮,快速擴展
  • 可以很輕易的將在一個平台上運行的應用,遷移到另一個平台上,而不用擔心運行環境的變化導致應用無法正常運行的情況。——遷移方便
  • 使用Docker可以通過定製應用鏡像來實現持續集成、持續交付、部署。——持續交付和部署

說起容器,與虛擬機的比較是一個永恆的話題,因為它做的事情和虛擬機做的事情非常的接近。

傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。

Docker 安裝

Win10 下的安裝

首先介紹一下 win 環境下 Docker 的安裝,打開官網,下載最新版的 Docker Desktop 。

Docker 官方下載地址:

下載前可能需要先註冊下 Docker Hub ,註冊完成後會直接跳轉下載頁面。

下載完成后默認配置 next 就好了。

驗證:

在 CMD 命令行中執行:

docker info

請確保 Docker 正常啟動狀態,否則會報錯的。

小編本地電腦執行后显示如下:

Client:
 Debug Mode: false

Server:
 Containers: 26
  Running: 0
  Paused: 0
  Stopped: 26
 Images: 28
 Server Version: 19.03.1
 ...

內容有些多,我就不全貼出來了,主要會显示一些當前 Docker 相關的信息。

CentOS 下的安裝

懶人神器,使用 CentOS 下的包管理工具 yum 進行安裝,直接輸入:

yum install docker

然後靜靜等待進度條走完,驗證命令和上面一致,同樣需確保 Docker 服務正常啟動。

CentOS 中 Docker 基本操作命令:

# docker 啟動
systemctl start docker
# 重啟 docker服務
systemctl restart docker
# 關閉 docker 服務
systemctl stop docker

驗證結果:

Docker 基礎

首先了解兩個概念:

鏡像:Docker 鏡像是用於創建 Docker 容器的模板。

容器:容器是獨立運行的一個或一組應用。

講人話就是鏡像可以是我們自己的程序,也可以是第三方廠商提供的組件,比如數據庫,緩存服務等等,而這個鏡像想要運行的話,就要放在容器裏面運行,它自己是不能單獨運行的,就好比炒菜,光有菜不行,還要有鍋,菜是在鍋里炒出來的。

因為 Docker 默認的鏡像源是在遙遠的太平洋彼岸,訪問速度會有些慢,建議各位同學配置一個國內的鏡像源。

國內的鏡像源有很多的,百度一下可以找到很多,小編這裏使用的阿里雲提供的容器鏡像加速服務,大家可以登錄自己的淘寶賬號,在阿里雲上找到容器鏡像服務:

具體的配置方案阿里雲已經提供出來了,小編這裏不再贅述,大家自己登錄阿里雲查看吧。

上面這些都配置完成后,我們來講幾個最基礎的 Docker 命令:

獲取鏡像

語法:docker pull NAME[:TAG]
其中,NAME是鏡像倉庫的名稱(用來區分鏡像),TAG是鏡像的標籤(用來表示版本信息)

查看鏡像

語法:docker images

可以看到,小編的機器上目前有一個 mysql5.7 鏡像。

搜索鏡像

語法:docker search [image-name]
從docker倉庫搜索docker鏡像

刪除鏡像

語法:docker rmi NAME
用來刪除指定鏡像,其中後面的參數可以是tag,如果是tag時,實際上是刪除該tag,只要該鏡像還有其他tag,就不會刪除該鏡像。當後面的參數為鏡像ID時,則會徹底刪除整個鏡像,連通所有標籤一同刪除

實戰 hello-world

首先輸入 docker pull hello-world 來拉取 hello-world 鏡像:

拉取成功后,我們使用 docker images 來查看下這個 hello-world 鏡像 :

好了,我們已經看到這個 hello-world 鏡像了,現在來嘗試一下啟動,使用命令 docker run hello-world

若是出現了上圖的內容則說明hello-world運行成功,如果沒出現的話,emmmmmmmmmm,你們可能就要想想自己之前的操作了。

本篇文章到這裏就結束了,希望各位同學能自己動手實踐一下,畢竟實踐出真知嘛。

參考

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

Python 命令行之旅:深入 click 之子命令篇

作者:HelloGitHub-Prodesire

HelloGitHub 的《講解開源項目》系列,項目地址:https://github.com/HelloGitHub-Team/Article

一、前言

在上兩篇文章中,我們介紹了 click 中的”參數“和“選項”,本文將繼續深入了解 click,着重講解它的“命令”和”組“。

本系列文章默認使用 Python 3 作為解釋器進行講解。
若你仍在使用 Python 2,請注意兩者之間語法和庫的使用差異哦~

二、命令和組

Click 中非常重要的特性就是任意嵌套命令行工具的概念,通過 和 (實際上是 )來實現。

所謂命令組就是若干個命令(或叫子命令)的集合,也成為多命令。

2.1 回調調用

對於一個普通的命令來說,回調發生在命令被執行的時候。如果這個程序的實現中只有命令,那麼回調總是會被觸發,就像我們在上一篇文章中舉出的所有示例一樣。不過像 --help 這類選項則會阻止進入回調。

對於組和多個子命令來說,情況略有不同。回調通常發生在子命令被執行的時候:

@click.group()
@click.option('--debug/--no-debug', default=False)
def cli(debug):
    click.echo('Debug mode is %s' % ('on' if debug else 'off'))

@cli.command()  # @cli, not @click!
def sync():
    click.echo('Syncing')

執行效果如下:

Usage: tool.py [OPTIONS] COMMAND [ARGS]...

Options:
  --debug / --no-debug
  --help                Show this message and exit.

Commands:
  sync

$ tool.py --debug sync
Debug mode is on
Syncing

在上面的示例中,我們將函數 cli 定義為一個組,把函數 sync 定義為這個組內的子命令。當我們調用 tool.py --debug sync 命令時,會依次觸發 clisync 的處理邏輯(也就是命令的回調)。

2.2 嵌套處理和上下文

從上面的例子可以看到,命令組 cli 接收的參數和子命令 sync 彼此獨立。但是有時我們希望在子命令中能獲取到命令組的參數,這就可以用 來實現。

每當命令被調用時,click 會創建新的上下文,並鏈接到父上下文。通常,我們是看不到上下文信息的。但我們可以通過 裝飾器來顯式讓 click 傳遞上下文,此變量會作為第一個參數進行傳遞。

@click.group()
@click.option('--debug/--no-debug', default=False)
@click.pass_context
def cli(ctx, debug):
    # 確保 ctx.obj 存在並且是個 dict。 (以防 `cli()` 指定 obj 為其他類型
    ctx.ensure_object(dict)

    ctx.obj['DEBUG'] = debug

@cli.command()
@click.pass_context
def sync(ctx):
    click.echo('Debug is %s' % (ctx.obj['DEBUG'] and 'on' or 'off'))

if __name__ == '__main__':
    cli(obj={})

在上面的示例中:

  • 通過為命令組 cli 和子命令 sync 指定裝飾器 click.pass_context,兩個函數的第一個參數都是 ctx 上下文
  • 在命令組 cli 中,給上下文的 obj 變量(字典)賦值
  • 在子命令 sync 中通過 ctx.obj['DEBUG'] 獲得上一步的參數
  • 通過這種方式完成了從命令組到子命令的參數傳遞

2.3 不使用命令來調用命令組

默認情況下,調用子命令的時候才會調用命令組。而有時你可能想直接調用命令組,通過指定 click.groupinvoke_without_command=True 來實現:

@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
    if ctx.invoked_subcommand is None:
        click.echo('I was invoked without subcommand')
    else:
        click.echo('I am about to invoke %s' % ctx.invoked_subcommand)

@cli.command()
def sync():
    click.echo('The subcommand')

調用命令有:

$ tool
I was invoked without subcommand
$ tool sync
I am about to invoke sync
The subcommand

在上面的示例中,通過 ctx.invoked_subcommand 來判斷是否由子命令觸發,針對兩種情況打印日誌。

2.4 自定義命令組/多命令

除了使用 來定義命令組外,你還可以自定義命令組(也就是多命令),這樣你就可以延遲加載子命令,這會很有用。

自定義多命令需要實現 list_commandsget_command 方法:

import click
import os

plugin_folder = os.path.join(os.path.dirname(__file__), 'commands')

class MyCLI(click.MultiCommand):

    def list_commands(self, ctx):
        rv = []  # 命令名稱列表
        for filename in os.listdir(plugin_folder):
            if filename.endswith('.py'):
                rv.append(filename[:-3])
        rv.sort()
        return rv

    def get_command(self, ctx, name):
        ns = {}
        fn = os.path.join(plugin_folder, name + '.py')  # 命令對應的 Python 文件
        with open(fn) as f:
            code = compile(f.read(), fn, 'exec')
            eval(code, ns, ns)
        return ns['cli']

cli = MyCLI(help='This tool\'s subcommands are loaded from a '
            'plugin folder dynamically.')

# 等價方式是通過 click.command 裝飾器,指定 cls=MyCLI
# @click.command(cls=MyCLI)
# def cli():
#     pass

if __name__ == '__main__':
    cli()

2.5 合併命令組/多命令

當有多個命令組,每個命令組中有一些命令,你想把所有的命令合併在一個集合中時,click.CommandCollection 就派上了用場:


@click.group()
def cli1():
    pass

@cli1.command()
def cmd1():
    """Command on cli1"""

@click.group()
def cli2():
    pass

@cli2.command()
def cmd2():
    """Command on cli2"""

cli = click.CommandCollection(sources=[cli1, cli2])

if __name__ == '__main__':
    cli()

調用命令有:

$ cli --help
Usage: cli [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  cmd1  Command on cli1
  cmd2  Command on cli2

從上面的示例可以看出,cmd1cmd2 分別屬於 cli1cli2,通過 click.CommandCollection 可以將這些子命令合併在一起,將其能力提供個同一個命令程序。

Tips:如果多個命令組中定義了同樣的子命令,那麼取第一個命令組中的子命令。

2.6 鏈式命令組/多命令

有時單級子命令可能滿足不了你的需求,你甚至希望能有多級子命令。典型地,setuptools 包中就支持多級/鏈式子命令: setup.py sdist bdist_wheel upload。在 click 3.0 之後,實現鏈式命令組變得非常簡單,只需在 click.group 中指定 chain=True

@click.group(chain=True)
def cli():
    pass


@cli.command('sdist')
def sdist():
    click.echo('sdist called')


@cli.command('bdist_wheel')
def bdist_wheel():
    click.echo('bdist_wheel called')

調用命令則有:

$ setup.py sdist bdist_wheel
sdist called
bdist_wheel called

2.7 命令組/多命令管道

鏈式命令組中一個常見的場景就是實現管道,這樣在上一個命令處理好后,可將結果傳給下一個命令處理。

實現命令組管道的要點是讓每個命令返回一個處理函數,然後編寫一個總的管道調度函數(並由 MultiCommand.resultcallback() 裝飾):

@click.group(chain=True, invoke_without_command=True)
@click.option('-i', '--input', type=click.File('r'))
def cli(input):
    pass

@cli.resultcallback()
def process_pipeline(processors, input):
    iterator = (x.rstrip('\r\n') for x in input)
    for processor in processors:
        iterator = processor(iterator)
    for item in iterator:
        click.echo(item)

@cli.command('uppercase')
def make_uppercase():
    def processor(iterator):
        for line in iterator:
            yield line.upper()
    return processor

@cli.command('lowercase')
def make_lowercase():
    def processor(iterator):
        for line in iterator:
            yield line.lower()
    return processor

@cli.command('strip')
def make_strip():
    def processor(iterator):
        for line in iterator:
            yield line.strip()
    return processor

在上面的示例中:

  • cli 定義為了鏈式命令組,並且指定 invoke_without_command=True,也就意味着可以不傳子命令來觸發命令組
  • 定義了三個命令處理函數,分別對應 uppercaselowercasestrip 命令
  • 在管道調度函數 process_pipeline 中,將輸入 input 變成生成器,然後調用處理函數(實際輸入幾個命令,就有幾個處理函數)進行處理

2.8 覆蓋默認值

默認情況下,參數的默認值是從通過裝飾器參數 default 定義。我們還可以通過 Context.default_map 上下文字典來覆蓋默認值:

@click.group()
def cli():
    pass

@cli.command()
@click.option('--port', default=8000)
def runserver(port):
    click.echo('Serving on http://127.0.0.1:%d/' % port)

if __name__ == '__main__':
    cli(default_map={
        'runserver': {
            'port': 5000
        }
    })

在上面的示例中,通過在 cli 中指定 default_map 變可覆蓋命令(一級鍵)的選項(二級鍵)默認值(二級鍵的值)。

我們還可以在 click.group 中指定 context_settings 來達到同樣的目的:


CONTEXT_SETTINGS = dict(
    default_map={'runserver': {'port': 5000}}
)

@click.group(context_settings=CONTEXT_SETTINGS)
def cli():
    pass

@cli.command()
@click.option('--port', default=8000)
def runserver(port):
    click.echo('Serving on http://127.0.0.1:%d/' % port)

if __name__ == '__main__':
    cli()

調用命令則有:

$ cli runserver
Serving on http://127.0.0.1:5000/

三、總結

本文首先介紹了命令的回調調用、上下文,再進一步介紹命令組的自定義、合併、鏈接、管道等功能,了解到了 click 的強大。而命令組中更加高階的能力()則可看官方文檔進一步了解。

我們通過介紹 click 的參數、選項和命令已經能夠完全實現命令行程序的所有功能。而 click 還為我們提供了許多錦上添花的功能,比如實用工具、參數自動補全等,我們將在下節詳細介紹。

『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟着我們的文章,你會發現編程的樂趣、使用和發現參与開源項目如此簡單。歡迎留言聯繫我們、加入我們,讓更多人愛上開源、貢獻開源~

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

嚇人!在浴池洗浴竟會感染梅毒?很多人都不知情…

  本文專家:田靖博士,南部戰區疾病預防控制中心,主治醫師

  我們都知道艾滋病很可怕,得了基本上就需要終生抗爭。

  最近,僅次於艾滋病的第二大性接觸疾病——梅毒,突然成了微博上最熱門的話題。

  某知名企業創始人稱自己“在浴池洗浴感染梅毒,打了 6 天針后治癒”。


微博截圖

  先是洗浴感染梅毒驚呆眾網友,只要在公共中心泡過澡、游過泳的都表示瑟瑟發抖。

  還有對 6 天治癒梅毒表示疑問,畢竟我們所知的梅毒是比較可怕的。

  那泡澡到底會不會感染梅毒?梅毒究竟該如何治癒?我們就網友關心的這些問題科普一下。

  洗浴、游泳真會感染梅毒嗎?

  梅毒螺旋體(Treponema pallidum,TP)又稱為蒼白螺旋體,是造成感染梅毒的“罪魁禍首”。

  目前全球每年約有 1200 萬新發梅毒病例,我國梅毒發病率呈上升趨勢。

  梅毒的感染途徑有——

  1、血液傳播和性接觸傳播

  梅毒螺旋體僅可以感染人類,血液傳播和性接觸傳播是主要途徑。95% 以上的感染者通過危險的無保護的性行為感染,而男同性戀人群中的梅毒感染率近年來急劇上升。

  2、母嬰傳播。梅毒可以通過垂直傳播途徑,由感染梅毒的母親傳染給新生兒。

  梅毒螺旋體病毒感染人類需要具備一定的病毒載量,在某些特殊條件下才能發生,如通過性接觸直接接觸梅毒感染者的創面或者血液傳播,同時也取決於被感染者的身體狀況等。

  因此,常規使用公共設施和出入公共場所,如游泳池游泳、接觸馬桶墊、共用餐具、衣物接觸等情況都不會感染梅毒。

  並且游泳池中的水通常含有漂白粉等消毒劑,不適合淋球菌、梅毒螺旋體等性病病原體存活。所以,去正規的游泳館不存在感染梅毒的可能性。

  梅毒有什麼危害?

  按照《梅毒診斷標準》(WS273-2018),根據梅毒感染的不同階段以及出現癥狀的差異可以將梅毒分為I期、II 期、III 期、胎傳和隱形梅毒。

  I 期~III 期梅毒對於患者的損害是不同的,能造成——

  1. 硬下疳、腹股溝或患部近位淋巴結腫大;
  2. 多個部位的瀰漫性皮損,最終造成頭面部以及四肢產生結節性梅毒疹;
  3. 關節出現結節;
  4. 皮膚、口腔、舌咽出現樹膠腫;
  5. 產生骨梅毒、眼梅毒、心血管梅毒、神經梅毒和其他內臟梅毒等。

  胎傳:所有未經有效治療的梅毒母親所生的嬰兒可能感染胎傳梅毒,根據發病時間分為早期胎傳梅毒、晚期胎傳梅毒和隱性胎傳梅毒。

  隱形梅毒:無臨床癥狀與體征的隱性梅毒患者,仍然具有傳染性,部分病人可以發生晚期損害。

  晚期梅毒可導致不可逆的心血管損傷和中樞系統損害,嚴重者可導致死亡。

  中樞神經系統的梅毒感染可以發生在疾病的任何時期,病程越長、精神癥狀越嚴重。

  此外,梅毒與艾滋病常常是一對“好兄弟”。在感染艾滋病的患者中,大約有 42.8% 的患者都曾感染梅毒。

  梅毒感染會造成皮膚破損,增加體液中 CD4+ 細胞的數量,為 HIV 的感染提供更多的靶細胞,促進 HIV 的傳播,因此從這個意義上來說,感染梅毒是艾滋病的“幫凶”。

  梅毒真能 6 天治癒嗎?

  不一定!

  因為涉及個人體質、治療抗生素的使用方案及青霉素是否過敏等問題,治療周期和結果都會因人而已,最重要是嚴格遵循醫囑和臨床檢查結果。

  因此,治癒的時間根據選擇藥物和患者的病情來確定,不能簡單用時間判斷!

  感染梅毒該如何治療?

  青霉素是治療梅毒的首選藥物之一,對病原菌的細胞壁生成進行抑制 , 從而降低抗原反應素,可短期改善認知功能。青霉素過敏者可採用紅黴素治療。

  多西環素是非青霉素的一種,及早治療血清轉陰率可達 83%-100%,成為當前治療早期梅毒(梅毒螺旋體感染<2 年,II 期早期梅毒)的主要手段。

  頭孢曲松鈉及苄星青霉素聯合治療梅毒比單一用藥效果好。

  不過,抗生素治療僅對免疫系統正常的患者有效。當患者產生梅毒血清抵抗時,單獨使用青霉素,無論增加劑量還是延長治療時間,都對患者無效。

  梅毒治療后,15%~41% 的患者可能形成梅毒血清固定,使用免疫調節劑再治療梅毒血清固定患者有一定的效果,但存在爭議。

  所以,治療梅毒需要嚴格遵循醫囑,才能達到有效治癒。

  此外,還要保持健康良好的生活方式,防止不安全的性行為。

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

國家電網預計將於2020年6月前全面實現即插即沖新技術

  作者:JoJo

  【TechWeb】10 月 27 日,近日,國網電動汽車服務有限公司發布了充電服務創新模式“車電服務包”。國網電動汽車公司總經理沈建新表示,國網電動汽車公司將加大車聯網的規模,擴大平台充電樁的數量。同時,國網電動汽車公司將在半年內實現“即插即充、無感支付”在公共場站、專用場站、私人充電樁業務場景全覆蓋,加速布局主要城市充電網絡。

  該措施首先是提供主機廠車電包服務範圍內場景全覆蓋、布局更密集的充電設施服務網絡。 國網目前已建成 9 萬自營充電樁,其中高功率直流快充 6.5 萬根。對此,沈建新表示,未來還將引入更多社會資源,擴大充電樁規模,保證主要城市充電站布點半徑不超過 500 米,同一站點充電等候不超過 30 分鐘,確保充電服務套餐用戶實現區域內充電暢行。

  其次,是加快即插即充、無感支付新技術全覆蓋。2020 年 6 月前,通過技術升級及硬件改造,國網電動汽車公司將完成國網系統充電樁全面支持即插即充,新投入車聯網平台的充電樁全部滿足“即插即充、無感支付”要求,實現“充綠色電,比加油更方便”。

  此次發布的“車電服務包”是與四家車企聯合推出與新車綁定銷售的充電產品,用戶一次付費購買“車電服務包”並綁定車輛后,即可在國網充電樁上享受“即插即充、無感支付”。電動汽車插入充電槍后,充電過程不需要人為干預,自動完成認證、充電啟動、充電停止以及訂單生成與結算,實現了車、樁、網、能源的泛在互聯與高效互動,是國家電網公司泛在電力物聯網建設的典型終端。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

挪威嘗試無線電動車充電,面臨雞生蛋、蛋生雞問題

電動車最讓傳統內燃機汽車車主心生疑慮的地方,就是電池續航力不如油箱裡的油讓人安心,半路沒電了,即使來到充電站,不像加油很快就能加滿,充電需要充上好一陣子。為了解決這個電動車發展的障礙,北歐人想到一個好點子,那就是讓電動車可以在馬路上、譬如等紅燈的時候,就能無線充電,這樣電力生生不息,就不怕沒電啦!點子雖好,測試卻遇上了巨大的障礙。

芬蘭國營電力公司芬電(Fortum)原本於 2019 年 3 月時,宣布與挪威首都奧斯陸以及美國公司動量動力(Momentum Dynamics)合作,要嘗試打造 75 千瓦(kilowatt)的無線快速充電基礎設施,初步目標是放在計程車上,因為計程車司機時間就是金錢,不想在充電樁慢慢等充電,但是行駛的里程又較一般車輛更長,不過計程車常會在車站、旅館等處排隊等客,這個等客人的時間,正好用來無線充電。

尤其是北歐國家為了空氣污染等因素鼓勵電動車計程車,以奧斯陸來說,規劃 2023 年要達到計程車「零排放」,也就是要全電動車化,這種基礎設施就更需要了。奧斯陸市積極想發展無線充電技術以說服計程車司機都改為全電動車,因為雖然挪威是全球電動車滲透率最高的國家,但計程車司機仍然大多繼續使用舊的燃油汽車,其中一大原因就是不願意等待充電時間。

奧斯陸市打算先在車站的計程車等客排隊處的路面建設無線充電系統,讓計程車一邊等客一邊充電,當計程車先一步測試無線充電成功,之後,就能推廣到所有車輛,讓每輛電動車都能利用路邊停車時無線充電,或等紅燈時無線充電,再也不用擔心充電問題。

芬電的無線充電系統將由動量動力來製造,設計上只要車輛停到預設的充電處,就可以開始無線充電,系統並內建金屬感應器,以免有鐵鋁罐不小心滾到車底,在無線充電的電磁作用下變熱而發生危險,另外動量動力也計劃安裝生物組織感應器,以免小孩或貓跑到車底受到電磁波影響,目前該系統的充電效率達 94%,與插電充電相差無幾,系統造價則約比傳統充電樁貴上 20%,每個充電點造價 3 萬歐元。不過,成本還不是最大的問題。

計畫仍在紙上談兵階段,將延遲到 2020 年

這個點子就理論上很好,不料執行面卻遇上嚴重問題,導致至今一事無成,問題出在哪?這是個傳統的雞生蛋、蛋生雞問題,那就是:想要無線充電,需要兩方面配合,一方面路面要建立無線充電的基礎建設,這部分奧斯陸市雖然正在計劃進行,但是另一方面,車廠也要打造出能無線充電的電動車,兩方配合才能實現無線充電。但是,沒有基礎建設,車廠打造無線充電車毫無意義,而沒有相對應能無線充電的車,建設基礎建設也毫無意義。

計劃合作的各方找遍了無數車廠,雖然車廠的興趣蠻高,但是相對於要在電動車上添加無線充電模組,這個無線充電模組又只能先在奧斯陸試用,在其他地方是廢鐵一塊,車廠現在的注意力比較著重於如何更順利量產現有電動車之上,尤其是要降低成本,在這個大方向上,要車廠增加成本去添加無線充電模組,可說背道而馳。

這下計畫遇到了困難,要是沒車可適用,打造基礎設施又有何意義呢?當然可以用現有車輛改造,但那就失去前期測試的意義,因為芬電希望測試結果能很快擴散到其他城市,因此使用量產車來測試才有意義。於是計畫只能繼續在紙上談兵階段,目前初步將延遲到 2020 年春季。

奧斯陸市的進行意願仍然很高,無線充電計程車的測試要何時才能開始進行,就得看車廠方面何時能抽出注意力來思考未來車款的無線充電規劃問題了。

(合作媒體:。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

平板收購,iphone手機收購,二手筆電回收,二手iphone收購-全台皆可收購

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益