Denen blog

株式会社電縁の社員によるブログです。

高輪”ガードウェイ” を通過してきました。

こんにちは!

最近通勤定期を買うよりも東京メトロ24時間券+私鉄区間の回数券で通勤する方が安いのではと考えております、テレコム第一チームの森村です。

 

本当はこの話でブログを書こうと思ったのですが、検証とかが面倒そうだったので辞めました。

東京メトロの定期って、元を取るには往復で考えると月1×日以上利用する必要があり、しかも定期に記載されたルート通りにしか乗れないので、乗車駅・下車駅が同じでも途中の乗換が改札内乗り換えか改札外乗り換えかで・・・というような内容を書く予定でした。

しかし、定期利用区間によって元を取れるのは月1×日以上という日数も変われば、1・3・6ヶ月定期の どれを いつ買うか でも変わってくるので、ちゃんとした内容にしようとすると論文でも書くのか?というくらい調べる必要がありそうだと思いまして・・・

このままだと話が脱線したままになりそうなので、本題に入っていきます!

 

突然ですが、皆さんは東京都内に桁下が1.5mしかないアンダーパスがあることをご存知でしょうか?

 

f:id:yasuaki-sakai:20190308153417j:plain

 

都営浅草線泉岳寺駅・JR高輪ゲートウェイ駅(2020年開業予定)付近にある、「高輪ガードウェイ」(←勝手に命名) です。

 

過去には、国内刑事ドラマ史上最高傑作の「西部警察」のロケも行われた?という情報もあります。

第75話で、阿藤快演じる犯人グループが、石原裕次郎演じる木暮課長のガゼール※を逃走用車両として要求し、パトカーの追跡を振り切るために天井の低いトンネルに逃げ込むシーンがあるのですが、それがここではないかと。

※木暮課長のガゼールは屋根を切ったオープン仕様で、純正車高より30cm低いためにトンネルをくぐれるという設定

 

f:id:yasuaki-sakai:20190308161331j:plain

 

もしロケ地がここだとしたら、同じ場所を同じオープンカー(車種は全然違いますが)で通ったということになりますね!

オープンカーといっても、ハードトップつけているので屋根開かないのですが。

 

そして、”全高の低いスポーツカーでも天井までこの高さ!” ということをアピールしたかったのですが、

「意外とゆとりあるじゃん。」と思われた方もいると思うのでこちらの写真↓

f:id:yasuaki-sakai:20190308153719j:plain

 

頭上げると天井にぶつかるので、歩行者と前を走るバイクの人が前傾姿勢になっていますね。因みに前走っているバイクは公共チームの秋田です。押忍!

 

 

過去にタクシーの屋根についている提灯がぶつかり破損したという話から、俗名 ”提灯殺しのガード” とも呼ばれているこの道。

 

そんな高輪ガードウェイですが、高輪ゲートウェイ駅開業に伴う再開発によって通行できなくなってしまうという情報があります。行った時も工事のお知らせの看板が出ていました。

 

西部警察ファンとしては実際に通っておきたかったので、通れなくなる前に通ることが出来てよかったです!

 

西部警察ファンの方、天井の低い場所が好きな方、ジョイント音が好きな音鉄の方・・・

通行止めとなる前に行かれてみてはいかがでしょうか?

 

車・バイクで行かれる場合は、全高1.5m以下であることはもちろんのこと、

  • 一方通行であること
  • 速度抑制用にキャッツアイが埋め込まれており、西部警察並みの速度出すと跳ねたり、サスペンション傷めたりすること

に気を付けて走行してくださいね。

以上、西部署からのお知らせでした。

それでは。

 

書いた人:テレコム第一チーム 森村

f:id:yasuaki-sakai:20171002124735j:plain

Android の WebView でも alert や confirm に対応してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

最近くしゃみがよく出るのですが皆さんは大丈夫でしょうか?

先日の Swift に続き今度は Android も触る機会が有ったのでまとめてみたいと思います。

Swift の記事はこちらです。

denen.hatenablog.com

 

というわけで、Android の WebView もそのままでは alert や confirm に対応してくれていないので実装していきましょう。

早速コードです。

private WebView webView1;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView1 = new WebView(this);
    webView1.getSettings().setJavaScriptEnabled(true);
    webView1.getSettings().setUserAgentString("My Browser App");

    webView1.setWebViewClient(new WebChromeClient()  {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(myApp.getContext())
                    .setTitle("My Browser App")
                    .setMessage(message)
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    result.cancel();
                                }
                            })
                    .create()
                    .show();
                return true;
        }
@Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(myApp.getContext()) .setTitle("My Browser App") .setMessage(message) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .create() .show(); return true; } }); setContentView(webView1); webView1.loadUrl("https://www.google.co.jp/"); }

ちょっと長いですが、そんなに難しいことはやっていないかと思います。

setWebViewClient というメソッドに onJsAlert や onJsConfirm というメソッドを持った WebChromeClient クラスを渡してやる感じですね。

 

そして Android だと AndroidManifest.xml に以下の記述を入れるのを忘れないようにしてください。

    <uses-permission android:name="android.permission.INTERNET" />

以上、参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

Swift 4 の WKWebView でタブブラウザに必要そうな機能を試してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

先日 Swift 4 で WKWebView を使う機会が有ったのでもうちょっと触ってみました。

ちなみに前回の記事はこちらです。

denen.hatenablog.com

 

今回は Tab Bar を使って2つの WKWebView を配置し、1つめの WKWebView で新しいウィンドウを開く動作が行われた時に2つめの WKWebView に表示するということを試してみました。

Storyboard はこんな感じになります。

f:id:yasuaki-sakai:20190219112938p:plain

Tab Bar を設置して、Tab Bar Item を2つ配置しています。

Tab Bar Item には対応した Container View が用意されています。

それではコードを見ていきましょう。

import UIKit
import WebKit

class ViewController: UIViewController, UITabBarDelegate, WKUIDelegate, WKNavigationDelegate {
    
    @IBOutlet weak var myTabBar: UITabBar!
    @IBOutlet weak var myContainerView1: UIView!
    @IBOutlet weak var myContainerView2: UIView!

    let wkWebView1 = WKWebView()
    let wkWebView2 = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        myContainerView1.isHidden = false
        myContainerView2.isHidden = true
        
        ...
        
        wkWebView1.frame = myContainerView1.frame
        myContainerView1.addSubview(wkWebView1)
        wkWebView1.load(request1 as URLRequest)

        let urlString2 = "https://www.yahoo.co.jp/"
        let encodeUrlString2 = urlString2.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
        
        let url2 = NSURL(string: encodeUrlString2!)
        let request2 = NSURLRequest(url: url2! as URL)
        
        wkWebView2.customUserAgent = userAgentStr

        wkWebView2.frame = myContainerView2.frame
        myContainerView2.addSubview(wkWebView2)
        wkWebView2.load(request2 as URLRequest)
	
        myTabBar.selectedItem = myTabBar.items![0]
        myTabBar.delegate = self
    }

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
        switch item.tag {
        case 1:
            myContainerView1.isHidden = false
            myContainerView2.isHidden = true
        case 2:
            myContainerView1.isHidden = true
            myContainerView2.isHidden = false
        default:
            return
        }
    }

    ...

    func webView(_ webView: WKWebView,
                 createWebViewWith configuration: WKWebViewConfiguration,
                 for navigationAction: WKNavigationAction,
                 windowFeatures: WKWindowFeatures) -> WKWebView?
    {
        if navigationAction.targetFrame?.isMainFrame != true {
            wkWebView2.load(navigationAction.request)
            myTabBar.selectedItem = myTabBar.items![1]
            myContainerView1.isHidden = true
            myContainerView2.isHidden = false
        }
        return nil
    }
    
}

前回と同じ部分は省いています。

前回は WKWebView を view に追加していましたが、今回は MyContainerView に追加しています。

そして WKWebView は新しいウィンドウが開かれる時はデフォルトでは何もしてくれません。

なので navigationAction を実装してあげる必要が有るんですね。

 

あとは Tab Bar のタップ時の処理も追加している感じです。

これでなんとなくの動作が掴めたでしょうか?

実際にタブブラウザを作るとなるともっと色々考えないといけないですが、参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

Swift 4 の WKWebView で alert や confirm に対応してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

最近 Swift 4 で WKWebView を使う機会が有ったのでメモ的投稿です。

 

WebView を使うとアプリが簡単に作れて便利なのですが、 JavaScript の alert や confirm にデフォルトでは対応してくれていませんでした。

というわけでざっと調べてみたのですが Swift 4 で対応している記事が見つからなかったので書いてみました。

早速コードになります。

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
    
    let wkWebView1 = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let urlString1 = "https://www.google.co.jp/"
        let encodeUrlString1 = urlString1.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
        
        let url1 = NSURL(string: encodeUrlString1!)
        let request1 = NSURLRequest(url: url1! as URL)
        
        let userAgentStr = "My Browser App"
        wkWebView1.customUserAgent = userAgentStr
        
        wkWebView1.uiDelegate = self
        wkWebView1.navigationDelegate = self
        
        wkWebView1.frame = view.frame
        view.addSubview(wkWebView1)
        wkWebView1.load(request1 as URLRequest)
    }

    // alert対応
    func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert)
        let otherAction = UIAlertAction(title: "OK", style: .default) {
            action in completionHandler()
        }
        alertController.addAction(otherAction)
        present(alertController, animated: true, completion: nil)
    }
    
    // confirm対応
    func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
        let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
            action in completionHandler(false)
        }
        let okAction = UIAlertAction(title: "OK", style: .default) {
            action in completionHandler(true)
        }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        present(alertController, animated: true, completion: nil)
    }
    
    // prompt対応
    func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) {
        
        // variable to keep a reference to UIAlertController
        let alertController = UIAlertController(title: "", message: prompt, preferredStyle: .alert)
        
        let okHandler: () -> Void = {
            if let textField = alertController.textFields?.first {
                completionHandler(textField.text)
            } else {
                completionHandler("")
            }
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
            action in completionHandler("")
        }
        let okAction = UIAlertAction(title: "OK", style: .default) {
            action in okHandler()
        }
        alertController.addTextField() { $0.text = defaultText }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        present(alertController, animated: true, completion: nil)
    }
    
}

WKUIDelegate を継承して、alert / confirm / prompt を引っ掛けてあげる感じですね。

参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

ブリ最高!

こんにちは、イノベーションオフィスの吉田です。

気付けば1ヶ月ぶりの更新になりますね・・・

 

今回はブリのお話をしたいと思います(笑)

弊社には昔から大量のふるさと納税を行っているマネージャーがおりまして、ブリが届くという連絡をいただき先日お邪魔してきました!

 

早速ですが、捌いていただいている姿です(笑)

f:id:yasuaki-sakai:20190208165455j:plain

丸々1匹届くのでその写真を撮っておけば良かったのですが忘れていました・・・ 

しばらくするとお刺身がやってきました!

f:id:yasuaki-sakai:20190208165631j:plain

見るからに美味しそうですね!

実際、脂が乗ってとても美味しかったです。

f:id:yasuaki-sakai:20190208170024j:plain
他にもブリシャブや鯖のピザもご馳走になりました!

ご馳走になるばかりで申し訳ない思いもあるのですが、マネージャーいわく「実質タダなので大丈夫!」とのことでした(笑) 

 

こういうのを体験するとふるさと納税を自分もしてみたい!と思いますが、ブリは家で捌けないのが難点ですね(笑)

以上、ブリのお話しでした(笑)

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

Amazon Linux 2環境にPython 3.5.2とPostgreSQL 10をインストールしたお話

f:id:yasuaki-sakai:20180823183652j:plain

Denen blog をご覧の皆様、あけましておめでとうございます。

イノベーションオフィスの吉田です。

本年もよろしくお願いいたします。

 

早速ですが新年1発目ということで昨年末の話をさせてください(笑)

 

昨年末、訳有って EC2 環境に Python 3.5.2 と PostgreSQL 10 をインストールしたのですが、意外とためになったのでメモとして残しておこうと思います。

時期によってパッケージのバージョンが変わってしまうので、2018年12月時点のお話として読んでいただければと思います。

 

前提

OS:Amazon Linux 2

YUM 上にある Python 3 のバージョン:3.7.1

YUM 上にある PostgreSQL のバージョン:9.6

 

Python 3.5.2 のインストール

Python をバージョン指定してインストール手法は幾つかありますが、ここでは自分でビルドすることにしました。

まずは必要なライブラリをインストールします。

$ sudo yum groupinstall 'Development tools'
$ sudo yum install openssl-devel
$ sudo yum install sqlite-devel

次にパッケージをダウンロードしてきてビルドします。

$ mkdir work
$ cd work
$ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
$ tar vxzf Python-3.5.2.tgz
$ cd Python-3.5.2
$ sudo ./configure --prefix=/usr/local
$ sudo make
$ sudo make install

これで python3 コマンドが使えるようになります。

こちらは簡単ですね!

 

PostgreSQL 10 のインストール

さて、問題はこちらです。

実は Amazon Linux 2 には Extra Library と呼ばれるパッケージ群が存在しまして、新しいバージョンのパッケージがインストール出来たりします。

dev.classmethod.jp

しかし、細かいパッケージを指定する方法がいまいち見つからなかったので力技でやってみました。

 

Extra Library も YUMリポジトリの1つのような形なので、まずは YUM からパッケージをインストールします。

$ sudo yum install --enablerepo=amzn2extra-postgresql10 postgresql postgresql-server postgresql-libs postgresql-contrib

はい、リポジトリを指定してあげればいいんですね。

そしたら後は PostgreSQL のセットアップを行っていきます。

$ sudo postgresql-setup initdb
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql

これで完了です。

 

というわけで Amazon Linux 2 の小技でした。

どなたかの参考になれば幸いです。

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

Azure Resource Manager テンプレート作成時に独自のファイルを展開させる方法

f:id:yasuaki-sakai:20180823183652j:plain

こんにちは、イノベーションオフィスの吉田です。

 

みなさんは Azure を使ってらっしゃいますでしょうか?

最近知ったのですが、Azure には Azure Resource Manager(ARM)テンプレートというものが用意されていまして、色々な構成のインスタンスを簡単に作成することが出来ます。

以下をご覧いただければ分かると思いますが、既に様々なテンプレートが公開されているんです。

github.com

例えば「wordpress-mysql-replication」なら、Master-Slave 構成の MySQL が動いている Wordpress 環境を作成することが可能です。

 

この ARM テンプレートでは Azure 上に用意されたリソースを組み合わせて JSON 形式に記述していく仕組みになっています。

で、とある事情でこのテンプレートを作ってみていたのですが、リソースとして用意されていない特定のファイル群を特定の場所に配置したい!みたいな時にどうすればいいか困ってしまいました。

色々調べた結果シェルが実行出来るようなのでそちらを使ってやりたいことを実現出来たのでご紹介したいと思います。

※他にこんなやり方有るよ!って方は教えてください(笑)

 

それではまず、配置したいファイル群を tar.gz 形式に固めて Web から閲覧出来る場所に配置してください。

今回は URL を http://www.example.com/download/resource.tar.gz とします。

 

次に、ファイルをダウンロードして展開するシェルを用意します。

コードは以下の通りです。

#!/bin/sh

mkdir -p /opt/my_resource
wget -P "/opt/my_resource/" http://www.example.com/download/resource.tar.gz
tar xvzf /opt/my_resource/resource.tar.gz -C /opt/my_resource

シンプルですね。

ディレクトリ作ってダウンロードして解凍するだけです。

今回は http://www.example.com/download/download.sh に配置することとします。

 

で、一番のキモがここになります。

ARM テンプレートは azuredeploy.json という JSON 形式のファイルに記述するのですが、Linux でシェル実行するには以下の形で記述する必要があります。

    { 
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "[concat(variables('vmName'),'/downloadResource')]",
      "apiVersion": "2017-03-30",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
      ],
      "properties": {
        "publisher": "Microsoft.OSTCExtensions", 
        "type": "CustomScriptForLinux", 
        "typeHandlerVersion": "1.2", 
        "settings": {
          "fileUris": [
            "http://www.example.com/download/download.sh"
           ],
           "commandToExecute": "sh download.sh"
        }
      } 
    },

variables() や parameters() は任意の値を設定する仕組みなのですが、今回の内容と関係ないので説明は省かせていただきます。

この記述で気にしていただきたいのは以下になります。

  • dependsOn で OS イメージの起動を待つよう指定する
  • properties.publisher で Microsoft.OSTCExtensions を指定する
  • properties.settings.filterUris で実行したいシェルファイルを指定する
  • properties.settings.commandToExecute で実行するコマンドを指定する

これで実際にデプロイしてみるとファイルが展開されるようになるかと思います。

 

ARM テンプレートは慣れるとデプロイも早く、便利なので自分でももっと使っていこうと思います。

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

1食で1日に必要な栄養の1/3が摂取できるBASE RAMENを食べてきました!

こんにちは、イノベーションオフィスの吉田です。

皆さんは完全食というものをご存知でしょうか?

 

Wikipedia によると

完全食(かんぜんしょく)とは、健康を維持するために必要な栄養をすべて含んだ食品、あるいは食事である。

だそうです。

で、最近ラーメンでも完全食が有るというネタを見つけました。

そのラーメンは BASE RAMEN という名前で、BASE FOODさんが開発したそうです。

basefood.co.jp

元々は完全食のパスタを販売されていたんですね!

今回はラーメン凪とコラボしたとのことで、ちょうど会社の近くにあるので食べてきました!

こちらのお店は食券を先に買うタイプなのですが、よく見てみると・・・

f:id:yasuaki-sakai:20181220165909j:plain

「店内現金で注文承ります!!」とのことでした。

早速入店して注文します。

通常であれば味の濃さや麺の固さなどが選べるはずですが、こちらのBASE RAMENに限ってはそういうものは有りませんでした。

 

そして到着!

f:id:yasuaki-sakai:20181220165509j:plain

麺の色が特徴的ですね!

食べてみるとだいぶ歯ごたえの良い麺でした。

スープは煮干の効いたいつもの凪のスープで、美味しくいただきました!

 

ちなみにどこまで食べれば栄養が摂れるのだろう?と思ってTwitterで呟いたところ、公式アカウントさんからお返事をいただきました(笑)

だそうです。

1週間コレだけ食べたらどうなる?的なことも気になるので誰かチャレンジしてみてください(笑)

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

トイレの空き状況をリアルタイムに確認できる「トイレIoTシステム」の提供を開始

f:id:yasuaki-sakai:20181213122458j:plain

こんにちは、イノベーションオフィスの吉田です。

本日、以下のプレスリリースを出させていただいたのでそのお知らせです!

www.denen.com

 

皆様の会社で「トイレに行ってもトイレの個室がなかなか空いていない!」みたいなことが有ったりしないでしょうか?

このサービスは個室トイレの空き状況をトイレに行かず確認できるものとなっています。

詳しくは毎度の事ながらリンク先をご覧いただければと思います。

 

ちなみに弊社のトイレにも以下のような感じで早速設置しています。

※画面デザインは社内用のサイネージ向けにカスタマイズされたものとなります。

f:id:yasuaki-sakai:20181213123128j:plain

導入後は以前よりも個室が空いていない事が減ったように感じます。

可視化されることで長居する人が減ったのかもしれませんね!

ご興味有る方は是非お問い合わせいただければと思います!

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain

今年も社内ハッカソンを開催しました!

f:id:yasuaki-sakai:20181205115053j:plain

こんにちは、イノベーションオフィスの吉田です。

寒くなったかと思ったら、急に暖かくなったりして服装が難しい季節ですね。

 

今日は、先週開催した社内ハッカソンのご紹介をしたいと思います。

※「社内」と言っても社内で開発する訳では無く、社内の人間だけが参加という意味合いです。

 

ちなみに去年の記事はこちらです。

denen.hatenablog.com

 

去年は山梨県石和温泉でしたが、今年は千葉県に行ってきました。

場所はこちら!

合宿スペースについて | コワーキングコミュニティまるも

南房総、金谷に有るコワーキングコミュニティまるもさんです。

こちらはJR内房線浜金谷駅から徒歩で行けるので車が無くても安心です!

徒歩圏内にはスーパー、コンビニ、飲食店、フェリー乗り場(!) 等が有り、食料等の調達も困りません。

しかもコワーキングスペースだけあってホワイトボードや電源タップ、Wi-Fi、液晶ディスプレイなども揃っており至れり尽くせりな感じです。

 

というわけで着いたら早速準備&開発開始です!

f:id:yasuaki-sakai:20181205115742j:plain

皆さん頑張ってますね!

私は運営側なので気楽です(笑) 

 

実は、まるもさんの合宿プランでオススメなのが夕食のBBQです!

f:id:yasuaki-sakai:20181205120138j:plain

コワーキングスペースの真ん前でBBQが楽しめるんです!

f:id:yasuaki-sakai:20181205120403j:plain

皆さん非常に楽しんでました!

夕食が終わったらまた開発に戻り、皆さん夜中まで頑張っていました!

 

そして浜金谷でもう1つオススメしたいのがアジフライです!

テレビなどでも取り上げられているので知っている方もいらっしゃるかと思いますが、黄金アジが有名で特にさすけ食堂さんが有名なようです。

sasukeshokudou.com

というわけで行ってきました(笑)

今までアジフライ定食を自ら頼んだことなど無かったのぐらいアジフライを食べたことは無かったのですが・・・こちらのアジフライは絶品でした!

f:id:yasuaki-sakai:20181205120912j:plain

刺身も美味しかったですし、この為に来る人が居るというのも頷けます。

お昼を食べたらまた開発に戻り、夕方まで皆さん頑張っていました。

 

場所を変えて気分を変えて開発を行うのは楽しいのでまた来年も開催したいと思います。

そろそろ社外の人も巻き込んで・・・なんて考えていますが、どうなることやら。

このブログをご覧になっている方にご参加いただける日が来たらいいなぁなんて思っています。

 

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain