ライフログ

全ての記事を時系列でまとめています。

別シートからIMPORTRANGEできない時の対処法

googleスプレッドシートIMPORTRANGE

Googleスプレッドシートのファイルをまたいだ引用をしたい時に、IMPORTRANGEが用意されています。

引用元のファイルに複数のシートが用意されている時に、トップのシートからしか引用できなくハマりました。

 

解決策は

引用元

https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit#gid=xxxxxxxxxxxxxx

がトップのシートのURLの場合、

引用先のシートのセルへ=importrange(https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit#gid=xxxxxxxxxxxxxx, “a:z”)

このように記載すれば、このシートが反映されます。

(”a:z”の部分は、引用元のA列からZ列の情報を取ってくるという意味。)

 

しかし、トップ以外の別シートを引用する場合は、

別シートのURLを挿入してもトップのシートがなぜか反映されてしまいます。

*Googleスプレッドシートは、同じファイルでもシートを変更するとURLが変わるため、下記のようにやってしまいがち。

例えば、

引用先

=importrange(“https://docs.google.com/spreadsheets/d/別シートのURL”, “a:z”)*そのまま引用したいシートのURLを挿入する場合

=importrange(“https://docs.google.com/spreadsheets/d/別シートのURL”, “別シート名!a:z”)*シート名を引用したいシートに変更し、範囲指定にそのシートのシート名を挿入する場合

上記の2つはうまくできない例です。

 

解決策は

引用先=importrange(ここはトップのシートのURLのまま, 引用したいシート名!a:z”)

このように、URLはトップのシートのまま、シート名!を該当箇所に追加すればうまくいきます。

*引用したいシート名!は、URLの最後の「edit#gid=xxxxxxxxxxxxxx」部分ではなく、そのままシートの名前をコピペして「!」をつけます。

 

これでうまく、IMPORTRANGEを使用できると思います。

 

 

LINEで送る
[`evernote` not found]
LinkedIn にシェア

現在、ファイルを開くことができません。(GAPGoogle Apps Script)

現在、ファイルを開くことができません。

現在、ファイルを開くことができません。

GoogleドキュメントからScript(Google Apps Script)を開くと突然この画面が開きました。

ファイルオーナーアカウントで開けば大丈夫だろうと思ってアカウントを変えてみても、使用したいアカウントでファイルをコピーしてオーナーを変えてみても解決しない。

 

原因は、

「複数のGoogleアカウントでログイン中の場合、デフォルトアカウントではないアカウントでGASにアクセスしているため。」です。

 

解決策は、

GAS デフォルトアカウントとは

・Googleにログインしているアカウントのうち、上記の赤枠のような(デフォルト)と表示のあるアカウントに設定を切り替える。

です。

複数アカウントでログインしている場合は、デフォルトアカウント一つだけがScriptを作成できるというのが仕様のようです。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

WordPressで勝手にリダイレクトするScriptコードに感染。

WordPress リダイレクト

追記2018/09/27

前回記事を書いた後も色々調べてみると、取りきれていないScriptコードがあったりとわかって来ました。前回の記事を残しつつも、なるべくわかりやすく再編集します。

—————-

もう、最悪でした。勝手に海外のサイトに飛ばされる症状が出るので、同じサーバで管理している他のサイトも調べてみたら案の定やられてました。症状としては、障害が出ているサイトのリンクに行くと、他のサイトにリダイレクトされ、3つか4つのリダイレクトが連続した後に広告のあるサイトにたどり着きます。

不思議なことに、感染しているファイルが違ったり、症状が一定ではないのもあり、探すのに苦労しました。ダッシュボードから確認できる異常は下記の通りです。

・投稿ページの投稿の最後にScriptコードが挿入されている。
・固定ページの最後にScriptコードが挿入されている。
・メディアの説明などのどこかにScriptコードが挿入されている。

投稿、固定ページはこんな感じのコードが最後に挿入される。

これで、「cdn.examhome.net」と言うサイトにリダイレクトされることになってしまう。

メディアの「説明」部分は見つけにくいです。こんな感じ。↓

問題はこれだけではなかったので、Search Regexによる投稿ページなどの文字列の消去だけでは対応できません。

サーバ内の<head>〜</head>の最初と最後に下記のコードが挿入されます。

*対応とは関係ないですが、これはユニコードをデコードすると文字列になります。

まず、やるべきことは、データベースサーバ内のWordPressファイルに問題と解決を分けて考えることです。

データベース内の対応について

 

1、レンタルサーバのPHPのところからphpMyAdminにアクセスし、該当のデータベースを選択します。
2、wp_postsを選ぶとデータベースにどんな情報が入っているのかを確認できます。
3、下記の画像のように特定のリンクに飛ぶようなScriptの文字列が確認できます。

Wordpress 急にリダイレクト

5、これを全てこの画面から消すのは現実的ではないので、wp_postsだけをダウンロードして、Atomなどテキストエディタで全て検索して一気に消します。*新しいphpMyAdminの場合はSQL上で消去することができますが、バックアップの意味もありダウンロードファイルから修復します。

やり方は、wp_postsをダウンロードしたら、複製して感染ファイルと改善ファイルの2つに分けます。

Atomの場合は、wp_postsを下記のようにOpenで開いたら

Wordpress 急にリダイレクト

Findのメニューから、Find in Projectを選択します。

Wordpress 急にリダイレクト

すると、下記のように検索するフィールドと置換(Replace)するフィールドが画面右下に現れます。

Wordpress 急にリダイレクト

検索するフィールドに上記のように、投稿ページや固定ページ、メディアに挿入されてしまったScriptコードを消去できます。挿入されたコードをここにコピペしてFind Allし、発見されたかを確認してReplace Allすれば、全て入れ替えられます。

改善したファイルを再度上書きでアップロードすればデータベースは完了です。

*念のため、全てのファイルをダウンロードして検索をかけておくといいとも思います。このファイルだけでも、<script>のみ検索して他にコードが埋め込まれていないか、色々調べてみてください。

もし、wp_posts以外にも不審な書き込みが見つかったら、この記事に書き込みをお願いします。また、一点注意ですが、phpMyAdminのアップロードに容量制限がかかっている場合、重たいファイルだと「ダウンロードして直してアップロード」ができません。容量を確認してからこの作業を行なってください。

サーバ内のWordPressファイルについて

1、まず、下記のファイルか、拡張子の無い怪しいファイルはないかルートフォルダを探してください。もし、あればすぐにローカルにコピーしてサーバにあるものは消去してください。
*ローカルにコピーするのは、この中の文字列をあとで検索にかけて消去するためです。

中身はこんな感じで、重要なファイルのヘッダー(<head></head>で囲まれた最初と最後の2箇所)にユニコードの文字列を埋め込んで来ます。不具合のあるサイトの中でも、これがあるものとないものがあります。

Wordpress 急にリダイレクト*クリックで拡大します。

2、次に同じ階層の下記の2つのファイルを確認してください。

・wp-config.php
・wp-login.php

wp-config.phpの中身をみると、以下の部分は、’put your unique phrase here’が明らかにおかしいコードに書き換えられています。*これは正常なもの。

「wp-login.php」内には、中にscriptが挿入されて

から始まる数列がびっしり追加されていました。他にもいろんなフォルダ内のファイルにおかしな文字列が追加されていました。

もし、上記のような文字列がある場合は、他の階層のファイルにも書き込まれている場合が考えられるので、FTPソフトで一旦全てダウンロードして、データベースの修復と同じように対応します。

3、WordPressファイル内の修復

ルートフォルダに入っているファイルとフォルダを全てダウンロードして、一つのフォルダにまとめます。これを複製して感染バージョンと改善バージョンに分けます。

改善バージョンをこれまでと同じく、Atomで修復します。1ファイルではなく、フォルダを一気に選択したいので、Atomのメニューから下記を選択します。そのまま、改善バージョンのフォルダごと選択します。

そうすると、指定フォルダないのファイルをすべて検索できます。Find Allのフィールドに、<head></head>内にある不具合を起こしているコードをFind Allで検索して見つかれば、そのうちの一つの詳細を調べます。その中の<script>〜</script>までをコピーして、Find Allの中に改めてペーストしReplace Allで消去していきます。

Wordpress 急にリダイレクト

また、同じように文字列の一部をFind Allで検索して、検索に引っかかったものの詳細を表示して、<script>〜</script>の部分を消去していきます。

なぜ、このようにするかというと、

(118, 97, 114, 32, 115, 111, 109, 101, 115, 116, 114, 105, 110, 103, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99,

から始まる文字列にいくつかパターンがあり、一回のReplaceでは消去しきれないためという理由と、

eval(String...

から始まる文字列もあり、何回かにわけて確実に不審なコードを消すためです。

4、改善バージョンの入れ替え

このように、改善バージョンが出来上がったら、その中でローカル上で更新できるフォルダを最新のものに入れ替えます。例として下記のようなものです。

・プラグイン
・テーマ

これらは元のフォルダを一度消去してから新しい最新のフォルダを入れ替えます。

これで、改善バージョンのサイトが一つのフォルダにまとまりました。FTPソフトでサーバにアップロードして、一旦修復は完了です。

今後の対応として

この次に、今後の対応として、

・サーバへのアクセスを国内のみに限定する(レンタルサーバのコントロールパネルから設定)
・Wordfenceプラグインの導入(エラー原因を特定して知らせてくれる)
・miniOrange 2-Factorプラグインの導入(2段階認証の導入)

まずは、アクセスを国内に限定すれば大抵の攻撃は収まるでしょう。ただ、国外からのアクセスが必要な場合も多々あるので、その場合は、WP-Banのような特定の国からのアクセスを防げるプラグインの導入を考えるか、他の特定のIPアドレスからのアクセスを防ぐ手段を講じる必要があります。

Wordfenceは、データベースとサーバ内の対策をする前に導入すると、プラグインごと感染するので綺麗にしてから入れましょう。

https://ja.wordpress.org/plugins/wordfence/出典:https://ja.wordpress.org/plugins/wordfence/

綺麗になるまで、Scanを繰り返し怪しいファイルを見つけましょう。無料機能で検知できます。

miniOrange 2-Factorは、スマホのアプリと連携して、いつものパスワードの他に、ログインパスワードを生成できるようになるため、ブラウザを介したログインをより強固にできます。

————————————–

調べてみると、まだほとんど情報がなく、ホスティングサービスのサポートに連絡しても、そもそも「外部からの攻撃への対応は全部消して、データベースも綺麗にしてから再構築してください。」とのこと。

最終手段を最初に言うのね。。。

 

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Tensorboardが動かない。(動かすには)

Tensorboard 動かない

Tensorboardがうまく表示されなかったり、そもそもどのタイミングで表示されるのかよくわからないこともあると思います。
そんな時のメモです。

まず、タイミングはTensorFlowを使った学習を行なった後になります。
学習時に

か、その他の方法で、学習用のファイルが置かれているフォルダ(ディレクトリ)を指定していると思います。

TensorFlowで学習(トレーニング)するときは、

などで、学習を行い、その際にファイルを書き出すと思います。
それを、学習後に下記で指定してTensorboardを起動します。

[データの入っているディレクトリ]は、

で指定したディレクトリから数えてどこにあるかの相対的な位置になります。前後に/(スラッシュ)は不要です。

次に、ターミナル上に、下記の表示が出ます。

これをそのままブラウザに貼り付けるのではなく、↓こっちを貼り付けることでTensorboardによるグラフィカルな表示を確認できます。


こんな風な表示も見ることができます。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

【エラー】NameError: name ‘xrange’ is not defined

NameError: name 'xrange' is not defined

Pythonのバージョン違いのエラーのようです。

Python3からは、

のような、xrange関数が廃止されrangeになったため、古いプログラムを現在のPythonのバージョンで動かすとこのようなエラーが出るようです。

1、プログラム中のxrange関数を全てrangeに入れ替える、
2、Python3環境をPython2環境にして実行する。

のどちらかでエラーが解決します。

1の場合は、
プログラム中の関数の中の、

を、エディタ上でコマンド+fで検索し、全て

にリプレイスすれば良いです。

2の場合は、
今のPython3環境のパッケージのバージョンを色々変えるのは大変なので、
新しい環境を作ったほうが早いでしょう。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

ターミナルの背景と文字色の変え方。

ターミナル 環境設定 プロファイル

ターミナルを開くと白背景がデフォルトで、目が疲れるし変えたいなと思ったことはないでしょうか。

ターミナルの背景や文字色は、
1、ターミナル→環境設定→インスペクタから変える
2、シェル→インスペクタを表示→インスペクタから選択

の2通りの変え方があります。どちらも簡単ですが、1の方法は、次に開いたときも設定が変わりません。2の方法は、次に開いたときは設定が戻ります。

それでは、解説します。

1、ターミナル→環境設定→インスペクタから変える

まずメニューバーのターミナルから環境設定を選択します。
ターミナル環境設定

次に、プロファイルを開き、好きな設定を選び、左下のデフォルトを選択すると、次に開くときも同じ設定でひらけます。自分で自由に色を変えることもできます。
ターミナル 環境設定 プロファイル

2、シェル→インスペクタを表示→インスペクタから選択

こちらは、メニューバーのシェルからインスペクタを表示を選択します。
ターミナル インスペクタ

次に、プロファイルから好きな設定を選ぶだけです。すぐに反映されますが、次回ファイルを開いたときは、この選択は引き継がれません。

ターミナル インスペクタ

以上、ターミナルの背景と文字色の変え方でした。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

5GHz映像FPVのドローンを飛ばすまで 免許証、申請、免許状周辺の話。

この記事では、「FPV(First Person View)のドローンを飛ばしたい!!」という方向けに、どんなことが必要かを書いています。

私自身がゴーグルをつけたドローンレーサーに未来感を感じていろいろ調べ始めた中で、間違った情報や適当まとめサイト、アマゾンのレビュー上の情報などに混乱した経緯があるので、なるべく正しく書いていこうと思います。

そもそも、FPVドローンとはこの記事では、5.8GHz帯の電波を利用して映像を送受信して操作するドローンと定義します。
この5.8GHz帯の電波には、アマチュア無線4級以上の免許の他に、電波を送信するドローンに対して無線局の登録が必要になります。ドローンを操作するコントローラーとなるプロポの電波は、2.4GHz帯でこれについては免許や登録はいりません。(2.4GHzは、いわゆるWiFi電波帯)
また、映像を2.4GHz帯の電波で送受信することは可能ですが、FPVドローンとしては画像の遅延が発生するために操作不可能となります。この電波利用に関しては、200g以下などの条件は特に関係ありません。
これらのことを知った上で、アマゾンのドローンのレビューを見ると面白いです。
アマゾン「検索:ドローン」

ということで、FPVドローンレースをするには、アマチュア無線4級の資格と、使用するドローンに対して無線局の開局が必要です。

上記を踏まえてこの記事では、下記の順番でFPVドローンレーサーまでの道のりを記載します。

1、ドローンの種類を決める

FPVドローンを、Tiny Whoopなどの小さいドローンで始めるか、本格的なレースドローンで始めるかを決めます。私が一番時間がかかってしまったのはこれです。もちろん、どちらもFPVドローンなので免許と手続きが必要です。どっちがどっちでという説明よりも、動画を見てもらえれば一目瞭然なのでYouTubeを貼っておきます。
Tiny Whoop

レースドローン

Tiny Whoopは屋内でも飛ばせるので、首都圏でも広まりつつあります。レースドローンは200gの上限を超えてしまうのと、速度も170km/hを超える機体もあることから、広い河原や山や広い倉庫とかではないと飛ばせるところが限られます。
ただ、世界的にはレースドローンのイベントは賞金総額1億2千万円のドバイのレースや、今年は韓国レースに日本人が参加するなどの広まりを見せています。

【優勝】岡聖章 決勝飛行映像 | ジャパンドローンチャンピオンシップ in ハウステンボス FPVドローンレース部門

【世界最速】ドローン大会優勝者15歳のフライト【賞金1億1300万】

ちなみに、小型のFPVドローンには、下記のような撮影の可能性も秘められています。大型撮影ドローンにはできない撮影ができます。

オンナノコズ:”Onnanocos” × Micro Drone

で、決まったらドローン本体は早めに購入してください。ドローンについてくる送信機の系統図というものが、ドローンを総務省に申請する時に必要となります。

2、アマチュア無線4級を取得する

これはもうやるしかないです。資格取得には、下記の2通りあります。
・勉強をして試験に合格する。
・養成課程を受講する。
日本無線協会

試験に合格して取得を狙う場合は、テキスト過去問を勉強して受験となります。60〜70%くらいの合格率です。私は、テキストを勉強したのちに、過去問に取り組みましたが、理解より効率的な合格を狙うなら過去問のみで良いと思います。
わからないまま、答えだけ覚えても不安な方はテキストも学習すれば良いと思います。
ちなみに、過去問の中からほぼ丸っと同じ問題が出るので、内容は難しくても答えはわかるという状態になると思います。
私が購入したのは下記でした。2週間前からテキストをパラパラ読み始めて、途中から焦り始めて、半日x4日は勉強しました。焦った割には、問題がそのままだったので当日は大丈夫でした。
試験は、午前中にあり、1時間後には発表され免許の申請をその場で行えます。1〜2週間で免許が届きます。

3、総務省 電波利用 電子申請・届出システムLiteでいろいろする

まず、こちらの総務省 電波利用アマチュア無線4級の免許を受け取ったら電子申請・届出システムLiteで、新規ユーザー登録を済ませてください。
ユーザーIDが電子申請なのに郵送で届きます。割とすぐに。(1〜2日でした)

次に、このサイトで、無線局の開局申請を、途中までします。途中まで行うと、その履歴をzipファイルで自分のMacやPCに保存できます。
このzipファイルを使って、技術基準適合の保証書をゲットします。
JARD(一般財団法人 日本アマチュア無線振興協会)のサイトで、開局申請(途中)zipファイルを提出して、技術適合保証を受けます。

1週間くらいで、技術基準適合の保証書がメールでPDFファイルになって届くので、再度総務省 電波利用 電子申請・届出システムLiteにて、開局申請(途中)zipファイルをアップロードして途中から申請を再開します。
この時に、保証書のPDFファイルを追加ファイルとしてサイト上にアップロードして、申請を完了させます。

これで、2〜3週間待てば、ドローンから5.8GHzの映像を乗せた電波を発射できるようになります。

ちなみに、下記のようにMacで申請できるかチェックしてみたところできなそうな表示が出ますが、普通に最後までエラーなく進みました。
電波利用申請Macでも申請できました

LINEで送る
[`evernote` not found]
LinkedIn にシェア

【エラー】TypeError: (‘Keyword argument not understood:’, ‘data_format’)

TypeError: ('Keyword argument not understood:', 'data_format')

以前作成した画像分類機を起動したところ下記のエラーが出てしまった。

この対処法を探してみると、
stackoverflowのサイトに同じエラーの投稿があった。
https://stackoverflow.com/questions/50830736/typeerror-keyword-argument-not-understood-data-format

Kerasのバージョン不一致によるエラーとのこと。解決策として、作成済みファイルを作った時のKerasと、このファイルを実行しようとしている時のKerasのバージョンを合わせることでエラーが解決するらしい。

リンク先のサイトでは、

こちらの実行で、Kerasを最新版にアップグレードすることで解決するとのこと。
で、私の環境では、以前の実行しようとしているファイルを作成した時のKerasのバージョンが調べられず、作った日時はわかっていたので、その時の最新のKerasのバージョンを予測して、Kerasをインストールしなおしたがエラーは変わらず。

一応、Kerasのバージョンを遡って実行した方法を書きます。

Kerasのバージョン確認

Kerasをアンインストール

Kerasのバージョン指定してインストール

で、拒否される場合は、

と、

をつけて実行する。

他のライブラリのバージョン確認やインストールについては、
Python、TensorFlow周辺の環境設定まとめを参照。

結局、Pythonの環境を現在の最新のバージョンで作り直し、KerasやTensorflowなどをインストールして、以前のKerasを用いて作ったファイルを作り直した。その後、同じ実行環境で、画像分類機を実行したところ成功した。

このような、バージョン管理については、成功した環境を、

これで書き出したあとに、.txtファイルに保存しておき、再現したいときに

これを実行して一括インストールすることでうまくいくと思う。
このrequirements.txtの書き方は、

このように羅列する。

他にも似たようなエラーの投稿を見つけた。
こっちは、末尾の文字列が、data formatではなく、nb depthになっている。
https://stackoverflow.com/questions/44135232/keras-typeerror-keyword-argument-not-understood-nb-depth

この場合は、カーネルサイズを指定する必要があるとのこと。

「フィルタの数の直後にカーネルサイズを指定する必要があります。たとえば、次のようになります。」

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Python、TensorFlow周辺の環境設定まとめ

tensorflow

Environmentを有効化

例、$ source activate tf140

Pythonのバージョン確認

TensorFlowのバージョン確認

Kerasのバージョン確認

Kerasのバージョン指定してインストール

で、拒否される場合は、

と、

をつけて実行する。

最新版のKerasをインストール

Kerasをアンインストール

現在どの環境で作業しているか調べる

現在のpipバージョンを調べる

現在のPythonのバージョンを調べる

現在のパッケージのバージョンを調べる

パッケージのインストール

*バージョン指定したいときは、パッケージの名前の後に==バージョン

例、

パッケージのアンイントール

pipで一括インストール

*requirements.txtの書き方。
numpy==1.11.0
six==1.10.0
(成功したテスト時のバージョンを記録しておくと再現性が高まる。上記のパッケージのバージョンを調べる

で書き出して残しておけばOK)

ディレクトリの指定

ディレクトリの中身の確認

Tensorflowのインストール

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Flaskで OSError: [Errno 48] Address already in use が表示された時の対処法。

The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

Flaskで

を実行したら、下記のようなエラーが出てしまいました。

 

解決策は、該当のprocessIDをオフにすれば良いらしいです。
まず、processIDを下記のコマンドで調べます。

*5000の部分は、http://127.0.0.1:5000/の5000を開きたい場合は、5000を記述します。他の数列の場合は、それに置き換えてコマンドを実行してください。

このコマンドを入力すると、

OSError: [Errno 48] Address already in use

このように、processIDを調べることができます。調べた数列を、下記のコマンドのprocessIDの部分と置き換えて入力するとオフにすることができます。

例、

 

killコマンドがちょっと怖いですが、思い切ってやってみたら解決しました。

LINEで送る
[`evernote` not found]
LinkedIn にシェア