日曜エンジニア

自分のITノウハウを誰かのために

Access VBA 書籍選び(DAOとADO)

いきなり必要に迫られました

もう1年半ほど前の話になりますが、いきなりMS Access でアプリケーションを作らなければならなくなり、Access VBAを使う必要性に迫られました。とは言いながら、根底にはこういう作業が好きだから、何とかなるだろうという変な自信もあったのですが。

ということで、最初に着手したのは、全体像のイメージを掴みたいなと本屋で極力安くて薄くて古くないAccess VBAの書籍を購入したのです。それがこちらでした。

AccessVBA ポケットリファレンス (POCKET REFERENCE)

AccessVBA ポケットリファレンス (POCKET REFERENCE)

DAOとADOの違い

書評をするのではないです。ただ、ある目的(これから触れる分岐点)次第では有効なのですが、一般的な観点からすると少し内容が特殊だと、ある程度Access VBAを理解してきた今となっては思うことがあります。

続きを読む

目指すシェル芸! シェルスクリプト

まずはシェルの種類とコマンドね

私はUnixから始めた人間です。だから、いつの間にかLinuxが大活躍する世の中になり、10年前に20万円近くしたVAIOWindowsXPで限界を迎えた後も、Ubuntuとして使えること(しかも限りになく無償に近く)感謝してます。

さすがに、ある程度のコマンドやviの基本は身体が覚えてますが、シェルは参考書無しでは全く使えません。

ということで、オススメの3冊ご紹介。まず1冊目は

UNIXシェルスクリプト マスターピース132

UNIXシェルスクリプト マスターピース132

好みもあるので、これがベストという解はありませんが、事例集が良いと思います。それをそのままマネするも良い、アレンジするのも良いということで。

続きを読む

WordPress お手軽開発環境の維持

本番環境とのsyncする?

syncというのは、つまり本番環境をそのものをシンクロナイズさせるという意味です。開発環境として温めているものがなければ、定期的に本番環境のクローン環境として開発環境を維持しておくのは、何かと便利です。

以下、簡単ですが概略を記載しておきます。ただし、適宜行間を読んでいただく必要があります。ということで、行間を理解できるレベルであれば、これから記載することは新鮮な内容では... ない。

結局は自分メモになり下がってしまいます。

行間を理解できない方は、これを機会に行間を考えてみてください。理解できたときには、もはや立派なエンジニアです。

続きを読む

個人事業主が考えてみても良いサイト案

レンタルサーバーはてなブログProの比較

あくまでも押し付けるつもりはありません。適宜ご自身が置かれた状況と照らし合わせて考えていただければ幸いです。が、何の考えもないのであれば、こちらで掲載した案をご検討いただくのも悪くはないかと。

ということで、個人的な興味で恐縮ですが、一見?楽しげで簡単そうに見えるロリポップのプランをレンタルサーバーの対象とします。

lolipop.jp

が、これもまた数多くのプランがありますが、基本的な機能のみに限ってであれば、ライトで十分かなと思ってます。私も個人的興味でライトに加入してます。もっといろいろ試してみたいのですが、時間と気力の調達がままならず。

まずは、主な機能の比較表です。

機能 はてなブログPro ロリポップ(WP)
料金 ¥600〜1,008/月 ¥250〜/月
ブログ数 最大10 容量が許す限り?
アクセス解析
容量 3GB/月(画像) 50GB
独自ドメイン
独自ドメインメール
  • 2015年11月時点での内容です。
  • WPとはWordPressを意味します。
  • 独自ドメインの取得や維持費は含みません。
続きを読む

crontabによるメールが添付ファイルに!

さくらのVPSに何が起こった?

夜間、日中などサーバで小人さんに働いてもらっています。その結果を、crontabによりメール飛ばし、それを見ながら密かに悦に入っていたのですが、突然メール本文添付ファイルになってしまったのです。

ちょと悩み&考えたのですが、結局キーワードを変えつつGoogleで検索していたところ、ついにストライクな記事を見つけました。

zisakuzien.exblog.jp

まさに、コマンド叩いて実行すると成功するのに、crontab実行だとNGです。これまでうまくいっていたのに、突然NGになったあの日は、さくらのVPSであれがあった日でした。

▼ お知らせ - 【重要】【さくらのVPS
「VENOM」脆弱性対応に伴うメンテナンス実施のお知らせ
      

これと見事にタイミングが一致している。

犯人はLANG=ja_JP.UTF-8

Copy&Pasteしたいほど、上記の記事に全てが凝縮されてます。

前提が全て当てはまりました。 まったくの引用手抜き記事ですが、同様の現象で悲しんでいるかたの踏み台になれれば幸いです。

レンタルサーバとVPSどちらにする?

外部サーバーからDBにアクセスしたいの

事の発端はこちらです。

レンタルサーバーでシェルからSQL経由でcsvデータをインポートさせようと思ったところ、下記のメッセージ一点張りで拒絶されます。

mysql> source getdata.sql
ERROR 1045 (28000): Access denied for user 'user999'@'xxx.xx.x.xxx' (using password: YES)

原因はSQLを実行しているサーバーと、DBが乗っかっているサーバーが(当然)異なるようなのですが、その異なるサーバーからのアクセスを拒否していると理解しました。

レンタルサーバー提供のWebツールでは、どうにかこうにかインポートできたのですが、自動化できません。

また解決策としては、アクセスするユーザーに権限付与すればよいのかもしれませんが、当然レンタルサーバー利用者ごときに、DBのroot権限などある訳ないです。

外部サーバーと言っても、同じレンタルサーバー群?からのアクセスなのだから... と恨めしく思う一方、ここは少し背伸びしてみるかとVPS利用を視野にいれたのです。

VPS(virtual private server)て何?

バーチャル・プライベート・サーバ(仮想専用サーバ)のことです。

私もろくに知らず、レンタルサーバーで満足していたのですが、ちょとDBへのデータインポートを自動化したいがために、決心しました。

これも選択肢は多かったのですが、あまり悩みたくないので、多数決でVPS(仮想専用サーバ)|さくらインターネットに決めました。

私のような日曜エンジニアで頑張っている方には、悩む方もいるかと思いますが、勉強になるのはやらなければいけないことが多いVPSに違いないです。一方、極力サーバーの面倒はみたくないなど目的が限定されているのであれば、レンタルサーバーでも十分かと。やっぱり決め手は、DBをどこまで自由に使いたいか?だと思います。レンタルサーバーで決して乗り越えられない壁です。

私も元は上記のデータインポートの自動化だけのために遠回りをする決心をしましたが、今では毎日サーバーの面倒をみるために、あれこれと多忙な状況に陥っています。

正直、会社で働いているより充実している。

導入時にお世話になったサイトはこちら。

blog.nzakr.com

いろいろ教えてもらったのに、何もお礼ができないので、せめてご紹介だけでも。時間かけている記事だと思います。ありがとうございました。

PHPで扱う日付や時間データ

php.ini から始まる

なんちゃってPHPエンジニアの私ですが、未だにちょこちょこネットを参照しつつ作業をしているので、知識が全く体系化されておりません。が、備忘も兼ねて少しまとめます。

作業中、phpがうまく反応しない場合、おおよそiniファイルをチューニングすると解決するものです。が、そのiniファイルはどこ?

本来であれば、環境構築時にそういうモジュール構成など意識しつつ作業するのかもしれませんが、日曜エンジニアは行き当たりばったりです。

$ php -i | grep ini  
〜略〜  
Configuration File (php.ini) Path => /etc  
Loaded Configuration File => /etc/php.ini  
〜略〜  

こういうレベルで解決できます。私同様、なんちゃって or 日曜エンジニアの方は騙されたと思って、コマンド叩いて確認してみてください。きっと役立つ日があるかと思います。

余談ですが、バージョンの確認はこちらです。

$ php --version  
PHP 5.5.14 (cli) (built: Sep  9 2014 19:09:25)  
Copyright (c) 1997-2014 The PHP Group  
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

タイムゾーンの設定

さて、何故私がphp.iniファイルのありかを探していたかと申せば、タイムゾーンを設定したかったがためです。

phpで日付に関するクラスを利用したところ、次のエラーを受けてしまいました。

DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.

なお、こういうiniファイルを変更した場合はApacheの再起動を忘れずに。

日曜エンジニアでも、過去Webサーバー系の仕事で地獄を体験した私は、頭は忘れていても身体が覚えているから、iniファイルをいじるとすぐにサーバーの再起動をするので、少し助かってます。

さて本題に戻りまして、このエラーの解決方法はタイムゾーンを設定することでした。なので、php.iniに設定します。

[Date]  
; Defines the default timezone used by the date functions  
; http://php.net/date.timezone  
date.timezone = Asia/Tokyo

これでエラー出力されずになりました。

日付型をなめちゃいけないよ

最近の私はデータの取り扱いとなると、ExcelAccessがほとんどですが、本当はOracleとかMySQLとかRDBでも自由自在になりたいです。むかーしむかしは、かなりOracleを使いこなしていたものの、その知識は私の若さと一緒にどこかへ消え去りました。

若さを取り戻すことはできませんが、知識くらいは取り戻そうと頑張ります。

さて本題に戻りまして、そもそもは次のような文字列情報となっていた時間に関するデータを、Date型としてMySQLに格納することが目的でした。幸いにも単なる文字列情報でも時間フォーマットに則っているだけに助かります。

Sun Aug 28 19:31:16 +0000 2011

次のとおり、時間フォーマットに対応しているので、strtotimeで変換することで、いかようにも表示フォーマットを変えることは可能です。

date('Y年m月d日', strtotime('Sun Aug 28 19:31:16 +0000 2011'));

しかし、これでは世界標準時間(+0000)のままなので日本の時刻からは9時間遅れています。残念ながら、strtotime関数ではタイムゾーンのコントロールまではできなかったのです。

そこで見つけた(?)のが、DateTimeZoneというクラスだったのですが、php.iniにタイムゾーンを設定せずに利用して食らったエラーが上記のものだったのです。

$date->setTimezone(new DateTimeZone('Asia/Tokyo'));
$formattedDate = $date->format('H:i, M d');  

まだまだ私は未熟者ですが、折々日付型には敏感に引き続きノウハウを身につけていくよう努力します。不特定多数の記事からお勉強させていただき恐縮ですが、この場をかりてざっくり感謝の気持ちをお伝えさえてください。ありがとうございます。

上へ戻る