[爆卦]binary檔案是什麼?優點缺點精華區懶人包

雖然這篇binary檔案鄉民發文沒有被收入到精華區:在binary檔案這個話題中,我們另外找到其它相關的精選爆讚文章

在 binary檔案產品中有4篇Facebook貼文,粉絲數超過2,850的網紅矽谷牛的耕田筆記,也在其Facebook貼文中提到, ref: https://sysdig.com/blog/dockerfile-best-practices/ 如果你常用到容器化、微服務架構,這些輕量化的架構當碰到問題時,背後的資安事件調查、報告、修復卻是影響甚鉅。然而,這些影響都可以透過「把安全意識擺在開發階段 (shifting left ...

 同時也有2部Youtube影片,追蹤數超過878的網紅時事英文 Podcast by ssyingwen,也在其Youtube影片中提到,從美國發起的一年一度六月「同志驕傲月」,近年來蔓延到了全球其他國家。在世界上許多主要城市,Pride 已成為主流。但在其他地方,仍然需要秘密慶祝,LGBT 人們也正在為自己的權益奮鬥。 Pride month 最後一天的今天, 帶給大家來自世界各地的五個故事。 🔓 全文朗讀錄音檔案在這 👉 h...

  • binary檔案 在 矽谷牛的耕田筆記 Facebook 的最佳貼文

    2021-07-05 08:23:21
    有 102 人按讚

    ref: https://sysdig.com/blog/dockerfile-best-practices/

    如果你常用到容器化、微服務架構,這些輕量化的架構當碰到問題時,背後的資安事件調查、報告、修復卻是影響甚鉅。然而,這些影響都可以透過「把安全意識擺在開發階段 (shifting left security)」來降低風險,而這篇文章就會講述 Dockerfile 的最佳實作手段有哪一些。

    首先,我們會從幾個大面向來說明各種控制安全風險的細節,像是權限控管、降低攻擊層面、預防機敏資料洩漏,以及在發布 container image 時的注意事項。而你需要特別注意的是,其實 Dockerfile 也只是算是開發階段的一部份,所以這邊能提醒到的內容都屬於部署前(特別是開發階段)的準備。以下共提及 20 個你可以注意的重點,但因為篇幅較長,筆者將選出較重要的幾個來談談。

    讓我們從「權限控管」說起:

    Rootless container
    根據報告結果顯示,有超過 58% 的 image 都是用 root 作為執行服務的使用者,所以在此也會建議透過 USER 參數來設定容器的預設使用者,同時,也可以利用執行環境/架構的設定來避免容器的預設使用者是 root。

    Make executables owned by root and not writable
    服務的 binary file 應該避免被任何人修改,容器的預設使用者只需要執行服務的權限,而不是擁有權。

    至於「減少攻擊面」的部分:

    Multistage builds小
    在 image 的建立,可以透過 multistage build 來建立很多層 container,例如在第一層安裝編譯所需的套件,而第二層則只需安裝 runtime 所需的套件(如 openssl 等),再複製第一層所編譯出來的執行檔就可以了。其餘的因開發/編譯所安裝的套件皆不需要放在最後的 image,這樣同時也可以把 image 的大小縮小。

    Distroless & Truested image
    採用最小/最輕量化的 base image 來作為你打造 image 的基礎,同時使用可信任來源的 image,避免不小心在未知的情況引入好幾個潛在的安全威脅。(在原文中,sysdig 也使用了自身開發的工具來檢測 image 是否有安全問題,如果有需要也能參考看看)

    而再來關於「機敏資訊」的部分:

    Copy
    當你在從你的開發環境複製檔案到 image 當中時,需要非常小心,因為你很可能一不小心就把你的密碼、開發環境的 token、API key 等資訊複製進去了。而且不要以為把 container 裡面的檔案刪掉就沒事了,別忘了 container image 是一層一層堆疊起來的,就算刪掉了,還是能在前面的 layer 裡面找到。

    但如果還是有需要用到這些機敏資料,也可以考慮使用環境變數(docker run -e 引入),或是 Docker secret、Kubernetes secret 也能夠幫你引入這些參數。如果是設定檔的話,則可以用 mount 的方式來掛載到你的 container 裡面。

    總而言之,你的 image 裡面不該有任何機敏資料、設定檔,開發服務時讓服務在 runtime 的時候可以接受來自環境變數的參數才是相對安全的。

    其他的部分:

    其實文章當中還有提到很多製作 image 的注意事項,像是在 deployment 階段,可能你部署的 latest 與實際的 latest 因時間差而不同。又或是在 image 裡面加上 health check,也才能做到狀況監測。

    在容器化服務的時代,開發者不僅需要具備撰寫開發程式的能力,也要對於虛擬化環境有足夠的理解,否則,在對架構不熟的情況就將服務部署上去,或把 image 推送到公開的 registry,都可能造成重要的資料外洩與潛在的資安危機。

  • binary檔案 在 Taipei Ethereum Meetup Facebook 的最佳解答

    2020-03-24 23:33:18
    有 8 人按讚

    📜 [專欄新文章] 類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做
    ✍️ 田少谷 Shao
    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    有鑒於個人近期關注的 Uniswap 及 Curve 皆用 Vyper 實作,索性瀏覽了官方文件並嘗試一些開發工具,希望此文能減少一些讀者初嘗 Vyper 會遇到的麻煩!

    Vyper and Solidity

    Outline

    一. Vyper 極簡介二. 與 Solidity 語法差異三. 開發、開發環境設置 1. 語法高亮 2. 本地 Vyper compiler 安裝 3. 使用 Truffle 操作 ERC20 - 安裝 Truffle - 發幣 - 寫個簡易賣幣合約四. 已知 Remix 問題 五. 結語

    一. Vyper 極簡介

    Vyper 是除 Solidity 外,以太坊上的另一智能合約 (Smart contract) 語言。其語法和 Python 相近,但畢竟也是寫合約的語言,邏輯差異不大,所以若熟悉 Solidity 應該不難理解用 Vyper 寫出的合約!

    Vyper 主要被設計和 Solidity 的區別是安全性及可讀性,這部分會在下一段落及後方的實作中舉例說明。

    二. 與 Solidity 語法差異

    Vyper 與 Solidity 的差異有許多,在本段只就個人認為感受較深的三點進行說明,其他差異只進行翻譯,有興趣的讀者可以到官方文件詳細了解:https://vyper.readthedocs.io/en/latest/index.html

    1. 沒有 modifier

    Solidity 常見的 onlyOwner() modifier; 由於 gist 沒有 Solidity 的語法高亮,故截圖

    在 Vyper 中單純用 assert 及 assert_modifiable 來進行條件檢查,兩者差別為若要檢查函數執行後的返還值,要用後者,如下圖:

    Vyper 寫法

    2. 沒有 Class inheritance 繼承

    繼承是物件導向程式設計 (OOP) 的核心概念,但各種繼承關係有時候確實很複雜。Vyper 沒有繼承,這無疑大幅地增加了程式可讀性及安全性,以及降低審計程式碼的難度。在此提供一個例子供不熟悉 OOP 複雜之處的讀者有個概念:

    source: https://consensys.github.io/smart-contract-best-practices/recommendations/#multiple-inheritance-caution

    在上例中,contract A 的 fee 值 (因繼承自 contract B 和 C,故有 fee 一值) 是 5、a 值也是 5 (因繼承自 contract Final,故有 a 一值)。原因是 A 先繼承 B 再繼承 C,因此 contract A 中的 setFee() 是使用了 contract C 的 setFee(),而 a 值是由於 C(5),這代表 contract C 的 constructor (舊版本中即 function C(),函式名稱同 contract 名稱) 被傳入的值為 5。

    稍微延伸一下以上概念,將 contract A 改成:contract A is C, B。如此一來,a 值還有 fee 值都會是 3,因為這次 A 先繼承 C 再繼承 B,因此最終吃到的值是 contract B 的。

    以上就是 OOP 繼承的複雜之處的簡單範例說明,應該能稍微感受到爲什麼除去繼承後會大幅提高可讀性及安全性,畢竟即使是熟悉 OOP 的人有時頭腦一混亂也會開始懷疑自己寫的程式碼繼承結構是否正確 …

    3. 沒有 dynamic array 動態陣列

    這應該是目前 Vyper 設計中爭議最大的部分。沒有動態陣列代表在宣告陣列時需要宣告其長度,也就是說 Solidity 中的寫法 uint[], bool[] 等等,這些是不會出現在 Vyper 的。在 Vyper 中只能出現諸如:

    # Vyper 的變數宣告方式為 變數名稱: 存取範圍(變數型態(若為陣列給長度))

    values: uint256[10]participants: public(address[20])

    可以看到上方的 uint256 及 address 兩陣列皆需要宣告長度,不能不宣告而使其動態地配置空間。

    沒有動態陣列固然可以確保執行運算的範圍、次數,但一來動態陣列真的很方便、二來在 Solidity 有此功能而 Vyper 卻沒有的情況下可能會造成麻煩,詳見此一討論串:點我。

    4. 沒有 inline assembly,程式碼中不會有組合語言

    5. 沒有 function overloading,函式不會因傳入的參數數目不同而結果不同

    6. 沒有 operator overloading,運算符號不會有不同於預設的自定義功能

    7. 沒有無限迴圈,可免於 gas limit attack

    8. 十進位定點數 decimal fixed point 而非二進位 (binary) 定點數,詳見:點我

    三. 開發、開發環境設置

    結論先講

    開發 Vyper 的最佳姿勢目前個人認為是在本地裝上 Vyper compiler、用 Truffle 部署,並在撰寫時將檔名後加上 .py 就能有 Python 的語法高亮👌

    1. 語法高亮 (syntax highlighting)

    有語法高亮絕對是舒服地寫程式的第一步。

    Remix 有 Vyper 的語法高亮,但一來個人目前不推薦使用 Remix 來撰寫 Vyper,原因詳見下方 4. 已知 Remix 問題;二來 Remix 的語法高亮其實也沒有很清楚,因此個人推薦:在本地開發,將檔名後加上 .py 就會有 Python 的語法高亮。

    2. 本地 Vyper compiler 安裝

    照官方說明使用 Python 的虛擬環境 virtualenv:

    source: https://vyper.readthedocs.io/en/latest/installing-vyper.html#installing-vyper

    簡單兩點提醒:

    如果中間那行報錯但確實已經有 Python,則可能是版本問題。依照自己電腦上的版本改成相應的即可,ex: python3.6 改成 python3

    進入虛擬環境後(檔案路徑前方應有 vyper-venv 的提示),使用此指令: vyper {檔案名稱}.vy,即可編譯 .vy 檔;使用完畢後輸入 deactivate 即可退出

    3. 使用 Truffle 操作 ERC20

    安裝 Truffle

    Truffle 雖有冗餘的 migration 但也別無他法,畢竟 Remix 目前仍不完善 :(

    下載流程可以照官方文件,使用 vyper-example:

    source: https://github.com/truffle-box/vyper-example-box

    由於我們會接上測試網 Ropsten,因此還要下載 truffle-hdwallet-provider:

    source: https://github.com/trufflesuite/truffle-hdwallet-provider

    接者就可以開始使用 Vyper 寫合約了!

    發幣

    由於 Vyper 的官方文件中已經有許多優質範例,因此本文希望來點不一樣但大家卻又很熟悉的…以 ERC20 為例(這千篇一律的主題xD):

    用 Curve 的 ERC20 程式碼為範本,發一個幣(又要發…)

    寫一個簡易賣幣合約

    選擇這個主題一方面畢竟 ERC20 是以太坊的最大宗應用之一,二來有興趣的讀者可以透過讀 ERC20 的程式碼來熟悉 Vyper,並在看過本文的流程後對於用 Vyper+Truffle 來操作 ERC20 有完整的概念!

    好的,首先複製一份 Curve 的 ERC20 程式碼(看到就順手拿來用),並複製到 Truffle 所在路徑的 contracts 資料夾中:https://github.com/curvefi/curve-contract/blob/pool_compound/vyper/ERC20.vy

    由於第一點希望著重在跑一次流程,因此不改動合約的程式碼。

    ERC20.vy 複製到 contracts 資料夾中後,到 migrations 資料夾開啟 2_deploy_contracts.js,首先將 require() 中的參數改為 ERC20.vy 的檔名 ERC20,再來依照自己喜好決定幣的名稱、代號、小數點位數及發行總量,輸入於 deployer.deploy() 中。

    接著,為了和測試網 Ropsten 互動,需要將以下程式碼寫入 truffle-config.js。

    第二行的 privateKeys 是帳號的私鑰。以下實作需要兩個帳號來操作,因此請從錢包匯入兩組私鑰(並非助憶詞)。

    在第 13 行中 HDWalletProvider 此函式的第三個參數代表要用第幾個帳號最為預設帳號(部署合約等),第四個函數代表總共匯入幾組帳號。而第二個參數則是需要至 Infura 申請一個 project 來得到串接 Ropsten 的連結。這兩步驟並非本文重點,因此不詳細解說步驟,Google 搜尋關鍵字應該就會找到方法!

    接著,就可以輸入以下指令來將代幣發佈到 Ropsten:

    truffle deploy --network ropsten

    有進入虛擬環境才可以編譯 .vy 檔,若忘記就會收到如下的錯誤訊息:

    記得打開虛擬環境才能編譯 .vy 檔

    成功後就可以在 contract address 中看到代幣發佈的位置,加入到 Metamask 中就可以看到。本文的例子是維尼代幣 Winnie the Coin, WTC ;)

    contract address 便是 ERC20 的所在

    Winnie the Coin, WTC

    好了,到此測試網上又多了一個測試用的垃圾廢幣。

    寫個簡易賣幣合約

    賣幣合約中我想要簡單有兩個功能就好:付錢買幣 、結束銷售,以下就是程式碼。買幣的部分就不寫太詳細,固定價格為 0.01 Ether 可以買 500 代幣。

    簡單說明幾點:

    Solidity 的 constructor() 在 Vyper 中為 Python 風的 __init__():

    函式的屬性(public, private, payable 等等)放在函式上方,與 Python 的修飾器位置相同

    總之寫法跟 Python 很像,次方也一樣是用兩次乘法代表:**

    變數前加上 self 代表是當前合約的變數/全域變數,因此非常容易與函式中的變數/區域變數做區隔

    由於已經在第一行匯入了 ERC20 那份合約,因此透過將地址傳入合約當參數,就可以呼叫在該地址的合約:ERC20(self.tokenAddress) 。並且,可以將部署的合約存成一個變數 erc20 較方便

    寫完合約後一樣要更改 migrations 資料夾中的 2_deploy_contracts.js 如下,將代幣所在的地址作為參數輸入。

    由於先前已經部署過一次了,因此要重置才能再部署第二次,輸入以下指令:

    truffle deploy --reset --network ropsten

    部署成功之後就要來試著買幣啦!輸入以下來進入 console:

    truffle console --network ropsten

    成功進入後應該會看到 truffle(ropsten)> 的字樣。接著,首先取得部署的兩合約,並查看是否有返回合約資訊:

    # ERC20 及 SellToken 是先前在 2_deploy_contracts.js 中的變數名稱,代表被部署的合約

    let instance1 = await ERC20.deployed()instance1 # 印出 instance1 的資訊

    let instance2 = await SellToken.deployed()instance2 # 印出 instance2 的資訊

    再來,為了讓 SellToken 可以賣幣,要先用 ERC20 的合約匯幣到 SellToken 的合約。因此,輸入以下指令:

    instance1.transfer(instance2.address, 10000)

    # 這裡數字只要設為 > 500 就可以

    接著,我們要利用第二個帳號去買幣(第一個帳號為預設帳號,因此就是代幣擁有者)。將帳號的資訊存入變數 accounts 中,再指定送出交易的帳號是第二個帳號。由於我個人匯入私鑰的順序是將第一個帳號存在 truffle-config.js 的 privateKeys[0]、第二個帳號存在 privateKeys[1],因此第二個帳號的地址就會在 accounts[1] 的位置:

    let accounts = await web3.eth.getAccounts()

    instance2.buyToken({from: accounts[1], value: 10000000000000000})

    # value 為 10^16 是因為在 SellToken 的 buyToken 函式中買一次要 0.01 Ether, 即為 10^16 wei

    然後應該就會在自己的第二個帳號中看到匯入的幣了~

    最後,由於合約中結束銷售就是一個自殺 selfdestruct 函式,因此可以呼叫看看,第一個帳戶錢包中的錢應該會增加,因為第二個帳戶有付款買幣;並且,可以到 Ropsten 上瀏覽,應該能看到相關提示:

    中間 contract 的右上角有 Self Destruct 的樣式

    四. 已知 Remix 問題

    Remix 目前有兩個版本,只有新版有 Vyper 的編譯器。在此整理目前遇到的問題,如果有人也遇到可以對照一下本處,可以省去很多自我懷疑xD

    不會報錯

    Remix 的編譯結果有時會是錯的、和本地端編譯出來的結果不同

    舉上方的 SellToken 合約為例,將其複製到 Remix 中使用左邊的 Remote Compiler 有錯,但又不報錯 q_q (ERC20 的合約有在同檔案目錄)

    左方有紅色三角形,代表編譯失敗,但沒有報錯訊息可以看…

    getter function 竟然要花錢

    用 Solidity 寫的合約,查詢 public 變數的值應該是不用消耗 gas 的,但不知何故查詢 Vyper 寫的合約的 public 變數卻要消耗 gas,如下圖…

    可以看到中下方有 22026 gas 的消耗

    Local compiler 無法使用

    圖中的 Local Compiler 此選項,個人雖照官方文件執行 vyper-serve 但卻失敗,因此若有讀者成功希望能留個言不吝分享!

    五. 結語

    Vyper 作為一個比 Solidity 更新的合約語言,在寫程式碼的方面沒什麼問題,但相關的開發工具、學習資源等都遠不及 Solidity。

    Vyper 主打的兩個特色:可讀性的部分相信看完上面的讀者應該已經有些感覺;安全性…小白如作者我倒是沒有感受到顯著的不同。況且 Solidity 已經發展許久,很多錯誤的寫法、知名的安全漏洞大家應該也很熟悉了,還有 Openzeppelin 提供安全合約寫法的範本,因此有待以後高人解說安全性是否真的是 Vyper 較好。

    有興趣者可以查看 Vyper 的安全報告:點我,大意是目前 Vyper 的編譯器仍有許多問題待改進! (感謝 Chih-Cheng Liang 的提供)

    本文對 Vyper 的介紹及其與 Solidity 的差異只講了個大概,欲知更詳細的介紹還是要麻煩讀者前往官方文件了:https://vyper.readthedocs.io/en/latest/index.html

    最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)

    田少谷 Shao - Medium

    類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • binary檔案 在 紀老師程式教學網 Facebook 的最佳貼文

    2016-04-24 15:02:20
    有 37 人按讚

    [熱門文章] 程式設計、重構、與其它任何東西的終極問答

    "The Ultimate Question of Programming, Refactoring, and Everything"
    網頁版: http://goo.gl/6jIcIp
    PDF 版: https://yadi.sk/i/pBZqebxsr5Wyg
    #Craftmanships #SoftwareEngineering #CPP #Refactoring #ProgrammingSkills

    好的!遲交比不交好,今天的推薦文來了(笑)~

    今天介紹這篇,是過去一個禮拜在國外鄉民聚集地 Reddit 程式設計版瘋傳的文章。標題很臭屁「The Ultimate Question of Programming, Refactoring, and Everything」(沒錯!我就在意它最後一個字 "Everything"。咬我啊! XD)。因為轉載的人實在太多,讓我不禁努力地把它看完了。

    其實這篇文章講的是 C/C++ 程式寫作者應該注意、或建議遵守的 42 個小訣竅。既不「Ultimate(終極)」,也不是涵蓋「Everthing」。不過裡面還是有不少中肯的建議,所以我還是將它介紹給大家。

    為了讓英文苦手的朋友也能稍微感受一下這篇文章在講什麼,所以我不負責任地快速翻譯了每個標題一下。如果對哪個主題有興趣的,就麻煩大家直接對照標題號碼去看原文解說。原文有些標題用「戲謔」或「隱晦」寫法,我若直接翻譯,大家可能不知道原作者想表達什麼。所以我會將某些標題,用比較易懂的中文重新表達。一切以「標題編號(1~42)」為準。

    接下來就請享用我這個不負責任的翻譯了。有會錯原文意思的,還請各位留言在下方、然後鞭小力一點 XD。我會馬上修正的:

    1. 不要去做編譯器會做的事情
    如:用迴圈能存取 a[0] ~ a[9],就不要用「拷貝貼上」a[0], a[1], a[2]..., a[9] 來存取裡面的內容值。

    2. 大於 0 不代表它等於 1
    若文件告訴你某函數執行成功會傳回「大於0」的值、但目前這個大於0的值是「1」。請你寫程式的時候不要自作聰明地偵測「傳回值 == 1」當成成功,請乖乖遵照規格書用「傳回值 > 0」等於成功。因為將來的版本有可能還會傳回 2, 3...等其他值。

    3. 當你拷貝貼上一段程式碼,記得檢查它的副本兩遍
    有時候你拷貝貼上一段程式碼,會忘了去修改裡面一些不同的小數字,導致花了大把時間去檢查錯誤到底出現在哪裡。

    4. 小心使用「? :」運算子。並記得多加括號
    「? :」是 C/C++ 內常用的運算子。若您寫了一段這樣的原始碼「a - b?0:1」,您可能以為它是這樣運作的「a - (b?0:1)」,事實上,它是這樣運作的「(a-b)?0:1」。結論是,多加括號保平安。

    5. 多用市面上有的工具來分析您的原始碼
    市面上有些工具,如:原始碼靜態分析工具、原始碼排列工具...可以幫您在把原始碼送入編譯器前,就抓到錯誤。不過作者也提到,別以為倚賴這些工具,錯誤就不會發生。真正要減少錯誤還是得靠多讀規格書,增加程式寫作經驗才辦得到。

    6. 確認您所有的指標,都已經轉型成整數型態
    作者擔心,某些使用 64 bits 當成指標變數寬度的系統,到 32 bits 的機器內重新編譯時,會產生高位元組被截斷的慘劇。某些編譯器提供「uintptr_t」這個專門給指標變數使用的型態,會隨著編譯器所在的環境,自動調整指標寬度。

    7. 別在迴圈內呼叫「alloca()」這個函數
    萬一迴圈失控,alloca() 函數會霸佔大量記憶體無法釋放。建議事先在迴圈外霸佔一大塊足夠的記憶體,然後在迴圈內慢慢蠶食之。

    8. 在「解構函數(Destructor)」內使用「例外處理(Exception)」是很危險的!
    作者認為,在負責釋放記憶體、收尾等工作的解構函數,還去霸佔新記憶體作事情是不好的。若真的發生例外(Exception),直接「吃掉(Supress)」不要讓它出現在使用者面前可能還比較好。

    9. 若你要比對字串結尾,請用 '\0' 代表
    有些程式設計師因為 '\0' 其實就是數字 0,而在比對字串結尾時,直接使用 0 來比對字串結尾。作者認為這個習慣不好。

    10. 請勿濫用 # ifdef
    # ifdef 很好用,但很容易讓原始碼雜亂難讀。作者不會建議大家不要用,但他反對連可以用 if ~ else 解決的場合,都濫用 # ifdef。

    11. 別把一堆運算子全都擠在同一列
    多分成幾列,Debugger 可以比較容易指出發生錯誤的是在哪個環節。

    12. 當你「拷貝貼上」程式碼時,特別注意「最後一列效應」
    作者還是不太建議濫用拷貝貼上,他認為需要重複使用一段程式碼,不如好好考慮寫成稍有彈性的函數,然後重複叫用。此外,他建議大家去看「最後一列效應」這篇文章(連結在本文),並了解最後一列效應在拷貝貼上程式碼內,所扮演的角色。

    13. 程式碼若很長,盡量多折幾列,然後排成像表格般一樣整齊(Table-style)

    14. 好編譯器 + 好的寫碼習慣是不夠的
    內文舉了個後括號「)」括錯位置,但編譯器抓不出來的例子。

    15. 若有一堆意義相關的常數,請用 enum 括住它們

    16. 「看我能把程式碼寫得這麼屌!」的炫耀寫碼心態不可取
    寫程式碼要以「穩」「易讀」為主,不是把一些剛學不久,覺得很酷,但三個月後會忘個精光的技術用進程式碼內。

    17. 想用程式碼把一塊資料清乾淨,最好把清除程式碼獨立拉出來成一個專屬函數
    18. 你在一個語言行得通的方法,在另一個語言不一定行得通
    19. 盡量用技巧避免在同一個類別內,建構函數彼此呼叫的情況
    20. 讀檔時,只檢查有沒有讀到檔尾(EOF)似乎是不夠的
    21. 正確檢查 EOF 的方法
    22. 有比使用 # pragma warning(...) 來印錯誤訊息更好的方法,勿濫用
    23. 如果你想取得字串長度,用函數自動幫你算,別用手算然後硬填數字上去
    24. 請多使用 "override" 與 "final",它們會是你的好朋友
    25. 別再把 "this" 指標跟 "nullptr"(空指標)拿來作比較
    26. 小心使用 VARIANT_BOOL 這個陰險狡猾的東西
    27. BSTR(Binary STRing)這個用於微軟 COM/Automation 技術中的資料型態,請小心使用
    28. 能用函數把一段程式碼包起來重複用,就別用巨集包它(使用巨集函數的缺點多於優點)
    29. 在迴圈或迭代程式碼間,使用 ++i,來取代 i++(i++ 編譯後的執行效能稍微差那麼一點)
    30. wprintf() 函數的使用陷阱:Win32 印寬字元字串要用 %S(大寫),Win64 要用 %s(小寫)。
    31. 陣列在 C/C++ 傳給函數時,並非是「傳值呼叫」(Call by Value)
    32. 要把檔案內的文字直接印在螢幕上時,請不要直接使用 printf() (怕檔案內夾雜 % 開頭的字,這些字對 printf 是有特殊意義的)
    33. 想對一個指標取值(亦即:*p),記得檢查它是否為 NULL。否則你對 NULL 取值會導致系統出錯的
    34. 別以為 int 的上限 21億+ 很多,在 64 bits 系統中,這個數字很容易爆掉
    35. 若您把 enum 常數與 switch~case 連用,增加新元素進 enum 時也別忘了加新 case 進 switch
    36. 如果有怎麼抓都抓不出來的 bugs,記得往「記憶體」的方向去思考(32bits vs. 64bits 之類的問題)
    37. 在 do~while() 內用 continue 指令要小心,有可能會跳過你放在底部的「更新條件」,導致無窮迴圈
    38. 對於指標,請用 nullptr 代替 NULL,這是新的 C++ 規格書希望您遵循的
    39. 試著別把一列式子搞得太複雜,這樣比較不會有「咦?為何這段寫錯的程式碼居然可以運作」的問題出現
    40. 開始使用「原始碼靜態分析工具」吧!
    41. 別為了要使用某函式庫的一個函式,而引進整個函式庫。如果只用了一個函式,建議自己寫比較容易維護。
    42. 別再用 empty 這個曖昧的字眼當函數名稱了。用 erase(), clear() 都比 empty() 好。

    如果您覺得小弟翻譯了這麼多,沒有功勞也有苦勞,那就麻煩按個讚犒賞小弟一下吧!當然歡迎轉發給您 Facebook 的朋友共同討論。最後提醒一句,上述 42 點別把它們全都當聖旨,親身體會驗證才是最重要的喔!

    祝福大家假期愉快!

  • binary檔案 在 時事英文 Podcast by ssyingwen Youtube 的最佳解答

    2021-06-30 19:50:50

    從美國發起的一年一度六月「同志驕傲月」,近年來蔓延到了全球其他國家。在世界上許多主要城市,Pride 已成為主流。但在其他地方,仍然需要秘密慶祝,LGBT 人們也正在為自己的權益奮鬥。 Pride month 最後一天的今天, 帶給大家來自世界各地的五個故事。

    🔓 全文朗讀錄音檔案在這 👉 https://bit.ly/zzfullepisdoes

    0:00 Intro
    0:19 第一遍英文朗讀 (慢)
    4:14 新聞單字片語解說
    30:30 第二遍英文朗讀 (快)

    ❤️ 給我繼續為你們製作內容的能力 👉 https://bit.ly/zeczec_ssyingwen 

    ———

    📝 單字筆記:https://ssyingwen.com/ssep32
    🖼️ 單字卡在 IG: https://bit.ly/ssyingwenIG
    💬 我有建議:http://bit.ly/sssurveyform
    📪 ssyingwen@gmail.com

    ———

    朗讀內容來自BBC
    👉 BBC 完整文章連結在:https://www.bbc.com/news/world-57604310.amp
    👉 Podcast 裡選讀片段文字在: https://www.facebook.com/groups/ssyingwen/posts/255368616349385/

    本集介紹的單字片語有:
    Pride Month 同志驕傲月
    Pride 自豪、驕傲
    Stonewall Uprising 石牆起義
    Stonewall Riots 石牆暴動
    Turning point 轉折點
    LGBT / LGBT+ / LGBTQ / LGBTQIA
    Lesbian 女同性戀者; dyke (slang)
    Gay 男同性戀者
    Bisexual 雙性戀者
    Transgender (trans) 跨性別者
    Questioning 還在探索自己的性取向
    Queer 酷兒
    Intersex 雙性人
    Asexual 無性戀、無性向
    Allies 盟友
    Non-binary  非二元性別
    Cis 順向的,認可的性別與出生時被賦予的性別吻合
    Canada 加拿大
    Syria 敘利亞
    Poland 波蘭
    Uruguay 烏拉圭
    United States 美國 New York 紐約
    Uganda 烏干達
    Mainstream 主流
    Homophobic 同性戀歧視
    Homophobia 同性戀恐懼
    Take / taking / took / taken for granted 理所當然
    Go / goes / get / going / went back to the drawing board 重新開始、從頭來過

    ————


    #podcast #lgbtqia #lgbtq #lgbt #pridemonth #同志議題 #同志新聞 #同志遊行 #酷兒 #酷兒是什麼 #酷兒文化 #酷兒什麼意思 #酷兒性別 #同性婚姻合法 #同性遊行 #學英文 #英文筆記 #英文學習 #英文 #每日英文 #托福 #雅思 #雅思英語 #雅思托福 #多益 #多益單字 #播客 #英文單字卡 #片語 #動詞 #國際新聞 #英文新聞 #英文聽力

  • binary檔案 在 Dr_Minn Youtube 的最讚貼文

    2016-07-25 14:25:18

    從PTR測試檔案中,國外網友挖掘到了許多新的語音檔案,其中包含了以德國西南黑森林和城堡以及跟萊因哈特相關的主題,因此下一張新地圖極有可能為「黑森林」。

    前幾天,有國外網友又破解出Sombra的新暗號。在官方講解Ana安娜大更新的影片中,最後幾秒出現的Bar code條碼,要先使用條碼掃描器讀取後,轉成16進制Hex code代碼,再變成二進制的Binary,接著手動加以整理對齊,最終得到一張QR code,上面竟然是Sombra對玩家下的戰帖!

    ★補充★
    D.Va新語音:我會保衛我的國家,可能代表有韓國地圖(http://bit.ly/29Znbor)


    ▶資料來源:
    http://bit.ly/29MGtfh
    http://j.mp/2akMN0E
    http://j.mp/2akMCTc
    http://j.mp/2akM3c5




    ▶Facebook(http://facebook.com/cooMaster88)
    ▶訂閱Youtube

    ▶聯絡E-Mail:cooMaster@outlook.com

    以FPS遊戲為主的遊戲頻道,提供第一手的射擊遊戲資訊與評論。
    只要有槍可打,就有苦大師。

你可能也想看看

搜尋相關網站