2018年9月29日 星期六

瑞士伯恩

來到

瑞士伯恩

一定要到老城區來逛逛,

於1983年被聯合國列為世界文化遺產,

古色古香的老城區,

位於萊茵河支流的阿勒河的彎曲處,

著名的景點有:

時鐘塔,

熊公園,

伯恩大教堂,

等等,




時鐘塔建於十三世紀初,

最初用途為西城門的守衛塔,

歷時八百多年,

經歷多次整修,

時鐘塔至今依舊是熱門觀光景點,




除了時鐘塔以外,

瑞士聯邦國會大廈也在伯恩,

這是瑞士政府與議會的所在地,



於附近的玫瑰園,

可以眺望舊城區與阿勒河,



愛因斯坦也曾在伯恩居住過七年,

其故居也完整保留在伯恩

2018年9月12日 星期三

瑞士琉森卡貝爾橋

瑞士琉森

位於琉森湖畔,

一千三百多年前原為一個小漁村,

後因本篤會聖萊奧德伽爾修道院建立而逐漸興起,


來到琉森,

除了琉森湖美景以外,

卡貝爾橋也是目前世界聞名的旅遊景點之一,

卡貝爾橋長約兩百公尺,

跨越羅伊斯(Reuss)河兩岸,

是目前歐洲現存最古老的木橋,

橋的北岸為聖彼得教堂,

別名教堂橋就是由此而來,

建立於西元1333年,

原為了防禦而興建,

橋中間有座由磚建成的八角形水塔,

曾於1993年火災後重建,

旁邊舊城區,

有許多餐廳與商店,

欣賞美景的同時,

可以品嚐一下在地美食與購物,

途經琉森,

記得到此一遊.






德國天鵝堡

德國天鵝堡

是目前歐洲旅行熱門景點之一,

其中


高天鵝堡又稱為舊天鵝堡,

是位於德國巴伐利亞洲霍恩斯萬高村的一座城堡,

與新天鵝堡隔山相望,

是巴伐利亞國王路德維希二世童年長大所居住,




與此相距四公里的新天鵝堡,

位於德國巴伐利亞西南方,

為巴伐利亞國王路德維希二世的行宮之一,

1886年路德維希二世辭世時尚未完工,

共360個房間,

城堡建於三面絕壁的山峰上,

背靠阿爾卑斯山脈,

隨處可見哥德式與巴洛克風格細節,

在瑪麗安橋上遠眺新天鵝堡,

是最佳的視角.

相傳迪士尼與城堡相關的童話故事,

就是以新天鵝堡為藍本.

堡內參觀無法拍照,

開放時間為早上八點到下午五點,

門票費用為13歐元.


既然大老遠來到此處,

當然要買點紀念品,

由於疫情關係,

目前暫時不宜出國,

防疫在家沒事情做可以拼圖打發時間,



從旁邊先拚比較簡單些,

所以先將邊邊角角的拼圖全部都挑出來拚,

其他的就慢慢來囉。



2018年9月9日 星期日

商品推薦 - 松森三層鞋架

衣櫥要DIY,

前陣子介紹的米勒八格書架要DIY,

現在連鞋架也要來DIY,

今天要來推薦

松森三層鞋架


寬x深x高  為  64x32x75公分,

建議售價899元



打開即可看到說明書,

檢查完配件之後就能夠開始組裝


將木榫插入鞋叉上方的固定洞裡,


將其插入側板並鎖上螺絲


 將兩個鞋叉都鎖上以後,


把整個鞋架倒過來組裝,

這樣在安裝隔板的時候,

螺帽才不會從孔中掉出來


全部螺絲都鎖好再將鞋架倒過來


如此就完成了,

其實安裝步驟不多,

此鞋架物美價廉,

開孔位置也準確,

唯一一個缺點在於開孔的邊緣沒有處理的很平整,

雖說不影響功能,

在美觀上卻是扣分的,

如果不介意的話,

這個鞋架是值得推薦的

Android常用的文字輸入元件 - EditText


EditText    這個元件是用來接收來自使用者輸入的資料,

與TextView扮演的腳色一個是輸出文字(TextView)一個是輸入文字(EditText),


之前我們以TextView為主體當作Android入門的第一堂課,

而Android官方教學網站則是兩者結合來建立第一個Android app,


首先建立一個新的Android   專案,

編輯使用者介面如下


其中使用者輸入文字的元件在Android    Studio   中叫做Plain Text,

可以在元件列表中找到


其屬性與TextView類似,

主要的差異如下圖紅框所示


接著新增一個空的activity


作為下一頁秀出傳遞的資料


完成使用者介面之後,

接下來就是編輯程式碼了,

先加入底下的程式碼

由於EditText.getText();得到的是EditText的資料型態,

故在其後方須加上toString();轉為文字型態.


接著再將兩個功能分別加到buttton的onclick中.


到此第一頁Activity的工作就完成了,

在接收資料部分,

在使用者介面中加入一個TextView元件,


在第二頁的程式碼中,

加入接收的資料,

並將其秀在第二頁的TextView中



如此一來,

就能夠將在EditText中輸入的文字傳遞到第二頁的TextView中了,

有興趣的人,

可以下載範例程式來觀看


在這個範例程式中,

Intent intent = new Intent(this,show_msg_activity.class);
                  這裡指定資料要從this(lession2acttivity)傳遞到show_msg_activity.class

String message =entext.getText().toString();
                  將輸入的文字存到字串message

intent.putExtra(Extra_Message,message);
                    將message的文字存到Extra_Message="com.example.xyaw.lesson2.Message";

startActivity(intent);
                    傳遞資料




接著再以getIntent();

Intent intent = getIntent();
String msg = intent.getStringExtra(lesson2Activity.Extra_Message); 
接收傳遞的資料
                 
TextView targettxt = (TextView) findViewById(R.id.id_final_text);
targettxt.setText(msg);
                     最後將其秀在第二頁的TextView中









2018年9月8日 星期六

[範例程式]利用textView屬性改變文字大小


先前介紹了TextView的常用屬性

馬上進入實作:

利用textView屬性改變文字大小



首先從左手邊的元件列表拉兩個button進入使用者介面 ,

(這裡是activity_main.xml)


在右邊的button屬性欄中,

設定 ID 與顯示的文字


接著切換到 MainActivity.java,

新增程式碼如下


findViewById(R.id.資源id名稱);

這是透過元件的id屬性來找到該元件,

並對其做屬性的修改,

接著再回到 button 的 屬性欄,

找到 onClick  ,

從下拉式選單找到剛才輸入的縮小程式,(smaller_txt),

Android Studio會自動將點擊按鈕連到此程式,

放大文字的程式再重複以上步驟即可.


需要特別注意的是

getTextsize();回傳的值是以像素PX為單位,

setTextsize();預設卻是以SP為單位,

故特別以     TypedValue.COMPLEX_UNIT_PX 

指定輸入的資料以像素為單位


除此以外,

還可指定其他的資料類型

TypedValue.COMPLEX_UNIT_PX:
指定輸入的資料以像素為單位

TypedValue.COMPLEX_UNIT_SP:
指定輸入的資料以scaled pixels為單位

TypedValue.COMPLEX_UNIT_DIP:
指定輸入的資料以device indpendent pixels為單位


有興趣的話,

可以點此下載範例程式


textView的常用屬性


建立第一個Android   app之後,

接下來就是要根據需求開發所要的功能了,

Android設計的特色在於,

使用者介面(Layout)與程式邏輯(Activity)是分開設計後再build成apk檔案,

這樣的做法好處除了在於更改使用者介面不必動到程式碼之外,

對於各種不同尺寸的手機平板來說,

也能透過設定資源檔的方式避免更動到程式碼.


在建立Android專案之後,

Android Studio預設會建立一個Hello World的textview,

可在右半邊的屬性欄找到如以下:


這裡可以列出一些常用的屬性供設計者開發用,

同時也可點選紅色框選部分,

列出所有屬性,

text :  在此設定要顯示的文字
frontFamily:  設定字型
textSize:  字型大小
textColor: 文字顏色
textStyle:  設定粗體,斜體,或者全部大寫



有些屬性可以直接賦予值,

也能設定參照資源,

例如:

在text屬性欄位填上Hello World !     ,

或者參照資源方式將其定義為string.xml中的字串,


第一步在屬性欄點選紅色圈選處


選擇   Add new resource


建立新的字串



填入字串名稱與字串值之後,點選OK


回到編輯畫面之後可看到text屬性已經設定參照為str_hello字串


從左邊的樹狀結構中可找到strings.xml資源檔


將其打開即可看到剛才新增的字串



設定參照的好處在於將來如果使用不同國別的資源檔,

可讓系統自動套用符合該國別的文字或圖形,

不必再另外編輯程式碼






2018年9月3日 星期一

mkfs.ubifs: Fix build with gcc 5.1


Android開發中,

遇到以下兩個問題:

error: redefinition of ‘hashtable_iterator_key’
error: redefinition of ‘hashtable_iterator_value’

這是由於gcc 5.1 對於編譯C文件已由gnu89改為gnu11,

這改變了對extern inline的定義,





在mkfs.ubifs中,

這導致了hashtable_iterator_key 與 hashtable_iterator_value 產生多重定義,(redefine),

最快速的解決方法是以extern inline 取代 static inline.


也就是在hashtable_itr.c 與 hashtable_itr.h 中
改為下列所示:


diff --git a/mkfs.ubifs/hashtable/hashtable_itr.c b/mkfs.ubifs/hashtable/hashtable_itr.c
index 24f4dde..d102453 100644
--- a/mkfs.ubifs/hashtable/hashtable_itr.c
+++ b/mkfs.ubifs/hashtable/hashtable_itr.c
@@ -35,18 +35,6 @@ hashtable_iterator(struct hashtable *h)
 }
 
 /*****************************************************************************/
-/* key      - return the key of the (key,value) pair at the current position */
-/* value    - return the value of the (key,value) pair at the current position */
-
-void *
-hashtable_iterator_key(struct hashtable_itr *i)
-{ return i->e->k; }
-
-void *
-hashtable_iterator_value(struct hashtable_itr *i)
-{ return i->e->v; }
-
-/*****************************************************************************/
 /* advance - advance the iterator to the next element
  *           returns zero if advanced to end of table */
 
diff --git a/mkfs.ubifs/hashtable/hashtable_itr.h b/mkfs.ubifs/hashtable/hashtable_itr.h
index 87a97eb..5c94a04 100644
--- a/mkfs.ubifs/hashtable/hashtable_itr.h
+++ b/mkfs.ubifs/hashtable/hashtable_itr.h
@@ -28,7 +28,7 @@ hashtable_iterator(struct hashtable *h);
 /* hashtable_iterator_key
  * - return the value of the (key,value) pair at the current position */
 
-extern inline void *
+static inline void *
 hashtable_iterator_key(struct hashtable_itr *i)
 {
     return i->e->k;
@@ -37,7 +37,7 @@ hashtable_iterator_key(struct hashtable_itr *i)
 /*****************************************************************************/
 /* value - return the value of the (key,value) pair at the current position */
 
-extern inline void *
+static inline void *
 hashtable_iterator_value(struct hashtable_itr *i)
 {
     return i->e->v;
}





2018年9月2日 星期日

商品推薦- 米勒八格書櫃

今天要來推薦商品

米勒八格書櫃

目前這個時代,

許多人喜歡DIY,

做蛋糕要DIY,

而書櫃組裝也要來個DIY,

為何推薦這個米勒八格書櫃呢?

主要原因是 -   孔位精準且孔位深度也打得剛剛好

大小   27.2x81.4x120cm,


價格也不高貴

Pchome售價 1390 元,



打開箱子,

第一步當然是檢查各部件是否與說明書中列表相符,

不然組到一半缺零件是很尷尬的,

檢查完即可開始進行前置作業,

將24個木榫塞進各部件孔洞之中,

塞之前塗上隨箱附贈的白膠以增加產品強固性
(白膠贈送兩小罐, 一般DIY書櫃沒有附贈)



找到E ,   F   ,   G   三塊位於底部的板子並將腳粒釘上去,

(各部件側邊都有印章蓋上英文字母,  辨別部件位置很方便)



F  , G   部件的腳粒建議在五公分處


24個木榫裝置完畢後,

將 B, C 與   B,D   木板合組為兩個T形


 並鎖上平尾螺絲

再將兩者組立起來,

這書櫃中間的骨架就完成了


再將背板兩兩以H形條組合起來並將其滑入軌道中

(記得將白膠用上, 以免背板晃動)



接著將兩側板與底部 E板安裝鎖上
 
組裝起來長這個樣子 ,

再把各個隔板用上即可