投稿者のアーカイブ

baserCMS3系でのサイトマップカスタマイズ

bserCMS3系へのメジャーバージョンアップからはや半年以上、やっと弊社サイトを2.1.1から3.0.2へバージョンアップしました。

バリバリにカスタマイズしているので腰が引けていたのです。

旬を外していたり、イレギュラーなカスタマイズをやっていたりでバージョンアップにはかなり苦労したのですが、その話は次にとっておきまして、まずは以前書いた『baserCMSのサイトマップをカスタマイズ』のフォローを。

上記記事のコードですが、アドオンマイグレーター(http://barket.jp/products/detail.php?product_id=11)でテーマを変換しただけでは(やはり)動きませんでした。

少し修正が必要でしたので修正後の弊社のサイトマップのコードを置いておきます。参考にどうぞ。

BcBaser->sitemap() で呼び出す
 */
//ここから設定
//表示しないurl
$disables = array(
'/index_test',
);

//$inserts = array(before_url=>array(title, url),,,)
//before_urlの次に挿入url,titleで作成したアイテムを挿入
//ブログ、メールフォームなどpage以外を途中に挿入することが出来る。
$inserts = array(
'/sitemap' => array('新着情報', '/news'),
'/news' => array('お問い合わせ', '/contact'),
'/it-model/faq' => array('ダウンサイジングについてのお問い合わせ', '/contact_itmodel'),
'/roundcube/faq' => array('Roundcubeについてのお問い合わせ', '/contact_roundcube'),
'/kolab/faq' => array('Kolabについてのお問い合わせ', '/contact_kolab'),
);
//設定ここまで

//関数
$bcBaser = $this->BcBaser;
$outputPageItem = function ($recursive, $title, $url) use (&$bcBaser) {
?>
  • link($title, $url) ?>
  • link($title, $url); else: echo $category_title; endif; echo PHP_EOL; }; $outputCategoryItemTail = function () { ?>
    • BcBaser->element('sitemap', array( 'pageList' => $pageCategories['children'], 'category_title' => $category_title, 'category_url' => $category_url, 'recursive' => $recursive+1 )); endif; if($outputed_category_li): $outputCategoryItemTail(); endif; endforeach; endif; ?>

    ポイントは「$bcBaser = $this->BcBaser;」して$bcBaserを無形関数に渡して使用するところです。

    Facebooktwitterlinkedintumblrmail

    『ぺちぱな。∞(えいと)』で Vagrant、HHVM、Hackして来た

    muraveです。ご無沙汰しております。

    もんきー(さる) 2014年5月17日(土)、

    ぺちぱな。∞(えいと)〜Hackするのに悪いヤツはいない。HackとCrackを間違えるのに碌なヤツはいない〜

    に参加いたしました。

    Vagrant環境から構築して、HHVM(HipHopVM)用にPackegeしたBoxファイルを配布、PHPとFacebookがOSSとしてリリースした新言語Hackの比較までやってしまおうという意欲的な勉強会でした。

    環境構築でのひっかかり(原因は使用ポートの衝突、CPUの仮想化支援がONになっていなかった等)はありましたが全員完走でした!

    この勉強会の資料がすばらしくて(もちろん資料だけではないですけど)、懇親会でも@hideAki76氏を褒めちぎっていたのですが、この資料が公開されましたよ!ということをみなさまにも強くお伝えしたい。

    自習するにはHHVM用Boxの問題がありますが、HHVM用環境構築のプロビジョニングについても書いてあるのでどうになるんじゃないでしょうか。すばらしい。

    HHVM、はやくdebian系じゃなくても気軽に動かせるようになるといいな。

    Facebooktwitterlinkedintumblrmail

    IronPythonとジェネリックと初期値わたし

    C#勉強会に行って自己紹介で「MVVMパターン用のフレームワーク使ってViewとViewModelはC#、ModelはIronPythonで書います」と言ったら微妙な空気になりました、夏。

    muraveです。

    というわけでC#とIronPythonを組み合わせて書いてます。基本的に配列や辞書は便利なのでPythonのモノ使ってましたがパフォーマンス・チューニングやっててジェネリック使ったほうがいいところもあるかな、と。

    IronPython側でのジェネリックの書き方は知っててたまに使ってたんですが(C#での<>が[]になります)、試したら普通に初期値も与えられるのにちょっと感激。

    C#で書くとList<string>の場合

    >>> import site
    >>> import clr
    >>> from System.Collections import Generic as DotNetCollectionsG
    
    >>> dot_l = DotNetCollectionsG.List[str]()
    >>> print dot_l
    List[str]()
    
    >>> dot_l = DotNetCollectionsG.List[str](['a', 'b'])
    >>> print dot_l
    List[str](['a', 'b'])

    C#で書くとDictionary<string, int>の場合

    >>> import site
    >>> import clr
    >>> from System.Collections import Generic as DotNetCollectionsG
    
    >>> dot_dict = DotNetCollectionsG.Dictionary[str,int]()
    >>> print dot_dict
    Dictionary[str, int]()
    
    >>> dot_dict = DotNetCollectionsG.Dictionary[str,int]({'a':1 ,'b':1})
    >>> print dot_dict
    Dictionary[str, int]({'b' : 1, 'a' : 1})

    ね♪

    helpみたら普通に書いてありました。

    >>> help(dot_dict)
    Help on Dictionary[str, int] object:
    
    class Dictionary[str, int](object)
     |  Dictionary[str, int]()
     |  Dictionary[str, int](capacity: int)
     |  Dictionary[str, int](comparer: IEqualityComparer[str])
     |  Dictionary[str, int](capacity: int, comparer: IEqualityComparer[str])
     |  Dictionary[str, int](dictionary: IDictionary[str, int])
     |  Dictionary[str, int](dictionary: IDictionary[str, int], comparer: IEqualityComparer[str])
     |
    以下略
    

    えらいなぁ。

    Facebooktwitterlinkedintumblrmail

    IronPythonでもRequestsが使いたい

    Requests: 人間のためのHTTP
    http://ja.python-requests.org/en/latest/

    Pythonの便利なHTTPライブラリ Requests を IronPython でも使いたいわけです。
    こんなことを書いているということは素直には使えないわけです。

    一応動作してるかな〜、というところまで行けたのでメモしときます。IronPython は 2.7.3 で、Requests は 1.1.0 です。

    ポイントは2つ。

    まず一つ目。

    sys._getframe が必要なので ipy.exe (or ipy64.exe) に -X:Frames オプションを付けて起動する。

    オプションはこんな感じで確認できます。

    C:\Users\murave>ipy -help
    Usage: ipy.exe Usage: ipy [options] [file.py|- [arguments]]
     <前略>
     -X:Frames                Enable basic sys._getframe support
     <後略>
    

    2つ目。IronPython には idna エンコーディングがないので回避する。

    requests の models.py で使用されているので取り敢えずコメントアウト。

    idnaで検索すると290行目あたりで使用されてます。

    #        try:
    #            netloc = netloc.encode('idna').decode('utf-8')
    #        except UnicodeError:
    #            raise InvalidURL('URL has an invalid label.')
    

    netloc = netloc.encode(‘utf-8’).decode(‘utf-8’) に書き換えてみたりもしたのですが馬鹿らしい気がするのでコメントアウトしました。
    おそらくこの影響で「ドメインとURLの国際化」は未対応になってしまってますが、動かないよりはいいかと。

    C:\Users\murave>ipy -X:Frames
    IronPython 2.7.3 (2.7.0.40) on .NET 4.0.30319.18010 (32-bit)
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> import json
    >>> r = requests.get('http://172.16.191.1:8001/api/v1_0/poll/')
    >>> r.text
    u'{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_cou
    nt": 3}, "objects": [{"id": 1, "pub_date": "2013-03-05T13:51:15", "question": "W
    hat\'s up?", "resource_uri": "/api/v1_0/poll/1/"}, {"id": 2, "pub_date": "2013-0
    3-06T10:01:35", "question": "\u65e5\u672c\u8a9e\u30c6\u30b9\u30c8", "resource_ur
    i": "/api/v1_0/poll/2/"}, {"id": 3, "pub_date": "2013-03-06T13:51:15", "question
    ": "\u3044\u3044\u3044", "resource_uri": "/api/v1_0/poll/3/"}]}'
    >>> res = r.json()
    >>> print res['objects'][1]['question']
    日本語テスト
    >>> payload = {"pub_date": "2013-03-08T20:19:15", "question": "どうかね?"}
    >>> r = requests.post('http://172.16.191.1:8001/api/v1_0/poll/', data=json.dumps(payload), headers={"Content-Type": "application/json"})
    >>> r 
    
    >>> payload = {"pub_date": "2013-03-08T20:19:15", "question": "putは?"}
    >>> r = requests.put('http://172.16.191.1:8001/api/v1_0/poll/1/', data=json.dumps(payload), headers={"Content-Type": "application/json"})
    >>> r
    
    >>> r = requests.delete('http://172.16.191.1:8001/api/v1_0/poll/1/')
    >>> r
    
    

    と、requests.get、requests.post、requests.put、requests.delete 動いているようです。

    Facebooktwitterlinkedintumblrmail

    Eclipseでプロジェクトが表示されなくて翻弄される

    Netbeansが好きなmuraveです。おはようございます。ご無沙汰しております。

    Eclipseさん、苦手なのですが、強力なので使うことも多いです(DBモデリングでERMasterとか)。
    今回は主にPythonの開発環境としてPyDevを使いたくて環境をつくりました。

    最初、PyDevプラグインだけをいれて作業していたのですがHTMLエディターがなかったのでAptana Studio全部を入れたほうがいいなと(PyDevが入っていると依存性エラーがでてインストールできなかったので)PyDevをアンインストールしてからAptana Studioをインストールしました。

    すると、作業していたプロジェクトが見えなくなりました。 ギャーー!

    File > Import > Existing Projects into Workspace

    で読み込もうとしても

    「Some projects cannot be imported because they already exist in the workspace」

    プロジェクトはあると言われててます。見えないのに。

    いろいろと試しましたが結局昨日は解決できませんでした。

    今朝、試しに別途新しいプロジェクトを作ったのですがそれも見えなくて「これはPyDevの問題か?」とJavaパースペクティブに切り替えたところプロジェクトが見える! 設定の問題? それとも壊れてる?

    結論は Packege Explorer の Top Level Elements が Working Sets になっていたためでした。

    Projectsに変更すると

    表示されました。ほっ。

    基本的なことなのでしょうが、絶望的な気分になりました。

    Facebooktwitterlinkedintumblrmail

    Eサイクルがやってきた

    『CEATEC JAPAN 2012』長崎県ブースに一緒に出展した有安オートさんのEサイクル「ISOLA」。
    一目惚れして即発注でした。

    本日、ついにやって来ました。折りたたみにパワーアップして!

    折りたたんだ状態はこんな感じ。

    組み立てた状態のは私(murave)の、折りたたみ状態のはminemazさんのです。

    有安オートさんのページ
    https://sites.google.com/site/ariyasuauto/

    Eサイクル「ISOLA」のページ
    http://www.isola-japan.com/

    Facebooktwitterlinkedintumblrmail

    いらっしゃいませ OSC2012福岡

    ブースこんな感じです。エレベーターで上がってきたらすぐというナイスポジション。
    「受付ですか?」と言われガチなのがたまに傷デス。

    あと喫煙所(屋上?)へもウチのブースの横から出れますヨ。

    セミナー関係は14時からは @minemaz が

    『県庁並行稼働中!OpenCOBOL汎用機ダウンサイジングでのハマりどころ』

    というセミナーを行います。

    また、12時からの

    『OSS九州サミットあげいん ~横の連携、深めていきますよぉ~』

    にも @minemaz がパネリストとして登場します。

    よろしくお願いします。

    おまけ。缶バッチ((C)みさくらなんこつ・JACUG)に侵略された自由配布ブース。

    Facebooktwitterlinkedintumblrmail

    福岡Ruby会議01 その後の話

    先週の土曜日、福岡Ruby会議01に参加しました。とても、とても刺激的な一日でした。

    @Spring_MT さんがきれいにまとめてくださってます。

    福岡Ruby会議01を開催 & トークしてきました! – CubicLouve

    当日の話はそちらを見てもらったほうが良いなぁと思ったので個人的なその後の話を。

    レールにのってて大丈夫か?

    @kakutaniさんの話に出てきた札幌Ruby会議2012での@ursmさんの発表「Ruby on Rails: The Bad Parts」が気になったので動画を見ました。とても良かったです。

    RailsやRailsっぽいWebフレームワークを扱っている人は見るべきだと思います。

    ウチでもRubyでフィジカルコンピューティング

    山崎さんのLT「Rubyでフィジカルコンピューティング」

    最後のページにこうありましたね

    「実験協力者募集中!」

    てなわけで長崎代表として借りてきました BeagleBone!

    先ほど山崎さんが作成されたディスクイメージで起動して設置しました!

    いまのところ順調にログがとれているそうです。どんなデータがとれるか楽しみ!

    Facebooktwitterlinkedintumblrmail

    Thunderbirdさんにディスクを超食われてた件

    おかしいとは思ってたんだけど、そんなわけないと思ってたんだ。長い付き合いゆえの思い込みってやつ。

    「覚えがないのになんかディスクの空き容量が減っていく」

    いくらなんでもおかしいと調べたらThunderbirdさんに160GB超もっていかれてました。

    どうもIMAP使用時「同期とディスク領域」のデフォルト設定が「すべてのメッセージをローカルに同期する」に変更になったらしい。しばらく前にトラブルがあって再インストールしたのでその後に設定が変わってしまっていたようだ。たぶん。

    こうなってました。

    サーバーに蓄積したメール(とたぶん添付ファイルも)ローカルにダウンロードしつづけていたわけで。

    設定変えて、

    「ファイル」メニューから「フォルダを最適化」したら160GB空き容量が増えましたヽ(´ー`)ノ

    Facebooktwitterlinkedintumblrmail

    OSC2012大分Fallいいね!

    はじまりました。

    ブースを出してるとなかなかセミナーに参加できなくて残念だったりするんですが、今回はブースとセミナーが同室なので全部聞けます。

    うれしい!

    Facebooktwitterlinkedintumblrmail