- 投稿日:2019-04-05T19:50:15+09:00
WindowsでCSVファイルアップロードうまくいかない。。。
導入
先日、とあるWebアプリケーションのCSVファイルアップロード機能を追加開発した時にMacではうまくいっていたファイルの中身のバリデートチェックがWindowsでは全然機能しなかった問題が発生したので備忘録として。
アプリケーション環境
- Ubuntu(バージョンは忘れた)
- PHP-7.2fpm
- CakePHP 2系
- nginx
動作確認環境
不具合が発生した環境
- WindowsのChrome、InternetExplorer11、FireFox
問題がなかった環境
- MacのChrome、FireFox
原因調査内容
MacとWindowでは同じChromeでも仕様がちがう?
→検索していろいろ調べてみたが原因解明できず、一旦保留
MacとWindowsではブラウザの初期のセキュリティ設定が違う??
→JavaScriptやCookieの設定等いろいろいじってみたが挙動変わらず。
nginxかPHPの設定がおかしい???
→nginxはそもそも関係なかった。。。
→PHPはphp.confにuploadファイルの設定があったので、一時保存先や最大ファイルサイズ等変更するが変わらず(そもそもサーバの設定ならWindowsとMacで挙動変わらないはず。)ctpファイル(View)の実装がおかしい????
→こちらもformタグに「multipart/form-data」が設定されているから問題ない気がする?
MacとWindowsでrequestの中身が違うんじゃ?????
→とりあえず、アップロードファイルが格納される変数をCotrollerで画面に出力するコードを記載
MacとWindowsのそれぞれで出力結果を確認してみる。// ファイルの中身を出力 echo "<pre>"; var_dump($_FILE); echo "</pre>"; exit();出力結果が以下、、、ん??
#Windows array(1) { ["data"]=> array(5) { ["name"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> string(12) "TEST.csv" } } ["type"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> string(24) "application/vnd.ms-excel" } } ["tmp_name"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> string(14) "/tmp/phpQYwrAs" } } ["error"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> int(0) } } ["size"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> int(56) } } } } #Mac array(1) { ["data"]=> array(5) { ["name"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> string(12) "TEST.csv" } } ["type"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> string(8) "text/csv" } } ["tmp_name"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> string(14) "/tmp/phpICM53a" } } ["error"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> int(0) } } ["size"]=> array(1) { ["XXXXXXXX"]=> array(1) { ["upfile"]=> int(18) } } } }MIMEtypeが違うな?
結論
ファイルの型のチェックの際、MIMEtypeのチェックをしていたが、
"text/csv"のみ許容する実装になっていたため、Windowsから送信されるMIMEtypeが"application/vnd.ms-excel"になっていたのでCSVファイルと判定されていませんでしたね。。。現在はファイル名の後ろが「.csv」かどうかで判定するように変更して落ち着きました。
- 投稿日:2019-04-05T19:35:07+09:00
忘れた時のファイルタイムスタンプ書き換え
忘れた時のファイルタイムスタンプ書き換え
自分用に書いているのが他人にもやくにたてばというようなスタンスで書いています.
大学のゼミのファイル提出期限に関して厳しかったのでどうにかしたいと思っていた.
これに対して, 提出後にファイルの作成と更新時間を更新できれば誤魔化すことができると考え調べた結果, 以下のコマンドで実行が可能だと判明した.環境
OS : Mac
必要なアプリケーション : Xcode Command Line Tools作成日更新 : SetFileコマンド
SetFile -d "<変更したい時間>" <ファイル名> 例) SetFile -d "01/10/2019 10:00" test.txt編集日更新 : touchコマンド
touch -t <変更したい時間> <ファイル名> 例) touch -t 201901010100 test.txt
- 投稿日:2019-04-05T18:53:05+09:00
[GitHub]コマンドでPRを作成する。
はじめに
この記事ではmac&bash向けに説明します。
Hubコマンドを導入
hubコマンドをインストール
$ brew install hub確認のため以下のコマンドを入力してみましょう。
正しくgitとhubのバージョンが表示されていればインストールは完了です。$ hub version git version 2.10.0 hub version 2.2.9hubコマンドを
$ git ooo
で使えるようにするため~/.bash_profile
に以下の1行を追記eval "$(hub alias -s)"設定を反映
$ source ~/.bashrcこれで導入は終わりです。
PRを出してみる
hubコマンドの導入ができたので、実際にPRを出してみましょう。
普段通り、変更をadd, commit, pushまで行ったあとに以下のコマンドを叩きます。$ hub pull-request # $ git pull-requestでも可このままだとGitHubの設定によっては、PRのbaseがmasterブランチになってしまう場合があるので、baseブランチを指定してあげます。
$ hub pull-request -b dev # baseブランチ名がdevの場合コマンドを実行するとviエディタが開きます。
1 コマンドでPRを作成する 2 3 # Requesting a pull to Hoge:dev from Hoge:introduction_hub_command 4 # 5 # Write a message for this pull request. The first block 6 # of text is the title and the rest is the description.このうち1行目がPRのタイトルとなる箇所です。空だとエラーになります。
1行目にはデフォルトで最終commitメッセージが入力されています。PRの説明や、issueとの紐付けをする際は2行目以降に追記します。なくてもいいです。
※コメントアウト部分はメッセージとして認識されません。ここまで終わったら
:wq
でエディタを抜けます。対象のリポジトリに行くとPRが出ています∩(´∀`)∩ワァイ♪
でもまだ面倒くさい
PRをコマンドで出せても、そのあとGitHubで対象のPRまで行くのに画面遷移2回くらいしなきゃいけない。
面倒くさい。
時間は有限。$ hub pull-request -b dev --browseこれで、PRが正常に出せたら対象のページが開きます。
さらに
~/.git_config
に[alias] pr = pull-request -b dev --browseと追記する事で
$ git pr
でPRを送信する事ができます。終わり
毎日数回、多い時には十数回する作業を効率化できました。
手間を減らせるのは時間的にもストレス的にも良いですねヽ(⌒∇⌒)ノhubコマンドは他にも便利な機能があるので気になった方はぜひggって見てください。
良かったら[いいね]、悪かったらコメントにて指摘お願いします
参考
- 投稿日:2019-04-05T17:02:09+09:00
ターミナルと Slack を Mojave ダークテーマに合わせよう
ターミナルが Mojave ダークテーマにしっくりこないのでテーマを作った
Dracula Theme を気に入って使っていたのですが、Mojave のダークテーマにしてから、周りの色合いとしっくりこなくなりました。
Mojave で使われているカラースキームでテーマを作った結果、数ヶ月間、テコ入れしながらも違和感なく気に入って使っているので公開します。
以下、Terminal.app + tmux + vim を走らせている例です。
ついでに Slack のテーマも作ったので、ここで公開しています。Terminal.app 用
https://github.com/onose004/mojave-terminal
から mojave-dark.terminal をダウンロードして開いてインストール。Vim 用
https://github.com/onose004/mojave-vim
README の内容に沿ってインストール。
Lightline プラグインにもテーマが適用されます。
なお、記事執筆時点で GUI 版 Vim のカラースキームには対応していません。Tmux 用
記事執筆時点で対応していません。
Slack 用
以下を Slack のカスタムテーマ欄にコピペして適用。
手前味噌ですが、これ以外使う気になれません。#232427,#363739,#515254,#ffffff,#363739,#FFFFFF,#65B84D,#E95459
- 投稿日:2019-04-05T16:38:04+09:00
[備忘録] Mac PC がまた入院した時のために
愛用の Macbook Pro が Apple Store に修理入院 = 初期化...
ということで、元気になって戻ってきた時に困らないように諸々の設定情報をメモしておきます。メモリスト
この辺りが重要と聞いたので、メモです。
- 環境変数とPath
- テキストエディタ
- ブラウザ
- アプリケーション
- npm パッケージ
- SourceTree のリポジトリブックマーク
- その他
環境変数 と Path
Terminal 環境内における変数である「環境変数」とコマンドの格納先である「Path」。
環境変数
[設定の確認]
- printenv コマンドで設定している環境変数を表示 (一部のみ抜粋)
$ printenv TERM_PROGRAM=Apple_Terminal SHELL=/bin/bash USER=*** PWD=/Users/*** LANG=ja_JP.UTF-8 HOME=/Users/*** LOGNAME=***
- 設定情報をファイルに出力
$ printenv > EnvironmentVariable.txt[新規設定]
- 旧環境の設定を新環境に設定
$ export {VARIABLE NAME}={value}
- 永続的に設定が保存されるように source コマンドを実行 (上記のみだと Terminal を開くたびに設定が必要)
$ source ~/.bash_profile
Path
Path は環境変数のうちの一つ。
コマンドが格納されている先を登録しておくと、都度パスを指定してコマンドを実行する必要がなくなる。
例えば、/bin
という PATH が通っていると、以下のように/bin/pwd
をpwd
で実行できる。$ pwd $ /bin/pwd[設定の確認]
- echo コマンドで現在の設定を表示 (一部のみ抜粋)
$ echo $PATH PATH=/Users/***/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/***/cli-kintone
- 設定情報をファイルに出力
$ echo $PATH > path.txt[新規設定]
- 旧環境の設定を新環境に設定
$ export PATH={Path}:$PATH※ 以下のように記述すると Path の設定がすべて上書きされるので注意。
$ export PATH={Path}[おまけ]
- Path の優先順位は左から (
:
で区切って複数追加)$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- コマンドの格納パスを探す際は、which コマンド
$ which pwd /bin/pwdテキストエディタ
ユーザー設定 と 拡張機能設定 は 一からやり直すの大変なので、メモ必須。
(※ VSCode Ver.)ユーザー設定
インデントや拡大縮小レベルなどの初期設定を表示 (歯車マーク > User Settings > 右上の
{}
マーク)
新規環境でも保存しておいた settings.json を設定し直すだけで OK!
拡張機能設定
- code コマンドでプラグインの設定を表示 (一部のみ抜粋)
※ code コマンドが入っていない場合は、 Command Palette を開き
Shell Command
と検索して、Shell Command: Install 'code' command in PATH command.
を選択する。$ code --list-extensions RoscoP.activefileinstatusbar-1.0.3 akamud.vscode-theme-onedark-2.1.0 anseki.vscode-color-0.4.5 arcticicestudio.nord-visual-studio-code-0.7.1 azemoh.one-monokai-0.3.7 christian-kohler.path-intellisense-1.4.2 dbaeumer.vscode-eslint-1.8.2 donjayamanne.githistory-0.4.6 dracula-theme.theme-dracula-2.17.0
- 拡張機能リストのファイルを作成
$ code --list-extensions > extensions
- インストール用のシェルスクリプトを作成
install_extensions.sh#!/bin/sh cat ./extensions | while read line do code --install-extension $line done
- extensions ファイルがあるディレクトリでシェルスクリプトを実行
$ sh install_extensions.sh
これでエディタの設定は元通り( ー`дー´)キリッ
ブラウザ
ブックマークや拡張機能の設定も重要。
ブックマーク
[設定の保存]
- ブックマークの設定を表示 (ブラウザの右上の
︙
> ブックマーク > ブックマークマネージャ)- ブックマークの設定をエクスポート (右上の
︙
> ブックマークをエクスポート)- HTMLファイルが出力されるので、保存
[新規設定]
- ブックマークの設定をインポート (右上の
︙
> ブックマークと設定をインポート)拡張機能
インストール済みの拡張機能は Chrome の標準機能ではエクスポートすることはできないので、新規にそれ用の拡張機能を入れてエクスポートする。
[設定の保存]
- Chrome ウェブストア にある Export links of all extensions を追加する
- 拡張機能ボタンをクリックすると、現在インストール済みの拡張機能をリスト化した extensions.html ファイルが出力される
[新規設定]
これでブラウザもバッチリ(≧∇≦)b
アプリケーション
アプリケーションは1つずつインストールのし直しが必要だが、リストはあって損ないので Application ディレクトリから調べておく。
- Application ディレクトリを表示してファイルに出力
$ cd /Applications $ ls > ApplicationList.txtnpm パッケージ
npm インストールしているパッケージのリスト化。
- npm list コマンドでリストを表示してファイルに出力
$ npm list > npmList.txtSourceTree のリポジトリブックマーク
Git クライアントの SourceTree のリポジトリブックマーク管理。
[設定の保存]
- SourceTree ディレクトリ内の browser.plist を保存
$ cd $HOME/Library/Application Support/SourceTree $ browser.plist > SourceTree_browser.plist[新規設定]
- browser.plist を元の場所に戻して、ブックマークの復元
$ cd {SourceTree_browser.plistのバックアップ先パス} $ cp SourceTree_browser.plist > "$HOME/Library/Application Support/SourceTree/browser.plist"その他
必要に応じて以下の設定もメモしておく。
- プリンタ設定
- キーバインド
これ以外は必要になったタイミングで新環境で設定するようにすれば無駄もなさそう(・∀・)
参考リンク
以下の記事を参照・一部文面で使わせていただきました。
- 投稿日:2019-04-05T15:07:35+09:00
macで標準shellをzshにする方法
この度、shellをzshにして、作業効率アップアップ(?)したので、備忘録
bash# zshの場所を確認 $ which zsh >> /bin/zsh # 以下のコマンドを実行 $ chsh -s /bin/zsh $ export SHELL=/bin/zsh $ exec $SHELL -l変えたら、標準がpython2になったり、pipでインストールしたパッケージ類が使えなくなるので、以下を実行.
zshにも同じpathを指定すれば使えます。zsh# .zsh_profileを作成して編集 $ vi ~/.zsh_profile.zsh_profile# 以下を追加 if [ -d $HOME/.anyenv ] ; then export PATH="$HOME/.anyenv/bin:$PATH" eval "$(anyenv init -)" fi export PATH="$HOME/.pyenv/shims:$PATH"zsh# 更新する $ source ~/.zsh_profile
- 投稿日:2019-04-05T14:44:48+09:00
BoostnoteにAdd(再リンク)できない時にどうすればいいか
はじまり
Dropbox上でBoostnoteを管理していたら、データが消えました…
正確にはアプリから参照できなくなったですね。
boostnoteでdropboxデータの復元を試みるに記載されている内容と類似した以下のような現象が起きました。
- データはDropbox上に存在
- Boostnote mobileからは確認可能
- 再リンクが不可
環境
- MacOS Sierra 10.12.6
- Boostnote 10.11.15
- Boostnote mobileとDropbox連携(ios 12.1.4)
- python3.6
原因
Boostnoteアップデート後CSONファイルが存在するにも関わらずストレージ設定が消えてフォルダとドキュメントが表示されない障害原因と解消法がわかりやすくて助かりました。
結論的には、既存のcsonファイルにおいてcontentが空だと、読み込みがエラーになるようです。
同様の問題かどうかは、View > Toggle Developer Tools
を参照するとわかります。解消方法
やるべきことはcontentが空のファイルを見つけて、削除することです。
順番にノートの中身を確認するにはいかんせんノートの数が多かったので、以下のpythonスクリプトを
Boostnote/notes
ディレクトリにて行うことで探索しました。import cson from pathlib import Path p = Path.cwd() for path in p.iterdir(): with open(path) as f: c = cson.load(f) if len(c['content']) < 1: print(path.name)内容はカレントディレクトリにおけるcsonファイルのcontentが1文字より小さいものを探して、ファイル名を標準出力です。
一応、中身を確認してから表示されたファイルを削除することをお勧めします。これで再リンクできない問題は解決されるはずです。
同時に起きていた、別の問題について
Boostnoteを再起動するたびにリンクが解除され、再リンクが必要となる問題も発生していたのですが、そちらは
$HOME/Library/Application Support/Boostnote
を削除して、Boostnoteをインストールし直して強引に解決しました。
もっといい解決法がありそうですが、サボってしまいましたね…参照元