毎週月曜日の0時(日本時間)にYouTube APIを使ってDreams Come Trueのコンテンツの再生回数をグラフにしています。当初はこのYouTubeの再生回数からWONDERLAND 2019の決まればと思っていながら時間がなくて結局WONDERLAND 2019が始まってからTop 10/30を計測し始めました。ウラワンの予想でもしようかと思っています。
DREAMS COME TRUE
Top 10
https://www.sanpei.org/YouTube-rank/DCT-graph.html
Top 30
https://www.sanpei.org/YouTube-rank/DCT-graph-30.html
※ 2019年8月12日分は計測タイミングを月曜日の夕方だったため、通常より多めの再生回数になっています。
以下参考
宇多田ヒカル
Top 10
https://www.sanpei.org/YouTube-rank/UTADA-graph.html
Top 30
https://www.sanpei.org/YouTube-rank/UTADA-graph-30.html
Perfume
Top 10
https://www.sanpei.org/YouTube-rank/PERFUME-graph.html
Top 30
https://www.sanpei.org/YouTube-rank/PERFUME-graph-30.html
Taylor Swift
Top 10
https://www.sanpei.org/YouTube-rank/TAYLOR-graph.html
Top 30
https://www.sanpei.org/YouTube-rank/TAYLOR-graph-30.html
※ 2019/9/1までは、データが一週間分しかないため、宇多田ヒカルとPerfumeのグラフは作成できていません。
※ 2019/9/16までは、データが一週間分しかないため、Taylor Swiftのグラフは作成できていません。
2019年8月30日金曜日
2019年8月29日木曜日
[2019年夏]T-Mobile 電話番号が無くなったPee-PAID SIMの再有効化(reactivate)
最初はT-MOBILE.Pay as you goの1week/1GBプラン($10+事務手数料$10)をT-MOBILEのSHOPで契約し、半年後に2GB/1MONTHプラン($10)をMY T-MOBILEから契約しました。その後は日本に帰国したのでWebのMY T-MOBILEで契約解除しました。2GB/1MONTHプランにしたのは、同じ$10で2GBと倍使えるからです(PAY AS YOU GOでは無くて、解約後に電話番号も無効化されたのは解約後に分かった、、、)
3ヶ月後再度利用しようとMY T-MOBILEで当初の電話番号を入力しても「他でこの番号が使われている」となりMY T-MOBILEからrefillなどができませんでした。
なぜT-Mobileを使い続けるのか
現在T-MOBILE系のultra mobileは、オペレータ応答時間はコストダウンのためオフィス時間のみです。一方のT-Mobileは24時間対応してくれます。SIM CARDさえあれば、夜遅く着いた場合などでも手厚くサポートしてくれそうだからです。
試みてダメだったもの
1.My T-MOBILEではだめ
すでに書いたとおり番号が他の人(それも後からオペレータと話してわかったのですが、別の通信会社で再利用されていたようです)に使われて、MY T-MOBILEで紐付け出来ませんでした。
2. T-Mobile shopでもだめ
店員さんにSIM CARD NUMBERを見せて調べてもらったのですが使えない(not avaiableだった)と出てきた。
3.普通にManage your account: 1-877-778-2106に電話してもだめ
1. まずは、電話番号を聞かれる
2. 単にSIM CARD NUMBER伝えても、契約したいのをpay as you goと伝えるとultra mobileのサービス電話に切り替わって、自動応答でACITIVATE CODEを求められてしまいました。このACTIVATE CODEはultra mobileのSIMには印字されていますが、私のSIMはT-MOBILEの物なので記載はありませんでした。
ultra mobileのオペレータ対応時間ならばここで解決できたかもしれません)
2. 単にSIM CARD NUMBER伝えても、契約したいのをpay as you goと伝えるとultra mobileのサービス電話に切り替わって、自動応答でACITIVATE CODEを求められてしまいました。このACTIVATE CODEはultra mobileのSIMには印字されていますが、私のSIMはT-MOBILEの物なので記載はありませんでした。
ultra mobileのオペレータ対応時間ならばここで解決できたかもしれません)
結局どう解決したか?(REACTIVATEしたか?)
以上の契約失敗を元に、以下を説明をManage your account: 1-877-778-2106にして、どのようにオペレートしてほしいかをこちらから詳しく説明してREACTIVATEできました(まるでゲームの解き方をオペレータに伝える感じで)。
1. prepaid simを持っている。4月に2GB /1MONTH契約をしていたが解約した
2. 今はその時の電話番号がは使えない。新しい番号で良いで、再ACTIVATEしたい(ここはよく言わないと、番号無効だから、そのSIMは使えないとの結論になって終了)。
3. PAY AS YOU GOをこのSIM CARDで使いたい。SIM CARD NUMBERを伝えるので、Activateしてほしい。
4. 現在T-MOBILEのpay as you goはultra mobileで提供されているが、私のSIMはT-MOBILEのなのでACTIVATE CODEが無いので、オペレータさんがPAS AS YOU GOを有効にしてほしい。
2. 今はその時の電話番号がは使えない。新しい番号で良いで、再ACTIVATEしたい(ここはよく言わないと、番号無効だから、そのSIMは使えないとの結論になって終了)。
3. PAY AS YOU GOをこのSIM CARDで使いたい。SIM CARD NUMBERを伝えるので、Activateしてほしい。
4. 現在T-MOBILEのpay as you goはultra mobileで提供されているが、私のSIMはT-MOBILEのなのでACTIVATE CODEが無いので、オペレータさんがPAS AS YOU GOを有効にしてほしい。
以上を伝えたら、再PAY AS YOU GO設定費用$3と1 week /1BG PAY AS YOU GOの$10の合計$13となり、クレジットカード番号などを伝えて、無事Mobile dataプランをT-MOBILEで有効化出来ました。
$13だと普通にT-MOBILE に行って提携しているultra mobileのpre parid sim買って1week/1GB SIM買うのとおなじ値段ですが、最初に書いたとおり、T-MOBILEの契約をしたかったので、上記の手間をかけました。
こんなシチュエーションの人は少ないかもしれませんが、何かの参考になればと思いblog化しました。
2019年8月27日火曜日
[2019年夏]T-Mobile Pre-PAID Pay as you goプランの再有効化
2019年のいつ頃からかT-Mobileでは、T-Mobileを使ったMVNOのulltra mobileのみが店頭販売されています。
T-MobileのPre PAIDのWebページから、"Only pay for what you need."を選択すると、ultra mobileにリンクされたいます。
そのため、以前ならばWebページのMy T-Mobileで、Pay as you Goのデータプランrefill/有効化が日本からでも出来ましたが、現在(少なくともこの記事を書いている2019/8/26時点)では、普通のプランしか選べません(USAの飛行場のFree Wi-Fiを使って有効化する予定だったため、焦りました)。
サポートに電話して、T-Mobile従来Pay as you go.Dataプランを有効化
ここでは、T-Mobileのサポートに電話して無事T MobileのPay as you Goの再契約できたお話です。
結局Manage your account: 1-877-778-2106に電話する
私は別途電話できる電話回線を持っていないため、ホテルのWi-Fiからskypeの米国の携帯電話と固定電話への無制限通話プラン(US$2.99/月)を契約して通話しました)
オペレータとの通話は必要なく、すべてコンピュータの自動応答システムへの応対で手続きできるパスを見つけて対応できました。
オペレータとの通話は必要なく、すべてコンピュータの自動応答システムへの応対で手続きできるパスを見つけて対応できました。
言葉で、Yes/Noで回答する場合もあり、数字を入力して対応できる場合もあります。
refillはクレジットカード番号を携帯電話(スマホ)のkeypadで入力して対応しました。
refillはクレジットカード番号を携帯電話(スマホ)のkeypadで入力して対応しました。
zip codeの要求時には滞在先のホテルのzip codeで問題なかったです。
飛行場ではmanage your accountでオペレータに相談する事を考えていたため、オペレータにつないで話したのですが、飛行場のFree Wi-Fiが安定せずそこでは解決できませんでした。
何度か電話して、ゲームをする感じで、どのパスで対応すれば良いかが分かって最終的には再契約できました。
2018年2月11日日曜日
[Android]LINEアプリでOS設定のアプリ権限で「位置情報」をOFFにすると動作が遅い
[2018/06/30] この時点の版から位置情報をOFFにしても動作に不具合がなくなりました。
いつからかAndroid上のLINEアプリケーションの動作がおかしくなりました。
例えば:
以下の通り、BLEの処理をしているけど、PERMISSIONが無いためexceptionが出ていました。
そこで、OS設定のアプリ権限でLINEの「位置情報」を「ON」に変更したところ改善しました。個人的には不要なパーミッションはOFFにしたいので、改善して欲しいところです。
環境
Android 8.1
LINE 8.1.1
問題発生時のlogcat
いつからかAndroid上のLINEアプリケーションの動作がおかしくなりました。
例えば:
- ボタン部分を押しても押したことを一回無視される。
- IMEを有効にしてHOMEボタンを押してLINEを一度back groundに移動して、再度LINEを起動すると、IMEの表示→非表示まで時間がかかる。
以下の通り、BLEの処理をしているけど、PERMISSIONが無いためexceptionが出ていました。
そこで、OS設定のアプリ権限でLINEの「位置情報」を「ON」に変更したところ改善しました。個人的には不要なパーミッションはOFFにしたいので、改善して欲しいところです。
環境
Android 8.1
LINE 8.1.1
問題発生時のlogcat
02-10 17:11:09.157 2124-2124/? I/GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
02-10 17:11:09.157 2124-2124/? I/GoogleInputMethod: onStartInput() : Dummy InputConnection bound
02-10 17:11:09.161 883-944/? I/ActivityManager: Displayed jp.naver.line.android/.activity.chathistory.ChatHistoryActivity: +194ms (total +254ms)
02-10 17:11:09.185 2124-2124/? I/GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
02-10 17:11:09.224 3181-3181/? V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 0 children of 1073741840
02-10 17:11:09.224 3181-3181/? V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 1 children of 1073741843
02-10 17:11:09.225 3181-3181/? V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 0 children of 1073741853
02-10 17:11:09.225 3181-3181/? V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 3 children of 1073741862
02-10 17:11:09.226 3181-3181/? V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 4 children of 1073741874
02-10 17:11:09.226 3181-3181/? V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 4 children of 1073741875
02-10 17:11:09.228 883-22436/? W/Binder: Outgoing transactions from this process must be FLAG_ONEWAY
java.lang.Throwable
at android.os.BinderProxy.transact(Binder.java:752)
at android.app.assist.AssistStructure$ParcelTransferReader.fetchData(AssistStructure.java:407)
at android.app.assist.AssistStructure$ParcelTransferReader.go(AssistStructure.java:343)
at android.app.assist.AssistStructure.ensureData(AssistStructure.java:2100)
at com.android.server.autofill.Session$1.send(Session.java:227)
at com.android.server.am.ActivityManagerService.reportAssistContextExtras(ActivityManagerService.java:13272)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2472)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2919)
at android.os.Binder.execTransact(Binder.java:697)
02-10 17:11:09.229 3181-3181/? I/AssistStructure: Flattened final assist data: 12784 bytes, containing 1 windows, 56 views
02-10 17:11:09.250 883-2370/? I/AssistStructure: Flattened final assist data: 12672 bytes, containing 1 windows, 56 views
02-10 17:11:09.463 698-698/? D/QCOM PowerHAL: LAUNCH HINT: OFF
02-10 17:11:09.799 3181-3219/? E/System: Ignoring attempt to set property "java.net.preferIPv6Addresses" to value "false".
2018年1月21日日曜日
[Google Assistant, IFTTT] Google Homeに話しかけてhttp://diet.dyndns.orgの体重グラフを自動Update
Google Home/Assistantに話しかけて体重グラフを自動で更新する方法
[2018/1/24] 体重にいわゆる半角全角が混ざっている場合にうまく半角に出来ない問題があります。近日修正予定です。
[2018/1/25] 半角全角が混ざるのではなく、61.2kgといったときに "6[半角スペース]1.2kg"という文字送られてきているのが問題でした。スペースを削除するようにしました。
[2018/2/18] IFTTTの返事文言を変更しました。
[2018/2/21]体重グラフのWebページがhttps化されたため。Google App Scriptを変更しました(http→https)。
[2018/3/16] Amazon Alexa用のskillを作成し、現在Amazonの審査中です。公開でき次第こちらにも記載します。また時間がとれればGoogle Assistant用のアプリも作成できればと思います(機能は本IFTTT版とほぼ同じです)
[2018/3/23] Amazon Alexa用skillとして、「体重グラフ」を公開しました。ご要望があれば、weight-graph at sanpei.org にメールください。Google Assistant用のアクション(アプリ)も作成予定です。
[2018/3/25] Google Assistant(Google Home)用のアクションとして「体重グラフ」をGoogleに公開申請しました。公開できましたらこちらに記載します。
[2018/3/27] Google Assistant(Google Home)用のアクションとして「体重グラフ」をGoogleに公開しました。そのため以下の内容は技術的な参考として引き続き掲載します。
各スキル・アクションのコードは以下のgithubで公開中です。
Amazon Alexa用skill code
Google Assistant用Action code
以下の設定の説明します。
1) IFTTTの設定
2) Google App Scriptの説明
1) IFTTTの設定
1-1) IFTTTの設定のポイント
1-1-1) IFの"Say a phrase with a text ingredient"の利用
当初は体重は数字なので"Say a phrase with a number"を使っていましたが、Google Assistantが体重部分をいわゆる全角で認識する場合があり、そうすると数字ではなく文字列になりました。そのため、現在は"Say a phrase with a text ingredient"を利用しています。
1-1-2) Languageは日本語(Japanese)に変更しています。
2) Google App Script
2-1) Google App ScriptはIFTTTと連携するGoogle DriveのGoogle Sheetで[Tools]->[Script editor...]で開いて入力ください(本例では、"IFTTT/sanpeiweight"の"Google Assistant Commands")
2-2) Google App Scriptの操作方法はこちらのYouTubeが参考になりました。
[Resources] -> [All your trigger]か以下のボタンからTrigger追加してください。
2-3) diet.dyndns.orgのユーザー名とパスワードは、Google Sheetのシート名[Auth]のB1セルにユーザー名、B2セルにパスワードを入力してください。
2-4) 簡単な各関数の説明
関数addDate:
A) IFTTTでThen "Add row to spreadsheet"でなぜか"Add row to spreadsheet"をしても正しくCreatedAtが入らないためGAS側でA列に日付を入れています。
B) Google Assistantが時々いわゆる全角文字で体重を認識するため全角を半角に変換しています。-->[2018/1/25] 全角ではなく、数字の途中に不要なスペースが入る場合がありその削除対応をしています。
C) updateDietの呼び出し
関数updateDiet:
A) Diet.dyndns.orgと通信しながら、現在の時刻で体重を記録します。
function addDate(e) {
var authSheetName = "Auth";
var activeSheet = SpreadsheetApp.getActiveSheet();
if (activeSheet.getName() != authSheetName) {
var lr = activeSheet.getLastRow();
var weight = activeSheet.getRange(lr,2).getValue().toString();
weight = zenToHan(weight);
activeSheet.getRange(lr, 2).setValue(weight);
var CurrentDateString = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MMM d yyyy HH:mm:ss");
activeSheet.getRange(lr, 1).setValue(CurrentDateString);
updateDiet(weight, authSheetName);
}
}
function updateDiet(weight, authSheetName) {
var bk = SpreadsheetApp.getActiveSpreadsheet();
var authSheet = bk.getSheetByName(authSheetName);
var userId = authSheet.getRange(1,2).getValue().toString();
var password = authSheet.getRange(2,2).getValue().toString();
// 1. open login page
var LOGIN_URL = "https://diet.dyndns.org/?cmd=login&user="+userId+"&password="+password
var response = UrlFetchApp.fetch(LOGIN_URL, {'followRedirects': false, 'muteHttpExceptions': false});
Utilities.sleep(1000);
var headers = response.getAllHeaders();
var cookies = [];
if ( typeof headers['Set-Cookie'] !== 'undefined' ) {
// Set-Cookieヘッダーが2つ以上の場合はheaders['Set-Cookie']の中身は配列
cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie'];
for (var i = 0; i < cookies.length; i++) {
// Set-Cookieヘッダーからname=valueだけ取り出し、セミコロン以降の属性は除外する
cookies[i] = cookies[i].split( ';' )[0];
};
}
// 2. open redirect page
REDIRECT_URL = "https://diet.dyndns.org/?cmd=user&";
var options = {
method : "POST",
contentType: "application/x-www-form-urlencoded",
headers: {
Cookie: cookies.join(';')
},
};
response = UrlFetchApp.fetch(REDIRECT_URL, options);
Utilities.sleep(1000);
// 3. set weight
WRITE_URL = "https://diet.dyndns.org/";
var date = new Date();
var timeZone = Session.getScriptTimeZone();
var year = Utilities.formatDate(date, timeZone, "y");
var month = Utilities.formatDate(date, timeZone, "M");
var day = Utilities.formatDate(date, timeZone, "d");
var hour = Utilities.formatDate(date, timeZone, "H");
weight = weight.toString();
var options = {
method : "POST",
contentType: "application/x-www-form-urlencoded",
headers: {
Cookie: cookies.join(';')
},
payload : {
year: year,
month:month,
day:day,
hour:hour,
weight:weight,
comment:"",
cmd:"user",
mode:"input"
}
};
response = UrlFetchApp.fetch(WRITE_URL, options);
}
function zenToHan(s) {
s = s.replace(/[0-9.]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 65248);
});
return s.replace(/ /g, "");
}
ちなみに、バックアップも兼ねて以下のようにGoogle SheetにもA列に日時、B列に体重が入ります。
2017年8月25日金曜日
2017年7月17日月曜日
[Ruby] first monkey patch(Mechanize::Form::SelectList )
This is my first monkey patch(for Mechanize::Form::SelectList)
This monkey patch is even if the SelectList is not multiple, we can clear selectitems by select_none(original code was set first.value when select_none).
This monkey patch is even if the SelectList is not multiple, we can clear selectitems by select_none(original code was set first.value when select_none).
class Mechanize::Form::SelectList < Mechanize::Form::MultiSelectList
def value
value = super
if value.length > 0
value.last
elsif @options.length > 0
# @options.first.value
nil
else
nil
end
end
end
登録:
投稿 (Atom)



