[好書分享] Dyson- 詹姆斯.戴森的發明人生

Dyson - 詹姆斯.戴森的發明人生
Invention : A Life of Learning Through Failure
作者: 詹姆斯.戴森  
原文作者: James Dyson  
譯者: 林錦慧  張玉芬  
出版社:寶鼎 

買書推薦網址:

前言:

這是 2024 年第 11 本讀完的書。雖然是 2025 才補起來,因為近期看的書籍真的不太多,並且都沒有開始寫部落格記錄一下。

至於當初為什麼要讀這本書,主要就是大家都知道 Dyson 是一家以 CEO 是工程師起家作為宣傳主軸的私立公司(筆者寫文章的時候,還是沒有公開上市)。而創辦人跟執行長 Dyson 究竟是用什麼樣的理念來經營這一家具有創造力的公司,我想會是每一個創業產業與資訊業界的人都需要學習跟了解的。

內容摘要:

夢想能同時成為工程師、設計師和製造者
在報章雜誌還沒出現「設計」二字的年代,原本是老師眼中的中等生戴森,憑著美術成績取得藝術學院的入學資格,透過自學工程設計,成為英國罕見兼具設計與工程學的專家。在1970年代,21歲的戴森便會設計引擎,23歲發明至今仍能使用的高速登陸艇「海上卡車」。他這等天賦卻與當時社會重人文輕科學的氛圍格格不入,戴森想用雙手證明自己的價值。

第一次創業卻被慘遭股東趕離如同APPLE的賈伯斯
在最動盪的1970年代中期,戴森用二創發明的球形手推車開始他的第一次創業,這個紅色的球輪手推車不只驚豔消費者還得到優良設計標章的肯定,並在因緣際會下遇見一生的「摯愛」氣旋機。可惜當公司業務越來越上軌道時,慘遭股東趕離公司還失去改良手推車的專利權,雖落得身無分文,但心中卻悄悄生出革命性吸塵器的構想,成為人生轉捩點的開始。

Dyson成為知名企業前,戴森經歷5,000多次失敗
在1983年戴森成功發明世界第一台無集塵袋吸塵器「G-Force」之前,他在4年間進行5,126次失敗的實驗。研發過程中幾乎傾家蘯產,即使成功發明出真空吸塵器,卻又苦熬於專利權訴訟和耕耘市場。直到1993年,正式在英國推出第一代Dyson吸塵器「DC01」上市,成為最創新又暢銷的真空吸塵器,隨後一步步在美、日、澳、加……等國廣受歡迎,Dyson逐步扎穩家電王國的地位。

發明是終身志業,是詹姆斯・戴森一路走來的人生
Dyson從吸塵器跨足乾手機、電風扇到吹風機,每一次出手都翻新該產業的設計概念,獲得前所未有的成功,成為全球數一數二的家電品牌。可是戴森並不以成為富豪、擁有全球家電第一品牌為滿足,反而積極投入電動車研發、跨足科技農業及興辦戴森工程技術學院,因為真正驅動他的一直都是渴望以發明、創新的產品與精神,解決當前與未來的問題,並發掘渴望世界更美好的年輕人,一起攜手同行!

Chapter 1 少年時期
Chapter 2 藝術學校的生活
Chapter 3 海上卡車
Chapter 4 球輪手推車
Chapter 5 馬車庫
Chapter 6 DC01
Chapter 7 開創核心科技的先鋒
Chapter 8 邁向全球
Chapter 9 進軍汽車設計
Chapter 10 支持可持續發展農業
Chapter 11 教育:培育年輕人才的搖籃
Chapter 12 塑造未來

心得:

詹姆斯・戴森 是 Dyson 這間私營企業公司的執行長更是主要創辦人之一,他是一個相當實事求是的工程師,對於優化與實驗有著異常執著與專注的精神。 可以從他 5126 次失敗的馬達實驗中看出來,並且他也很願意分享他的想法,在英國創立了許多設計學院,讓 Dyson 這個需要高度人力與智力的產業,依舊可以在英國扎根。

這本書也分享很多關於 Dyson 他自己的看法(書中寫得相當生氣)就是關於風扇烘手機的概念,因為當初受到許多衛生紙公司的攻擊,並且跟學校聯合給出一些不公平的測試報告。 這件事情也在這本書有了相當清楚的解釋。 不過不愧是工程師,對於自己家的產品都可以使用專利或是相關論文加以反擊。

如果你想要了解,這樣的以工程設計起家的公司老闆究竟如何評斷自己的公司。你應該要看看,他是如何在書中將不段反覆的實驗。寫成每一次美好的經驗。相當的令人佩服。

[筆記] 快速記錄一下 Google Gemini API Hackathon Awards 的心得

image-20241127084801117

當初回到未來的博士來協助代言的黑客松活動現在總算公開了冠軍了,這裡分享幾個有趣的應用跟心得。

網站: https://ai.google.dev/competition?hl=zh-tw

Jayu 個人助理獲選最佳整體應用程式。

https://ai.google.dev/competition/projects/jayu?hl=zh-tw

  • Jayu 是一款個人助理應用程式,整合 Gemini API。
  • 能夠與螢幕互動,並以畫面為上下文回答問題。
  • 支援語音轉文字、文字轉語音及手勢辨識。
  • 透過 Flash 模型和 Pro 模型協同運作,執行不同任務。
  • 注重使用者隱私,不會存取未顯示的資料或檔案。

  • VITE VERE 獲選影響力最大及最受歡迎應用程式,幫助認知障礙者。
  • Prospera 數位副駕駛獲選最實用及最佳 Flutter 應用程式,協助銷售。
  • Outdraw AI 獲選最有創意應用程式,是一款人類對AI的遊戲。
  • 凝視連結幫助 ALS 患者溝通,獲選最佳 Android 應用程式。
  • Everies、Trippy、ViddyScribe 和 PenApple 分別獲得 ARCore 最佳運用、Firebase 最佳運用、最佳網頁應用程式及最佳遊戲應用程式。 #GoogleGemini #AIcompetition #DeveloperAwards

[遊戲天國] 黑暗靈魂-1 重製版 一 PS5全破紀錄(又又又全破)

image-20241108113219570

前言

其實之前已經有全破過了,[電玩][NS] 黑暗靈魂 - 重製版: 手殘黨全破心得 但是因為網路上看到這個影片 「【黑魂重制版】完美开局攻略,半小时拿到满强化武器&全套毕业装备,横扫罗德兰」 就想說玩玩看能不能刷到關刀,畢竟之前在 NS 全破的時候就沒拿到關刀(黑騎士鉞)。想說換到 PS5 試試看(因為有錄影~~~~)

結果…… 不小心刷到關刀了,也把他升到滿級。就想說再來全破一次。

攻略重點

先拿關刀,先拿關刀,先拿關刀

  • 然後依照攻略 「【黑魂重制版】完美开局攻略,半小时拿到满强化武器&全套毕业装备,横扫罗德兰」 把全部的「光輝楔形石」
    • 北方不死院的小鳥巢: 在北方不死院,您可以與小鳥巢進行物品交換。提供以下物品可獲得光輝楔形石:
      • 血紅苔蘚球(Bloodred Moss Clump)
      • 解毒苔蘚球(Purple Moss Clump)
      • 毒紫苔蘚球(Blooming Purple Moss Clump) 將上述物品放入小鳥巢,重新載入遊戲後即可獲得光輝楔形石。
  • 然後就開始把以前很痛苦的地方打一次試試看。

黑暗靈魂的關刀,快速通關紀錄

  • 山羊頭惡魔(也就是俗成的狗王),因為狗的工速很快又痛。讓這個地方是新手卡觀點。想不到用關刀一下就過啦~~~~
  • 貪食惡龍第一個可以斷尾的怪,有關刀超好斷尾的。
  • 渾沌魔女 - 滿級關刀一周目遊
  • 病村是我最喜歡的地方(因為超難),但是真的很難走。也錄影一下怎麼快速到王。
  • 會隱身的半龍普利希拉不難打,但是難的是斷尾。(沒斷尾)
  • 接續我的好運,想不到連「貪欲者的烙印」也是第一次打就有。 XDDDD
  • 被三個人圍毆,有關刀也是很快。 幫防火女報仇 - 女神的騎士- 羅特雷克
  • 以前最難的關卡設計,王城雙劍(是因為射弓箭的人位子太好)又太硬,卡超久。這是一次就過。如何正確地打「王城雙箭」
      1. 先打右邊
      2. 站在窗戶周圍,不會被後面的射
      3. 吸引他過來掉下去。
      4. 另外一個一樣。
  • 灰色大狼希夫 (超捨不得打他),但是會卡劇情。 Q___Q
  • 小隆德四王(用關刀砍就是快)
    • 跑快一點
    • 儘量近身打,傷害比較小
  • 白龍希斯 - 斷尾 - 月光大劍
  • 騎士亞爾特留斯
    • 離遠一點比較好躲
    • 三連砍要躲掉
  • 烏薪王葛溫
    • 不難打,拿了關刀兩次就過。 XDDDDd

[敗家紀錄] 如何在台灣啟動 Rayban Meta Glasses 的 AI 功能 (2025 更新)

image-20241107112526283

前言

其實我一直都蠻喜歡 Rayban 的太陽眼鏡,之前也有買一副。 這次的 Meta AI 太陽眼鏡之前就蠻想買的,但是想說不知道會不會有新的。還好看到近期沒有出新的太陽眼鏡後,就下手買了。 這一篇會稍微紀錄相關的購買方式跟如何在台灣啟動 Meta AI 在太陽眼鏡上。

怎麼有效購買: (透過托運)

Amazon: [Ray-Ban Meta Smart Glasses, Wayfarer](https://www.amazon.com/dp/B0CGXYNWBH)

用代購買的,兩週可以到台灣。用這個邀請連結,可以用 Amazon Prime 價格,還有 150 運費可以折抵 https://www.buyandship.com.tw/invite/7510252302 用我邀請鏈結,可以各拿 150 免運,從美國運回來只需要 170 台幣,等於 20 就可以運回 Rayban Meta 眼鏡。

購買相關流程:

  • 先開立 BuyAndShip 帳戶
  • 選取 Portland 倉庫位址:
    • 13822 NE AIRPORT WAY
    • PORTLAND, OR 97251-9614
    • United States
  • 在 Amazon 設定下填寫倉庫(因為 Portland 不用收稅)
  • 等 Amazon 發貨之後,會到 BuyAndShip 網頁上看到入庫。
  • BuyAndShip 會自動轉貼到 香港倉庫
  • BuyAndShip 設定平台合併貨物寄到台灣地址(跟付運費)

基本功能:

雷朋智能眼鏡 Rayban Smart Glasses 購買開箱心得:

- 聽音樂很不錯

- 拍照跟影片效果很不錯

- AI 功能台灣還不能用(修正: 可以用 VPN 啟動

接下來就等著出去玩可以拍風景 🙂

image-20241107153844070

如何在台灣啟動 MetaAI 功能

image-20241107153858264

更新:  2025/01/17 
因為在版本 V193 之後(大概是 2024/11 月底) 他好像會抓取 Meta 帳戶的區域,而非你安裝 App 的網路 IP 。所以原來方法無法正常成功,需要透過以下修改。
  • 我的方式是在 VPN 連著的情況下開一個新的 meta account。 (需要 VPN 連線到美國)
  • 這樣就是要把眼鏡 factory reset 之後重新用新的 meta account 來配對綁定。

[遊戲天國] 血源詛咒 一 PS5全破紀錄

image-20241031235812644

前言

一年前自從買了 PlayStation Portal 之後,其實就逐漸有在打「血源詛咒」,但是老實說血源詛咒難度真的不小。就算我「隻狼」也全破了,還是很不習慣血源詛咒的拼血模式。

因為血源詛咒比較難找人一起打(我是都沒招過啦),所以打起來卡關的時候真的很絕望的勒。

必須得說,血源詛咒真的光線太暗。由於用 HDR 電視,根本都看不到怪。一定要拿火把,不然都沒有的看。

攻略重點

記得「鋸矛」是最好用的武器,攻速快(沒有之一),傷害又相當嚇人。 還是記得要刷金杯去把「血岩」刷滿。

比較難打魔王 - 愚笨蜘蛛羅姆

真的覺得很難打,因為每次都抓不到訣竅。 正常來說,如果你可以在第一階段變身的時候,把他打斷。他就會讓你打到死。 但是「鋸矛」唯一的缺點就是失衡值不夠高,所以每次都讓他的小蜘蛛一湧而上。

第一階段要清完小蜘蛛,然後想辦法打斷。如果沒有……

第二階段開始就打完就跑,然後鏡頭要對著。避免遠程魔法。

受詛咒的路德維希 - 月光大劍我來啦

真的不好打,撕咬攻擊真的很麻煩。傷害又很大。記得繞在腳後面去打。第一下一定要躲掉,儘量往你的右前方躲,然後在後面刷他。 要小心連環技,這是比較麻煩的部分。 第二階段很好打,直接上去應剛。重擊馬上就可以處決,我遇到的第二階段是初見殺。

比尾王更難打的 - 星辰鐘塔的瑪麗亞女士

槍反是唯一解方 + 鋸矛10

  • 爪印 兩個 15% + 10%
  • 內臟爆擊 恢復 HP

第一階段: 往你的右前方閃 第二階段之後: 往你的左前方閃 一個重點: 第二階段轉變的時候可以打兩三刀,血噴完之後可以衝上去再給兩三刀

[Google Cloud] 如何在 GCP Cloud Run 上面透過 LangChain 取得 YouTube 的相關資訊

image-20241006183038597

前言

之前提到過,我開發了一個「透過 IFTTT 與 LangChain 打造的科技時事 LINE Bot」,這個 Bot 可以幫助我獲取所需的資訊。然而,最近我發現許多 YouTube 影片中包含了豐富的技術資訊,這促使我思考如何有效地獲取 YouTube 字幕資訊以便整理和分析。

雖然 LangChain YouTube Transcripts Loader 可以快速獲取字幕資訊,但在部署到 Google CloudRun 時卻遇到了一些問題。本文將分享我遇到的問題及解決過程,希望能對大家有所幫助。

使用 LangChain YouTube Transcripts Loader 獲取影片字幕

根據 LangChain 的教學文件 (YouTube transcripts),我們可以使用這個套件來獲取帶有字幕的 YouTube 影片,並通過分析快速了解影片內容。以下是一些範例程式碼:

%pip install --upgrade --quiet pytube
loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=QsYGlZkevEg", add_video_info=True
)
loader.load()

在 GCP CloudRun 上無法獲取資料

當我嘗試將程式碼部署到 Google CloudRun 時,使用以下程式碼:

def summarized_from_youtube(youtube_url: str) -> str:
    """
    Summarize a YouTube video using the YoutubeLoader and Google Generative AI model.
    """
    try:
        print("Youtube URL: ", youtube_url)
        # Load the video content using YoutubeLoader
        loader = YoutubeLoader.from_youtube_url(
            youtube_url, add_video_info=True, language=["zh-Hant", "zh-Hans", "ja", "en"])
        docs = loader.load()

        print("Pages of Docs: ", len(docs))
        # Extract the text content from the loaded documents
        text_content = docs_to_str(docs)
        print("Words: ", len(text_content.split()),
              "First 1000 chars: ", text_content[:1000])

        # Summarize the extracted text
        summary = summarize_text(text_content)

        return summary
    except Exception as e:
        # Log the exception if needed
        print(f"An error occurred: {e}")
        return ""

結果卻完全無法獲取任何資料,沒有錯誤訊息,但結果是空的。

image-20241005230731585

Debug 1: 在 Colab 上測試相同程式碼

可以參考以下的 gist 程式碼

image-20241005230200026

起初我以為是程式碼的問題,但在 Colab 上卻能正常執行。看來需要使用 GoogleApiYoutubeLoader

在 Google CloudRun 上使用 LangChain Youtube Loader

要在 CloudRun 上使用 GoogleApiYoutubeLoader,需要遵循以下步驟:

image-20241005231500039

image-20241006001807126

使用 Secret Manager 獲取資料

  • 首先需要在環境變數中設定 Project ID PROJECT_ID
  • 然後將資料預先存放在 youtube_api_credentials 中。
def get_secret(secret_id):
    logging.debug(f"Fetching secret for: {secret_id}")
    client = secretmanager.SecretManagerServiceClient()
    name = f"projects/{os.environ['PROJECT_ID']}/secrets/{secret_id}/versions/latest"
    response = client.access_secret_version(request={"name": name})
    secret_data = response.payload.data.decode("UTF-8")
    logging.debug(f"Secret fetched successfully for: {secret_id}, {secret_data[:50]}")
    return secret_data

這樣就可以安全地透過 Secret Manager 獲取資料。

在 GCP CloudRun 上部署範例程式碼

程式碼: https://github.com/kkdai/gcp-test-youtuber

def load_youtube_data():
    try:
        logging.debug("Loading YouTube data")
        google_api_client = init_google_api_client()

        # Use a Channel
        youtube_loader_channel = GoogleApiYoutubeLoader(
            google_api_client=google_api_client,
            channel_name="Reducible",
            captions_language="en",
        )

        # Use Youtube Ids
        youtube_loader_ids = GoogleApiYoutubeLoader(
            google_api_client=google_api_client,
            video_ids=["TrdevFK_am4"],
            add_video_info=True,
        )

        # Load data
        logging.debug("Loading data from channel")
        channel_data = youtube_loader_channel.load()
        logging.debug("Loading data from video IDs")
        ids_data = youtube_loader_ids.load()

        logging.debug("Data loaded successfully")
        return jsonify({"channel_data": str(channel_data), "ids_data": str(ids_data)})
    except Exception as e:
        logging.error(f"An error occurred: {str(e)}", exc_info=True)
        return jsonify({"error": str(e)}), 500

成果

影片來源:https://www.youtube.com/watch?v=TrdevFK_am4

image-20241006004150943