2014年7月3日 星期四

VB.NET 登錄檔Regedit本機與遠端,寫入與讀取

        在自動化產業上,單站Tektime的處理時間越短,相對的產能也就會越高 ; 在軟體方面,有時候為了達到有充裕的效能,或者節省成本的考量,常常會出現一台電腦(主機)對多台電腦(子機)的搭配使用,以達效率的提升.

        這樣的模式下,主機對子機間,或子機對子機間的溝通,就顯得非常重要,一般我們常見的溝通模式可能是透過讀取.txt或.ini,或者用WinSocket的傳遞方式,取得相關資訊來判斷該做什麼動作,這些方式都可以達到一對多的控制,但考慮穩定度與處理時間,這邊介紹一個通訊的方法,透過Regedit的模式來達到一樣的效果,且方法簡單,穩定,也快速.

本文的環境設定為 Win7 64bit
a.確保多台電腦 連接網路,且網域要一致,IP不重複
b.確保多台電腦 同群組
c.確保多台電腦 控制台->系統及安全性->系統管理工具->服務 裡面的Remote Registry 已啟動
d.確保多台電腦 防火牆關閉

主機端 :

開啟 regedit.exe ,在資料夾圖示上可按右鍵新增,請建立好
HKEY_CURRENT_USER\Software\ATMA\ATAE57 機碼

ATAE57 機碼內新增一個Is_Alive(Type:DWORD)的子機碼,數值暫設為99(10進位)

依據電腦身分設定ATAE57 機碼的使用權限,在資料夾圖示上方按右鍵便可看到



到這邊為止,基本上已經建立好通訊的目錄了,接著介紹如何透過程式讀取與寫入

假設.主機IP = 192.168.1.99 / 子機IP = 192.168.1.1

主機對主機 讀取語法 GetValue承接讀取的值
Dim RegistryKey As Microsoft.Win32.RegistryKey
Dim GetValue As String
RegistryKey = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", False)
GetValue = RegistryKey.GetValue("Is_Alive", "")
RegistryKey.Close()

主機對主機 寫入語法 將值改為22
Dim RegistryKey As Microsoft.Win32.RegistryKey
RegistryKey = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", True)
RegistryKey.SetValue("Is_Alive", "22")
RegistryKey.Close()

子機對主機 讀取語法 GetValue承接讀取的值
Dim RegistryKey As Microsoft.Win32.RegistryKey
Dim GetValue As String
RegistryKey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, "192.168.1.99", Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", False)
GetValue = RegistryKey.GetValue("Is_Alive", "")
RegistryKey.Close()

子機對主機 寫入語法 將值改為33
Dim RegistryKey As Microsoft.Win32.RegistryKey
RegistryKey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, "192.168.1.99", Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", True)
RegistryKey.SetValue("Is_Alive", "33")
RegistryKey.Close()

以上,可以同時與regedit.ext(不會自動更新 需要按F5)搭配確認是否讀取與寫入無誤!!

VB.NET 實現UI介面語言切換功能

一套完整的軟體產品,有可能因為客戶的不同,而需要切換UI介面的語言顯示功能;要達到這樣的功能,其實有許多種方法可以達成,如..直接寫死再程式碼,或者透過文字檔來搭配等,但就管理與擴充面而言,VB.NET其實有提供ComponentResourceManager的方式來達到這樣的功能,以下就開始介紹如何達到UI介面語言切換功能!

Step 1.
開啟VB.NET -> 檔案 -> 新增專案 -> 選擇Visual Basic -> 選擇Windows Form 應用程式 -> 按下確定




Step 2.
專案內新增兩個Form(Form1 與 Form2)


Setp 3.
點選Form1 -> 顯示屬性 -> 找到Language欄位 -> 選擇英文
Form2也一樣如法炮製
Step 4.
接著進行編輯Form1與Form2內,各元件屬性的text欄位

此時 方案總管點選上方的"顯示所有檔案"圖示,並展開Form1.vb與Form2.vb
會發現各多了一個.en-US.resx的檔案


Step 5.
點開.resx後會看到剛剛對各元件編輯的列表

Step 6.
點選Form1 -> 顯示屬性 -> 找到Language欄位 -> 選擇中文 -> 重複Step 4 ~ 5




Step 7.
將Form1中用來更換語言的Button,其屬性的Name改為Btn_Main,此Button也為觸發主要按鈕

Step 9.
使用方式主要為修改與更新

語法使用如下:

設定要顯示的語言

System.Threading.Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("en-US")

更新表格元件內容

_C_UILanguage._Main(Me)_C_UILanguage._Main(Form2)

其中紅色字樣部分的地方,可參考方案總管內,各.resx檔名來填入,以本文為例,可填en-US 或者 zh-TW

而更新表格元件,已被我包到Class裡面,可以直接使用,如想更了解,下列貼上完整的程式碼,可供參考!!

執行結果如下





完整程式碼範例:


類別
Imports System
Imports System.ComponentModel
Imports System.Windows.Forms

Public Class C_UILanguage

    Dim CRM As System.ComponentModel.ComponentResourceManager

    Public Sub _Main(ByVal _Form As Windows.Forms.Form)

        '檢查引數
        If _Form Is Nothing Then
            _Form.Text = "Form"
            Throw New ArgumentNullException(_Form.Text)
        End If

        CRM = Nothing

        '切換介面顯示的語言
        Try
            CRM = New ComponentResourceManager(_Form.GetType)
            For Each Control As Control In _Form.Controls
                Control.Text = "Control"
                _Control_Resource(Control, CRM)
            Next
        Finally
            CRM = Nothing
        End Try

    End Sub

    Private Sub _Control_Resource(ByRef _Control As Control, ByRef _CRM As ComponentResourceManager)

        '檢查引數
        If _Control Is Nothing Then
            Throw New ArgumentNullException("Control")
        End If
        If _CRM Is Nothing Then
            Throw New ArgumentNullException("CRM")
        End If

        _CRM.ApplyResources(_Control, _Control.Name)

        If TypeOf _Control Is MenuStrip Then
            Dim MS As MenuStrip = CType(_Control, System.Windows.Forms.MenuStrip)
            For Each TSI As ToolStripItem In MS.Items
                _Strip_Resource(TSI, _CRM)
            Next
        ElseIf TypeOf _Control Is ToolStrip Then
            Dim TS As ToolStrip = CType(_Control, ToolStrip)
            For Each TSI As ToolStripItem In TS.Items
                _Strip_Resource(TSI, _CRM)
            Next
        ElseIf _Control.Controls.Count > 0 Then
            For Each Control As Control In _Control.Controls
                _Control_Resource(Control, _CRM)
            Next
        End If
    End Sub

    Private Sub _Strip_Resource(ByRef _TSI As ToolStripItem, ByRef _CRM As ComponentResourceManager)

        '檢查引數
        If _TSI Is Nothing Then
            Throw New ArgumentNullException("TSI")
        End If

        If _CRM Is Nothing Then
            Throw New ArgumentNullException("CRM")
        End If

        _CRM.ApplyResources(_TSI, _TSI.Name)

        If TypeOf _TSI Is ToolStripMenuItem Then
            Dim TSM As ToolStripMenuItem = CType(_TSI, ToolStripMenuItem)
            For Each TS As ToolStripItem In TSM.DropDownItems
                _Strip_Resource(TS, _CRM)
            Next
        End If

    End Sub

End Class

主程式
Public Class Form1

    Dim _C_UILanguage As New C_UILanguage

    Private Sub Btn_Main_Click(sender As Object, e As EventArgs) Handles Btn_Main.Click

        If Btn_Main.Text = "English" Then

            System.Threading.Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("zh-TW")
            _C_UILanguage._Main(Me)
            _C_UILanguage._Main(Form2)
            Btn_Main.Text = "中文"

        ElseIf Btn_Main.Text = "中文" Then

            System.Threading.Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("en-US")
            _C_UILanguage._Main(Me)
            _C_UILanguage._Main(Form2)
            Btn_Main.Text = "English"

        End If

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Form2.Show()

    End Sub
End Class

2012年5月24日 星期四

VB6-以影像座標點位計算標準座標的線斜率

因工作上常常遇到影像座標系的計算與轉換,因此整理了一下目前的計算方式與程式的介紹,基本上都是用很簡單的公式去實現,在此只是把公式轉換成程式可以運算的方法:

影像座標示意圖

一般所使用的影像,如小畫家,相機,程式開發軟體中的圖片物件,相機擷取的影像,其影像座標系的規格,都是以影像的最左上角為原點(0,0),越往右邊X值越大,越往下方Y值越大,這樣的影像座標系(如上圖示),與標準的座標系的差別就是Y軸系的向性是相反的,假如要計算影像中的某一條線的斜率是多少時,直接用影像座標所算的就會是錯誤的,基本上我會先將影像座標系的Y軸數值取相反數,使影像座標系改變成標準座標系的第四象限後,然後才去做運算,如下圖所示:



座標轉換示意圖

以下來介紹幾個利用已知影像座標系,去計算某兩點在標準座標之斜率與線角度的作法:


程式介面圖


初始設定:
'主要是先設定picture的象限改成標準象限

'設定Form大小
Form1.Top = 0
Form1.Left = 0
Form1.Width = 10 * Screen.Width / Screen.TwipsPerPixelX
Form1.Height = 10 * Screen.Height / Screen.TwipsPerPixelY


'畫小圖設定
Picture1.ScaleHeight = -Picture1.ScaleHeight
Picture1.ScaleTop = -Picture1.ScaleHeight * 1 / 2
Picture1.ScaleLeft = -Picture1.ScaleWidth * 1 / 2


呼叫端:




    Dim ImgAxisStartX As Double
    Dim ImgAxisStartY As Double
    Dim ImgAxisEndX As Double
    Dim ImgAxisEndY As Double
    Dim GetValue() As String
    
    Dim M1 As Double
    Dim Degree1 As Double
    Dim Quadrant1 As String
    
    '檢查 起點影像座標X 與 起點影像座標Y 的值 是否為整數
    '使用的是CheckTextIsNumEricAndInteger Function來判斷
    If CheckTextIsNumEricAndInteger(Text_StartX, Text_StartX.Text, "起點影像座標X") = True Then
        ImgAxisStartX = Format(Text_StartX.Text)
    Else
        Exit Sub
    End If
    If CheckTextIsNumEricAndInteger(Text_StartY, Text_StartY.Text, "起點影像座標Y") = True Then
        ImgAxisStartY = Format(Text_StartY.Text)
    Else
        Exit Sub
    End If
    
    '檢查 終點影像座標X 與 終點影像座標Y 的值 是否為整數
    '使用的是CheckTextIsNumEricAndInteger Function來判斷
    If CheckTextIsNumEricAndInteger(Text_EndX, Text_EndX.Text, "終點影像座標X") = True Then
        ImgAxisEndX = Format(Text_EndX.Text)
    Else
        Exit Sub
    End If
    If CheckTextIsNumEricAndInteger(Text_EndY, Text_EndY.Text, "終點影像座標Y") = True Then
        ImgAxisEndY = Format(Text_EndY.Text)
    Else
        Exit Sub
    End If
    
    '轉換影像座標系至標準座標系的點位轉換
    '此時 Label_StartX.Caption...等,就是轉換後的座標
    GetValue = ImgAxisTransformStandardAxis(Picture1, ImgAxisStartX, ImgAxisStartY)
    Label_StartX.Caption = GetValue(0)
    Label_StartY.Caption = GetValue(1)
    GetValue = ImgAxisTransformStandardAxis(Picture1, ImgAxisEndX, ImgAxisEndY)
    Label_EndX.Caption = GetValue(0)
    Label_EndY.Caption = GetValue(1)
    
    '計算斜率
    GetValue = MountainAndAbsoluteDegreeCaculate(Val(Label_StartX.Caption), Val(Label_StartY.Caption), Val(Label_EndX.Caption), Val(Label_EndY.Caption))
    M1 = Val(GetValue(0))
    Degree1 = Val(GetValue(1))
    Quadrant1 = GetValue(2)
    Label_M1.Caption = Format(M1, "0.0000")
    Label_D1.Caption = Format(Degree1, "0.0000")
    Label_Q1.Caption = Format(Quadrant1, "0.0000")
    
    '清空picture的畫圖
    Picture1.Picture = Nothing
    '畫picture的X,Y基準線
    Picture1.DrawWidth = 1
    Picture1.Line (-Picture1.Width, 0)-(Picture1.Width, 0), vbGreen
    Picture1.Line (0, -Picture1.Height)-(0, Picture1.Height), vbGreen
    '畫線與點位
    Picture1.DrawWidth = 1
    Picture1.Circle (Val(Label_StartX.Caption), Val(Label_StartY.Caption)), ((ImgAxisStartX - ImgAxisEndX) ^ 2 + (ImgAxisStartY - ImgAxisEndY) ^ 2) ^ 0.5, vbRed
    Picture1.Line (Val(Label_StartX.Caption), Val(Label_StartY.Caption))-(Val(Label_EndX.Caption), Val(Label_EndY.Caption)), vbBlue
    Picture1.DrawWidth = 3
    Picture1.PSet (Val(Label_StartX.Caption), Val(Label_StartY.Caption)), vbRed
    Picture1.PSet (Val(Label_EndX.Caption), Val(Label_EndY.Caption)), vbBlue



使用Function:



'將影像或圖片座標轉換為正規座標系(第四象限)
'用法範例:(PictureBox物件名稱,影像或物件X座標,影像或物件Y座標)


Function CheckTextIsNumEricAndInteger(TString As TextBox, WordString As String, DataTitle As String) As Boolean
'檢查是否為整數
'用法範例: (TextBox物件名稱,要檢查的字串,字串的Title)--->(Text1,Text1.Text,"影像座標X")
    If TString.Text = "" Then
        MsgBox (DataTitle + ",沒有數值")
    Else
        If IsNumeric(TString.Text) = True Then
            If Int(WordString) = Format(WordString, "0.0000") Then
                CheckTextIsNumEricAndInteger = True
            Else
                MsgBox (DataTitle + ",非整數")
            End If
            
        Else
            MsgBox (DataTitle + ",非數字")
        End If
    End If
End Function




'檢查是否為整數
'用法範例: (TextBox物件名稱,要檢查的字串,字串的Title)--->(Text1,Text1.Text,"影像座標X")


Function MountainAndAbsoluteDegreeCaculate(StartX As Double, StartY As Double, EndX As Double, EndY As Double) As String()
'計算兩點成一線的斜率
'利用斜率與XY的關係式求絕對角度
'用法範例: (起點X座標,起點Y座標,終點X座標,終點Y座標)
Dim SendValue(2) As String
Dim SX As Double
Dim SY As Double
Dim EX As Double
Dim EY As Double
Dim M_PI As Double
M_PI = Atn(1) * 4
SX = StartX
SY = StartY
EX = EndX
EY = EndY


'計算斜率-----------------------------------------------------------
'非水平與垂直
If (SX <> EX) And SY <> EY Then
    SendValue(0) = Format((SY - EY) / (SX - EX), "0.0000")
End If
'起點與終點同一點
If (SX = EX) And (SY = EY) Then
    SendValue(0) = O
End If
'起點與終點之X值相同 Y值不同
If (SX = EX) Then
    If (SY > EY) Then
        SendValue(0) = -999999
    Else
        SendValue(0) = 999999
    End If
End If
'起點與終點之Y值相同 X值不同
If (SY = EY) Then
    SendValue(0) = 0
End If
'--------------------------------------------------------------------
'計算角度-----------------------------------------------------------
'起點與終點一樣
If EX = SX And EY = SY Then
    SendValue(1) = 0
    SendValue(2) = "起點終點同一點"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'第一象限
If EX > SX And EY > SY Then
    SendValue(1) = Atn(Val(SendValue(0))) * 180 / M_PI
    SendValue(2) = "第ㄧ象限"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'第二象限
If EX < SX And EY > SY Then
    SendValue(1) = 180 + Atn(Val(SendValue(0))) * 180 / M_PI
    SendValue(2) = "第二象限"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'第三象限
If EX < SX And EY < SY Then
    SendValue(1) = 180 + Atn(Val(SendValue(0))) * 180 / M_PI
    SendValue(2) = "第三象限"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'第四象限
If EX > SX And EY < SY Then
    SendValue(1) = 360 + Atn(Val(SendValue(0))) * 180 / M_PI
    SendValue(2) = "第四象限"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'90度
If EX = SX And EY > SY Then
    SendValue(1) = 90
    SendValue(2) = "垂直"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'270度
If EX = SX And EY < SY Then
    SendValue(1) = 270
    SendValue(2) = "垂直"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'0度
If EX > SX And EY = SY Then
    SendValue(1) = 0
    SendValue(2) = "垂直"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If


'0度
If EX < SX And EY = SY Then
    SendValue(1) = 180
    SendValue(2) = "垂直"
    MountainAndAbsoluteDegreeCaculate = SendValue
    Exit Function
End If
'--------------------------------------------------------------------
End Function



說明:

輸入已知的影像座標點位,程式會去檢察所輸入的值是否為數字與整數,接著轉換成標準座標系(第四象限)的點位,利用兩點成一線,兩點求斜率,以及有斜率的情況下,利用反三角函數Arctan,可求得絕對角度!!

2012年5月23日 星期三

VB6-傳送數值給Function與接收Function計算好的數值

範例1: 傳遞多資料與接收單一資料型態




'函數端
Function ReturnArrayArt(F1 As Integer,F2 As Integer) As Integer
        Dim ArrayQ As Integer
        ArrayQ = F1 - F2
        ReturnArrayArt = ArrayQ
End Function


'呼叫端
Dim GetValue As Integer
Dim GP As Integer
Dim GD As Integer
GP = 99
GD = 9
GetValue = ReturnArrayArt(GP,GD)

'執行結果:
GetValue = 90

範例2: 傳遞多資料(包含矩陣)與利用矩陣方式接收多資料型態


'函數端
Function ReturnArrayORZ(ByVal AString As String, ByVal ADouble As Double, TArray() As Integer, TStringArray() As String) As String()

         '請注意此Function是定義為String(),也就是說回傳直是字串的矩陣


         Dim ArrayQ(100) As String

         '把Function接收到的數值,指定給ArrayQ()的矩陣內
         ArrayQ(0) = AString
         ArrayQ(1) = Str(ADouble)                     '把 Double 轉型為 String
         ArrayQ(2) = Str(TArray(0))                   '把 Double 轉型為 String
         ArrayQ(3) = Str(TArray(1))                   '把 Double 轉型為 String
         ArrayQ(4) = Str(TArray(2))                   '把 Double 轉型為 String
         ArrayQ(5) = Str(TArray(3))                   '把 Double 轉型為 String
         ArrayQ(6) = Str(TArray(4))                   '把 Double 轉型為 String
         ArrayQ(7) = Str(TArray(5))                   '把 Double 轉型為 String
         ArrayQ(8) = TStringArray(0, 0)
         ArrayQ(9) = TStringArray(0, 1)
         ArrayQ(10) = TStringArray(0, 2)
         ArrayQ(11) = TStringArray(1, 0)
         ArrayQ(12) = TStringArray(1, 1)
         ArrayQ(13) = TStringArray(1, 2)
         ArrayQ(14) = TStringArray(2, 0)
         ArrayQ(15) = TStringArray(2, 1)
         ArrayQ(16) = TStringArray(2, 2)
       
         '請注意此Function是定義為String(),同型態才能接收相對應的值,固ArrayQ()
         '定義為String
         ReturnArrayORZ = ArrayQ
End Function




'呼叫端


Dim TestString As String                         '定義TestString 為String型態
Dim TestDouble As Double                    '定義TestDouble 為Double型態
Dim TestArray(5) As Integer                   '定義TestArray(5) 矩陣為Double型態
Dim TestStringArray(2, 2) As String        '定義 TestStringArray(2,2) 矩陣為Double型態
Dim GetValue() As String                        '定義 GetValue() 矩陣為String型態

'指定數值給 TestString , TestDouble , TestArray() ,TestStringArray( , )
TestString = "ABC"
TestDouble = 3.1415926
TestArray(0) = 90
TestArray(1) = 91
TestArray(2) = 92
TestArray(3) = 93
TestArray(4) = 94
TestArray(5) = 95
TestStringArray(0, 0) = "ㄅ"
TestStringArray(0, 1) = "ㄆ"
TestStringArray(0, 2) = "ㄇ"
TestStringArray(1, 0) = "A"
TestStringArray(1, 1) = "B"
TestStringArray(1, 2) = "C"
TestStringArray(2, 0) = "a"
TestStringArray(2, 1) = "b"
TestStringArray(2, 2) = "c"

'呼叫ReturnArrayORZ函數,並給予其傳送的參數
GetValue = ReturnArrayORZ(TestString, TestDouble, TestArray(), TestStringArray())

'執行結果:
GetValue(0) = ABC
GetValue(1) = 3.1415926
GetValue(2) = 90
GetValue(3) = 91
GetValue(4) = 92
GetValue(5) = 93
GetValue(6) = 94
GetValue(7) = 95
GetValue(8) = ㄅ
GetValue(9) = ㄆ
GetValue(10) = ㄇ
GetValue(11) = A
GetValue(12) = B
GetValue(13) = C
GetValue(14) = a
GetValue(15) = b
GetValue(16) = c


說明:
Function的使用在一般開發程式中,在處理有重複性的計算或處理方式是非常方邊的工具,以上分享了呼叫端與Function間的呼叫方式,多值傳遞,矩陣傳遞,等方式,提供一些範例,希望開發者有更便利的方法可以使用


2010年11月12日 星期五

簡單的生活不是要你貧窮!!

生活在現實裡面,我們不得不以現實的人生做考量,或許您可以有"不為五斗米折腰"的情操,也可以有"無慾就是富","勤儉持家"...等傳統美德,但是簡單的生活不是要你貧窮,在您開始出來賺錢工作的同時,自己是否有規劃過自己現在,以後,及未來的生活要怎麼過,以下是小弟我用最簡單也最貼切的方式自己算了一算自己的實際需求,分成食 衣 住 行 育 樂,這六種實際面來算算我一年之中要賺多少錢,才能供應我所要的生活:

食:
俗話說"民以食為天",就算在節儉的人也總該要吃飯吧!!就拿我自己在的花費上來說

50$("漢堡蛋35$+中溫紅15$",早) + 60$("便當",中) + 60$("便當",晚)
= 170$ / day

170$ * 365天 = 62050$ / year

衣:
正所謂"佛要金裝,人要衣裝",我在的花費上來說

      內衣 :
      一年買兩件不為過吧!!而且...連這種XX牌的都要 173$ / 1件
      173$ * 2件 = 346$ / year

      內褲 :
      一年買三件也是合理吧!!這款是也是要 68$ / 1件
      68$ * 3件 = 204$ / year

      襪子 :
      一年買個六雙,一雙9元的襪子!!
      9$ * 6雙 = 54$

      T-Shirt :
      夏天時買三件只穿這個也夠勤儉了吧!!
      再少就是衛生問題了,夜市價也差不多50$/1件
      50$ * 3件 = 150$ / year

      襯衫 :
      一年買3件,到公司或正式場合總是需要正式的打扮,一件99$
      99$ * 3 = 297$ / year

      褲子 :
      牛仔褲580$ 
      卡其褲380$ 
      短褲    199$ 
      買個三件一年替換,也差不多夠穿了
      580$ + 380$ + 199$ = 1159$ / year

      鞋子 :
      一年買一雙好了,要價430$
      430$ / year
     
  總和:
  346$ + 204$ + 54$ + 150$ + 297$ + 1159$ + 430$ = 2640$/year

住:
對於我而言,也沒錢買房子,就以租房子來計算吧!!

     桃園蘆竹 
     房租: 6000$ * 12個月 = 72000$ / year
     水電: 1000$ * 12個月 = 12000$ / year  (有這麼好康的請告訴我)
     網路使用256K/64K  150$ * 12個月 = 1800$ / year  (培養耐心最好的選擇)
    
     總和:
    72000$ + 12000$ + 1800$ = 85800$ / year

行:
我沒買車,就拿坐公車好了,公車一段票15$,來回30$,每天都會出門

     30$ * 365天 = 10950$ / year

育:
已經畢業在工作了,如果不補習,一個月買一本英文雜誌

     1200$ / year

樂:
每個月跟女友見一次面吃ㄧ頓好料的500$ , 每季跟朋友出去吃ㄧ頓好料的500$

     (500$ * 12) + (500$ * 4) = 8000$ / year




以上總和起來...   62,050$ + 2,640$ + 85,800$ + 10,950$ + 1,200$ + 8,000$ = 170,640$ / year

在最基本的生活開銷中,(不包含繳稅,健保費..等等),我自認為已經是省到一個不能再省的境界了,這樣都還不知道能不能撐過號稱史上最寒冷的冬天,女友會不會跟你分手的風險,還有會不會沒有朋友的賭注...等等,我還是要花十七萬零陸百四十元整!!

假如我的年薪+年終總共有40萬,扣掉一年最最基本的花費170,640元,在我過分樂觀的情況下,還會剩229,360元,我們來看何時才能存到人生的第一桶金呢?

歷年       存款淨額

第一年   229,360$      26歲
第二年   458,720$      27歲
第三年   688,080$      28歲
第四年   897,440$      29歲      
第五年   1,126,800$   30

恭喜我自己,在第五年存到人生的第一桶金,但前提是您每年都要遵循著以上的花費去過五年的生活,才有這樣的成就!!  那如果年薪更低的人要怎麼辦呢??

值得在這樣的規則下存到100萬然後恭喜自己嗎???

很開心自己"按造簡單生活規則"在30歲存到第一筆的100萬,也該是成家立業的時候了,計劃買房子,還有結婚基金的花費...,我辛辛苦苦五年清靜修為所存下來的一筆錢,是不是瞬間變成零了!!!

分享了自己的心得,無非是希望大家都能夠正面的規劃與面對自己的未來,想要解決問題就必須找到問題,不要被安於現狀約束了自己!! 祝福大家都能夠雍有自己想要的未來!!

2010年9月23日 星期四

沐月Moumoon Sunshine Girl


歌詞
Sunshine Girl
Make up, and dressed Are you ready to go?
Weather ts great, it's Your holiday
We gotta party all day long

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you

曲がり角を 照らすビビットな Sky
いつもと違う匂いの風吹き抜けて
背筋しゃんと伸ばした その分だけ
なんだか いい事がありそうだよね Sunshine Girl

キラキラ輝いている
胸に秘めたるその太陽
はしゃいだ者勝ちの Holiday
踊ってもっと解き放って

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you

振り返れば 流れ行く景色
わたしも毎日、毎日 ちゃんと進んでいるから
口角キュッと上げて その分だけ
ハッピーとラッキーに近づいてる

キラキラ笑顔で Hello
オモチャ箱があふれる
ポジティブになるリズム
歌ってもっと解き放って

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you

この瞬間しか出来ない
感じられないものがあるし
今、会いたいあなたにメルシー
Woo yeah
いつまでもこのままがいいな
ずっとドキドキしてたいな
そしてまっすぐに前を見て
Woo yeah

キラキラ輝いている
胸に秘めたるその太陽
はしゃいだ者勝ちの Holiday
踊ってもっと解き放って

キラキラ 陽射しを浴びて
Make up, and dressed Are you ready to go?
Weather ts great, it's Your holiday
We gotta party all day long

Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you
Happy day Summer day Sunshine Girl
I like it, Happy day summer day Sun shines for you
ララ、ララ、、、