フォトアルバム

他のアカウント

更新ブログ

Powered by Six Apart
Member since 03/2005

« 2010年2月 | メイン | 2010年4月 »

Twitter API 仕様書

Twitter API 仕様書

http://apiwiki.twitter.com/Twitter-API-Documentation

 

やっぱり、プログラムを作って行くと、必ず仕様書をみる事になる・・・

 

戻り値のアイテム詳細

http://apiwiki.twitter.com/Return-Values

 

個々のメソッドに対して、引数と戻り値がしっかり書かれているので、

コレを見れば後は何をやりたいか、何の情報が欲しいかはクライアントソフトを作る人次第。

 

通信部位は、前回の奴で一応そのまま使える筈ですが、

やはり、受信データのクラスは少し工夫して高機能化した方がよさそう・・・

 

色々みていると、受信データが抜けてたり、後ろが足りなかったりする事もあるらしい。

受信データのクラスは、例外処理を入れておいた方がよさそう。

 

さて・・・

明日帰国だけど、もう少し書いてみよう・・・

ステータス取得

たぶん、status って言うのが、一個の投稿アイテムだと思います。

タイムラインの取得をすると、XML のデータが送られてきます。

※"http://twitter.com/statuses/friends_timeline.xml" から取得すればXML

それを解析すると・・・

<ststus>から</ststus> までが一つのメッセージで、内容が、

 

    '<created_at>Tue Mar 09 05:15:03 +0000 2010</created_at>    
    '<id>102071*****</id>    
    '<text>**************</text>    
    '<source>&lt;a href="http://mobile.twitter.com" rel="nofollow"&gt;mobile web&lt;/a&gt;</source>    
    '<truncated>false</truncated>    
    '<in_reply_to_status_id>102071******</in_reply_to_status_id>    
    '<in_reply_to_user_id>592*****</in_reply_to_user_id>    
    '<favorited>false</favorited>    
    '<in_reply_to_screen_name>LivingForDemi</in_reply_to_screen_name>    

 

こんなん書かれてます。

また、この中に、<user> </user> の階層?もありました。

 

    '<id>914******</id>      
    '<name>**************</name>      
    '<screen_name>**************</screen_name>      
    '<location>Earth</location>      
    '<description>**************</description>      
    '<profile_image_url>**************_normal.jpg</profile_image_url>      
    '<url></url>      
    '<protected>false</protected>      
    '<followers_count>468</followers_count>      
    '<profile_background_color>352726</profile_background_color>      
    '<profile_text_color>3E4415</profile_text_color>      
    '<profile_link_color>D02B55</profile_link_color>      
    '<profile_sidebar_fill_color>99CC33</profile_sidebar_fill_color>      
    '<profile_sidebar_border_color>829D5E</profile_sidebar_border_color>      
    '<friends_count>101</friends_count>      
    '<created_at>Sat Nov 21 03:01:16 +0000 2009</created_at>      
    '<favourites_count>124</favourites_count>      
    '<utc_offset>-32400</utc_offset>      
    '<time_zone>Alaska</time_zone>      
    '<profile_background_image_url**************bg.gif</profile_background_image_url>      
    '<profile_background_tile>false</profile_background_tile>      
    '<notifications></notifications>      
    '<geo_enabled>false</geo_enabled>      
    '<verified>false</verified>      
    '<following></following>      
    '<statuses_count>6667</statuses_count>      
    '<lang>en</lang>      
    '<contributors_enabled>false</contributors_enabled>    

 

こんな感じで、ユーザーのデータが載ってます。

一個の投稿の中には、

<status>

  <id> </id>

  ・・・ 投稿情報、省略

  <user>

    <id> </id>

    ・・・ ユーザー情報、省略

  </user>

</status>

ってなってると思います。

たぶん・・・

送られてきたデータを見るからには、こんな感じでした。

 

なんで、後はタグ毎に必要なデータをピックアップするだけ。

 

手順的には、

前回の通信関数からByRef で戻って来るHttpWebResponse から System.IO.Stream を取得する。

Stream = _WebResponce.GetResponseStream

そこからByte データを取得する。

Do
                result = Stream.ReadByte()
                If result = -1 Then Exit Do ' ReadByte returns -1 at EOF.
                DownDataAL.Add(CByte(result))
Loop

コレで、データ取り込みは完了。

Byte 配列のデータをエンコードし、 System.Xml.Linq.XElement データにする。

AllStatusXElement = System.Xml.Linq.XElement.Parse(System.Text.Encoding.UTF8.GetString(DownData))

コレで、プログラム内で、statusがXElement で利用可能になる。

私の場合は、XElement ではいまいちピンとこない為、

※使い方も良く解らんし、意味すら分からないから・・・

このデータをクラス化して、一つのstatus をクラスに分割してます。

            TwitterStatusAL.Clear()
            For Each StatusXElement As XElement In AllStatusXElement...<status>
                TwitterStatusAL.Add(New clsTwitterStatus(StatusXElement))
            Next
※StatusXElement が一つのstatus のXElement

  AllStatusXElement...<status>  コレで、分けてる。

コレで作ったclsTwitterStatus の配列を、ListBox 等に表示すれば、とりあえずタイムラインは表示できます。

        If _TeitterCom.GetTimeline(TwitterStatus) Then
            For ii = 0 To TwitterStatus.Length - 1
                ListBox.Items.Add(TwitterStatus(ii).User.Name & " , " & _
                                  TwitterStatus(ii).Text & " , " & _
                                  TwitterStatus(ii).CreatedAt)
            Next
        End If
 

では、ソース・・・

 

Ststus Class と、User Class

#Region "Status Class"
Public Class clsTwitterStatus
    Private _StatusXElement As XElement
    Private _User As clsTwitterUser

    Public Sub New(ByVal __XElement As XElement)
        _StatusXElement = __XElement
        _User = New clsTwitterUser(UserXElement)
    End Sub
    Public Function StatusXElement() As XElement
        Return _StatusXElement
    End Function
    Public Function UserXElement() As XElement
        Return _StatusXElement.Element("user")
    End Function
    Public Function User() As clsTwitterUser
        Return _User
    End Function

    Public ReadOnly Property CreatedAt() As String
        Get
            Return _StatusXElement...<created_at>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property StatusID() As String
        Get
            Return _StatusXElement...<id>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property Text() As String
        Get
            Return _StatusXElement...<text>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property InReplyToStatusId() As String
        Get
            Return _StatusXElement...<in_reply_to_status_id>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property InReplyToUserId() As String
        Get
            Return _StatusXElement...<in_reply_to_user_id>.Value.ToString()
        End Get
    End Property
End Class
#End Region
#Region "User Class"
Public Class clsTwitterUser
    Private _UserXElement As XElement

    Public Sub New(ByVal __XElement As XElement)
        _UserXElement = __XElement
    End Sub
    Public Function UserXElement() As XElement
        Return _UserXElement
    End Function

    Public ReadOnly Property UserID() As String
        Get
            Return _UserXElement...<id>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property Name() As String
        Get
            Return _UserXElement...<name>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property ScreenName() As String
        Get
            Return _UserXElement...<screen_name>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property Location() As String
        Get
            Return _UserXElement...<location>.Value.ToString()
        End Get
    End Property
    Public ReadOnly Property ProfileImageUrl() As String
        Get
            Return _UserXElement...<profile_image_url>.Value.ToString()
        End Get
    End Property
End Class
#End Region

 

ステータスを受信・解析する関数

    Private Function ReciveStatus(ByVal _WebResponce As System.Net.HttpWebResponse) As clsTwitterStatus()
        Dim Stream As System.IO.Stream
        Dim result As Integer
        Dim DownDataAL As ArrayList
        Dim DownData As Byte()
        Dim AllStatusXElement As System.Xml.Linq.XElement
        Dim TwitterStatusAL As ArrayList
        Dim TwitterStatus As clsTwitterStatus()

        If _WebResponce Is Nothing Then
            Return Nothing
        End If

        Try
            Stream = _WebResponce.GetResponseStream
            If Stream Is Nothing Then
                Return Nothing
            End If
            DownDataAL = New ArrayList
            DownDataAL.Clear()
            Do
                result = Stream.ReadByte()
                If result = -1 Then Exit Do ' ReadByte returns -1 at EOF.
                DownDataAL.Add(CByte(result))
            Loop
            ReDim DownData(DownDataAL.Count - 1)
            Array.Copy(DownDataAL.ToArray, DownData, DownDataAL.Count)
            AllStatusXElement = System.Xml.Linq.XElement.Parse(System.Text.Encoding.UTF8.GetString(DownData))
            TwitterStatusAL = New ArrayList
            TwitterStatusAL.Clear()
            For Each StatusXElement As XElement In AllStatusXElement...<status>
                TwitterStatusAL.Add(New clsTwitterStatus(StatusXElement))
            Next
            ReDim TwitterStatus(TwitterStatusAL.Count - 1)
            Array.Copy(TwitterStatusAL.ToArray, TwitterStatus, TwitterStatusAL.Count)
            Return TwitterStatus
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

 

通信関数と、ステータス受信関数を合わせて、タイムラインの取得を行う為の関数。

    Public Function GetTimeline(ByRef _TwitterStatus As clsTwitterStatus()) As Boolean
        Dim WebResponce As System.Net.HttpWebResponse
        If TwitterComm(__Friends_Timeline_URL, enumHttpReqMode.HTRM_GET, WebResponce) Then
            _TwitterStatus = ReciveStatus(WebResponce)
            If _TwitterStatus Is Nothing Then
                Return False
            End If
            Return True
        Else
            Return False
        End If
        Return False
    End Function
 

ソレの利用法(フォームのボタンでListBox にタイムラインを表示させる)

    Private Sub btnRefersh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRefersh.Click
        Dim TwitterStatus As clsTwitterStatus()
        Dim ii As Integer
        If _TeitterCom.GetTimeline(TwitterStatus) Then
            For ii = 0 To TwitterStatus.Length - 1
                ListBox.Items.Add(TwitterStatus(ii).User.Name & " , " & _
                                  TwitterStatus(ii).Text & " , " & _
                                  TwitterStatus(ii).CreatedAt)
            Next
        End If
    End Sub

 

とりあえず、こんな感じでTwitter API からのデータ取得は出来ると思います。

私はデータをクラスにしましたが、本来はそのままXElement で使っても良いと思いますが、

いかんせん、XML なんて使った事無いんでクラスにしました。

また、クラス化すると、コーディング時にプロパティやメソッドが選択出来るようになるので楽ですよね。

 

後は、このクラスをどうやって保存しておくか・・・

データベースに入れればUser のID とか、Status ID とか検索しやすくなるかなぁ???

ま、また適当に考えてみて書いてみます。

Twitter API 通信部位

自作Twitter クライアントは、「s14twi」と言う名前で作ります。

Twitter ID そのままですが・・・

 

さて、通信部位。

通常のタイムライン読み込みや、ステータスアップデートは、Basic 認証 で可能ですが、

「via s14twi」を出させるには、OAuth プロトコルでステータスアップデートしなければなりません。

そこで、OAuthLib(http://oauthlib.codeplex.com/)を使ってみる事にしました。

このAuth を利用するには、Consumer key とConsumer secret をTwitter から発行して貰わなければなりません。

ココ(http://twitter.com/apps/new)からアプリケーション登録の手続きをするともらえます。

その後、このConsumer key とConsumer secret を実装してAccessToken を取得します。

コレは、OAuthLib でRequestAccessToken を行います。

 

            PostConsumer = New OAuthLib.Consumer(_Setting.ConsumerKey, _Setting.ConsumerSecret)
            ReqToken = PostConsumer.ObtainUnauthorizedRequestToken(__RequestTokenURL, __AuthorizationRealm)
            Process.Start(Consumer.BuildUserAuthorizationURL(__AuthorizeURL, ReqToken))
 

ココの、処理で、ブラウザにKey が表示されるので、

そのKey を(TempStr がソレ)

AccToken = PostConsumer.RequestAccessToken(TempStr, ReqToken, __AccessTokenURL, __AuthorizationRealm)

この様に関数に渡すとAccessToken が取得できます。

 

AccessTokenは、TokenSecret と、TokenValue の二つの値で構成されています。

よって、OAuthLib でTwitter と通信するには、

 

Consumer key

Consumer secret

TokenSecret

TokenValue

 

この四つの値(String 型)を何処かに保存しておかないと不便です。

(AccessToken を毎回取得するのもめんどくさいし・・・)

 

なんか、Blog に上手くソースを表示させる手段は無いのだろうか???

 

とりあえず、AccessToken 取得関数

#Region "アクセストークン取得"
    Public Function SetAccTokenKey() As Boolean
        Dim PostConsumer As OAuthLib.Consumer
        Dim ReqToken As OAuthLib.RequestToken

        'Consumer 系の値が設定されているかチェック
        If _Setting.ConsumerKey = "" Or _Setting.ConsumerSecret = "" Then
            Return False
        End If

        Try
            PostConsumer = New OAuthLib.Consumer(_Setting.ConsumerKey, _Setting.ConsumerSecret)
            ReqToken = PostConsumer.ObtainUnauthorizedRequestToken(__RequestTokenURL, __AuthorizationRealm)
            Process.Start(Consumer.BuildUserAuthorizationURL(__AuthorizeURL, ReqToken))
        Catch ex As Exception
            Return False
        End Try

        'Web ページが開かれて、Access Token Key が表示されているはず。
        'InputBox でそのKey を入れてもらい、Setting に保存する。
        Dim TempStr As String = InputBox("Plese Input Access Token Key", "Input Key")
        If TempStr <> "" Then
            Dim AccToken As OAuthLib.AccessToken
            Try
                AccToken = PostConsumer.RequestAccessToken(TempStr, ReqToken, __AccessTokenURL, __AuthorizationRealm)
            Catch ex As Exception
                Return False
            End Try
            _Setting.AccTokenSecret = AccToken.TokenSecret
            _Setting.AccTokenValue = AccToken.TokenValue
        Else
            Return False
        End If
        Return True
    End Function
#End Region

 

Const 系 とEnum 系

#Region "Const"
    Private Const __Public_Timeline_URL As String = "http://twitter.com/statuses/public_timeline.xml"
    Private Const __Friends_Timeline_URL As String = "http://twitter.com/statuses/friends_timeline.xml"
    Private Const __Replies_URL As String = "http://twitter.com/statuses/replies.xml"
    Private Const __Direct_Messages_URL As String = "http://twitter.com/direct_messages.xml"
    Private Const __Rate_Limit_Status_URL As String = "http://twitter.com/account/rate_limit_status.xml"
    Private Const __Status_Update_URL As String = "http://twitter.com/statuses/update.xml"

    Private Const __RequestTokenURL As String = "http://twitter.com/oauth/request_token"
    Private Const __AccessTokenURL As String = "http://twitter.com/oauth/access_token"
    Private Const __AuthorizeURL As String = "http://twitter.com/oauth/authorize"
    Private Const __AuthorizationRealm As String = "http://twitter.com"

    Private Const __DummyParamName As String = "since_id"
    Private Const __DummyParamValue As String = "your since id"
#End Region

#Region "Enum"
Public Enum enumAuthorizationType As Integer
    AUTH_Unknown = 0
    AUTH_OAuth = 1
    AUTH_Basic = 2
End Enum
Public Enum enumHttpReqMode As Integer
    HTRM_Unknown = 0
    HTRM_GET = 1
    HTRM_POST = 2
End Enum
#End Region

 

そして、通信本体。

 

#Region "通信本体"
    Private Function TwitterComm(ByVal _URLStr As String, ByVal _ReqMode As enumHttpReqMode, ByRef _WebResponse As System.Net.HttpWebResponse) As Boolean
        Dim Params() As OAuthLib.Parameter
        ReDim Params(0)
        Params(0) = New OAuthLib.Parameter(__DummyParamName, __DummyParamValue)
        Return TwitterComm(_URLStr, _ReqMode, _WebResponse, Params)
    End Function
    Private Function TwitterComm(ByVal _URLStr As String, ByVal _ReqMode As enumHttpReqMode, ByRef _WebResponse As System.Net.HttpWebResponse, ByVal _Params() As OAuthLib.Parameter) As Boolean
        Dim ReqStr As String
        Dim ReqMessage As String

        '値のチェックもココで
        ReqStr = ""
        ReqMessage = ""
        Select Case _ReqMode
            Case enumHttpReqMode.HTRM_GET
                ReqStr = "GET"
                'OAuth 認証の場合、ココでメッセージを削除
                If _Setting.AuthorizationType = enumAuthorizationType.AUTH_OAuth Then
                    _Params = Nothing
                End If
            Case enumHttpReqMode.HTRM_POST
                ReqStr = "POST"
                'Params が有るかどうか???
                If _Params Is Nothing Then
                    Return False
                End If
                If _Params(0).Name = "__DummyParamName" Then    '値がDummy だった場合
                    Return False
                End If

                'Basic 認証の場合、ココでメッセージを作成
                If _Setting.AuthorizationType = enumAuthorizationType.AUTH_Basic Then
                    Dim ii As Integer
                    ReqMessage = ""
                    For ii = 0 To _Params.Length - 1
                        ReqMessage = ReqMessage & _Params(ii).Name & "=" & _Params(ii).Value & "&"
                    Next
                    ReqMessage = ReqMessage.Remove(ReqMessage.Length - 1, 1)
                End If
            Case enumHttpReqMode.HTRM_Unknown
                Return False
            Case Else
                Return False
        End Select

        '認証タイプ
        Select Case _Setting.AuthorizationType
            Case enumAuthorizationType.AUTH_OAuth
                Dim PostConsumer As OAuthLib.Consumer
                Dim AccToken As OAuthLib.AccessToken

                'Consumer 系の値が設定されているかチェック
                If _Setting.ConsumerKey = "" Or _Setting.ConsumerSecret = "" Then
                    Return False
                End If
                '取得したAccessToken が有るかどうかチェック
                If _Setting.AccTokenValue = "" Or _Setting.AccTokenSecret = "" Then
                    Return False
                End If
                PostConsumer = New OAuthLib.Consumer(_Setting.ConsumerKey, _Setting.ConsumerSecret)
                AccToken = New OAuthLib.AccessToken(_Setting.AccTokenValue, _Setting.AccTokenSecret)
                Try
                    _WebResponse = PostConsumer.AccessProtectedResource(AccToken, _URLStr, ReqStr, __AuthorizationRealm, _Params)
                Catch ex As System.Net.WebException
                    'Web 系エラー発生
                    Return False
                Catch ex As Exception
                    'エラー発生
                    Return False
                End Try

            Case enumAuthorizationType.AUTH_Basic
                Dim Request As System.Net.WebRequest
                Try
                    Request = System.Net.HttpWebRequest.Create(_URLStr)
                    Request.ContentType = "application/x-www-form-urlencoded"
                    Request.Headers.Add("Authorization: Basic " & Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(_Setting.UserID & ":" & _Setting.Password)))
                    Request.Method = ReqStr

                    'Twitterのサーバーが「100-Continue 」ヘッダをサポートしていないので、これを設定しないと「417」ステータスコードが返ってくるらしい
                    System.Net.ServicePointManager.Expect100Continue = False
                    If _ReqMode = enumHttpReqMode.HTRM_GET Then
                        _WebResponse = Request.GetResponse
                    ElseIf _ReqMode = enumHttpReqMode.HTRM_POST Then
                        Dim PostStream As System.IO.Stream
                        Dim PostBytes() As Byte
                        PostBytes = System.Text.Encoding.ASCII.GetBytes(Uri.EscapeUriString(ReqMessage))
                        Request.ContentLength = PostBytes.Length
                        PostStream = Request.GetRequestStream
                        PostStream.Write(PostBytes, 0, PostBytes.Length)
                        _WebResponse = Request.GetResponse
                    End If
                Catch ex As System.Net.WebException
                    'Web 系エラー発生
                    Return False
                Catch ex As Exception
                    'エラー発生
                    Return False
                End Try
            Case enumAuthorizationType.AUTH_Unknown
                Return False
            Case Else
                Return False
        End Select

        '最後にWebResponse の確認
        If _WebResponse.StatusCode = Net.HttpStatusCode.OK Then
            Return True
        End If
        Return False
    End Function
#End Region

また変更が有ったらUP してみます。

なんとなく作成開始・・・

最近やってるTwitter のクライアントソフトを作り始めました。

作り始めた動機は、Twitter API への興味・・・

からの~

「via ○○」を表示させくなった・・・

 

と言う、単に興味半分だけだったのですが、

Visual Studio 2008 で開発する事にして、

一応、.NET 2008 の練習と言う比較的正当な理由をつけて作ってみる事になりました。

 

色々とWeb で調べてみると、C# で作ってる人が多いみたいですが、私はVB で作ります。

VB のサンプルが少ないからC# を参考に作って行きますんで、

気になった点が有ったらVB のソースをBlog にUP していきます。

 

ちなみに、現時点では、Twitter API の知識や、Web 関係のプログラム知識は殆どありません。

ただプログラムを書く知識だけが少し有るだけなので、記載する情報には間違い等も有るかと思います。

ソースはあくまでも参考情報と言う事で・・・

 

ま、とりあえず書いてみます~

喰わせてもらってまぁ~す

上司を食わせるためになぜこんな目に遭うのか?
~それは本当に上司に対しての不満?~

http://www.nikkeibp.co.jp/article/nba/20100309/214761/?P=1

 

社員には、絶対にこういう不満は有るでしょう。

でも、実際にはそんなことは有りません。

ソレは将来、その逆の状況になればどうなるかと言う事だと思いますが・・・

 

後半の方で、不満は不満を呼ぶと書いて有りますが、

コレは良くわかる気がします。

私も昔はず~っとグチグチ会社の文句ばかりタレてました。

じゃあ如何するの? どうやって解決しますか?

辞めるしかないんです・・・

他に一緒に働いている人が居て、その人達も巻き込んで不平不満を言ったって、

ただ、一番簡単な話題で頭を使わずに会話を続ける事が出来ると言うだけで、

内容も意味も全く無い行動だったと思います。

無意味に会社の雰囲気を悪くするだけの行動だったと反省します。

 

では、今は如何でしょうか???

今度は、その不満の矛先ですよね^^;

やっぱり、本人的にコソコソ言っている不満でも、必ず相手の耳に届きます。

不満を言う人が居れば、その不満を伝えたり広げたりする人も必ず居ます。

言ってる本人もメリットが有りません。

そして、結局会社を去っていく事に成ります。

ただ、雰囲気を悪くし、それに対し何の責任も無く去って行くだけ。

コレでは当然、、会社に残る周りの人は良い気分ではありませんね。

まぁ、ソレに本人が気付くかどうかは分かりませんが・・・

 

前の会社で指摘された事や怒られた事は、その時に全て理解出来でた訳ではありませんでしたが、

年月が経って来るとイロイロと理解出来るように成ってきたと思います。

今もまだ指摘される事も多いですが(すぐに怒るなとか、遅刻するなとか^^;)

素直に直せる様に成りたいと思います・・・

 

って言うか、朝からこんな事書いて無いで仕事しろって!!

楽な仕事無いっすかぁ~~~

本当は働きたくない 「楽な仕事はないですか?」

http://www.j-cast.com/kaisha/2010/02/26061070.html

 

あります!!

どんな仕事も全てそう、楽です。

ただし、責任を持つか、持たないかで、楽か辛いかが変わると思います。

責任無く仕事をすれば、全ての仕事が楽です。

責任感を持って仕事をすれば、どんな仕事でも大変で、辛い仕事に成ると思います。

しかし、「責任」には耐性が有ると思われます。

一度乗り越えた「責任」は、次から耐性がついて辛く感じ無くなります。

そして、その次の大きな責任を負っていける様になると思います。

常に小さな責任を乗り越えるクセを付ければ、

いつの間にか大きな責任もさほどプレッシャーに感じ無くなるのだと思います。

 

じゃあ、責任って何なんでしょうか???

 

なんだろうねぇ~~~~~

ソレが分かれば良いんだけどねぇ~~~~~

 

まぁ、あえて言うなら、何かトラブルが有った時に、「大変申し訳御座いませんでした」と言ったり、

その仕事に対しての問い合わせに、「大丈夫です」とか「出来ます」とか言ったりする機会が有る事かなぁ・・・

私はそう思いました。

そんな単純な事では無いと思いますが^^;

 

ちなみに、遊びにも責任は重要!!

※勘違い発言禁止(爆)

遊びと言うか、趣味ね^^;

思いっきり自分の責任で遊びまくるのは全然問題無し!!

むしろ、そう言う人は仕事も超出来ると思います。

中途半端に遊ぶ人(私)は仕事も中途半端(私)

全く遊ばない人は・・・・ 仕事も・・・・

※仕事が趣味の人は、その仕事自体がその人の遊びだからイイと思いますが

 

最後に、「本当は働きたくない 「楽な仕事はないですか?」の最後に、

南国の人は働かないと書いて有りましたが、

コレを日本の物差しでの「働かない」と言うのはどうかと思います。

そもそも文化が違うので、南国の人から見れば日本人が異常に見えてるかも知れません。

この記事の中に有った、

 

ベーシックインカム

http://ja.wikipedia.org/wiki/%E3%83%99%E3%83%BC%E3%82%B7%E3%83%83%E3%82%AF%E3%82%A4%E3%83%B3%E3%82%AB%E3%83%A0

 

コレが「働かない」と言う事だと思います。

もちろん、ベーシックインカムは制度で有り、働く・働かないとは直接関係有りませんが、

南国の「働かない」と日本の「働かない」の考え方の違いが良く出てる文章だと思います。

 

さて!! 仕事もしないでこんなモノ書いている場合じゃないぞ~

いよいよ事務所のエアコンON!!

って言う気温になってしまったので、

パソコンの壁紙を、先々週の自宅前に変更!!

 

Img_0361

 

ちなみに、私は今、Tシャツです・・・

 

寒いのか、暑いのか・・・

夜食は我慢できません!!!

もう我慢できなくなって、スーパーに行き乾麺のそばを購入。

そして、夜食を作りました!!!

 

夜はお客さんと寿司屋で日本酒だったので、

まさにぴったりの夜食。

喰って即グーすかピー太郎でした^^;

 

Img_0358

デジタル人間

デジタル人間
自分、プログラマーなんで!!
髪型も、1(ロン毛)か0(坊主)なんで!!

イライラしたら、迷わず坊主!!!
コレで、また明日からスッキリ仕事出来ますよ〜

あ〜〜〜

寝よ・・・

なんとなく、去年の団報の記事を載せてみる・・・ 懐かしい・・・

霧ケ峰野焼(準備)
 S分団 T.Y

何事も準備が肝心である

その日は野焼予定日の前日、野焼準備の日。
翌日予定の野焼きが滞り無く遂行できる様、事前準備のため、我々は朝6時に霧ケ峰に集結した!!

ちなみに、どしゃ降りですけどね・・・
っていうか、みぞれですけど何か???

周りは霧に覆われ、横殴りの風が吹き荒ぶ中、野焼の準備は着々と進んで行った。
「あ、積載車の影、風が当たらなくて寒くない~」
「本当だ~ ここならあまり濡れないね~」
ガチガチ震え、びしょ濡れの人間が半ばトランス状態になった時に発する言葉が飛び交っていた。
そして全員、心の中でこう叫んだ。

「明日、野焼、焼けねぇよ!!」

Exactly!!
野焼は翌週に延期された・・・

一週間が経ち、野焼本番の日。
あの日がまるで嘘だったかの様な好天に恵まれ、気持ちも晴れ晴れ野焼きに向かった。

野焼の準備は先週終わっている!! 今日は準備が不要だ!!
誰もがそう考えていた。

しかし、現実は厳しく更に我々を苦しめた。
なんと、前日の冷え込みで、展長したホースが凍っていたのである・・・

何事も準備が肝心である
結局我々は、野焼当日に別のホースを展長した。

行事までの段取りや失敗等の中から学ぶ事が多い。
それを、如何にフィードバックさせて行くかで、失敗の無い消防活動が行える様になるのだと思います。

ちなみに、メインの野焼は何の問題も無く無事終了致しました~~~
本番で失敗しない様に準備で失敗しよう!!
いや、そもそも失敗しない計画を立てよう!!

何事も計画が肝心である