« 2013年2月 | トップページ | 2013年5月 »

2013年3月の4件の記事

2013-03-23

スマホのfacebookアプリが変な時の対処

フェイスブックアプリが変で「接続が切れました。タップして再度実行」とか、アクセスができなくなっちゃったりした時には、どうも、しばらくの間セキュア接続をオフにしておくといいような気がする。

といっても、接続できてないから変更ができない訳で、3GとかLTEとか、Wi-Fiじゃない接続でアクセスするとか、パソコンからとかスマホのブラウザからとか、何でもいいからとにかく根性で自分のフェイスブックアカウントにログインする。

でアカウント設定/セキュリティでセキュア接続をオフにする。

これだけでは、セキュア接続の設定変更は反映されてないのだな。
一回ログアウトしてからログインしなおすと、非セキュア接続?httpでアクセスできると思う。

何回かのアプリのアップデートをしてる内に、「そろそろ大丈夫かな?」的にセキュア接続に切り替えて、ログアウトして再度ログインして、ちょっと使ってみてる内に、意外と何でもなく普通に使えたりする。

ダメ元で一回やってみるといいかも知れない。

過去の悪戦苦闘の記録

| | コメント (0) | トラックバック (0)

アバスト!モバイルセキュリティでマルウェアとして検知される

Google Reader終了予定って事で、feedlyに乗り換えてみた訳なのですが、Android版のfeedlyを起動しようとした所、アバストがマルウェアを検知したと表示します。

ちょっと焦ったのですが、feedlyをインストールした時は何も警告が出なくて、アップデートとかしてないのに、どうして急に?と思い、検索しても全く該当するような記事が書かれたサイトを見付けることができません。

アバストの異常か?取り敢えず、端末の再起動後にAndroidの設定のアプリケーションでアバストのデータを削除しました。

アバストを起動するとインストール直後のように、アバストのアカウントを聞いてきたり色々します。

で、取り敢えずスキャンしてみると今度はfeedlyについて何も言って来ません。

その後、二日経ちましたが、feedlyをマルウェアとして検知する事はなくなりました。

androidで変な事が起きた時には、取り敢えずキャッシュを消して、それでもダメならデータを消して、それでもダメならアンインストールして再インストールします。それでもダメなら諦めます。アップデートでどうにかなるかもしんないし…。

| | コメント (0) | トラックバック (0)

2013-03-13

ポインタやオブジェクトを元の状態に戻す

文字列を走査したりするのに、char *p, *qとかして、二つのポインタを用意したりはよくする方法。

そうすれば、qが指すアドレスを変更してもpは文字列の先頭を指したまま。

配列をポインタで操作する時に、一時的にポインタの指すアドレスを操作してから、再度先頭のアドレスに戻すという事はよくある。

関数にポインタを渡して、関数内で処理すると、アドレスのコピーが渡されるので、明示的に元に戻す必要はない。

void print (char* p)
{
std::cout << p << std::endl;
}
void func1 (char* p, int offset)
{
p += offset;
print ( p ); // “lo, world.”
}
void func2 (char** p, int offset)
{
*p += offset;
print ( *p ); // “, world.”
}
int main ()
{
char* str = “hello, world.”;
char *p, *q;
p = q = str;

++q;
print ( p );  // “hello, world.”
print ( q );  // “ello, world.”

func1 (p, 3);  // “lo, world.”
print ( p );  // “hello, world.”

func2 (&p, 5);  // “, world.”
print ( p );  // “, world.”

return 0;
}

関数で処理したアドレスを元のポインタにも反映させたい場合にはポインタのポインタを渡せば可能。

オブジェクトの場合。
もしテーブルが閉じていたら開く。
もしテーブルが開いていたらそのままにする。
処理が済んだら元の状態に戻す。
というような事もよくありますが、結構戻すのを忘れちゃったりするので、それ用のオブジェクトを作成してコンストラクタで保存した値をデストラクタで元に戻す。

class recall
{
private:
bool active;
TABLE* table;
public:
recall (TABLE* tbl)
: table (tbl)
{
if (tbl == NULL) return;
active = tbl->is_active ();
}

virtual ~recall ()
{
if (table == NULL) return;
table->set_active (active);
}
};

このrecallオブジェクトをTABLEオブジェクトの変更前に作成しておけば、スコープから抜ける時にデストラクタが実行されてactiveをもとに戻してくれる。

void update (TABLE* tbl)
{
recall active_recall (tbl);
tbl->set_active (true);
… 何かの処理 …
}
void main ()
{
TABLE* table = new TABLE ();
table->set_active (false);
update (tbl);
delete table;
}

と、これで、update関数から抜ける時にスコープから外れるのでactive_recallオブジェクトが破棄され、デストラクタが実行されるので、activeが再びfalseに設定される。

VCLには今参照しているポインタを破棄してリコールを無効にするForget、今参照しているポインタを返すReference、 現在の状態を保存するStoreという関数を持ったTRecallが存在し、派生クラスとしてはTFontRecall、TBrushRecall、TPenRecallなどが用意されている。
動的に書体を変更したいようなOnDrawCellのイベントハンドラなんかでスマートポインタと一緒に使うと安心。
普通にnewしてtry&__finallyでdeleteしてもいいんですけど、deleteを忘れないなら__finallyで元に戻せばいい事なので、やっぱりスマートポインタを使った方が効果が大きいような気がしますし、一貫してる気がします。

| | コメント (0) | トラックバック (0)

2013-03-11

TApplication::MainFormOnTaskBarはInitializeの直後にないとダメっぽい

Application->Initialize();
Application->MainFormOnTaskBar = true;

間でスプラッシュウィンドウへのメッセージとかを入れてみようと変なことをしたりすると、Win7(32bit)ではタスクバーにアイコンが二つ出てきて、片方は空のウィンドウみたいに変になった。

これは必ず同じ挙動になるかはわからないが、Initializeの直後にMainFormOnTaskBar=true;を持ってきたら元に戻ったので、これが原因ではないかと。

| | コメント (0) | トラックバック (0)

« 2013年2月 | トップページ | 2013年5月 »