投稿

2019の投稿を表示しています

GOM Player 終了時のブラウザ広告を止める

GOM Player が終了時に既定のブラウザで広告を表示するようになった 広告を否定するつもりはないが、あまりにマナーが悪すぎる レジストリを調べると広告を表示した時刻を Unixtime で記録して、この値が24時間 (たぶん) 以上古いと広告を出しているようなので、 値を未来へ変更して いましたが、対策されてしまいましたので再攻略 広告表示の仕組み レジストリ \HKEY_CURRENT_USER\Software\GRETECH\GomPlayer EndingBrowser にある Unixtime (UTCではなくローカルタイムです) の値が 24時間(たぶん)以上古い 現在時刻より未来 ←GOM Player 2.3.48.5310 あたりで追加された エントリが存在しない のいずれかの条件で広告を表示しているようなので vbscript で Windows ユーザーログイン時に、 EndingBrowser  の値をその時の時刻(ログイン時刻)で上書きしてみました スタートアップへのスクリプトファイル配置 ファイル名を指定して実行(Win+R)で shell:startup を入力して、スタートアップフォルダを開く 右クリック → 新規作成 → テキストドキュメントで GomPlayerReg.txt みたいなのを作成 ダブルクリックでメモ帳などが開く 下記をコピペして保存 with WScript.CreateObject("WScript.Shell")     .RegWrite "HKCU\Software\GRETECH\GomPlayer\EndingBrowser", CLng(DateDiff("s", "01/01/1970 09:00:00", Now())), "REG_DWORD" end with ファイル名を GomPlayerReg. txt から GomPlayerReg. vbs へ変更 GomPlayerReg. vbs をダブルクリックするなどして、エラーなどがでなければOKのハズ(regedit で確認できればよりよい) 上記はタイムゾーンが +9(日

Gmailから迷惑メールが届いたときの報告先

Gmail のアドレスから迷惑メールが届いたときの報告先 ※成りすましではなく Received へ google.com のメールサーバから送信されたものが対象です 下記のフォームから報告 Gmail のプログラム ポリシーや利用規約に違反したメッセージを送信している Gmail ユーザーについて報告を行う場合

Oracle Cloud Free Tier 申込時の SMSが届かない

Oracle Cloud Free Tier 申込時の SMSが届かない 携帯番号は、頭の0を除いて入力 +81 90-xxxx-xxxx 国際電話をかけるときに国番号の後は0を除くのと同じ

php tmpディレクトリの環境変数と取得関数

php.ini で指定する一時ファイル作成ディレクトリ関連の指定変数と取得関数 php.ini 環境変数 取得関数 用途 sys_temp_dir sys_get_temp_dir() 一時ファイル session.save_path session_save_path() セッションファイル upload_tmp_dir ini_get('upload_tmp_dir') アップロード時一時ファイル

Evernote for Windows 複数アカウント環境のアプリ内リンク挙動

イメージ
Evernote for Windows には複数アカウント(有料アカウントが少なくとも、ひとつ含まれている場合)が設定できるが、アカウントを複数設定した状態で、ショートカットなどからアプリ内リンクを開いた場合の挙動 最後にアクティブだったアカウント (タスクトレイで太字になってるアカウント) でリンクが検索される ため、該当のアカウントでなければ なメッセージが表示される もちろん、同期しても別のアカウントに存在するノートなので表示されない リンクにはユーザーIDが含まれているので、ユーザー切り替えくらいはやってほしいところ...

Ubuntu18.04 の xRDP で接続後に Authentication is required to create a color managed device

イメージ
Ubuntu18.04 デスクトップ環境(RDP接続)で接続後に 「Authentication is required to create a color managed device」 が表示される キャンセルして先に進むことも可能だが、真面目に認証をくり返してると切断される 試してダメだった作業 /etc/xdg/autostart/gnome-software-service.desktop へ追記 → 変化なし /etc/polkit-1/localauthority/50-local.d/allow-colord.pkla を作成 → 接続後すぐに切断される(認証を繰り返したのと同じ反応) 解決した作業 参考: https://c-nergy.be/blog/?p=12073 ファイル /etc/polkit-1/localauthority.conf.d/02-allow-colord.conf (新規作成)へ polkit.addRule(function(action, subject) {  if ((action.id == "org.freedesktop.color-manager.create-device" ||  action.id == "org.freedesktop.color-manager.create-profile" ||  action.id == "org.freedesktop.color-manager.delete-device" ||  action.id == "org.freedesktop.color-manager.delete-profile" ||  action.id == "org.freedesktop.color-manager.modify-device" ||  action.id == "org.freedesktop.color-manager.modify-profile") &&  subject.isInGroup("{users}")) {  return polki

Python + モデムを利用してPBXの留守番電話をオンオフ

PBXの留守電自動オンオフ設定が、あまりにしょぼいので、単独内線へつないだモデムから内線コマンドをダイヤルして、留守番電話をオンオフしてみた PBXが弄れないとちょっとハードル高め PBX側に留守番電話をオンオフするデータが入れてある PBXの単独収容(一般電話機をつなぐポート)へモデムを繋げられる Python でなければならない理由はほとんどないんだけど、cuコマンド+スクリプトでもできるかも モデムの認識などは コチラ とと同じ 下記では、内線531で留守電オン、530で留守電オフしてます import  time import  serial import  sys def   rusuSwitch ( state ):     modem = serial.Serial( "/dev/ttyACM0" ,  9600 ,  timeout = 3 )      try :         modem.write( b 'ATH1 \r ' )  # オフフック         time.sleep( 1.5 )          if  state:             modem.write( b 'ATD531 \r ' )  # 留守電ON          else :             modem.write( b 'ATD530 \r ' )  # 留守電OFF         time.sleep( 0.5 )         modem.write( b 'ATH0 \r ' )  # オンフック      finally :         modem.close() def   main ():      if   len (sys.argv) >=  2 :         rusuSwitch(sys.argv[ 1 ] ==  'on' )      else :          print ( 'ON # rusuden.py on \r ' )          print ( 'OFF# rusuden.py off \r ' ) i

cloudatcost v1→v3 IPアドレス変更(Centos7)

イメージ
Cloudatcost で v1 から v3 へ切り替えを行うと、データが新マシンへ転送されてIPアドレスが変更になり、SSH等が接続できなくなるので、 Webコンソールから ネットワークデバイスへ割り当てているIPアドレスやゲートウェイを変更しなければなりません (基本的に IPアドレスの再設定 と同じです) コンパネのWebコンソール からログイン ※パスワードに特定の記号などを使用している場合、入力可能かどうか要確認 Centos7 の場合、下記のように nmcli コマンドを利用して変更を行う デバイスとコネクションを確認 # nmcli d DEVICE  TYPE      STATE      CONNECTION ens33    ethernet  connected   System eth0 lo      loopback  unmanaged  --      新しいIPを設定 # nmcli c modify " System eth0 " ipv4.addresses  xxx.xxx.xxx . xxx/24 ここで コネクション名(System eth0)へデバイス名(ens33)を指定したりすると Error: unknown connection 'ens33' のようなエラーとなる 新しいGWを設定 # nmcli c modify " System eth0 " ipv4.gateway  xxx.xxx.xxx .1 DNSを設定 (必要であれば) # nmcli c modify " System eth0 " ipv4.dns 1.1.1.1 ネットワークを再起動して反映 # systemctl restart network 確認 (デバイスを指定) #nmcli d show  ens33 ※アプリケーションでリッスンアドレスなどへグローバルIPを設定しているところがあれば、それらも変更する

HP Pavilion 15-au100 のバッテリーが膨張してキーボードが盛り上がってきたので、バッテリー交換

イメージ
HP Pavilion 15-au100 のキーボード(左上の方)が盛り上がってきたので、キーボードとパネルがぶっ壊れる前にバッテリー交換 交換に使用したのは下記のバッテリー 膨らんだキーボードとパネル(写真では分かりにくい) 裏蓋の開け方は コチラ を参考にドライバ(ネジ10本)とオープナーみたいなのがあれば楽です ※背面中央のネジを外すと、DVDドライブが引き出せるので、裏蓋を分離する前に外しておきましょう もぅ、ムキムキのバッテリーは3箇所ネジ止め、ケーブルは上部のコネクタ一本 用意しておいたバッテリーと交換 → キーボードとパネルも元通り

Thrift.Transport の HTTPClientImpl が見つからない

Thrift 絡みの Delphi アプリケーションで Thriftを改めてダウンロードしたら Thrift.Transport. HTTPClientImpl (THTTPClientImpl) が見つからない Thrift.Transport.WinHTTP. WinHTTPClientImpl (TWinHTTPClientImpl) へ変更されたらしい(Windowsの場合)

公衆PHS終了スケジュールと構内PHS代替

PHS終了(公衆網)スケジュール 2019年07月末 公衆網 受付終了 2020年07月末 公衆網 音声サービス終了 → コロナで 2021年01月末へ延長  2022年11月末 旧スプリアス規格設備(構内PHS旧設備)終了 → 新規格機器は継続利用可 2023年03月末 公衆網 テレメタリングプラン終了 構内PHSは、PBXメーカーによる設備および端末の供給により継続されるが、部品調達が難しくなる可能性が高い 構内PHS代替と問題 ・SIPクライアント → バッテリーおよび省電力モード(Doze等)の問題 ・FMC → ランニングコスト、内外線連携機能に制限 ・sXGP(Band39) → バンド対応端末、sim発行

82bts.com からダウンロードした zipファイルが破損している→エラー部分を取り除く

イメージ
82bts.com からダウンロードした zipファイルが破損していたので、中身を覗いてみたらサイト側のエラーがファイルに入り込んでいたので削除 zipファイルをテキストエディタ(サクラエディタ)で開いて(バイナリエディタのほうがいいんだろうけど) PKより前にあるhtmlエラー部分を取り除く ファイル末尾もバイナリ部分が終わって、最初のhtmlタグ(<br />等)以降を取り除く 保存時に改行コードの混在はそのままにして保存(エディタによる)

Android 7 (Nougat)以降で、RINGER_MODE_VIBRATE(マナーモード)へ切り替えようとするとクラッシュ

久々に Google Play へ登録したアプリを更新しようとしたら、targetSdkVersion は 26 以上、2019/11/1以降は 28 以上じゃないとアップできねーとか表示されて、ターゲットをあげた途端に色々動作しなくなったり強制終了するようになったのメモ Android 7 (Nougat)以降で、RINGER_MODE_VIBRATE(マナーモード)へ切り替えようとすると値が AudioManager.RINGER_MODE_VIBRATE (値=1) の時のみエラーが発生 AudioManager AudioMan = (AudioManager) getSystemService(Context.AUDIO_SERVICE); AudioMan.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); // ←バイブレートはNG // AudioMan.setRingerMode(AudioManager.RINGER_MODE_SILENT); // ←サイレントはOK どうも、バイブレートへ切り替えるのに権限と確認が 必要になったらしい マニフェストへ < uses-permission android :name ="android.permission.ACCESS_NOTIFICATION_POLICY" /> を加えて モード変更の手前で、権限が得られていない場合に設定画面を表示させる記述を入れる // Android7 以降 マナーモードへの権限設定(初回は設定画面が開く) NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !notificationManager.isNotificationPolicyAccessGranted()) { Intent setupIntent = new Intent(android.prov

Android 8 (Oreo) 以降で、透過Activityがクラッシュ

久々に Google Play へ登録したアプリを更新しようとしたら、targetSdkVersion は 26 以上、2019/11/1以降は 28 以上じゃないとアップできねーとか表示されて、ターゲットをあげた途端に色々動作しなくなったり強制終了するようになったのメモ SdkVersionを上げたら、通知から読んでいた 透過Activityがクラッシュするようになった protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ←ここで既に落ちてる } どこから呼び出しても落ちるため、調べていたら 透過Activityで画面の向きを固定設定していると Oreoでクラッシュ するという貴重な情報にたどり着く <activity android:name=".HogeActivity" android:screenorientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN"> </action></intent-filter> </activity> のように     android:screenOrientation="portrait" や     android:screenOrientation="landscape" と共に     android:theme="@android:style/Theme.NoDisplay" や     android:theme="@android:style/Theme.Translucent.NoTitleBar"

Android 8 (Oreo) 以降の通知生成

久々に Google Play へ登録したアプリを更新しようとしたら、targetSdkVersion は 26 以上、2019/11/1以降は 28 以上じゃないとアップできねーとか表示されて、ターゲットをあげた途端に色々動作しなくなったり強制終了するようになったのメモ Oreo以降の通知登録、Notification.Builder へ setChannelId を追加と NotificationChannel の利用が必須へ Android 8 (Oreo) 以降の通知生成 (わかりにくいので括弧で包んでます) // 通知をタップで起動するActivity Intent intent = new Intent(this, HogeActivity.class); // タップで呼ばれるActivity intent.putExtra("sendData", true); // Activityへ渡すデータ等(複数追加可) PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); // 通知生成 NotificationManager nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); { Notification.Builder nbuilder = new Notification.Builder(this); { nbuilder.setPriority(Notification.PRIORITY_DEFAULT); nbuilder.setContentTitle("タイトル"); nbuilder.setContentText("メッセージ");

GOM Player 終了時のブラウザ広告を止める(対策されました→再対応)

イメージ
【追記】2019/12/23 GOM Player 2.3.48.5310 あたりでこの記事の回避方法が対策されてしまいましたので →  ログイン時にレジストリの値をvbscriptで書き換える方法  へ移動してください GOM Player が終了時に既定のブラウザで広告を表示するようになった 広告を否定するつもりはないが、あまりにマナーが悪すぎる レジストリを調べると広告を表示した時刻を Unixtime で記録して、この値が24時間以上(たぶん)古いと広告を出しているようなので、値を未来へ変更 ※そのうち対策される可能性があります レジストリの変更手順 ファイル名を指定して実行(Win+R)で regedit を入力、レジストリエディタを起動 \HKEY_CURRENT_USER\Software\GRETECH\GomPlayer を開く EndingBrowser の値を 10進数で 1735657200 (2025/1/1)等の未来に設定

Delphi の TSplitter がアレなので TSpTBXSplitter を使ってみる

イメージ
Delphi の Splitterコンポーネント、サイズ変更のため使用するなら問題ないのだが、対象先がサイズ 0 になるような使い方の場合、スプリッタの移動やフォームのリサイズをきっかけに突然使用不能になったりする 適当なタイミングで、対象先とスプリッタ位置を修正したりしてみるが、対象がサイズ 0 の場合、位置関係がハッキリせず、問題が解消したりしなかったりと昔からイライラの素だったりした(現在も変わらない様子) で、ちょうど入れていた SpTBX のスプリッタを使ってみたら、位置関係不明の状態があっさり解決 MinSizeプロパティの解釈が違うので、ソコだけ修正した MinSize プロパティ TSplitter は、この値未満になると対象のサイズが 0になる サイズを規制するには対象の Constraints で指定 TSpTBXSplitter では、この値未満にはスプリッタが移動しなくなる 対象の Constraints 規制値が実行時に確認すると 0 にされてる で、TSplitter の MinSize プロパティと同じ動きは procedure TDocForm.SpTBXSplitter1Moved(Sender: TObject); begin if (Panel1.Height < 30) then begin Panel1.Height := 0; end; end; procedure TDocForm.SpTBXSplitter1Moving(Sender: TObject; var NewSize: Integer; var Accept: Boolean); begin Accept := (NewSize > 25); end; のように、OnMoving の Acceptに余裕をもたせて、OnMoved で閾値以下は 0 にする

Delphi RTTI でプロパティ名や型を再帰で取得

イメージ
RTTIを用いて、プロパティの設定値をそのままファイルなどへ保存しようとしたが、項目がTFont等のクラスだったりすると中身を取得する必要があるので、再帰で取得 まぁ、できるにはできたんですが、Parent Child のような互いに参照する項目があると、循環が起きてしまうので、レベル(深さ)制限や除外リストなどが用途によって必要かもしれません また、値がnilの項目は型を特定できないため、配下を参照できません(取得時には問題ないかも) フォームへ Memo1(TMemo) と Button1(TButton)を貼り付けて、作成した ListProperties 関数で Button1 のプロパティを参照しています uses へ System.Rtti を追加してください procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Clear; ListProperties(Button1); end; procedure TForm1.ListProperties(Obj: TObject; Level: Integer = 0); var RttiContext: TRttiContext; RttiType: TRttiType; RttiProp: TRttiProperty; begin if (Obj = nil) then begin Exit; end; if (Level > 3) then begin // Exit; end; RttiContext := TRttiContext.Create; try RttiType := RttiContext.GetType(Obj.ClassInfo); for RttiProp in RttiType.GetProperties do begin Memo1.Lines.Add(StringOfChar(#9, Level) + RttiProp.Name + ': ' + RttiProp.Property

Delphi の RTTI で record の情報取得(2/2)

Delphi の RTTI(Delphi 2010以降) とジェネリックスを利用して record 型の情報取得 昨日のコード は、取得するだけで書き込む事を考えてなかったので、その辺りを変更 Create時の引数からポインタを保持して、record そのものを変更しに行く これで、record の型と値を放り込んだら、レジストリやIniFileやSQLへの書き込みや、読み込みが可能になるクラスが作れます 独自のクラスを保存したい場合、FieldType の TypeKind へ tkClass が入るので、 if (Value.AsObject is TMyClass) then のようにクラスを判定して処理したり、さらに再帰して中身を分離したりできそう ところで、ジェネリックスで与えられた型を使って、汎用ポインタからキャストって出来ないんですかね var D: T; P: ^T; begin D := P^; end; みたいなのは OK ですが var D: T; P: Pointer; begin P := @D; D := T(P); // NG D := (P as T); // NG D := <T>(P); // NG end; みたいなのは、NGで一方通行なんです 昨日 と似たコード(Value がプロパティに変更され、引数のカッコを変更)で、書き込みをしている procedure TForm1.Button1Click(Sender: TObject); var I: Integer; RecField: TRttiRecordField<TTestRecord>; TestRecord: TTestRecord; S, ValueStr: string; begin TestRecord.Key := 'Hello'; TestRecord.Value := 99; RecField := TRttiRecordField .Create(TestRecord); try for I := RecField.Count - 1 downto 0

Delphi の RTTI で record の情報取得(1/2)

Delphi 2010だったかで、機能追加された RTTI。 クラスなどのフィールド情報などを取得できる ( 2/2は こちら ) 喜んで試してみたんだけど、class だけで record の情報は取得できない様子(できるのかもしれんが) ただ、class メンバの record 型の情報は取れるので、ジェネリックスと絡めて record 型のメンバとデータを取得するクラスを作成してみた(後半のコード) 何がしたかったかというと、データ設定値などを record 型で作成して、レジストリやIniファイルへ保存するようなパターンで、フィールドが増えたときにいちいち保存や読込の所を修正しに行くのが面倒 TInifile を継承して、レコード型を渡すだけで、全て指定セクションに書き込んでちょ、みたいなのを最終的に利用できればよいと思う(SQLとのやりとりなんかにも) Form1 に Button1 と Memo1 を貼って、TTestRecord のメンバと値を列挙する (とりあえず String と Integer の例) TRttiRecordField の Create で、型と実際の値を渡してやれば、あとはメソッドを呼び出すだけです type TTestRecord = record Key: string; Value: Integer; end; procedure TForm1.Button1Click(Sender: TObject); var I: Integer; S: string; RecField: TRttiRecordField<TTestRecord>; TestRecord: TTestRecord; begin TestRecord.Key := 'Hello'; TestRecord.Value := 99; RecField := TRttiRecordField<TTestRecord>.Create(TestRecord); try for I := RecField.Count - 1 downto 0 do begin

「日本の祝日カレンダー」てサイトの祝日がけっこう間違っている件

イメージ
2020年 祝日 とかで 検索すると、上位に表示される「 日本の祝日カレンダー 」てサイトの祝日がけっこう間違っていたりする。 こういうサイトを上位に上げる Googleもどうかと思うよ 2019/09/28 現在の2020年祝日の間違っている箇所 まぁ、機械的にやってんだろうね

確認番号や予約番号から ANA の eチケットやスキップサービスを利用

イメージ
急な移動のため格安航空券を購入、メールで「確認番号」等が送られてきて、チケットは空港の自動チェックイン機で発券しろとの内容 → 事前に「eチケット」発行や会員情報に紐付けした手順 【2022/11/14 変更】Webサイトのデザインが変わっていたので画像を差し替え ※ANA マイレージクラブのWeb会員になってることが前提です (会員の方に頼んで eチケットを表示・印刷してもらうことは可能かも) ANA マイレージクラブへログインして、予約を開く 予約確認から「予約確認・購入・変更...」を開く 「他の予約を検索する」を開く 既に予約一覧に予約がある場合は、下の方にリンクがあります 必要項目を入力して検索すれば、予約詳細が表示される 予約詳細から「eチケット控」でQRコードの表示、「登場者情報」からマイレージ番号登録を行えば会員情報へ紐付けされてiCカードやFelica端末からのスキップサービスも利用可能となる(会員の予約一覧にも表示されるようになります) ここで他のマイレージ番号を入力すると、別の人の紐づけも可能かも

Windows10 1903 アップデートで Cortanaが暴走でスタートから検索不能 → レジストリとファイヤウォール設定

イメージ
Windows10 1903 アップデートで Cortanaが暴走+スタートメニューの検索からアプリが検索できなくなった bingSearchを停止してると Cortanaが暴走するので、有効に戻す。さらに検索されたくなければファイヤウォールでブロックしてちょ  な事が書いてあったので実行したらフツーに戻ったメモ レジストリの変更 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search の BingSearchEnabled を 1 (有効)へ変更 PCを再起動するか、タスクマネージャから Cortanaを強制終了して、スタートメニューの検索から検索ができるようになる ファイヤウォールの設定 (Cortanaをブロック) ファイヤウォールの詳細設定から、「送信の規則」にある Cortana(複数ある場合は全て) の接続をブロック

Delphi 最大化MDI子フォームを切り替えると呼び出される OnResizeイベント

Delphi の古いソースコードの修正中に気づいた(最新では変わっているかも) MDI子フォームを最大化した状態で、子フォームを切り替えると OnResizeイベントが2回呼び出される 最大化したMDI子フォームをAからBへ切り替えると フォームAが wsMaximized から wsNormal へ切り替わり OnResizeイベント発生 フォームBが wsNormal から wsMaximized へ切り替わり OnResizeイベント発生 と2回呼び出される つまり、背後に回ったフォームは、ノーマルサイズへ戻されているという事になる 今回、背後に回ったフォームのリサイズイベントは無視したいという条件があったので MDIに wsMaximized が存在するかをチェックして、1. のイベントをスキップさせるという方法で対応 procedure TMdiChildForm.FormResize(Sender: TObject); var I: Integer; MaxFormExists: Boolean; begin // MDI Form に MAXが存在するかどうかを確認 MaxFormExists := False; for I := MdiMainForm.MDIChildCount - 1 downto 0 do begin MaxFormExists := MaxFormExists or (MdiMainForm.MDIChildren[I].WindowState = wsMaximized); end; if (not MaxFormExists) or (WindowState = wsMaximized) then begin // resize func; end; end; 上記の場合、最大化を解除した時のリサイズイベントがアクティブな子フォーム以外発生しないので注意が必要となる(アクティブな子フォーム以外は、すでに最大化ではないため)

Evernote Developer で API Key 取得時に入力する Evernote Username とは

イメージ
久々に API Key を取得しようとして、Evernote Username へ何を入れるか迷ったのでメモ Evernote Username は、生成される Consumer Key になります なので、サンドボックスや通常環境の Evernote ユーザー名とは無関係です (私は Application Name に近い名前にしています) 完了時に送られてくる3つの情報 Consumer Key: ←これが Evernote Username へ入力した文字列 Consumer Secret:  Application Name: 

Evernote OAuth の Access Token 取得で 401

Evernote の OAuth にて Access Token 取得時にコード401でハマったのでメモ 基本的に Evernote の OAuth手順  どおりの key=value をポストするが oauth_token_secret の扱いについて 1. Generate a Temporary Token  のレスポンスで得られる oauth_token_secret  の値を保存しておく 上記のリクエスト時は、token_secret は未定義なので oauth_signature の生成時のキーは "consumer_secret&" 3. Retrieve Access Token のリクエスト時 1で保存しておいた oauth_token_secret  の値を用いて oauth_signature を生成するので、キーは、"consumer_secret&token_secret" である つまり、アクセストークンを生成するために保存が必要なレスポンス項目は 1. Generate a Temporary Token   === oauth_token, oauth_token_secret 2. Request User Authorization  === oauth_verifier となる

Visual Studio 2019 + Npgsql4.09 で配布が必要だったDLL

PostgreSQLへ接続が必要な事案があり、昔使用した Npgsql3.0x系から、現行の Npgsql4.09 へ変更したら、配布するDLLファイルの数が増えた Npgsql4.09 の Visual Studio 2019 への追加は、 こちら が参考になりました NuGet のパッケージマネージャコンソールから、 ここ で記載されている Install-Package コマンドを入力 (VSアップデート後にインストールすると、エラーなくインストールできた) んで、配布に必要だったDLLの一覧 (フツーにビルドすると実行ファイルの場所にコピーされます) Npgsql.dll System.Buffers.dll System.Memory.dll System.Numerics.Vectors.dll System.Runtime.CompilerServices.Unsafe.dll System.Threading.Tasks.Extensions.dll System.ValueTuple.dll

ソフトポーズ(自動ポーズ)のないガラホでソフトポーズを利用する方法

一定時間経過後にプッシュ信号を自動出力するソフトポーズ(,) 一部のガラホでは、電話帳登録時にメニューにポーズ(;)しか表示されず、登録ができない 現在のガラホの多くは、Androidなためソフトポーズ自体は標準で搭載しているらしく、 リンク やQRコードから取り込んだソフトポーズは動作する機種がある - 京セラ KYF34 で確認 KYF34 後継機種の KYF37, KYF39 には電話帳登録時にメニューからソフトポーズ(自動ポーズ)を選択可能

表計算でカレンダーの開始日を取得

イメージ
表計算でカレンダーの開始日を取得して、容易にカレンダーを作成 ExcelやGoogleスプレッドシートの場合 Weekday関数を利用して、第1日目の曜日を取得(日0~土6)して、差分を求めれば、カレンダー先頭の日付が確定 後は +1すれば一日加算されるのでカレンダーを埋めてやって、表示形式で日付だけを表示させる 例) B2にその月の初日のデータが有る場合  =B2-weekday(B2)+1  がカレンダーの先頭 Month関数でタイトルと同じ月かどうかを判断して、条件付き書式で背景色を変えることも可能

Intel ネットワークドライバのインストールで、アップグレードをサポートしていません

イメージ
オンボードもインテル製ネットワーク、PCIへ追加したネットワークカードもインテル製のマシンにて、オンボードのドライバをインストールさせて認識済み ここで、PCIへ追加したネットワークカードのドライバをインストールしようとすると インテル(R) ネットワーク・コネクション のInstaller 情報 インストールされているインテル(R) ネットワーク・コネクションはアップグレードをサポートしていません。このバージョンをインストールする前に、現在インストールされているバージョンをアンインストールしてください。 のメッセージが出て、インストールできない 先に入れたオンボード用のドライバを見つけて、アップグレードできないぜ、と言っているらしい 上記で OK を押して、インストールプログラムを終了させてしまうと、Tempディレクトリへ展開されたドライバが消されてしまうので、 上記ウィンドウを閉じない で (閉じたら、もう一度起動して) Explorer でアドレスに %temp% と入力して、Tempディレクトリを開いて、ドライバの展開されたディレクトリを探す(今回は %temp%\1\RarSFX0\配下にあり) デバイスマネージャーから、目的のネットワークカードのドライバ更新で、上のドライバが入ったディレクトリを指定してインストールすればよい (インストール完了後、インテルのプログラムでOKを押せば、Temp内の一時ファイルは消されます)

Delphi で String を HMAC-SHA1

Delphi で String を HMAC-SHA1 + Base64 uses へ IdCoderMIME, IdHMACSHA1 を追加して function HMAC_SHA1_Str(S, Key: string): string; var HmacSha: TIdHMACSHA1; Hash: TidBytes; Base64: TIdEncoderMIME; begin HmacSha := TIdHMACSHA1.Create; Base64 := TIdEncoderMIME.Create; try HmacSha.Key := TIdBytes(TEncoding.UTF8.GetBytes(Key)); Hash := HmacSha.HashValue(TIdBytes(TEncoding.UTF8.GetBytes(S))); Result := Base64.EncodeBytes(Hash); finally Base64.Free; HmacSha.Free; end; end;

Tasker 5.8 で HTTP Request の警告が通知される

イメージ
Tasker 5.8 で HTTP(HTTPS) Get, Post, Head アクションを利用すると、警告の通知が表示される HTTP Get, Post, Head アクションは、非推奨(廃止予定)になったので「HTTP Request」アクションを利用してください(HTTP Auth アクションも見てね) との事 ひとまずは、STOP REMINDING で警告は停止でき、非推奨の HTTP(HTTPS) Get, Post, Head アクションも実行可能です

phpでPEARを使わずに受信メールをデコード

php でメール内容を取得しようと思うと PEAR利用が一般的だが、ヘッダのみをフィルタにかけたり、テキストメールだけを処理したい場合の簡単デコード マルチパートには対応してません エンコードは、ISO-2022-JP(SJIS)とUTF-8メールのみ(必要なら追記して) <?php // データ取得 $data = file_get_contents('example.eml'); // ファイルから // $data = file_get_contents("php://stdin"); // 標準入力から // ヘッダと本文を分離(空行で) if( ($i = strpos($data, "\n\n")) !== false ){ $header = substr($data, 0, $i); $body = substr($data, $i + 2); }else{ $header = $data; $body = ''; } // ヘッダデコード if( ($headerArray = iconv_mime_decode_headers($header)) !== false ){ print_r($headerArray); } // 本文デコード if( array_key_exists('Content-Type', $headerArray) && (strpos(strtolower($headerArray['Content-Type']), 'iso-2022-jp') !== false) ){ $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); $body = mb_convert_encoding($body, 'UTF-8', 'SJIS'); } print_r($body); ?>

ドコモ ファミリー割引のグループ回線を確認

イメージ
新規にファミ割グループを追加(子回線)した後、どこかで確認できないかと探し回ったメモ マイドコモから 主回線のマイドコモ料金確認から前月末時点での対象回線は確認 可能 設定後、料金確定までの対象回線は確認 不可能 → 151 で確認しかなさそう 前月までの明細のお知らせ項目に記載されている

PydioSync でログイン認証に失敗する

イメージ
PydioSync で Authentication failed: please verify your login and password のメッセージが出てログイン認証に失敗してしまう pydio 設置ディレクトリ(サーバ側)にある、 .htaccess を開いて SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 の行のコメントアウトを外して保存 #Following lines seem to be necessary if PHP is working #with apache as CGI or FCGI. Just remove the # #See http://doc.tiki.org/WebDAV#Note_about_Apache_with_PHP_as_fcgi_or_cgi #RewriteCond %{HTTP:Authorization} ^(.*) #RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] #Following lines may be necessary for a PHP-FPM setup # to make sure that authorization is transmitted. # Just remove the # at the beginning of the line SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 上記変更でログインできるようになったものの、サーバ側の変更がローカルに反映されないんだけど... ローカル→サーバはOK

古いphpバージョンに固定した、さくらレンタルサーバへ pydio8 + php7.3 で共存

古いphpバージョンに固定された、さくらレンタルサーバで pydio8 をインストールして php7.3 で動作させた時のメモ フツーに インストール するのはこちら pydio8 を ダウンロード (php7.2の修正を含む版)および設置 ここからは /home/USER/www/pydio8 をインストールディレクトリとして話を進めます インストールディレクトリへ session 保存ディレクトリを作成 ssh 等から $ mkdir _sessions とか .user.ini を作成 post_max_size = 1024M upload_max_filesize = 1024M session.save_path="/home/USER/www/pydio8/_sessions" ←上で作成したディレクトリ php.cgi を作成 (利用したい php バージョンを指定) #!/bin/sh exec /usr/local/php/ 7.3 /bin/php-cgi .htaccess へ下記を 追記 Action myphp-script /pydio8/php.cgi AddHandler myphp-script .php .html ※ここで指定する php.cgi のパスはフルパスではなく Webで開くURLのパス部分になります 言語指定(日本語環境で利用する場合) /home/USER/www/pydio8/conf/bootstrap_conf.php に define("AJXP_LOCALE", "ja_JP.UTF-8"); を記述 //define("AJXP_LOCALE", ""); の下辺りへ DBの作成 さくらのコントロールパネルから、新規作成(host, user, pass をメモっておく) index ファイル設定変更 さくらのコントロールパネル → ファイルマネージャーから /pydio8/ の アクセス設定で index.php を開くようにする ここまでで下準備完了 Web から /py

samba で別ユーザーのホームディレクトリへアクセス

smb で別ユーザーのホームディレクトリへアクセス userA のホームディレクトリへ、userB や userC でも smbでアクセスする例 /etc/samba/smb.conf [ FolderName ]         path = /home/ userA         browsable = No         read only = No         writable = Yes         valid users = userB , userC         force user = userA

RTV700 で ISDNの発信者番号を設定

ヤマハ RTV700 で ISDN の発信者番号を設定 isdn local address コマンドを使うが、この時のインターフェイス名は nt-bri1 等 isdn local address nt-bri1 03xxxxxxxx

Adhell で利用可能な Knox キーが発行できなくなった

イメージ
2019年4月頃から、Adhell で利用可能なキーが発行できない状態 キーがまだ有効 な方は、Adhell から KLMS Agent (com.samsung.klmsagent) を無効にしておくことで、キーの有効期限が切れた後も、初期化等を行わなければ引き続き Adhell が利用可能 有効期限が切れた状態で Adhell を起動してしまうと Adhellの機能が無効となってしまいます 同様の機能がある Package Disabler Pro には一覧に上記が表示されませんので、KLMS Agent を無効化できません adb から com.samsung.klmsagent の無効化が成功するかどうかは不明です

Python の引数デフォルト値に計算式入れて失敗

引数に時間を入れなければ現在の時間、と思って下記のような関数を書いて失敗 def addFile ( s , nowTime = datetime.datetime.now()): この場合、最初の関数生成時にデフォルト値が生成されるそうで、ずっと最初に呼び出した値(時刻)が使われ続けた None等で対応するそうです def addFile ( s , nowTime = None ): if nowTime is None : nowTime = datetime.datetime.now()

samba で認証なしのディレクトリを作成

sambaで認証なしのディレクトリ作成メモ [global]セクションで security = user となっているとユーザー認証ありき、しかし認証かけてるディレクトリはいじりたくないので、 map to guest = bad user を追加して、登録されてないユーザは guest扱いとする 今回対象の [test] セクションで guest ok = Yes として、書き込み可能等それ以外の項目を設定する(下の例では、書き込みは禁止) /etc/samba/smb.conf [global]         workgroup = WORKGROUP         netbios name = TestSrv         server string = Samba server version %v         security = user         passdb backend = tdbsam         printing = cups         printcap name = cups         load printers = yes         cups options = raw         map to guest = bad user #       map untrusted to domain = Yes [test]         path = /opt/test         browsable = Yes         read only = Yes         writable = No         guest ok = Yes

Visual Studio の MFC アプリをビルドで afxwin.h が見つかりません、や ビルド ツールが見つかりません

イメージ
Visual Studio 2019 で MFC アプリをビルドで afxwin.h が見つかりません Visual Studio Installer から Visual Studio 2019 に入り、C++によるデスクトップ... 「v142 ビルドツール用 MFCほにゃほにゃ」にチェックを入れてインストールする(+1GB程度) Visual Studio 2022 で、 Visual Studio 2010 (v100) のビルド ツールが見つかりません Visual Studio 2019 (v142) の~ とかは、   v143 ビルドツール用 C++ MFC(x86... を追加して プロジェクトのプラットフォームツールセットを v143へ変更

Reply-To ヘッダ書き換えによるメール詐欺の仕組み

イメージ
Reply-To ヘッダを偽ドメインへ書き換えたメールによる詐欺の仕組み 以下の手法で、メール内容を書き換えられ請求と共に振込先が変わったということで詐欺にあったという報告 互いに相手に返信していたと思われたが、似たドメインの犯人へ返信し、犯人はそれを書き換えて相手へ送っていた 最初の偽装がメール漏れによるものか、全くの新規から始まったものかは調査中

Explorer でフォルダを開いてファイルを選択(既に開かれている場合は再利用) - Delphi

Windows Explorer でフォルダを開いてファイルを選択、これは通常の explorer.exe /select, オプションで実現可能ですが、既にフォルダが開かれている場合、そっちを再利用したい 参考文献 uses 節に FileCtrl, ShlObj, ActiveX が無ければ追加 function OpenFolderAndSelectFile(FileName: string): boolean; var DidInitCOM: boolean; IIDL: PItemIDList; begin Result := False; DidInitCOM := False; try IIDL := ILCreateFromPath(PChar(FileName)); if (IIDL <> nil) then try Result := (SHOpenFolderAndSelectItems(IIDL, 0, Nil, 0) = S_OK); finally ILFree(IIDL); end; finally if DidInitCOM then CoUninitialize; end; end;

VoIP GW - ODトランク接続の結線とメーカー別(NEC, 日立, ナカヨ)端子名称

イメージ
専用線等で使われるODトランクの結線と共にメーカー(NEC, 日立, ナカヨ)ごとに名称がバラバラなのでまとめてみた VoIP GWへRJ45(A結線)接続した場合のPBX側端子名称 PBX側 VoIP GW側 日立 ナカヨ NEC RJ45 信号 NEC ナカヨ 日立 SSB B SB 1(緑白) → SG G SRB SSA SS M 2(緑) → E SR SRA TB SL2 4WS(ring) 3(橙白) → 4WR(ring) RL2 RB RB RL2 4WR(ring) 4(青) ← 4WS(ring) SL2 TB RA RL1 4WR(tip) 5(青白) ← 4WS(tip) SL1 TA TA SL1 4WS(tip) 6(橙) → 4WS(tip) RL1 RA SRA SR E 7(茶白) ← M SS SSA SRB G SG 8(茶色) ← SB B SSB ※VoIP GW 側は、日立であれば NTシリーズ, NECであれば IP-Masterシリーズ等です ※アース起動の場合、PBXによってSSB-SRB間にジャンパーが必要です 一般的にPBX側はクイックコネクタですが、両端が RJ45の場合、SS ⇔ SR, R ⇔ S の上り下りが逆になるように接続