In the beginning was the number 10001000100 and the number was with ... ?

Yes, I invite you all to venture a guess about what this number is about

10001000100

and also about what is the word at the end of the sentence in the title.

If you would like some hint, think about what this sentence originally means and apply it to …. yes, of course, our Steem.

I will reveal the answers after this picture, so do not scroll down if you would like to try to answer that by yourself!

sunrise-1765027_1280.jpg

First of all, this number is in binary - a little trick to confuse you, but the result looks so beautiful isn’t it? ^^

So, the number in decimal actually is 1092. What about 1092?

If you are as obsessed as I am about Steem’s history, you should have tried to look up the history of blocks by using steemd.com. Let me take you to the genesis block of Steem:

https://steemd.com/b/1

螢幕快照 2018-08-01 上午11.00.54.png

Wow! there is a cake! haha, I think that’s the humor from steemd developers. But, well, besides the cake, there is actually no transaction at all in this block.

Actually, if you keep searching, there isn’t any transaction in these earliest Steem blockchain blocks until…. Yes!

The #1092 block!

https://steemd.com/b/1092

螢幕快照 2018-08-01 上午11.07.02.png

There are four transactions included in this first non-empty block which are all pow transactions (I hope you are aware that in Steem blockchain’s early days we had POW as consensus mechanism in addition to dPOS). The first three players that jumped onto the Steem stage are @admin, @dark and @nxt1 - they both found 1-2 pows that grant them the right to be the block producer that produced the subsequent block and earned the associated block reward.

In this case, @dark became the block producer of #1093 (https://steemd.com/b/1093) and earned 1 VESTS as reward and in this 2nd non-empty block, more miners appeared and earned their rights to be the next block producers…

And the block sequence goes on…. until today

Okay! I hope you have already got the answers! So, officially they are …

In the beginning was the number 1092 (0b10001000100) and the number was with pow.

I hope you enjoy this interesting and simple looking back in Steem’s history. ^_^

map-3409359_1280.jpg
image - pixabay


This page is synchronized from the post: ‘In the beginning was the number 10001000100 and the number was with … ?’

[D&TT] 暫停鍵

D&TT ( #deantt) 是我的育兒系列,也許談養兒,談育兒,談當年生兒,談媽媽懷孕時,談家庭形成,談生命意義,談我兒TT的好笑,可愛,可憎,或記錄他的生活,我們的生活,三個人的,兩兩的…. Anything about TT。


time-371226_1280.jpg

TT昨夜終於退燒了,今天白天也沒有再度燒起來。雖然還在咳嗽,總算,我們看到光明了,雖然還在隧道裡,但已經知道出口就在前方,終於放下一顆懸著的心。高燒超過四天,整個病程持續了將近一週,跑了兩次急診,大人們都快要倒下了,總算。

於是,今天我開始恢復平日的工作模式,離開家裡,到外面跟人碰面討論。走在路上,像是離開一陣子後回來,充滿一種陌生又熟悉的感覺。走在路上,對著迎面而來的上班族們,心底大喊“哈囉!好久不見啊,我又回來這世界了!” 呵呵,被關小孩監,關了一週,放風後,特別懂得珍惜這種平常的日子。

今天又開始看一些新聞與資料,也才一週,就讓我覺得跟世界有點脫節了。

我不禁聯想到一個我聽過的說法,真的覺得是太傳神了,大致上是這麼說的:

生孩子之後,你的人生就像是按下暫停鍵。

我不禁想起過去這些年,真的好多好多事,就像是按下暫停鍵。好多年不曾進電影院,小孩還小時有好久好久時間不曾去吃過火鍋,因為吃火鍋太花時間,好久沒去小旅行,就算是去了,帶著孩子也不會有太多悠閒的感覺….

比起結婚,生孩子真的更是改變生命的超級 game changer。

偶爾,你的心底還是會升起這個疑問:

這一切,都值得嗎?犧牲這麼大….

尤其是,原本就對自己的生活有很高掌握程度的人。我傾向不認為這問題有標準的答案,每個人有每個人的故事、對人生的期待、對孩子或家庭的期望。所以,我從不鼓勵人生小孩。說真的,別人的生命,我們有什麼資格提出建議呢?

至於我,我確實也想過這問題。但,有一句台語的俗諺,也算是蠻傳神的我的答案:

愛到卡慘死。

哈哈,沒有字面看起來那麼可怕。這句話的表面意思就是,愛上了,你就只好無奈的接受你的命運。不過,我對於我兒,比較沒那麼多負面意義,主要是強調,對我來說,無論犧牲多大,我都覺得不後悔,很開心,痛苦並快樂著~~

對,即使我的人生得暫停,但慢慢的,會開始慢速播放,總有一天,會再回到正常的節奏,沒有關係。即使,會對於過去年輕時的日子,感到懷念與渴望,但這都沒有他重要。

套一句我老婆的名言:生小孩之前,要去玩到夠,那麼,之後不論再怎麼累,你就比較沒有遺憾了。(似乎有點類似結婚前要玩夠?不過這兩個”玩”的意義應該不同。)

暫停之後,我們已經不是暫停之前的那個人了,我擁抱這個轉變,也希望所有願意按下暫停鍵的人都是如此,否則,大可不要按下去喔!


#deantt


This page is synchronized from the post: ‘[D&TT] 暫停鍵’

[DA series - Learn Python with Steem #04] 迴圈

[DA series - Learn Python with Steem] 是DA(@deanliu & @antonsteemit)關於「從Python程式語言實做Steem區塊鏈的入門」的系列,歡迎趕緊入列學習!

前情提要:[DA series - Learn Python with Steem #03] 邏輯判斷

第#04堂課,今天我們來學習另一個也是非常重要的主題:迴圈

Python的迴圈 (Loop)

前一期說完了if-else判斷式,這一期來看看另一個重要的元素:迴圈。
迴圈簡單的說,就是讓電腦「重複執行某一動作」的語法。原因很簡單,我們使用電腦程式就是為了解決繁瑣的工作內容,而這種重複性很高的動作,我們可以透過迴圈的設定讓我們一個程式就執行完所有內容。舉個簡單的例子,若是我們未來要觀察區塊鏈上的內容,可以透過迴圈的方式不斷搜尋不同的block,不斷的回去翻找歷史直到第一個區塊為止。

迴圈又可以分為While迴圈For迴圈,其中只是是語法跟使用情境稍有不同,大部分的概念是一樣的。我們先來介紹While迴圈。

While Loop

While迴圈的使用情境是「面對我們不知道何時會中止的程式時」。可以用以下一個簡單的例子讓大家稍微看一下這個邏輯:

註:本篇教學的程式碼可以到GitHub觀看。

執行結果:

1
2
Stop!
2097152

While的執行邏輯是:每次執行while的範圍內的程式前,會先確認while後面的expression是否為True。如果是True的話就會執行內容,反之則跳過迴圈。這裡我們先使用一個布林變數continue_to_loop = True來當作「要不要繼續迴圈的指標」,稍後我們只要改變這個變數,迴圈就會中止。

if-else相同的是,被包含在while迴圈裡面要做的事情,我們一樣要使用縮排一層一層的包好,免得讓系統誤會。這裡我們一開始令 n = 1,在每次迴圈裡都把他乘以二,並且判斷這個新的n有沒有大於1312300。如果有的話,我們就把continue_to_loop這個變數設為False,藉此中止程式。

所以等程式不知道經過多少次迴圈後,2的某個次方數變成2097152,也就大於一開始設定的m了,迴圈因此中止,並且最後印出n:這時已經是 2097152。

這種先設計一個布林變數來看要不要停止迴圈的手法,通常這個變數會被稱為flag,因為它的True or False決定了迴圈的命運。這種手法在很多情況下很好用,也會讓程式的運作邏輯很淺顯易懂。不過其實我們這一個例題是不需要用到Flag的,如果只是單純的數字比較的話,我們可以做一些簡化:

這樣是不是簡單很多呢?我們將我們希望每個迴圈繼續執行的條件:n < m放在while的後面,而while迴圈的設計正好就是「不斷執行直到不滿足 n < m」,也就是在n >= m時就會自動停止了。

For Loop

另一個迴圈是for迴圈,原本在程式語言中通常是用來執行「可以預期什麼時候結束的迴圈」。跟while loop不同的地方在於,我們一開始就會告訴程式我們要loop的範圍或是次數。舉一個最最簡單的例子,就是印出1~15的數字:

執行結果:

1
2
3
4
5
0
1
2
...
14

在 for 的語法 公式就是 for x in o:,代表著:「走過o裡面所有的x」。上面的這段程式有一個新的部份叫做range(),專門用來產生這種一串的東西讓for迴圈走過。所以range(15)就會產生0,1,2,3,4,….,14 (從0開始直到大於等於15停止)(在預設情況下,只輸入一個數字n就是從零開始走到n,不含n)。如果我們想要指定從1開始走走到15,就可以寫成range(1,16)。

不過python好用的地方在於,我們往往不需要知道一個「O」裡面有多少個「x」,就可以直接很懶的使用for迴圈了。python的for迴圈很聰明,會自動幫我們想像「我們應該是要重複拿出裡面的某些東西」。

例如下列程式中,我們先把東西存在一個陣列(array)(後面我們會教更多關於陣列等等資料結構)裡面,然後就可以透過for迴圈「一個一個讀出來」。

執行結果:

1
2
3
4
5
apple is in your shopping list
orange is in your shopping list
lemon is in your shopping list
Xiaomi 6 Plus is in your shopping list
iPhoneX is in your shopping list

這段程式當中,我們先把shopping_list定義好,把一堆的字串存在這個陣列裡。接著我們利用for item in shopping_list的語法,來走遍每一個item。

python聰明的地方是,我們可以直接叫for loop跑完整個清單,每次回傳一個東西,並且這個回傳的東西叫做item。我們前面完全沒有告訴過python說過item是什麼,這一句 for item in shopping_list就好像:「遍歷shopping_list裡面的東西,每次拿出一個,稱為item」。所以在這個迴圈中,第一次 item = apple,第二次 item = orange ,以此類推。

不過這裡的print()裡面我們多了一個函式,稱為format(),是今天要教大家第二個好用的小技巧。format()是字串的一個class method (類別函式),也就是只有字串能夠用。我們可以用這樣的語法在字串中加入我們要的變數

1
'The value of variable a is {}'.format(a)

意思就是把a的值,以字串的形式放入前面那一串子裡面的{}中。

所以上一段例子裡,每次我們會印出 ‘ {} is in your shopping list ‘,其中{}就會變成每次的item,也就是物品名子。這樣是不是在設計output的時候有比較方便阿!

Homework time:練習題!

好了,今天簡單的for, while介紹就到此為止了,也來給大家出一個練習題,同時也是程式設計裡面的經典:九九乘法表問題:請用迴圈在螢幕上列出99乘法表。提示:要使用雙重迴圈,也就是Loop in a Loop。

不過要完成這個作業,大家可能還需要一點新技能,就是關於print()函數的多一點認識。print()在沒有任何設定的情況下,會印出你輸入的內容並且換行。在印九九乘法表的時候,我們並不是每次印出數字就要換行,因此會需要使用print 函數裡面的end設定來變更這個預設的字莫換行
print(number, end = ‘ ‘),會在螢幕上印出number的值,並且不換行,而是在後面加上' '
如果想要印出
縮排**,也就是一個整齊的空格的話,可以設定end = '\t',如下:

1
print(number, end = '\t')

(在程式語法裡,通常使用\t來表示縮排(tab),而用\n表示換行)

接著就祝大家好運了,我們下回見~

寫完的朋友們,也歡迎來GitHub@antoncoding對對答案呀!不過這不是唯一的解法喔~

我們下篇文章再見囉~下課!

class-377117_1280.jpg
image - pixabay


This page is synchronized from the post: ‘[DA series - Learn Python with Steem #04] 迴圈’

早餐與圖書館

DSC_5764.JPG

這兩個主題沒太大關係,只是剛好發生在同一個早晨,那是上週六的早上。我們趁孩子還要睡一陣子,出門去吃吃早餐。很久沒到這間早餐店,算是介於早餐店跟早午餐店之間的一間店,精緻度是夠的。簡單點了飲料與餐點,很不錯,尤其是第一次吃到他們家的六吋小比薩,沒想到很可口。

卡布奇諾還有拉花,墨西哥起司蛋卷也很棒,莎莎醬味道很夠。總價大概是三百台幣出頭吧。

DSC_5767.JPG

DSC_5766.JPG

DSC_5765.JPG

DSC_5763.JPG

吃完早餐之後,還有點時間,於是我們散步到附近一間市立圖書館去。一樣也是很久沒去了,我看我應該是七八年沒進去了吧?沒去之前,我一直認為,圖書館這種東西,是注定要殞落的黃昏事物。原因你也懂:這年頭,看書的人越來越少了,更何況,圖書館的書,太新的可能沒有,好看的往往被借走,大概只能剩下供學生準備考試,讓社區老人去看報紙的功能吧!

我們一去之後,我大為吃驚。發現我完全錯了,至少,台北市的市立圖書館非常非常認真與用心,連電子書都可以借,然後使用的人還算不少,環境非常舒服,書看起來也蠻新蠻有利用率的….

我就是看到下面這一排書的時候,被震懾到!這一排書,都是這附近的讀者上網預約要借閱的書(應該包括跨館從其他館藏送過來的書),你看看,數量有多少!這些書都在等著預約的讀者主人來領取它們回去看,讀者還不需要找館員,可以自己使用電子借閱機來完成手續即可!

DSC_5768.JPG

DSC_5770.JPG

看這麼多書被借閱,看得我好生慚愧啊!這些年,真的很少很少好好靜下心來讀一本書了,往往都是整天在網上遊蕩,知識獲得也是主要從這管道。這樣也就算了,竟然還默默地開始歧視起使用書本獲取知識的人,真是太自大了!

等我比較有空一點,我也要開始來利用這個美好的圖書資源了!^^

DSC_5771.JPG

DSC_5769.JPG

A beautiful morning with great food for body and mind!!


This page is synchronized from the post: ‘早餐與圖書館’

[DA series - Learn Python with Steem #03] 邏輯判斷

[DA series - Learn Python with Steem] 是DA(@deanliu & @antonsteemit)關於「從Python程式語言實做Steem區塊鏈的入門」的系列,歡迎趕緊入列學習!

前情提要:[DA series - Learn Python with Steem #02] 變數與資料型態

新的一週開始了!讓我們繼續學習吧!

第#03堂課,今天我們來看一個相對簡單但非常重要的主題:邏輯判斷 吧!

Python的 If Else 邏輯判斷

邏輯判斷可以說是程式語言最古老的基本成份,也是程式中非常常出現的語法。看懂了if else之後,加上我們之前對於變數的理解,看一個陌生的簡易程式碼已經可以理解五六成了。

其實我相信很多人看到If else這些英文字,就已經可以猜到大概的意義了。沒錯,正如他們的中文翻譯,if就是「如果」的意思:如果符合這個情況(邏輯判斷)就執行下列程式;而else則是跟隨在if後面的,代表不符合if的其他情況下,就執行這些程式。所以整個if else,可以翻譯成中文的「如果…否則…」

我現在舉一個非常簡單的例子,懂了之後再來看看一些比較細項的規定:

執行程式:python tutorial_3.py
Output: You are not overweight!

注:本篇教學的程式碼可至GitHub/tutorial_3.py中參考或下載。

在Python語言中,所有的判斷式都是用冒號(:)並且加上換行縮排來表示邏輯的上下關係。由上面的程式碼中可以看出,縮排的(按tab,相當於在段落前增加一個大空格)的 print('You are not overweighted!')是屬於 if的範圍,因此在 if成立時會被執行。
else會跟if在同樣的水平位置,在else:的下一行也是一排經過縮排的內容,表示else成立的話,要執行的範圍。

關於判斷式

放在 if後面的 BMI>24是一個 Expression,也就是一個會回傳「True or False」的式子。這裡的「大於小於」判斷很好理解,如果正確就回傳True、錯誤就回傳False。比較要注意的事,如果要判斷相等的話要使用==兩個等號,因為一個等號在程式中是賦值的意思,兩個等號才是一個會回傳True or False的Expression。

你可能會想說,上次學到的布林值不是也是True or False嗎?沒錯!所以可以在if 之類的地方放上以前學過的布林值。例如:

1
2
3
4
5
is_married = True
if is_married:
print('You are married')
else:
print('blah blah blah')

關於縮排

這些縮排的規定是非常重要的,因為python中沒有使用任何括號來把if 的範圍刮起來,python完全是透過換行以及縮排來判斷要怎麼執行程式。如果你的換行與縮排有錯誤的話,會讓程式不知道何者屬於if的範圍,或何者屬於else的範圍。例如下面就是一個錯誤例子:

錯誤代碼如下:

1
2
3
4
  File "tutorial_3.py", line 7
else:
^
SyntaxError: invalid syntax

我們可以來練習怎麼讀這些錯誤。他告訴我們是在第七行的else出了問題,而他會跳出錯誤正是因為所有else出現前,都應該先有個同縮排等級的if。不然沒有「如果」哪來的「否則」阿?

如果你在執行程式的時候發現IndentationError的錯誤,很可能是因為每次縮排的方式不同。在python中,縮排不只水平距離看起來要一樣,若是用空白鍵按很多次按出來的,跟使用tab鍵一次跳一大步跳出來的,儘管肉眼看起來好像一樣,在程式編譯(執行前準備)也是會被擋下來的。

多重判斷

如果只有ifelse的話,我們要撰寫一個判斷BMI是否正常的程式需要「兩層的if-else」。因為在確定沒有過胖的情況下,還要在透過一次if - else 確定也沒有過瘦,才算正常。因此我們的完整邏輯判斷會變成:

執行結果:You are just fit!

不過這種多重判斷是很常遇到的,我們通常會有很多的這種非類的情況,例如:假設我們要區分一個數字是位於0~10, 11~20, 21~30, 31~40 哪一個區間,如果只用單純的if - else的話,就需要四層判斷。當然我們的python不會讓我們這麼累啦!所以就發明了 elif的語法,意思就是 Else if,中文可以翻譯為「若不是,那如果…」

例如上面的BMI例子,就可以透過elif改寫如下:

所以這個程式會先判斷我的BMI是否大於24,若是,則輸出「You are overweight!」。
若不是,那如果 BMI < 18,就輸出「You are underweight」。而最後剩餘的情況,也就是 BMI介於18~24之間,就是屬於正常。這樣寫是不是很簡單阿!

讓程式變有趣的小撇步

今天最後來教大家一個很好用的功能:讀取使用者輸入的函式:input()
我們剛剛那些變數:my_weightmy_height都是在程式碼內自行輸入指定的,每次要測試不同的身高體重就要重新更改程式碼,要是可以在執行的時候手動輸入想要查詢的值就好了!因此有了input()這樣一個方便好用的函式。使用方式如下:

input()裡面放的字串是我們想要顯示在command line上的提示字元,在這裡就是詢問使用者,你的身高及體重為何。輸入完成後,這兩個值分別被存到my_height以及my_weight裡面。
但要注意的是,input()所讀進來的變數型態為字串,還記得我們前面說過,字串的加減乘除跟數字是不一樣的,其中乘法就會出錯。因此我們在使用這兩個變數計算BMI前,要把他們的資料型態由「字串」轉為「數字」。Python中我們可以直接用float(x)把一個x轉成 「有小數點的數字」,或是用int(x)把x轉成「正整數」。我們這裡兩個都是可以輸入小數點的,因此選擇用float()把讀到的字串轉成 float(這種有小數點的數字稱為浮點數)

執行結果如下:

是不是程式都變好玩了呀!

如你所見,input()可以幫助我們設計很多跟使用者互動的界面,大家也可以試著自己做做看一些簡單的「輸入並判斷」程式囉!

Homework time:練習題!

從這章節開始,我們都在文末來指派個小小練習題好啦!讓大家自己建立一點成就感。今天小小的練習題:

利用If-Else Statement,設計一個程式 要求使用者輸入三個數字,最後印出最大值:

範例輸入與輸出

參考解答:GitHub/@antoncoding

我們下篇文章再見囉~下課!

class-377117_1280.jpg
image - pixabay


This page is synchronized from the post: ‘[DA series - Learn Python with Steem #03] 邏輯判斷’

[街巷美食] 台北美味小館

DSC_5824.JPG

畢業典禮之後,我們也算完成一件事,他精神還可以,就到附近去尋覓美食一下,調劑一下緊繃多天的神經。到了一條不少美食的小街上,發現這裡應該有不少好吃的。最後,用經驗法則判斷,選擇了一家看起來應該不錯的餐廳,果然,Bingo了!這家的菜都很不錯,非常道地外省風味。

門口上寫的他們的招牌是各種砂鍋,但我們人少,最後還是決定不點這種大菜,等以後有機會再來光顧。我們就點了不少他們牆上推薦的熱門菜色,都算是蠻合理的價格,甚至可以說是便宜了~~

讓我們一起來看看,這家『台北美味小館』是不是真的,店如其名呢?

牆上還有精裝的書法,挺講究的。

DSC_5822.JPG

當時已經一點鐘了吧,店內仍不少人,我們就跟別人併桌吃飯。

DSC_5813.JPG

看看菜單,好多『1』開頭價錢的菜啊,真的是很合算的啦!只要好吃的話…. 開點吧!

DSC_5812.JPG

上菜囉!招牌之一:獅子頭!我們沒點砂鍋獅子頭,只單點一顆獅子頭。其實我不特別愛吃這道菜,但看在是招牌份上,還是點了,單顆150元台幣。

DSC_5814.JPG

切開給你看。不錯吃,但我個人還是不愛,或許砂鍋版或更可口?

DSC_5815.JPG

口水雞,讓你流口水!這道菜是我們兩都愛的,在兩岸吃過很多次這道料理,這家的絕對是水準之上!看看這色香味!

DSC_5820.JPG

來點白飯配配!我們沒吃完,還打包了,那醬汁,真的很下飯哪~~~

DSC_5821.JPG

有個怪名的豆腐料理:老皮嫩肉。看起來也是很誘人~~

DSC_5816.JPG

吃起來,恩,真的粉嫩哪~~~ 好吃好吃!

DSC_5817.JPG

這道就特殊了,印象中我沒吃過。皮蛋地瓜葉,我原本不想點這麼怪的組合,但老婆提醒說這是熱銷菜色,於是我就想試試看。送上之後,我完全懂了!好妙的組合啊,從來沒想過可以這樣搭~~還用了鐵鍋裝著,上面還有火~~哇~~~ 很美味喔!

DSC_5818.JPG

一樣配飯好吃!

DSC_5819.JPG

要不要猜猜牆上那四個紅字是什麼?我看不懂,請教老闆後才知道。

DSC_5823.JPG

吃飽之後,可以在附近逛逛喔!這一區很多老建築物,不見得是什麼觀光景點,但是偶然一個轉角,你可能就會遇見什麼特別的人文風景喔!~~

DSC_5825.JPG

例如這一棟建築,呵呵,我下次再找時間介紹吧!

DSC_5826.JPG


This page is synchronized from the post: ‘[街巷美食] 台北美味小館’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×