搜尋

搜尋結果

【VR應用程式點評】我在白宮與奧巴馬和米歇爾會面
科技新知
Oculus Go Go Go!・2018-07-17

VR 的其中一個承諾就是我們可以安在家中,便可以環遊世界。雖然我嘗試了一些試圖實現這一點的應用程式,但它們都沒有像這段最近以 Oculus Go 獨立應用程式發布的 VR 短片﹣眾議院(又稱人民議院)般擁有同樣的震撼感。 進入大約三分鐘的短片,我發現自己坐在前總統巴拉克.奧巴馬對面,聆聽他敘述橢圓形辦公室的歷史。我在那裏看著前總統的眼睛,彷彿他就在我身邊。我置身在其中一間全美國最著名的房間。雖然聽起來很愚蠢,但我從來都不知道橢圓形辦公室實際上真是橢圓形的。我坐在辦公室的中間,如字面上,它就在我面前。 從那裏,巴拉克.奧巴馬和米歇爾.奧巴馬帶領觀眾參觀白宮裏各間著名房間。他們談論這個地方的歷史,並分享他們自己一些個人的經歷和想法。雖然有些人可能會發現巴拉克一些評論帶有說教的意味,但我反而覺得這些評論(在大多數情況下)是非常有品味和非政治性。有時候,我會發現自己無意識地忽略了對話,對著建築物和室內設計感到驚嘆。白宮有時看起來與其說是一間住宅,倒不如說更像一間博物館,令到它非常適合這種 VR 體驗。 雖然有些人可能會覺得它很無趣(特別是如果他們對美國歷史或政治毫無興趣),這段眾議院短片是迄今為止 Oculus Go 帶給我最有回報的其中一種體驗。它目前在 Oculus 商店上是免費的,所以快去看看吧! 分數:hearts;hearts;hearts;hearts;hearts; 舒適度:diams;diams;diams;diams;diams; 原文(英文): REVIEW The Peoplersquo;s House Inside the Whitehouse with Barack and Michelle Obama 中文翻譯: Chrysalids 少爺

iPhone X哪裏購買最伐算
科技新知
Trisha・2017-09-15

想換手機嗎?若果你是IPhone的忠實粉絲,又想換機,就要留意在哪個地方買機最伐算。 根據中央社報導,蘋果今天發表 iPhone X 全螢幕手機,台灣售價新台幣 3 萬 5900 元起,乍看之下比鄰近地區香港、日本更貴,其實是因為台灣售價包含加值型營業稅。 蘋果在美國發表 iPhone8、iPhone8 Plus、iPhone X ,其中被視為「未來手機」的 iPhone X 配備 5.8 吋 Super Retina 全螢幕,支援 Face ID 臉部辨識功能、無線充電,首波市場預計 11 月 3 日開賣,台灣售價 3 萬 5900 元起。 記者實測在蘋果台灣官網訂購 iPhone X,64GB 儲存容量售價 3 萬 5900 元,包含加值型營業稅(就銷售貨物或勞務過程中所增加的價值課稅)約 1710 元;256GB 儲存容量售價 4 萬 1500 元,包含加值型營業稅約 1976 元。 相較之下,iPhone X 美國售價 999 美元(約新台幣 30000 元)起、日本售價 11 萬 2800 日圓(約新台幣 30772 元)起,都是未稅價格,換算後自然都低於台灣售價;香港售價港幣 8588 元(約新台幣 33024 元)起,也是受惠於當地免稅的緣故。 至於 中國大陸 iPhone X 售價人民幣 8388 元(約新台幣 38605 元)起,換算後比台灣更高,是因為大陸課徵增值稅(針對貨物價值增加的部分課稅)高達 17%,難怪大陸網友直呼太貴,買不下手。 上圖資料以台幣計算 另外 根據 The Verge 報導 ,俄羅斯的 iPhone X 在 64GB 的售價是 1380 美元(約台幣 41400 元)、波蘭則是 1385 美元(約台幣 41500)。義大利最貴,則賣到 1416 美元(約台幣 42480 元)。都要替這些國家的人掬一把辛酸淚啦,一隻 64GB 的 iPhone X 就要台幣四萬多塊,跟在台灣買 256GB 一樣貴。 如果近期有要去日本或香港旅遊的人,或許可以比價看看 iPhone X 加上稅之後會不會比較便宜。除非你有親友在美國可以幫你買到三萬塊的 iPhone X,不然親自飛一趟美國的機票和分去亞洲比起來,怎麼算都是在亞洲地區買比較划算吧!資料來源科技報橘httpsbuzzorange.comtechorange20170914iphonexexpensive內文亦有參考以下的資料 《The Verge》How expensive is the most expensive iPhone in other countries 《中央社》iPhone X 台售價乍看較日港貴 差別在含稅

Spring Data 關聯型態 02
科技新知
MacauYeah・2024-08-09

Presist and Casecade 前次的文章,講了一些Spring Data最基本的關聯概念,但當要正式儲存或刪除,就有些考慮完整性問題。平常我們在處理資料庫的關聯表格時,也需要面Foreign Key的正確性問題。同樣地,Spring Data也有這方面的考量,但它有提份一個很方便的CascadeType選項,可以簡化一些流程。 假設你只能存取Parent Repo,那你需要在Parent中,加入CascadeType.All。當repo.saveparent時,它就會順多把所有child的也一併進行Save,你也不需要有Child Repo的存在。 @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.All List children = new ArrayList; 但在複雜的狀況下,例如你不想在更新parent的情況下,不小心弄到child,特別是經過public web下的API操作,你對web client的資料正確性有存疑,就不要使用CascadeType了。這也是筆者認為在大多數情況下,我們都會把Parent和Child的CRUD分開操作,然後根據需要使用各自的repo save。 如果你一定要用CascadeType.ALL CascadeType.REMOVE,就要再留意刪除的問題。為什麼?因為刪除 parent,其實指的是某個parent不再存在,但不代表child也要一起刪除,child的parent連結可以變為null,也有重新連結其他parent的可能。 如果大家確定需要共同刪除,就可以用CascadeType.ALL 或 CascadeType.REMOVE。 還有一個新的選擇,orphanRemoval = true,也有類似效果。 @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.REMOVE List children = new ArrayList; or @OneToManymappedBy=quot;parentquot;, orphanRemoval = true List children = new ArrayList; or @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.REMOVE, orphanRemoval = true List children = new ArrayList; 筆者測試過,混著用也是可以的。若大家看過其他教程,可能會覺得orphanRemoval = true 和 CascadeType 總是一起出現,但它們其實是分別操作的。單獨使用orphanRemoval = true,有時候則是為了不會出現無主的child,但這不代表parent和child的想要同步更新。 JPA Entity 的生命週期 Spring Data跟傳統的資料庫Selete,Create,Update,Delete SQL 語句有所不同。也就是這個不同,它的CascadeType比資料庫的Cascade Update和Cascade Delete更強大。 Spring Data 預設其實是使用 jakarta.persistence.EntityManager,每個Entity主要分為四個狀態 Transient New 不在EntityManager的掌控中 Managed 在EntityManager的掌控中,將會在下次flush時,變成sql create或update statement Detached 脫離EntityManager的掌控,不受flush影響 Removed 在EntityManager的掌控中,將會在下次flush時,變成sql delete statement 在Spring Data Jpa 以前,我們若要直接操作Hibernate,經常見到persist, remove的寫法 entityManager.persistentity; entityManager.removeentity; entityManager.detachentity; entityManager.mergeentity; 其實persist就是把處於Transient、Removed的entity,改為Managed。而remove就是把Managed改為Removed。detach,merge也類似,就是Managed,Detached之間互換。 EntityManager最強大的是,它可以讓程序員不需要再為Managed狀態下的entity操心,它會自動判別下次flush,應該create還是update,如果完全沒有改動的,連update也不會執行。 註,flush和commit也有不同,flush就是從java寫到資料庫中,在資料庫commit前,還可以使用rollback放棄。 而Spring Data,則是進一步簡化,它把persist改為save,remove改為delete,然後自動選擇flush的時機。 CascadeType 在解釋完Entity 的生命週期後,終於可以回到CascadeType了。這裏的CascadeType不是資料庫的Cascade操作,其實它是指EntityManager的狀態操作是否有傳遞關係。亦即是,persistparent時,要不要連同child也一起操作 我們查看 CasecadeType 的原始碼,就可以發現可以被傳遞的操作共有以下這些 PERSIST MERGE REMOVE REFRESH DETACH ALL 以上全部 這裏的 CasecadeType.PERSIST ,跟資料庫的 Cascade Update 是不一樣的。資料庫裏的 Cascade Update,是指當 Parent 的 Primary Key 有變,對應child的 Foreign Key也一起變。但因為 JPA Entity 的機制, Parent 的 Primary Key 不可以改變,理論上不會發生類似資料庫的 Cascade Update,頂多有 Cascade Delete。 CasecadeType.PERSIST 就像之前述的生命週期解說一樣, 把 parent和 child 一起拉到受管理的狀態。 註 CascadeType.REMOVE有點尷尬,似乎有更特別的使用規範。筆者測試過,在某些情況下,CascadeType.REMOVE無法處理ForeignKey問題,又或者是,刪除的順序不對。詳見 spring boot data deletion Reference entitylifecyclemodel spring boot data deletion