2015年02月22日

githubでpushすると403エラーになる場合

githubで作成したレポジトリを以下のようにcloneしてきてました。
$ git clone https://github.com/ajisaba/DeviceDetect.git
Initialized empty Git repository in /home/username/github/DeviceDetect/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.


ファイルの追加などをコミットしてPUSHすると、以下のような403エラーになります。
$ git push -u origin master
error: The requested URL returned error: 403 Forbidden while accessing https://g
ithub.com/ajisaba/DeviceDetect.git/info/refs


原因が分からなかったのでネットで調べると、以下が見つかりました。
git push origin masterしたら403エラー出た時の対処
githubでいつもと違うPCからHTTPSの認証を使ってgit pushする場合の手順
(Stackoverfllow) Pushing to Git returning Error Code 403 fatal: HTTP request failed

これらを参考にして、.git/configの中身を確認。
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://github.com/ajisaba/DeviceDetect.git
[branch "master"]
remote = origin
merge = refs/heads/master


参考ページより、https接続の場合は、urlにgithubのユーザー名が必要ということです。
url = https://[ユーザー名]@github.com/[ユーザー名]/[レポジトリ]


例えばユーザー名がajisabaの場合、以下のようになります。ただし、この指定方法ではpushするたびにパスワードを求められます。
url = https://ajisaba@github.com/ajisaba/DeviceDetect.gi


他に、ssh接続を使う方法もあります。sshの場合、urlはssh://URLになります。SCPコマンドのような省略形を使うこともできます。
url = ssh://git@github.com/ajisaba/DeviceDetect.git
url = git@github.com:ajisaba/DeviceDetect.git  (省略形)


参考、
4.1 Git サーバー - プロトコル

毎回のパスワード入力は手間なので、今回はsshの省略形でurlを指定することにしました。
そのため .git/config を以下のように修正してpushをすると、エラーが無くなりpushに成功しました。
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:ajisaba/DeviceDetect.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master


posted by jun1 at 19:44| Comment(0) | TrackBack(0) | ソフト

2015年02月15日

AndroidやiOSなどでファイルアップロードが可能なものを判別する

スマホでファイルのアップロードをしようとしたら、古いものは対応していないことが分かりました。とりあえずAndroidとiPhoneだけ使えれば良いので、対応しているバージョンを調べると以下のようになっていました。
iOS バージョン 6 以上
Android バージョン 2 or 3以上?


Androidは、以下の記事によると、2.2以上で対応。ただし、OSのバージョンの違いや,機種によって動かないものもあるということだそうです。
スマホでブラウザ経由でファイルのアップロードは,対応状況がバージョン依存。iOS6以降,Android2.2以降

そのため、Androidはバージョン3以上なら対応と見なすようにしました。

これらの判別はユーザーエージェントをチェックするしかないので、PHPの公開されているものはないかと探してみると、以下が見つかりました。
mobiledetect

これでも良かったのですが、簡単なガラケーの判別も必要だったのでちょっと自作することにしました。また、最近仕事でgithubを使うことが無く、使い方を忘れかけていたので、とりあえずgithubに登録してみました。
https://github.com/ajisaba/DeviceDetect

現状ではAndroid、iOS、ドコモ、Au、Softbankの判別は大丈夫のようですが、PCやその他のモバイル端末などは問題がありそうです。


posted by jun1 at 20:25| Comment(0) | TrackBack(0) | Web

2015年02月08日

DocBook関係の情報

自分のホームページのソースは、DocBook形式のXMLで書いています。

最近、新しい項目を追加しようと思いましたが、どのタグを使用すれば良いか分からなかったので、ちょっと調べてみました。また、以前調べたときの情報がまとまっていなかったので、それらも合わせて簡単にまとめてみました。

DocBookの入門情報
DocBookの概要(IBM develperWorks)
Eclipse で DocBook XML を構築するIBM develperWorks)


タグの定義は docbook.orgにあります。
DocBook Publishers: The Definitive Guide (DocBook V5.1b3)
DocBook Publishers: The Definitive Guide (DocBook V5.0)

追記. 上記だと、screenやfilenameタグがありませんでした。そこで、調べてみると以下が見つかりました。これには載っています
DocBook 5.1: The Definitive Guide


DocBookは大量のタグが定義されていて、どれを使用したら良いか分かりづらいところがあります。
そこで、ちょっと古いですが、タグの選択で参考にしたページが以下になります。
Which are the most used DocBook tags actually used by you in Fedora Guides?

上記にFedoraやGNOMEのドキュメントに使われているとありますが、今も使われているなら、それらを調べてみるのも良いかも。

また、以前調べたとき、以下の最終行近くにある「(ソースはこちらです)」のリンク先も参考にさせてもらいました。
DocBook文書を日本語で書く


あと、DocBookは、HTMLだけでなくepubの原稿としても使われています。
オライリー・ジャパンのePUBフォーマットを支える制作システム
EPUB で電子書籍を作成する
DocBook入門: DocBookで各種文書を作成する。


個人的によく使用しているタグは以下になります。
表題など  article、articleinfo
章など  sect1、sect2、sect3、title
段落  para
リンク  ulink
画像  mediaobject、imageobject、imagedata
番号なしリスト  itemizedlist、listitem
番号ありリスト  orderedlist、listitem
テキスト関係  literallayout
画面出力  screen
プログラム文  programlist
テーブル  table、thead、tbody、row、entry
posted by jun1 at 19:10| Comment(0) | TrackBack(0) | XML

2015年02月01日

mod_rewriteでURIを変更せずに静的ページを動的ページにしたり、ホスト名の変更などに対応

最近、mod_rewriteでURIを変更せずに静的ページを動的ページにしたり、ホスト名の変更などにすることがあったので、そのときのメモ

・サーバーやコンテンツを変更せず、あるサイトに新しいドメインを割り当てて、古いドメインでのアクセスを新しいドメインにリダイレクトさせる場合

以下の2つのホスト名が設定されている場合
・www.example.com (今まで使用していた方)
・www.example.net (新しい方)

この場合、mod_rewriteを使い、”.htaccess”に以下のように記述します。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule .* http://www.example.net%{REQUEST_URI} [R=301,L]

%{HTTP_HOST}, %{REQUEST_URI} は、http://www.example.com/test/index.htmlの場合以下のようになります。
%{HTTP_HOST} = www.example.com
%{REQUEST_URI} = /test/index.html

[・・・]の指定は以下のような意味になります。
NC   RewriteCondの判定で大文字、小文字の区別をしません。
R=301 HTTPステータスコード301(Moved Parmanently)でリダイレクト
L   条件にマッチした場合は、[L]の行で実行が停止します。


・ある特定のページを別のページにリダイレクトさせる場合、以下のようにします。
RewriteEngine on
RewriteRule ^/server/test.html$ http://www.example.net/client/test.html [R=301,L]

ただし、バーチャルホストを使用していると、上記でリダイレクトしない場合があります。
原因は条件”^/…$”の先頭にある”/”になります。
この場合は、”^/?…$”にして先頭の”/”が無しでもマッチするようにします。
RewriteEngine on
RewriteRule ^/?server/test.html$ http://www.example.net/client/test.html [R=301,L]

参考
ApacheのRewriteRuleで検索条件に^/がマッチしない場合がある理由


・特定の拡張子のときだけを遷移させる場合、例えば、拡張子が.htmlの静的ページを、URIは変更せずにPHPの動的ページにするような場合
RewriteEngine On
RewriteCond %{REQUEST_URI} \.html$
RewriteRule (.*) /index.php?uri=$1 [L]

ここでは2行目で拡張子".html"のリクエストだけを対象に指定しています。
3行目でリクエストのURIをパラメータとして "/index.php" にアクセスするようにしています。
さらに、最後の[L]にRが無いため、ブラウザに表示されるURIの変更なしに動的ページとなります。

例 http://www.example.com/test/hello.html でアクセスすると、クライアントには分からないように http://www.example.com/index.php?uri=/test/hello.html が実行され、その結果が返されます。

参考
Apache Module mod_rewrite
posted by jun1 at 21:44| Comment(0) | TrackBack(0) | Web