2018年2月6日 星期二

如何選擇一個最好的礦池來挖呢?

2017年隨著區塊鍊加密貨幣的飆漲,吸引了不少人加入挖礦的行列,當礦機安裝好之後就要選擇一個礦池來開工。

如果是使用像 NiceHash 這類出賣算力的服務,直接挖就可以了,他會幫你計算最佳獲利的礦池。但是,如果是自己要挖某種加密貨幣時,如何選擇一個最好的礦池來挖呢?

以門羅幣 (Monero) 為例,國外網友建議選擇礦池的標準是:

  • low latency, reliable, and small pool with <10 % Network Hashrate

而且也寫了一個 Python 程式來執行這項任務。

不過,在中文版 Windows 10 之下執行時,卻發生抓不到資料而造成程式無法執行,還好是使用開放原始碼設計,因此將程式改為可以辨識中文訊息之後就可以執行了。

下載地址:https://github.com/jdlin/xmr-pool-choice

因為門羅幣難度持續增加,愈來愈難挖,所以改挖號稱是英國第一個加密貨幣 Electroneum,改用 NanoPool 的礦池來測試,執行完畢之後會顯示下列的比較表:


結果顯示門羅幣的礦池 supportXMR 和 MoneroHash 似乎只有 Latency 可以參考,抓不到 Hash Rate 和其他資料。而 Electroneum 礦池的資料則正常。

2017年9月21日 星期四

[MacOS] 三步驟純指令建立ISO的USB隨身碟

A. 將載好的 iso 轉成 dmg
hdiutil convert -format UDRW -o ubuntu-14.04.2-server-amd64.dmg ubuntu-14.04.2-server-amd64.iso

B. 找到你的usb隨身碟後卸載它
diskutil list
diskutil unmountDisk /dev/disk2

C. dd 把資料寫入隨身碟
sudo dd if=ubuntu-14.04.2-server-amd64.dmg of=/dev/rdisk2 bs=1m

參考來源: http://blog.poyi.tw/blog/2015/06/29/mac-build-ubuntu-flash-using-command/

2017年5月23日 星期二

Visual Studio 2017 for Mac

Visual Studio for Mac 是 Visual Studio 系列的新成員,可讓 macOS 上的開發人員使用 Xamarin 和 .NET Core 來建置行動裝置、Web 和雲端的應用程式,以及使用 Unity 來建置遊戲。

Visual Studio 2017 for Mac Download

Xamarin

Xamarin 的第一級支援可讓您開發 Android、macOS、iOS、tvOS 和 watchOS 的豐富原生體驗。 Xamarin.Forms 跨平台應用程式可協助您在 Android、iOS 與 macOS 之間共用 XAML UI 程式碼,而不限制原生功能的存取權。
包括:
  • 建置、部署、偵錯和程式碼剖析。
  • iOS 和 Android 的拖放 UI 設計工具。
  • Xamarin Forms 的即時預覽。
  • .NET Standard 相容的架構。
  • 原生 API 的繫結。

多平台應用程式範本

多平台 Xamarin.Forms 應用程式原生應用程式專案範本現在提供快速的方法,讓您建立多平台行動應用程式和其雲端後端。

2017年3月13日 星期一

Intel推出最強NUC代號骷髏峽谷(Skull Canyon)NUC6i7KYK 安裝 Windows



一開始打算安裝 Windows 7

準備項目:
1)可安裝Windows7 USB隨身碟.
2)主機板廠商所提供的USB3.0驅動程式.
3)可使用Windows7的電腦一台.

製作步驟:

(一)將ISO檔案製作成 USB開機碟

透過以下免費工具將Windows 7 DVD光碟轉換成ISO檔案.
http://www.dvdtoiso.com

2. 使用並下載以下工具製作Windows7 USB 隨身碟. (推薦8GB以上的USB隨身碟進行製作)
https://www.microsoft.com/en-us/download/windows-usb-dvd-download-tool

當使用Windows 7 USB/DVD Download Tool 製作USB開機碟出現

The Selected file is not Valid ISO File 錯誤訊息

通常這狀況發生在非官方釋出的ISO版本,或者是你自己製作的ISO檔案

該如何解決"The Selected file is not Valid ISO File "呢?


要解決這個狀況其實很簡單,請下載PowerISO

接下來使用PowerISO將ISO打開

接下來 檔案 > 映像檔案屬性

將 ISO9660 Joliet UDF 這三項都打勾


儲存之後,再用Windows 7 USB/DVD Download Tool開啟剛剛的ISO檔案

就能進行接下的動作了~

(二)整合 USB3.0 驅動

開機碟只要 Windows 7 一複製完檔案電腦重啟後選語系那邊就死建盤跟滑鼠

這是因為 Windows 7 沒有 USB3.0 驅動程式

先於磁碟機內建立資料夾 名稱可任意,這邊範例為"OS".
請於OS資料夾內,再建立兩個資料夾,名稱為"mount"和"usb3".
下載 USB3.0 驅動程式,複製到"usb3"資料夾內.
https://downloadcenter.intel.com/zh-tw/product/89187/Intel-NUC-NUC6i7KYK

從Windows7隨身碟內的source資料夾內,複製"boot.wim"和"install.wim"到"OS"資料夾內,這邊可以記錄兩個檔案的大小分別為多少.
以系統管理者權限開啟於附屬硬用程式內的"命令提示字元".

dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:mount
dism /image:mount /add-driver /driver:usb3 /recurse
dism /unmount-wim /mountdir:mount /commit

dism /mount-wim /wimfile:install.wim /index:2 /mountdir:mount
dism /image:mount /add-driver /driver:usb3 /recurse
dism /unmount-wim /mountdir:mount /commit

1: Home
2: Home Premium
3: Professional
4: Ultima

請把這兩個檔案”boot.wim” “install.wim” 複製回隨身碟的Source資料夾底下,並覆蓋原始檔案.
使用此整合完成的Windows7 USB隨身碟,插在主機上的USB3.0 port進行Windows7的安裝即可.

(三)
如果覺得太麻煩的話,直接使用 Windows 10 Media Creation Tool 產生安裝隨身碟

直接安裝 Windows 10 大概 10 分鐘就可以安裝成功了

2016年1月30日 星期六

Python VS Swift

Code Comments

Both languages have comments:
# Python has single line comments 
 
// Swift has single line comments
/* Swift also has multi-line
   comments in C style
*/

Declaring Constants and Variables

Swift has rich support for type inference and constants. Python is dynamic and does not natively support constants.
name = "A string variable in Python"
age = 42 # An integer variable in Python
 
var name = "A string variable in Swift"
var age : Int // An explicit integer variable in Swift
age = 42
 
let pi = 3.14 // Constant in Swift

Integer Bounds

# Python does not have upper bounds for integer numbers (Python 3)
large_nun = 10000000000000000000000000000000000000000000000000000
 
// Swift
var a = Int32.min
var b = Int32.max

Type Inference

Swift is a strongly-typed language which makes heavy use of type-inference although you can declare explicit types. Python is a dynamic language so while there is a type system it is not evident in the syntax.
# Python
name = "Michael" # string variable, but can change
name = 42        # would run
n = 42           # currently an int
d = 42.0         # currently a float
 
// Swift
var name = "Michael" // string
name = 42            // Error
var n = 42           // int
var d = 42.0         // double

String Comparison

Python and Swift both have Unicode strings. Python generally has richer string support than Swift (especially around string formatting).
# python
a = "some text"
b = "some text"
if a == b:
    print("The strings are equal")
 
# swift
var a = "some text"
var b = "some text"
if a == b {
    println("The strings are equal")
}
Both languages have many functions on strings
# python
if a.startswith("some"): 
     print("Starts with some")

if a.endswith("some"):
     print("Ends with some")
 
// swift
if a.hasPrefix("some") {
     println("Starts with some")
 }
 
if a.hasSuffix("some") {
     println("Endss with some")
 }

String Upper or Lower Case

# python
s = "some text"
u = s.upper()
l = s.lower()
 
// swift
var s = "some text"
var u = s.uppercaseString
var l = s.lowercaseString

Declaring Arrays

Neither language has strict array types in the sense of C-based arrays. The arrays in Swift and Python are closer to lists. Python’s lists are not typed (hence can be heterogeneous).
# python
nums = [1,1,3,5,8,13,21]

// swift
var nums = [1,1,3,5,8,13,21]          // int array
var strings = ["one", "two", "three"] // string array

Working with Arrays

# Iteration in python
nums = [1,1,3,5,8,13,21]
for n in nums:
    print(n)
 
# Iteration in Swift:
var nums = [1,1,3,5,8,13,21]
for n in nums {
    println(n)
}
 
# Element access
n = nums[2]      # python, n = 3
var n = nums[2]  # swift,  n = 3
 
# Updating values
nums[2] = 10 # python
nums[2] = 10 # swift
 
# Check for elements
# python
if nums:
    print("Nums is not empty")

// swift
if !nums.isEmpty {
    println("Nums is not empty")
} 
 
# Adding items:
nums.append(7) # python
nums.append(7) # swift
 
# Slicing
nums = [1,1,3,5,8,13,21]
middle     = nums[2:4]       # python, middle = [3, 5]
var middle = nums[2..<4]     // swift, middle = [3,5]

Dictionaries

Dictionaries play important roles in both languages and are fundamental types.
# python
d = dict(name="Michael", state="OR")
d = { "name": "Michael", "state": "OR" }
the_name = d["name"]
 
// swift
var empty_dict = Dictionary<String, String>()
var d = ["name": "Michael", "state": "OR"]
var the_name = d["name"]
 
Adding items is the same in both languages. Removing entries is arguably clearer in Swift.
# add an item
d["hobby"] = "Biking" # python
d["hobby"] = "Biking" // swift
 
# remove an item
del d["hobby"]                # python
d.removeValueForKey("hobby")  // swift
 
Checking for the existence of a key can also be done in both languages.
# python
if "hobby" in d:
    print("Your hobby is " + d["hobby"])
 
// swift
if let theHobby = d["hobby"] {
     println("Your hobby is \(theHobby)")
}

Conditional Statements

Conditional statements are quite similar.
# python
n = 40
m = 2

if n > 40:
    print("n bigger than 40") 
elif m == 2 and n % 2 == 0:
    print("m is 2")
else:
    print("else")
 
# swift
var n = 40
var m = 2

if n > 40 {
    println("n bigger than 40") 
}
else if m == 2 && n % 2 == 0 {
    print("m is 2")
}
else {
    print("else")
}

Switch statements

Swift has them, Python does not.

Functions

Functions are very rich in both languages. They have closures, multiple return values, lambdas, and more. Here is a simple version. Note that this example also leverages tuples and tuple unpacking in both languages.

# python
def get_user(id):
    name = "username"
    email = "email"
    return name,email
 
n, e = get_user(1)
 
// swift
func getUser(id : Int) -> (String, String) {
     var username = "username"
     var email = "email"
     return (username, email)
}
 
var (n, e) = getUser(1) // n = username, e = email

2016年1月13日 星期三

VMware Workstation 10安裝Mac OS X El Capitan 10.11.x虛擬機器

想在32位元作業系統上執行64位元作業系統VM,可以使用 BootCamp 在Macmini上安裝 Windows 10 (32 bit),然後把OS X El Capitan (10.11)安裝到VMware Workstation 10。 

要注意的是VMW10的Hardware版本是10,可以在VMW 10/11,Fusion 6/7上執行。 但是Fusion 7的Hardware版本是11,只支援原生64 bit OS。
Native support for Mavericks (OS X 10.9) is included in VMware Fusion 6 and ESXi 5.5 running on Apple hardware, and once unlocked Workstation 10, Player 6 and ESXi 5.5 but require hardware compatibility set to version 10.
Native support for Yosemite (OS X 10.10) is included in VMware Fusion 7 and ESXi 6 running on Apple hardware, and once unlocked Workstation 11 and Player 7 but require hardware compatibility set to version 11.
Native support for El Capitan (OS X 10.11) is included in VMware Fusion 8 and ESXi 6 running on Apple hardware, and once unlocked Workstation 12 and Player 8 but require hardware compatibility set to version 11 or 12.

安裝步驟:
  1. 首先在Windows 10 PC上安裝 VMWare Workstation 10。
  2. 關閉VMware程式之後,然後依不同VMWare版本執行 unlocker 修改。VMware Unlocker for OS X 1.3.0。如果是在Mac使用Fusion或是使用Parallel,直接把Installer App拉過來就可以安裝了。
  3. 開始建立 VM上的Guest OS時,要注意看下拉式選單中有沒有OSX,如果你發現沒有,表示你安裝的unlocker是有問題的。
  4. VM設定完成後,就可以開始安裝OSX。
開啟虛擬機器之後首先是選語系。然後必須先進行「磁碟工具程式」,先把磁碟處理好,才能再進行後續的安裝動作。否則在安裝階段會找不到硬碟。過程請參考影片。

安裝完畢之後,要修改VM才能把機器序號傳給VM。
--------
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
serialNumber.reflectHost = "TRUE"
smbios.reflectHost = "TRUE"

此外也可以使用以下 Shell Script 來獲得機器的資訊。

-------- #!/bin/sh
ioreg -l | awk '/product-name/ { split($0, line, "\""); printf("%s\n", line[4]); }'
ioreg -l | awk '/IOPlatformSerialNumber/ { split($0, line, "\""); printf("%s\n", line[4]); }'
ioreg -lp IOService | awk '/board-id/ { split($0, line, "\""); printf("%s\n", line[4]); }'

eg:
MacBookPro6,2
RM129481AGW
MAC-F22589C8

然後自己填上機器的資訊。
--------
board-id.reflectHost = "FALSE"
board-id = "MAC-F22589C8"
hw.model.reflectHost = "FALSE"
hw.model = "MacBookPro6,2"
serialNumber.reflectHost = "FALSE"
serialNumber = "RM129481AGW"
smbios.reflectHost = "FALSE"

附註:
  • smbios.use12CharSerialNumber = "TRUE" 這行好像不需要
  • 指定 board-id 不能用在VMW10,開不了機。
  • 修改 hw.model 似乎沒有影響,VM會根據序號給出model。
  • VMW10 的 guestOS 只支援 darwin13-64,Fusion 7支援darwin14-64
另外VMW10的Hardware 10不支援以下參數,所以不能使用iMessage等服務:
 6 digits ROM 12 digits MLB
--------
efi.nvram.var.ROM.reflectHost = "FALSE" 
efi.nvram.var.MLB.reflectHost = "FALSE"
efi.nvram.var.ROM = "123456"
efi.nvram.var.MLB = "DONKDONKDONKDONKA"

後記:

對於開發者而言,使用這種方式可以正確的安裝MAC虛擬機器來作為開發平台。缺點是Windows 10 32位元的作業系統記憶體受限制,最大可用記憶體只有顯示2.2G。

2016年1月10日 星期日

Converting CDR to ISO via Command Line

1. Converting a DMG to CDR

  • Mount the DMG disk image you want converted to CDR format by double-clicking it in the Finder
  • Launch Disk Utility found in /Applications/Utilities/
  • Select the .dmg image from the sidebar list and then click the “Convert” button in the toolbar
  • Pull down the “Image Format” menu and choose “DVD/CD master”, then click “Save”
2. Converting CDR to ISO via Command Line

hdiutil convert /path/imagefile.cdr -format UDTO -o /path/convertedimage.iso