それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

パスワードなしでリモートデスクトップ

「自動ログイン」「パスワードなし」のアカウントでWindowsのリモートデスクトップでつなぐとこうなる

アカウントの制限によってログインできません。

(c9642891bf68fba54cac98d2fe76edc9)

そりゃそうなんだけど

パスワードを設定してないアカウントにパスワードを設定すると嫌がる人もいるのです。

対策

ローカルセキュリティポリシーを変更すればいける。

管理ツールで、ローカルセキュリティポリシーを開けて、セキュリティオプション

をとたどり

アカウント・ローカルアカウントの空のパスワードの使用をコンソールログオンのみに制限する

を無効にする。

セカンドベストな対策

パスワードを設定して、自動ログインも設定する

control userpasswords2
http://d.hatena.ne.jp/takuya_1st/20120118/1326870802


TeamViewerでイイ気がしてきた。

2013-06-03

タイプミス修正

iPhoneにSSHする

iphoneSSHを有効にした。

nmap でiPhoneの状態を見る。

(b5242c6213ee1b57dedb5e22e720b178)

ちゃんと ssh ポートがある。

鍵認証を使えるようにする。

公開鍵をコピーして秘密鍵で通れるようにする。
鍵認証を有効にする。
(e53c663972c1a8311cbbeadbcfcf88c8)

もともと鍵認証は有効なのでid_rsa.pubを持っていけば有効になる

/etc/ssh/sshd_config で設定

パスワード認証を辞める。
(4c598f5ab1712242e40d0376dc3cc85c)

Wifi経由は パスワード認証ONにして、それ以外は公開鍵にしておく。

(6bf6de4b2c21eb2f63e08af3602b9643)

もしもの時に備えて、ローカルIPからはパスワードを認証を出来るようにセイフティーネットを掛けておく。

感想

そのままだとGlobalから総当たり攻撃がアクセスし放題なので、セキュリティをしておくことも推奨されるが。
でも最近はプロバイダがローカルIP振るみたいなのでそこまで神経質になることもない気がする。

またWifi環境でしか使わないiphoneも多いので。




公衆Wifiにつなぐこともないのでこれでいいや

MacOSXに最初からついてるカラーピッカー

最近までPhotoShopなしで、プレビューだけで頑張ってました。OS Xそのままでもちょっとした画像処理は出来るんですよ。NeXTの伝統?

カラーピッカー

Mac OS Xにはカラーピッカーが初めから内蔵されている。

(digital-color-meter)

カラーピッカーを危うくApp Storeで買うところだった・・・

spotLight から起動が手っ取り早い

(spotlight)

色の取得

(起動ウィンドウ)
色の取得は次のとおりです。

  1. digital Color Picker を起動
  2. 取得したいところにマウスカーソルを合せる
  3. マウスカーソルがずれないように[command + L ] で固定する
  4. 色の値をクリップボードにコピーする。[command + shift + C]

微妙に重要なのが位置の固定

(位置を固定)

位置の固定はマウスから出来ないので、キーボードショートカットでやります。

カラー値はテキストか、バイナリ

(カラー値を取得)


バイナリで取れるのも便利。基本はCSS用に、WEBの256色を16進数表示で撮ることが多いです。

WindowsのDDイメージをマウントする。

dd_rescue/dd したディスクイメージを linux でマウントするには、いったんLoopBackに接続する。
これは、ディスク内にディスクイメージが丸々あるので、こういう必要がある。これがパーティション単位のファイルなら別にすぐにマウントできる。


ddしたHDDをそのままマウント出来ない

dd if=/dev/sda of=~/my_img

のようなddイメージはmount 出来ない。

loop デバイスを経由するとうまくいく。

sudo losetup /dev/loop0 ibm-thinkpads60.img
sudo mount -t ntfs -o loop,offset=`expr 63 \* 512` /dev/loop0 /mnt

windowsの場合先頭 63 * 512 はほとんど決め打ち

切断は -d (2014-01-26追記)

loop デバイスを切断するには -d オプションを使う

sudo losetup -d /dev/loop0

loop デバイスとは

 ファイルをファイルにマウントする  ファイル→ファイル→ファイル

 とファイルシステムファイルシステムにマウントするのでポインタの参照先かループしているからそう名付けられている。

これを応用してfdisk やパーティション分割の実験練習

実ハードウェアのディスクを使わなくても ループデバイスを使えば、 fdisk の動きや、パーティションの分割の練習。
そしてフォーマットをやって見ることが出来る。

このコマンドって、合ってたっけ?なんてときに実際にコマンドを使えるのがいい。
特に容量計算で活躍したり。起動ディスク作ったり

何度でもやり直せる、そんな環境はとっても大事です。練習練習

バックアップのスクリプトのテストも出来るね

参考 man losetup

man losetup
losetup は loop デバイスを通常のファイルやブロックデバイスと接続/切断したり、 loop デバイスへの問い合わせを行うために用いられる。

Rubyの終了処理で何かする

rubyのスクリプトの終了時に何か処理をしたい。

  • エラーで落ちた時に、途中経過を保存しておきたい。
  • 無事終了したら、メールを送る
  • スレッドが死んだらどうするか

本来なら、ちゃんと例外処理や、ループ抜ける処理を書くべきなんです。
本来なら、ちゃんと例外処理や、ループ抜ける処理を書くべきなんです。

でも、無精したい時もあるし、すべての例外を受け止めるのもなんだかな。

終了処理を書く

とりあえず基本形

#!/usr/bin/env ruby
begin
     loop{ sleep 10*10*10}
     
rescue SignalException => e
       puts e.message
       puts e.backtrace
end
実行して止める
takuya@air:~/Desktop$ ruby sinaltest.rb
^C
sinaltest.rb:4:in `sleep'
sinaltest.rb:4
sinaltest.rb:4:in `loop'
sinaltest.rb:4

スレッドの終了処理

子スレッドも終了時になんかかせたい。

#!/usr/bin/env ruby

class Bar < Thread
     def Bar.callback
          proc {
               puts "bar"
          }
     end

     def initialize
          ObjectSpace.define_finalizer(self,Bar.callback)
          super
     end

end

#メイン処理
begin
     t =[]
     t << Bar.new{ Thread.pass; loop{puts 1; sleep 1;Thread.pass}  }
     t << Thread.new{ Thread.pass; loop{puts 2; sleep 1;Thread.pass}  }
     loop{ puts 0; sleep 1}
rescue SignalException => e
       puts e.message
       puts e.backtrace
       t.each{|a| a.kill}
end
実行
takuya@air:~/Desktop$ ruby sinaltest.rb
1
0
2
0
1
2
^C#&#8656;止める
sinaltest.rb:23:in `sleep’ #&#8656;rescueが実行される
sinaltest.rb:23
sinaltest.rb:23:in `loop'
sinaltest.rb:23
bar   # thread.killにより、object.finalizerが実行される。

スレッドの終了処理:パターン2(一番シンプル?)

スレッド終了処理はもっとシンプルにできそう

#!/usr/bin/env ruby

class Thread
     def Thread.callback
          proc {
               puts "bar"
          }
     end
end


#メイン
begin
     t =[]
     t << Thread.new{ Thread.pass; loop{puts 1; sleep 1;Thread.pass}  }
     ObjectSpace.define_finalizer(t[0],Thread.callback)
     loop{ puts 0; sleep 1}
rescue SignalException => e
       puts e.message
       puts e.backtrace
       t.each{|a| a.kill}
end

クラスメソッドで共有されてProc使うのがなんか。。。

パターン3(特異クラスを使う)

#!/usr/bin/env ruby

class Thread
     def Thread.callback
          proc {
               puts "bar"
          }
     end
end

#main

begin
     t =[]
     t << Thread.new{ Thread.pass; loop{puts 1; sleep 1;Thread.pass}  }
     class << t[0]
          ObjectSpace.define_finalizer(self,Thread.callback)
     end

     loop{ puts 0; sleep 1}
rescue SignalException => e
       puts e.message
       puts e.backtrace
       t.each{|a| a.kill}
end

動かない例

#!/usr/bin/env ruby

class Thread
     def Thread.callback
          proc {
               puts "bar"
          }
     end
     ObjectSpace.define_finalizer(self,Thread.callback)
end

begin
     t =[]
     t << Thread.new{ Thread.pass; loop{puts 1; sleep 1;Thread.pass}  }

     loop{ puts 0; sleep 1}
rescue SignalException => e
       puts e.message
       puts e.backtrace
       t.each{|a| a.kill}
end


selfが参照できないので、動かない。

スレッドが落ちたときに処理したいと思ったけどなかなか面倒なのでした

Rubyのファイルタイプ判別「shared-mime-info」を使ってみた

Rubyでファイルタイプの判別をするには

が選択肢としてあげられる

MIME::Typesを使ってみた。

require 'mime/types'
MIME::Types.type_for("test.rb").last.to_s
http://d.hatena.ne.jp/takuya_1st/20120918/1347993257

こっちは拡張子ベース。拡張子で判断するし、拡張子の候補を追加できる。便利

shared-mime-infoも使ってみた。

>> require 'shared-mime-info’
=> true
>> a = MIME.check "3033059.js”
=> #<MIME::Type:0x109485e68 @type="text/plain", @glob_patterns=[]>
>> a.to_s
=> "text/plain"
>> 


これは、ちょっと話になんねぇかも。

MySQLの文字コード

mysqlにターミナルからつないだ場合、クライアントの文字コードがうまく行かなくて化けることがある。基本的にUTF-8だと思っておいて

SQLシェルから

set names utf-8;

と打てば大抵うまく行く

使用可能な文字コード

show character set;

で見られる。

テーブルの文字コードを確認するには

mysql> show create table Recorder_Tbl;
| Recorder_programTbl | CREATE TABLE `Recorder_programTbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `channel_disc` varchar(128) NOT NULL DEFAULT 'none',
  `channel_id` int(11) NOT NULL DEFAULT '0',
  `type` varchar(8) NOT NULL DEFAULT 'GR',
  `channel` varchar(10) NOT NULL DEFAULT '0',
  `title` varchar(512) NOT NULL DEFAULT 'none',
  `description` varchar(512) NOT NULL DEFAULT 'none',
  `category_id` int(11) NOT NULL DEFAULT '0',
  `starttime` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
  `endtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
  `program_disc` varchar(128) NOT NULL DEFAULT 'none',
  `autorec` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `program_ch_idx` (`channel_disc`),
  KEY `program_st_idx` (`starttime`)
) ENGINE=MyISAM AUTO_INCREMENT=305647 DEFAULT CHARSET=utf8 |
+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


などで見ればいいんじゃないかな。

ヤヤコシイのは次の場合

UTF8のテーブルにCP932突っ込んでる
ターミナルがCmd.exeでCP932前提。


SQLプロンプトで、こういう場合は。ちゃんと意識してシェルをかます。

#!/usr/bin/env
Open3.open{|in,out,err|
}

などを使って、文字コードを変換するパイプを作り、STDOUT/STDINをラップする。
プログラム側からはデコードの嵐。