2015年03月

おおよそプリンタのトナーというものは、「トナー交換」という表示が出ても、実は若干(まだまだ?)トナーが残っているものでして。
「トナー交換」の表示を無視して使い続けられはするものですが、最近のプリンタは双方向通信によりPC画面に「トナー交換」の表示が出るものがあり、実に鬱陶しい。

ウチで使っている、Brother MF-7460DNもそういうおせっかい便利機能があり非常に迷惑重宝しております。

ところが、社員の方から「トナー交換」の表示を消したいという声がありまして。
で、調べたところ簡単に表示を消せたのでやりかたの説明です。

トナーユニットの型番は「TN-27J」です。

9b6c02f0.png
  1. 図の黄色の矢印のビス2本を緩め、カバーを外す

  2. トナー本体側の「▼」と、ギヤ側の「△2」が合っているので

  3. 「△」マークのあるギヤを抜いて、「▼」と「△1」を合わせた位置に戻す
    (ちょうどツマミ状になっているので作業しやすい)

  4. カバーを戻し、ビスを締めて元通り

こんな感じです。

でも、トナー残量が少ないので、予備トナーは用意しておきましょう。

最後に、言わずもがなですが、 at own your riskで。

最近、SmallBASICをいじりはじめました。
その名の通り、実にsmallなBASIC言語なんですけど、ランタイム(?)を使用した実行ファイルも作れるので、ちょっとした小物ソフトを作るにはいいんじゃないかと思います。

と言うことで、アニメ番組表の取得用ソフトを作ってみました。

これまでアニメ番組の取得に、TVガイドのページを使っていたのですが、昨年10月のリニューアル以後、番組表が無くなってしまいました。

代わりに使用しているのが、ザテレビジョンのページなんですが、ここが少々使いにくくて。
と言うのも、画像が多いうえに、1ページに表示される項目が少ないので、何ページも見なくちゃならない。

そこで勉強がてらSmallBASICで作ってみようかと。
機能は、「thetvのアニメ番組表を取得し、『日付・放送局・番組名・内容』の順にテキストファイルに出力する」というモノ。
「こんなソフト使うヒトいるんか?」というぐらいピンポイントを狙ったソフトです。
つか、俺用。

実行形式はこちら(thetv_anime.zip)

ソースリストは以下ね。
どうせ読む人いないでしょうから小文字にしておきます。

ソースリストについて、一応 言い訳 説明すると、SmallBASICはローカル変数が使えないので、サブルーチンの呼び出しの際、変数の受け渡しにスタックを利用。
また変数の命名規則として、
  1. メインルーチン内の変数は命名規則無し
  2. サブルーチンについては短縮したサブルーチン名を変数の頭に付けてローカル変数という事を明示
  3. グローバル変数は全て大文字
とりあえずそんな感じで作ってみました。

とりあえず本日現在、正常動作してます。
thetvがタグ変えたら動かなくなります。

ちなみに動作は首都圏版のみ。
他の地域はjavascriptで切り替えているので読めません。
あしからず。




main()
Program.End()

Sub main
init()

today()
day = Stack.PopValue( "today" )
TextWindow.WriteLine( day )

fp = "thetv.txt"
File.WriteContents( fp, "" )

File.AppendContents( fp, "アニメ" + CRLF )
anime = "http://thetv.jp/program/schedule/list/anime/terrestrial/" + day + "/page:"
Stack.PushValue( "getbangumi", anime )
getBangumi()

'http://thetv.jp/program/schedule/list/drama/terrestrial/
'http://thetv.jp/program/schedule/list/variety/terrestrial/
'http://thetv.jp/program/schedule/list/movie/terrestrial/
'http://thetv.jp/program/schedule/list/sports/terrestrial/
'http://thetv.jp/program/schedule/list/documentary/terrestrial/
'http://thetv.jp/program/schedule/list/other/terrestrial/

TextWindow.WriteLine( "end" )
EndSub

'get html & write file
'IN : URL
'OUT : ---
Sub getBangumi
gb_bangumi = Stack.PopValue( "getbangumi" )

For gb_i = 1 To 30
gb_web[gb_i] = Network.GetWebPageContents( gb_bangumi + gb_i )
While( Text.IsSubText( gb_web[gb_i], "title_bangumi" ))

Stack.PushValue( "getTitle", gb_web[gb_i] )
getTitle()
gb_web[gb_i] = Stack.PopValue( "getTitle" ) 'web HTML
gb_text = Stack.PopValue( "getTitle" ) 'text
gb_date = Stack.PopValue( "getTitle" ) 'date,time,ch
gb_title = Stack.PopValue( "getTitle" ) 'title

TextWindow.WriteLine( gb_date + HT + gb_title + HT + HT + gb_text )
File.AppendContents( fp, gb_date + HT + gb_title + HT + HT + gb_text )
' TextWindow.WriteLine( Text.GetSubText( web[1], 1, 100 ))
EndWhile
TextWindow.WriteLine( CRLF + "---------- Page : " + gb_i + "---------- " + CRLF )
File.AppendContents( fp, CRLF + "---------- Page : " + gb_i + "---------- " + CRLF )

If( Text.IsSubText( gb_web[gb_i], "next disabled" ) Or Text.IsSubText( gb_web[gb_i], PAGER ) = "False" )Then
Goto break
endIf
Endfor

break:
EndSub

'remove html_tag
'IN : web HTML
'OUT : 1=HTML 2=date,time,ch 3=title, 4=text
Sub getTitle
gt_web = Stack.PopValue( "getTitle" )

gt_web = Text.GetSubTextToEnd( gt_web, Text.GetIndexOf( gt_web, "title_bangumi" )+15 )
gt_stPos = Text.GetIndexOf( gt_web, ">" )+1
gt_edPos = Text.GetIndexOf( gt_web, "</p>" )
If( gt_stPos > gt_edPos )Then
gt_stPos =1
EndIf
gt_len = gt_edPos - gt_stPos
Stack.PushValue( "getTitle", Text.GetSubText( gt_web, gt_stPos, gt_len ) )

gt_web = Text.GetSubTextToEnd( gt_web, Text.GetIndexOf( gt_web, "time_bangumi" ) )
gt_stPos = Text.GetIndexOf( gt_web, ">" )+1
gt_edPos = Text.GetIndexOf( gt_web, "<br" )
gt_len = gt_edPos - gt_stPos
gt_date = Text.GetSubText( gt_web, gt_stPos, gt_len ) 'date

gt_stPos = Text.GetIndexOf( gt_web, "<br" )+6
gt_edPos = Text.GetIndexOf( gt_web, "</p>" )
gt_len = gt_edPos - gt_stPos
gt_time = Text.GetSubText( gt_web, gt_stPos, gt_len ) 'time,ch
Stack.PushValue( "getTitle", gt_date + HT + gt_time + " " )

gt_web = Text.GetSubTextToEnd( gt_web, Text.GetIndexOf( gt_web, TXT )-2 )
gt_stPos = Text.GetIndexOf( gt_web, TXT )+16
gt_edPos = Text.GetIndexOf( gt_web, "</p>" )
gt_len = gt_edPos - gt_stPos
gt_text = Text.GetSubText( gt_web, gt_stPos, gt_len ) 'text
Stack.PushValue( "getTitle", gt_text )

Stack.PushValue( "getTitle", gt_web )
EndSub

'get today
'IN : ---
'OUT : date(YYYYMMDD)
Sub today
today_d = Clock.Date
today_day = Text.GetSubText( today_d, 1, 4 ) 'YYYY
today_day = Text.Append( today_day, Text.GetSubText( today_d, 6, 2 ) ) 'MM
today_day = Text.Append( today_day, Text.GetSubText( today_d, 9, 2 ) ) 'DD
TextWindow.Write( "YYYYMMDD(" + today_day + ")" )
today_d = TextWindow.ReadNumber()
If( today_d <> 0 ) Then
today_day = today_d
EndIf
Stack.PushValue( "today", today_day )
EndSub

'set global
Sub init
CRLF = Text.GetCharacter(13) + Text.GetCharacter(10)
HT = Text.GetCharacter(9)
DQ = Text.GetCharacter(34) 'double quatation
PAGER = "class=" + DQ + "pager" + DQ
TXT = "<p class=" + DQ +"text" + DQ + ">"
EndSub


↑このページのトップヘ