i18next.use(i18nextXHRBackend).init({
lng: ‘ja’,
fallbackLng: ‘ja’,
該当言語で見つからなかったら、デフォルト言語表示できる。
jsonの中身が、null か、””で。
i18next.use(i18nextXHRBackend).init({
lng: ‘ja’,
fallbackLng: ‘ja’,
該当言語で見つからなかったら、デフォルト言語表示できる。
jsonの中身が、null か、””で。
potファイル生成
xgettext hello.php –from-code UTF-8 –add-comments=TRANSLATORS –output=default.pot
poファイル生成
msginit –locale=ja –input=default.pot
poファイル生成
msgmerge –no-fuzzy-matching ja.po default.pot -o ja.new.po
msgmerge –no-fuzzy-matching ja.po default.pot -o ja.new.po –sort-by-file
と同じ。
msgmerge –no-fuzzy-matching ja.po default.pot -o ja.new.po –sort-output
は不要。poeditでもソート可。未翻訳テキストソートも。
382 sudo yum install php-fpm
384 sudo vi /etc/php-fpm.d/www.conf
391 sudo vi /etc/nginx/nginx.conf
393 sudo /etc/init.d/php-fpm start
395 sudo chkconfig php-fpm on
396 sudo /etc/init.d/nginx restart
http://qiita.com/utano320/items/36b6eac2bbd5bb5657f6
SSL以外はソース ※動作未確認
381 wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.5.2.tar.gz
382 tar xvzf apr-1.5.2.tar.gz
383 cd apr-1.5.2
384 ./configure –prefix /usr/local/apr-1.5.2
385 make
386 make install
387 cd ..
388 wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.5.4.tar.gz
389 tar zxvf apr-util-1.5.4.tar.gz
390 cd apr-util-1.5.4
391 ./configure –prefix=/usr/local/apr-util-1.5.4 –with-apr=/usr/local/apr-1.5.2
392 make
393 make install
394 cd ..
395 wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
396 tar xvzf pcre-8.39.tar.gz
397 cd pcre-8.39
398 ./configure –prefix=/usr/local/pcre-8.39
399 make
400 make install
401 cd ..
402 wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//httpd/httpd-2.4.23.tar.gz
403 tar xvzf httpd-2.4.23.tar.gz
404 cd httpd-2.4.23
405 yum install openssl
406 openssl
407 ./configure –enable-ssl –enable-mods-shared=all –with-apr=/usr/local/apr-1.5.2 –with-apr-util=/usr/local/apr-util-1.5.4 –with-pcre=/usr/local/pcre-8.39 –enable-shared=ssl
408 make
409 make isntall
410 make install
411 service httpd start
412 less httpd
413 ll
414 /usr/local/apache2/bin/httpd -v
415 usr/local/apache2/bin/apachectl start
/etc/letsencrypt/letsencrypt/certbot-auto renew –force-renew && service httpd restart
#lets encrypt 自動更新 毎月1日朝5時
00 05 01 * * /etc/letsencrypt/letsencrypt/certbot-auto renew –force-renew && service httpd restart
参考
http://www.hp-stylelink.com/news/2013/08/20130830.php
ソース
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″ />
<title>Geolocation Sample</title>
</head>
<body>
<script type=”text/javascript”>
if (navigator.geolocation) {
// 現在の位置情報取得を実施
navigator.geolocation.getCurrentPosition(
// 位置情報取得成功時
function (pos) {
var location =”<li>”+”緯度:” + pos.coords.latitude + “</li>”;
location += “<li>”+”経度:” + pos.coords.longitude + “</li>”;
document.getElementById(“location”).innerHTML = location;
},
// 位置情報取得失敗時
function (pos) {
var location =”<li>位置情報が取得できませんでした。</li>”;
location +=”<li>pos=” + pos + “</li>”;
console.log(pos);
document.getElementById(“location”).innerHTML = location;
});
} else {
window.alert(“本ブラウザではGeolocationが使えません”);
}
</script>
<ul id=”location”>
</ul>
</body>
</html>
デモ
https://dev.furoom.net/sandbox/geolocation/
ブラウザごとで挙動違うみたい。
Chrome
HTTPS:○
HTTP:×
次のようなエラー。
PositionError {code: 1, message: “Only secure origins are allowed (see: https://goo.gl/Y0ZkNV).”}
Edge
HTTPS:○
HTTP:○
※Windowsの設定で、位置情報の取得を許可するアプリとして設定が必要
Firefox
HTTPS:○
HTTP:○
Android Chrome
HTTPS:○
HTTP:×
次のようなエラー。
PositionError {code: 1, message: “Only secure origins are allowed (see: https://goo.gl/Y0ZkNV).”}
かつ、GPSを有効にしている必要がある。
していなければ、許可するかどうかのダイアログも表示されない。
Android Dolphin
HTTPS:○
HTTP:×
次のようなエラー。
PositionError {code: 1, message: “Only secure origins are allowed (see: https://goo.gl/Y0ZkNV).”}
かつ、GPSを有効にしている必要がある。
していなければ、許可するかどうかのダイアログも表示されない。
yum install gettext は不要だった
<?php
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
$language = ‘en’;
if (ereg(‘ja’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {
$language = ‘ja_JP.UTF-8’;
}
// Set locale and default domain.
putenv(“LANG=$language”);
setlocale(LC_ALL, $language);
$domain = ‘messages’;
bindtextdomain($domain, “/var/www/html/sandbox/lang/locale”);
textdomain($domain);// Output
echo gettext(“Hello”);echo gettext(“World”);
1019 xgettext -n hello.php
1024 less messages.po
1026 mkdir locale
1027 mkdir locale/en
1028 mkdir locale/ja_JP
1029 mkdir locale/en/LC_MESSAGES
1030 mkdir locale/ja_JP/LC_MESSAGES
1031 cp messages.po locale/en/LC_MESSAGES/.
1032 mv messages.po locale/ja_JP/LC_MESSAGES/.
1033 cd locale/en/LC_MESSAGES/.
1034 msgfmt messages.po
1036 cd ../
1037 cd ../ja_JP/LC_MESSAGES/
1038 msgfmt messages.po
さくらから、「RPCリフレクションによるDDoS攻撃」の踏み台に利用という連絡がきた。
rpcbindは、nfsの検証で起動したサービスだった。
さくらのページを参考にiptablesを設定した。
https://help.sakura.ad.jp/app/answers/detail/a_id/2423/~/iptables%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95
外部サーバからアクセス拒否確認。
read は考慮必要。
read を while にすると、最後の待ちでブロックしてしまう。
fstatで、ノンブロッキングにすると、最初のreadでデータ受け取れないロジックになる(多分)ので、
実際のデータを見て、Content-lengthをもとに全部データ取得で来たら抜ける
というようにした方がよさそう。バッファも1024固定で取ってるけど、
その場合、malloc, callocで動的に。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#include <stdio.h> #include <stdlib.h> /* exit */ #include <sys/socket.h> /* socket, connect */ #include <netinet/in.h> /* sockaddr_in */ #include <strings.h> /* bzero */ #include <string.h> /* strlen */ #include <netdb.h> /* hostent, gethostbyname */ #define BUFSIZE 1024 #define DESTSERV "dev.furoom.net" #define DESTPORT 80 #define MESSAGE \ "POST /sandbox/socket-http/request.php?g=1 HTTP/1.1\r\n\ Host: dev.furoom.net\r\n\ Authorization: Basic dXNlcjpwYXNzd29yZA==\r\n\ Content-Type: application/x-www-form-urlencoded\r\n\ Content-Length: 7\r\n\ \r\n\ a=1&b=2" int main(int argc, char *argv[]) { struct hostent *hostent; struct sockaddr_in server; char buf[BUFSIZE]; int fd; int len; int ret = 1; /* failure */ /* initial */ bzero(&server, sizeof(server)); bzero(&buf, sizeof(buf)); /* lookup ip */ hostent = gethostbyname(DESTSERV); if (hostent == NULL) { herror(DESTSERV); return ret; } /* create socket */ if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); return ret; } /* connect */ server.sin_family = AF_INET; bcopy(hostent->h_addr, &server.sin_addr, hostent->h_length); server.sin_port = htons(DESTPORT); if (connect(fd, (struct sockaddr *)&server, sizeof(server)) == -1) { perror("connect"); goto close_exit; } /* request */ if (write(fd, MESSAGE, strlen(MESSAGE)) < 0) { perror("write"); goto close_exit; } /* response */ if (read(fd, buf, sizeof(buf)) < 0) { perror("read"); goto close_exit; } printf("%s\n", buf); ret = 0; /* success */ close_exit: close(fd); return ret; } |
★アプリレビュー
手順がよくわからなかったのでメモ。
・アプリレビュー
https://developers.facebook.com/apps/1718184088469400/review-status/
・スクリーンショットが必要。
・テストユーザを指定してください。
という事で、本番アプリのテストユーザを指定
・ただ、本番アプリのテストユーザは、まだpages_messaging自体がないので、本番ページとやり取りできない。
・なので、テストユーザで作成したページを使ってもらう想定。でよいのか?
・アプリレビューでは、本物ページしか選べない。から担当者に伝えるすべがないが。。
レビュー用に本番アプリでテストユーザで作成したページを対応させる手順は以下。
https://developers.facebook.com/bugs/230322797329131/?hc_location=ufi
1) Create test user by toggling the Authorize test users for this app and grant permissions “manage_pages” and “page_messaging”.
2) Use the Edit Button and get an access token for this user (using v2.6). Please save this for later.
3) Use edit button to login as the test user
4) After login, create page as the test user
5) Use the user access token for the test user to get the page access token for this user. You can do this with the following call:
https://graph.facebook.com/v2.6/me/accounts?access_token=
6) Use this page access token to link your Facebook Application with your Page.
https://graph.facebook.com/v2.6/me/subscribed_apps?method=POST&access_token=
7) After you have followed these steps you will receive RTU updates to your Test Page and be able to message your Test User from your Test Page.
最後のこれも必要だった。ページアクセストークンの有効期限が短いので、多分レビュー前に切れてしまう。
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
・本番アプリ上のページアクセストークンを、上記テストユーザのページのページアクセストークンに変えた。
・で、申請。
で、良いのか。。
★開発環境
https://developers.facebook.com/apps/1718184088469400/dashboard/
メニューから「テストアプリ」が作成できる。
製品を追加で、「Messenger」を追加。
後の設定は同じ。
使い方としては、
本番アプリ – 本番ページ – 自分、他(レビュー後、無制限)
– テストユーザページ – テストユーザ
テストアプリ – 開発ページ – 自分 ※アプリレビュー無いから、他は、個別に招待した人
– テストユーザページ – テストユーザ
という感じかな。
開発ページに対する、開発アプリの作成は不要。