apacheでjsonを返す時httpヘッダを追加する

特殊なhttpレスポンスヘッダがあるとクライアントのjsからドメイン制限を無視して取得できる。apache2で設定する方法。

mod_headers.cを有効にする

サーバのjsonを置いたディレクトリに.htaccessを置き、ここに以下の記述を追加する。
(.htaccessが有効になっている必要がある。有効になってない場合はサーバの設定ファイルに直接書くか、有効にする)

ヘッダが帰ってきているかChromeで確認

Chromeで対象jsonを開き、[Ctrl]+[Shift]+Iでdevコンソールを開き「ネットワーク」タブの「All」を開く。[Ctrl]+Rと表示されたときは押す。

chromeのDEVツール。ネットワークタブでCtrl+R

ChromeのDEVツール。3xxが返ってくる

3xxが帰ってきているときは[Shift]を押しながらリロードする。

ChromeのDEVツール。200が返ってくる

対象ファイルをクリックするとヘッダが見れる。

ChromeのDEVツール。HTTPヘッダが見れる

javascriptで試す

node + vscode が前提。ここではjsonの取得にaxiosモジュールを使ってみる。

axiosのインストール

vscodeのターミナルで以下を実行。

htmlの作成

axiosで取得したjsonを表示した

リンク

このリンクのhtmlのjavascriptはhttps://jsonplaceholder.typicode.com/postsから取得している。次の例はこのサーバから取得。

.htaccessはすべてのクライアントから許可するように以下のように修正

リンク

このリンクが外部のクライアントからアクセスされた時のログは以下

サーバとクライアントとクロスサイトスクリプティングが一緒になって複雑

cpコマンドでは*は使わないほうがいい

このコマンドはドットで始まるファイルをコピーしない。*はシェルによって展開されるためで、シェルはドットで始まるファイルを*に含ませない。以下を実行するとわかる。

だからといって.*でやろうとすると、.や..も.*に含まれるため予期しない動作になる可能性が高い。

cpですべてのファイルをコピーするには*を使わずディレクトリを指定して行うのが良い。.もディレクトリなのでこれをつかってもいい。

eclipseのプロジェクト作成で謎エラー:Cannot create linked resource ‘/.org.eclipse.dltk.core.external.folders/.link1’

Eclipseで新規のプロジェクトを作成したときに以下のようなエラーが出てプロジェクトが正常に作成できない問題。

正確な原因は不明だが、workspaceをフォルダごと削除したら直った。おそらくworkspaceの.metadataのどこかが壊れていたものと思われる。

グループポリシーエディターが起動しなくなったのを直す

現象

直し方

エクスプローラーで、C:\Windows\System32\GroupPolicyを開く。このフォルダは隠しフォルダになっているので、「表示」メニューから隠しファイルを表示するオプションを有効にするか、アドレスバーに直接入力する。

このフォルダの中にある、MachineMachine.oldにリネームする。

MySQLのデータベースが派手に壊れた場合の修復覚書

ここではデータベースが派手に壊れた場合の話。ハードディスクが壊れたり、自分の場合はVMWAREで保存状態にしたまま、VirtualBoxで開いて操作したあとに、保存していたVMWAREで起動してしまったためハードディスクが派手に壊れてしまって普通のrepairでは直らなかった。

MySQLのデータにはMyISAM方式とINNODB方式があってここではMYISAMの場合、こっちのほうが修復が効きやすいらしい。

当然だがバックアップはとっておく。

どのように壊れたのかの記録

ユーザデータベースや特権データが壊れていると起動もできないので、以下で起動できるか確かめる。

このオプションはログインをスキップするので、特権データが壊れていても動くと思われる。

起動もしない場合

起動もしない場合は直接ファイルを触って直す。今回はMYISAM形式のファイルなので、myisamchkをつかう。MYISAMかどうかは、ファイルの拡張子がMYDやMYIならこの形式で、ibdの場合はINNODB。

以下の順番で試す。

これで直ればいいのだが、直らない場合はMYIを作り直す。MYDが実際のデータが入っているのでこのファイルがサイズが0だったり存在しない場合は復旧は無理だと思われる。

上記のmysqld –skip-grant-tablesでも起動できない場合は、すべてを初期化してから、MYDを復活するしかないが、ここではmysqldは動くものとする。

ここからmysqlでMYIを空にしてから、保存してあるMYDをもとに戻してから、復旧をすることになる。

テーブルを空にする

これで空の正常のMYIができてサイズ0のMYDができるので、保存してあるMYDを上書きコピーしてから上記のmyisanchkで復旧する。

ディレクトリ内の一部のファイル(ディレクトリ)を除いてコピーするコマンド

以下のようディレクトリからcccfffを除いてコピーしたい。

findを使って除く

テスト

これでcccfffを除いた一覧が取得できる。mindepthとmaxdepthをともに1を指定して、この階層のみ出力する。

-execでコピーする準備

-execで見つかったもファイルやディレクトリに対してコマンドを実行する。{}は見つかったファイルやディレクトリに置き換わる。\;-execの終わりを意味する。ここではcpの前にechoをつけて実行されるコマンドを確認している。このコマンドで良ければechoを削除すれば実際に実行する。

Windows10で共有フォルダにゲストアクセスする

共有元(Windows10)の設定

WindowsXPからもアクセスする

Windowsの機能のインストールで、SMB1.0を有効にする。
[WIN]+Rで実行ダイアログを表示し、appwiz.cplと入力し、Windowsの機能からSMB1.0をインストール。

ゲストアカウントを有効にしてリモート接続を許可する

[WIN]+Rで実行ダイアログを表示し、secpol.mscと入力し、Local Policies => User Rights Assignment => Deny access to this computer from the networkからGuestを削除する。

続いて、Local Policies => Security Options => Accounts: Guest account statusでゲストアカウントを有効にする。

MySQLのdatetimeに0000-00-00 00:00:00を設定できない

wordpressの昔のデータベースのデータスキームでdatetimeのデフォルト値がユーザ設定の’0000-00-00 00:00:00’になっていたのだが、MySQLの新しいバージョンではこの値は無効になったらしく、データの操作がうまくできなくなったので、この値を’1970-01-01 08:00:00’に変える。

sqlで以下を実行、post_dateは対象のコラム

この方法以外にも、sql_modeを設定したり、他の方法もあるようだがスルー

Visual Studio Codeでターミナルをbit-bashにする

Windowsでの話、gitは既にインストールされているものとする。

codeで設定を開く

[Ctrl]+[Shift]+Pでコマンドパレットを開き、Open Settings (JSON)を開く。

VSCodeでユーザ設定をJSON形式で開く

設定ファイルに書き込む

インストールされているgitのフォルダの、bin\\bash.exeを以下のように設定する。

git-bashをvscodeで設定

ターミナルを開きなおすとbashが開くようになる。