2015年7月27日 星期一

挑幼稚園也是很難的

大女兒現在也差不多該給他找個接觸社會了.整理了一下方圓一里內的幼稚園如下.
擷取

上述的學校跑跑跳跳後,看起來有操場對小孩的魅力無窮.來來跟北大有很棒的跑跳空間.我家兩姊妹玩得很開心.幼稚園好像就是一個開心樂園一樣.

其實看完了之後.只有一個感覺.小孩真的好幸福,不論哪個學校都是有老師貼心的指導.就看父母親的經濟實力到哪裡囉.想像一下如果只有 22K的人, 租房後還要養小孩 光是幼稚園的費用真的就可以逼人上吊了.不論怎樣,咬緊牙給小孩的教育,無非就是希望用教育能改善現實上可能父母親的不足.或許在耐性上,語言能力上或是藝術性上沒有辦法給予小孩一個很好的學習典範,但到了一個新的環境,或許同儕的刺激.小孩會有多得到一些在原生家庭所無法得到的啟發.

過去我的母親也為了我的幼稚園煩惱過,育航有很棒的戶外空間,玩到我摔斷左手打上石膏.育達附幼雖說是室內的,但給我在音樂上的刺激,口琴.手風琴,鼓.雖說玩得很開心.但好像也沒有真的在音樂上有一番成就.不論結果如何,出發點都是愛.或許看起來揠苗助長.但又何嘗不是愛的負擔呢~

2015年7月19日 星期日

兒童口琴 S-15

這把是1983年,在本人五歲的時候.於育達附幼時所使用的口琴.這是我母親買給我的樂器.
小時候不懂事,還用過刀片去清除上面的貼紙.因為幼稚園老師有貼一些色紙在上面.用顏色來教學.但當時我壓根搞不懂1234.印象中就是胡亂吹.反正在樂隊裡面濫竽充數.PIC000261
後來上了高中,因為離開管樂社後,沒有自己的Saxophone,真的會嘴癢,於是就找出來玩.發現這樂器真的很有趣.也是簧片發聲,摸索一個晚上後,了解到音階跟呼氣 吸氣的關係後,很快就上手了.當然也很快的就不滿足於單簧,C調,不久之後請教口琴社的朋友才知道,#記號要第二把,很快的就改用雙把.在上大學之前這便宜的樂器真的滿足了我離開管樂社的遺憾.
甚至還影響了兩位高中同學.也買了口琴來吹.音樂課得時候有表演過 秋蟬. 以及一些英文老歌.

這雖有30年了,現在還是能用,小朋友吵鬧的時候.隨時來一曲 小星星 兩隻老虎都很好用的工具.小朋友對於聲音其實蠻敏銳的.
寧寧 大概在一歲開始就很好奇,會搶口琴,且為啥一定要在爸爸用才會有音樂出來.
到目前還想不通.
瑄瑄呢~~還不會想.只是聽到音樂會轉圈圈沒想過要搶下爸爸的口琴來玩.
三十年後.換我買給我的孩子 一人一把.
這口琴不貴 品牌是Suzuki..有趣吧!
PIC000263
包裝上變化不大,日本人真守舊.或是說這產品真的30年不變,打開內容物,哇!除了塑膠盒上的字樣少了燙金.真的一模一樣啊.其實Yamaha也有類似的兒童口琴.
p08183692957-item-3080xf1x0300x0300-m
我還記的當年拆封也是這樣的塑膠包裝.為啥會記得,因為我拆開的時候把塑膠弄破,收起來的時候再難過為啥沒法包的新的一樣.直到我母親把塑膠紙丟掉.我才知道那可以丟掉.如果說處女座龜毛,這點我倒是挺認同的.
PIC000262
東西都有了.剩下就是慢慢教了.學齡前就開始玩口琴會不會太過分呢??

2015年7月14日 星期二

My MotoRun 鍵盤控制 遠端版本

之前的版本是使用pygame的函式去控制的,缺點是需要視窗化界面的環境.
有人會問說,那為啥在shell mode下執行是可行的.
這需要解釋一下,因為目前Raspberry Pi所提供的OS,看是文字模式,但左上角有出現四顆樹莓吧.且畫面解析度跟螢幕有關.其實這是圖形化界面的sheel mode.也就是俗稱的Frame Buffer.因此上一版的程式會在Frame Buffer下建立一個視窗,但沒有寫結束關閉視窗的控制,所以會有無法離開程式的窘境.這部分未來是可以優化的.
不過當使用putty進行telent 登入後.這時就很殘酷了.那美美的字型跟樹莓圖案都看不到了.
那之前寫的code怎麼辦.的確.在純文字介面下.pygame會無用武之地
因此需要使用curses的函式來取代pygame
定義上 前後左右方向的設定是一樣的 但停車就需要定義按鍵了 在此定義為p

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import curses

# Use physical pin numbers
GPIO.cleanup()
GPIO.setmode(GPIO.BOARD)

# Set up header 4 GPIO pin as an input
PinIN1 = 31 # GPIO6 as IN1
PinIN2 = 33 # GPIO13 as IN2
PinIN3 = 35 # GPIO19 as IN3
PinIN4 = 37 # GPIO26 as IN4
GPIO.setup(PinIN1, GPIO.OUT)
GPIO.setup(PinIN2, GPIO.OUT)
GPIO.setup(PinIN3, GPIO.OUT)
GPIO.setup(PinIN4, GPIO.OUT)

def InitialMoto():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, False)

def TurnRight():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, True)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, True)

def TurnLeft():
    GPIO.output(PinIN1, True)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, True)
    GPIO.output(PinIN4, False)

def Backward():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, True)
    GPIO.output(PinIN3, True)
    GPIO.output(PinIN4, False)

def Fordward():
    GPIO.output(PinIN1, True)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, True)

def StopMoving():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, False)

print('Start Test')

stdscr = curses.initscr()
stdscr.keypad(1)
stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()
key = ''

InitialMoto()

while key != ord('q'):

    key = stdscr.getch()
    stdscr.addch(20,25,key)
    stdscr.refresh()
    if key == curses.KEY_DOWN: # Backward
       stdscr.addstr(3, 20, "Down") 
       Backward()
       print('Down')
    elif key == curses.KEY_UP: # Fordward
       stdscr.addstr(2, 20, "Up") 
       Fordward()
       print('Up')
    elif key == curses.KEY_RIGHT:  # Turn Right
       stdscr.addstr(3, 25, "Right")
       TurnRight()
       print('Right')
    elif key == curses.KEY_LEFT:  # Turn Left
       stdscr.addstr(3, 15, "Left")
       TurnLeft()
       print('Left')
    elif key == ord('p'):
       StopMoving()
        
    
curses.endwin()
#    clock.tick(20)

2015年7月12日 星期日

Thread on Python

https://docs.python.org/2/library/threading.html
Thread線程.https://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8B
在Python叫作Threading…啥!挽面的英文被我學到了.
http://www.wikihow.com/Do-Threading
Wiki上有他的解釋.但非資訊的背景 是有看沒有懂.
概念上大概可以實現,利用線程同一時間內執行多道程序.
搞這要做啥.想要把現在 遙控車 變成 智慧遙控車.
在被遙控的當下 本體可以針對環境的影響做出反應.
比如說.
1.撞牆前 緊急剎車 不理會遙控者的指令.
2.遇到人體紅外線反應 會作出到退轉或是 迴避動作 避免撞人.
3.顯示的字幕的迴圈 與 遙控的迴圈 分別運行
想法是這樣..但要花點時間去研究.要讓這部車成為 霹靂車 還有聲控 跟 遠端錄影的課題要繼續念下去….一步步來吧.

PS.發現一個Blog有在分享Thread…真是太好了.
http://skiesblog.blogspot.tw/search/label/python

2015年7月9日 星期四

My MotoRun 鍵盤控制版本

如果想不透過Xwindow,使用pygame.mouse勢必需要一點工夫,
shell mode下 驅動mouse定義winodws size,應該是可以的.要花點時間.
現在腦袋跳出來的想法是透過Frame Buffer.不過….應該可以WiFi遙控?
(都要IOT了,靠藍芽遙控一點都沒有Internet on thing的feeling).

使用Putty,藉由telnet login後.利用WiFi控制呢.
如可行 亦可以使用Smartphone連線操作.
以下版本是用 鍵盤上下左右按鍵 做為控制的版本 但尚未完成,不清楚telent是否能控制,擔心需要使用到Xwindow…
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import pygame

# Use physical pin numbers
GPIO
.cleanup()
GPIO
.setmode(GPIO.BOARD)

# Set up header 4 GPIO pin as an input
PinIN1 = 31 # GPIO6 as IN1
PinIN2 = 33 # GPIO13 as IN2
PinIN3 = 35 # GPIO19 as IN3
PinIN4 = 37 # GPIO26 as IN4
GPIO
.setup(PinIN1, GPIO.OUT)
GPIO
.setup(PinIN2, GPIO.OUT)
GPIO
.setup(PinIN3, GPIO.OUT)
GPIO
.setup(PinIN4, GPIO.OUT)

def InitialMoto():
GPIO
.output(PinIN1, False)
GPIO
.output(PinIN2, False)
GPIO
.output(PinIN3, False)
GPIO
.output(PinIN4, False)

def TurnRight():
GPIO
.output(PinIN1, False)
GPIO
.output(PinIN2, True)
GPIO
.output(PinIN3, False)
GPIO
.output(PinIN4, True)

def TurnLeft():
GPIO
.output(PinIN1, True)
GPIO
.output(PinIN2, False)
GPIO
.output(PinIN3, True)
GPIO
.output(PinIN4, False)

def Backward():
GPIO
.output(PinIN1, False)
GPIO
.output(PinIN2, True)
GPIO
.output(PinIN3, True)
GPIO
.output(PinIN4, False)

def Fordward():
GPIO
.output(PinIN1, True)
GPIO
.output(PinIN2, False)
GPIO
.output(PinIN3, False)
GPIO
.output(PinIN4, True)

def StopMoving():
GPIO
.output(PinIN1, False)
GPIO
.output(PinIN2, False)
GPIO
.output(PinIN3, False)
GPIO
.output(PinIN4, False)

pygame
.init()
print('Start Test')
pygame
.display.set_caption('Keyboard Example')
size
= [640, 480]
screen
= pygame.display.set_mode(size)

InitialMoto()

while True:
pygame
.event.get()
key
=pygame.key.get_pressed()
if key[pygame.K_DOWN] ==0 and key[pygame.K_UP] == 0 and key[pygame.K_RIGHT] == 0 and key[pygame.K_LEFT] == 0:# Stop Moving
StopMoving()
print('No Pressed')
if key[pygame.K_DOWN] !=0: # Backward
Backward()
print('Down')
if key[pygame.K_UP] != 0: # Fordward
Fordward()
print('Up')
if key[pygame.K_RIGHT] != 0: # Turn Right
TurnRight()
print('Right')
if key[pygame.K_LEFT] != 0: # Turn Left
TurnLeft()
print('Left')
pygame
.display.update()
# clock.tick(20)








開機後自動啟動python 程式

Ko老師有教學
http://www.powenko.com/wordpress/?p=4746

想多認識樹莓派的朋友 建議 到硬派 了解一下.
https://sites.google.com/site/raspberrypidiy/home

2015年7月8日 星期三

pygame.mouse動作測試

網路資源很多,很快就搜尋到別人寫的pygame.mouse的code.
https://sivasantosh.wordpress.com/2012/07/18/mouse-handling-in-pygame/
但看來得需要視窗化的環境才能運作,且運作範圍在開啟的視窗內.難怪我上一篇blog是失敗的…

下圖是執行畫面.右邊的視窗是screen= pygame.display.set_mode(size) 開啟的視窗
滑鼠的按鍵動作 以及 指標位置 需在視窗內才會有反應.

image
 
原始碼如下

import pygame, sys

white
= (255, 255, 255)
black
= (0, 0, 0)

pygame
.init()
pygame
.display.set_caption('Mouse Example')
size
= [640, 480]
screen
= pygame.display.set_mode(size)
clock
= pygame.time.Clock()

# make os mouse pointer icon invisible
pygame
.mouse.set_visible(False)

while True:
for event in pygame.event.get():
if event.type== pygame.QUIT:
pygame
.quit()
sys
.exit()
# print if mouse is pressed.
# get_pressed() tells you which mouse button is pressed
if event.type== pygame.MOUSEBUTTONDOWN:
print ('mouse pressed',pygame.mouse.get_pressed())
# print if mouse is released.
elif event.type== pygame.MOUSEBUTTONUP:
print ('mouse released', pygame.mouse.get_pressed())
# print if mouse is in motion.
# get_rel() - Returns the amount of movement in X and Y since the previous call to this function.
if event.type== pygame.MOUSEMOTION:
print ('mouse is moving', pygame.mouse.get_rel())
screen
.fill(white)

# draw a circle around the mouse pointer
pos
= (pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])
pygame
.draw.circle(screen, black, pos, 10, 0)

pygame
.display.update()

clock
.tick(20)

2015年7月7日 星期二

My MotoRun 滑鼠控制版本

初始規劃是
單按中間滾輪 前進
左右件同鍵 後退
左鍵 左轉
右鍵 右轉
想法是直接使用pygame.mouse 但程式碼在shell mode下跑不出預計的效果.
建議在Xwindow下執行

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess
import pygame
#from grovepi import *

# Use physical pin numbers
GPIO.cleanup()
GPIO.setmode(GPIO.BOARD)

# Set up header 4 GPIO pin as an input
PinIN1 = 31 # GPIO6 as IN1
PinIN2 = 33 # GPIO13 as IN2
PinIN3 = 35 # GPIO19 as IN3
PinIN4 = 37 # GPIO26 as IN4
GPIO.setup(PinIN1, GPIO.OUT)
GPIO.setup(PinIN2, GPIO.OUT)
GPIO.setup(PinIN3, GPIO.OUT)
GPIO.setup(PinIN4, GPIO.OUT)

# Connect the Grove Button to digital port D3
#button = 4
#grovepi.pinMode(button,"INPUT")


def InitialMoto():
GPIO.output(PinIN1, False)
GPIO.output(PinIN2, False)
GPIO.output(PinIN3, False)
GPIO.output(PinIN4, False)

def TurnRight():
GPIO.output(PinIN1, False)
GPIO.output(PinIN2, True)
GPIO.output(PinIN3, False)
GPIO.output(PinIN4, True)

def TurnLeft():
GPIO.output(PinIN1, True)
GPIO.output(PinIN2, False)
GPIO.output(PinIN3, True)
GPIO.output(PinIN4, False)

def Backward():
GPIO.output(PinIN1, False)
GPIO.output(PinIN2, True)
GPIO.output(PinIN3, True)
GPIO.output(PinIN4, False)

def Fordward():
GPIO.output(PinIN1, True)
GPIO.output(PinIN2, False)
GPIO.output(PinIN3, False)
GPIO.output(PinIN4, True)

def StopMoving():
GPIO.output(PinIN1, False)
GPIO.output(PinIN2, False)
GPIO.output(PinIN3, False)
GPIO.output(PinIN4, False)

pygame.init()
pygame.display.set_caption('Mouse Contral Area')
size= [1024, 768]
screen= pygame.display.set_mode(size)
print('Start Moto')
InitialMoto()

while True:
pygame.event.get()
if pygame.mouse.get_pressed() == (0,0,0):# Stop Moving
StopMoving()
if pygame.mouse.get_pressed() == (1,0,1): # Backward
Backward()
if pygame.mouse.get_pressed()[1] == 1: # Fordward
Fordward()
if pygame.mouse.get_pressed() == (0,0,1): # Turn Right
TurnRight()
if pygame.mouse.get_pressed() == (1,0,0): # Turn Left
TurnLeft()

subprocess.call("clear")

2015年7月4日 星期六

樓上漏水,樓下大雨.

住一樓,我家的屋頂,是二樓的地板.
漏水問題一旦發生,還真的很困擾.
07/04:
忽然發現 地板濕的,但很怪這邊的牆內並無埋藏水管,當初貼牆壁的時候有確認過
DSCF3133
抬頭一望恰巧一條水痕.順著往上探去,看來是在天花板隔層上.這下煩惱了.
天花板隔層的上方其實是水泥.難道說是二樓的水泥出問題了.有裂痕?或是水泥爛了?這下可麻煩了.因為二樓不是自己的.
DSCF3134
這下只好先忍痛把天花板拆毀.這一拆可猛了.積水可能一周了.整層的水瞬間找到宣洩點.室內下起大雨了.其實蠻明顯的,看來問題就是在水泥老舊有裂痕了.
DSCF3136
晚上找了一下二樓的鄰居,相當然爾,一般的老百姓怎會對漏水積極呢?
看二樓是乾的,這一定的啊,水都漏下後累積的.並不是立即性的.
但說到立即性,這下半夜精彩了.
莫約兩點 整個室內出現連續的大雨.感覺就是颱風來了,但戶外無風也無雨.
逼得我半夜 外出看狀況, 因為在室外 也能聽到漏水聲,到底是哪家人的水管沒關啊?
住一樓,有時候也是有一樓的煩惱.隨便接個幾分鐘就半桶水.
DSCF2808DSCF2807

07/05:
今天是個好天氣,但我家廚房下雨.還是半夜一路漏到早晨.
DSCF2813
看了一下天花板的狀況,看來更糟糕了,怎會更大範圍的漏水?樓上的鄰居是發生啥事了?
DSCF2804
除了裂痕外,更多了新的滲水點,怎會無風無雨的日子可以有這樣的狀況.
DSCF2810
感覺是滲水很努力的要衝破油漆.當然啦!一個晚上八個小時的努力,一定會有破壞的.
DSCF2812

終於在早上九點聽到二樓鄰居的聲音說,昨晚太累,所以接了水...........................解釋很久
還說現在水關了

唉~天花板的裝修 未來會是一筆費用.如果二樓願意幫忙加強防水工程才可以一勞永逸.
只能說,這房子得要花錢整修了.
未來會不會有跟鄰居在這方便的糾紛呢? 這下應該是會有吧!
有多少的新聞事件是來自於漏水的?相信蠻多的.
不然這樣的裂痕.漏水總是在 積水消退滲漏到樓下後.

想躲避的人 一定有理由說,我家是乾的…
或是要去問抓漏,要先證明才能動工.只能說水費太便宜了…