このような場面に、覚えはありませんか。運用され続けてきた秘伝のコード。正しい仕様はわからず、コードを書いた人はもう居ない。別のコードでは、その仕様に至った意図がわからなくて頭を抱える。いま、2018年だぞ。「このライブラリ、不安定なんだけど使うしかないんだよなぁ。唯一メンテナンスができた田中さん、先月辞めちゃったけど。細部は違えど、覚えのあるレガシーシステムエピソードではないでしょうか。レガシーシステム自体が悪、罪ありき、というわけではないのです。これまで業務を支えてきた、頼れる先輩なのです。流行り廃り、機材や要求水準の変化とともに「レガシー」化してしまっただけで、できる限り、今後もうまくやっていきたいわけです。ときには「全部書き直してやりたい!!」と思うことも無いではないですが、まあそこはそれ。京都Devかふぇ第4回目は、そういったつらみにぶち当たったときの工夫、そもそもつらみをおこさないための工夫を共有して、レガシー先輩とうまく付き合えるようになりたい回です。いった、みんなの'工夫してきたきろく'を、積み重ねた人類史の重みとともに共有しましょう!123456789101112131415161718192021222324252627282930313233343536373839テーマはレガシーシステム考古学です。このような場面に、覚えはありませんか。運用され続けてきた秘伝のコード。正しい仕様はわからず、コードを書いた人はもう居ない。いにしえの文書(ドキュメント)とにらめっこか」また別のコードでは、その仕様に至った意図がわからなくて頭を抱える。いま、2018年だぞ。「このライブラリ、不安定なんだけど使うしかないんだよなぁ。唯一メンテナンスができた田中さん、先月辞めちゃったけど。細部は違えど、覚えのあるレガシーシステムエピソードではないでしょうか。レガシーシステム自体が悪、罪ありき、というわけではないのです。これまで業務を支えてきた、頼れる先輩なのです。流行り廃り、機材や要求水準の変化とともに「レガシー」化してしまっただけで、できる限り、今後もうまくやっていきたいわけです。ときには「全部書き直してやりたい!!」と思うことも無いではないですが、まあそこはそれ。いうことで!京都Devかふぇ第4回目は、そういったつらみにぶち当たったときの工夫、そもそもつらみをおこさないための工夫を共有して、レガシー先輩とうまく付き合えるようになりたい回です。・古文書を読み解いてわかったことをいかに残すか・次に同じことを起こさないためにどうしているか・つらみにまつわる奮闘記そういった、みんなの'工夫してきたきろく'を、積み重ねた人類史の重みとともに共有しましょう!勉強会の様子15分枠トップバッターは、弊社でプリントシール機の開発をしている田村より発表しました!長年運用されてきた自前のライブラリにおける課題と、それに対するプルリクを活用した改善の取り組みについての発表でした。OSアプリ開発の昔話」です。OS)が辿ってきた歴史を改めて確認でき、iPhoneの成長を感じられる発表でした。様より「物理サーバーを運用してきたという話」です。物理サーバーを運営してきたことによる経験や、クラウドへ移行した利点を発表いただきました。懐かしのサーバールームを思い出して色々な感情が湧いてきました。様より「レガシーなコミュニケーションツール」です。私自信、色々と思うところがありリアクションに困りました。やって世界を良くしていく活動には感銘します!2番手は@takey様の「VB6.0との闘い方」です。VB6.0は20年前に出たバージョンですので、その古いものといかに付き合うか、色々な工夫が見られました。様より「Windows95の思い出」です。(写真もスライドも手元にございませんでした!大変申し訳ございません!!!)懐かしのWindows95のゲームが出てきて「うおぉぉ」となりました。様の「なぜFPGAの人は日付フォルダーでバージョン管理をするのか」です。Minoruまとめ今回は特定の分野に限った技術分野ではなく、エンジニアであれば誰もが通るであろう「レガシーシステム」についての勉強会でした。そのため、多様な分野の方々が集ってくださり、懇親会も非常に盛り上がっていたのが印象的です。これまでは弊社サービスのピクトリンクに関わるメンバーばかりでしたが、初めて他部署のメンバーも参加してくれ、とても楽しんでくれました!本勉強会も、今まで以上にもっともっと盛り上げていきたいと思っております。Tweet2018年11月20日フリュー主催の勉強会が第4回目を迎え、会場が変わります!勉強会お初お目にかかります🍤ピクトリンク事業部サービス開発1課のまさおといいます。早いもので第4回目を迎えます!私もスタッフとして参加していますが、毎回たくさんの方に集っていただいていて嬉しい限りです。長年プロダクトを支えてきたいにしえのコードや仕様とうまく付き合うためのお話をします。終了後は軽食をしながらの懇親会も予定しております。!会場までの経路GoogleMapの経路でいうと、このような感じです...が正面入口が18時には閉まってしまう罠があるので、弊社なりに写真付きでご案内します👐ステップ1.JR京都駅から京都タワー方面へ向かうまずは京都駅の中央改札口から出ます。そのまま真っすぐ外に出ると視界が開け、京都タワーが見えます。京都タワーに向かって歩いていくと、信号があります。信号を“右斜めに”渡ってください。京都駅前支店へ向かう信号を渡ったら、ビルに沿って北方面に歩きます。京都タワーとヨドバシカメラが道路を挟んで反対側に見える感じです。ファミリーマートが見えたら、その手前の路地を入ります。あとすこし!路地に入って1つ目の角を左にまがります。曲がってすぐの建物が会場です。※一つ奥の京都銀行の立派な入り口に目が行きますが、18時以降は入れません。手前の通用口からお入りください。当日はこのあたりにスタッフが待機している予定です。つけてつぶやいていただければお迎えに参ります。ステップ3.エレベーターで6階へ上がる建物に入り右に進むと、オフィス階に上がるためのエレベーターがあります。乗りこんで6階へ!エレベーターを降りたら右へ!手前側の扉をお入りください。この扉を入って左側にある扉が会場入口です。😁Tweet2018年11月7日Androidエンジニア以外にも知ってほしいAndroidアプリ用語-UI部品編-Androidこんにちは。ピクトリンク事業部の古川です。この記事はZaimの@akatsuki174さんの記事「iOSエンジニア以外にも知ってほしいiOSアプリ用語-UI部品編-」に感化されて書きました、Android版となります。AndroidとiOSは似たような画面を実装する事は可能です。UIの部品の名称が異なっている事が少なくありません。それぞれ独特の部品もあります。その辺りを明確にし、まとめていこうと思います。Guidelines:AppBars:topiOSではナビゲーションバーと呼びます。現在表示している画面のタイトルといった情報や、関連するアクションを表示する領域です。画面の最上部に表示されます。基本的に常時表示されているものですが、スクロールして下の方にある情報を表示したい際には隠すことも可能です。http://tech.furyu.jp/blog/wp-content/uploads/2018/10/toolbar1.mp4また、画面上に大きく表示していたタイトルをToolbarに入れるようなアニメーションを作ることも可能です。追加されたCoordinatorLayoutを利用します。http://tech.furyu.jp/blog/wp-content/uploads/2018/10/toolbar2.mp4NavigationDrawerAndroidアプリの大きな特徴です。drawerツールバーの左部に「≡」マーク(ハンバーガーマークと読んだりします)がある場合は、NavigationDrawerがある場合が多いです。主な用途は画面の切り替えです。Google系のアプリであればアカウントの切り替え機能を提供したりします。FloatingActionButtonAndroidアプリの特徴です。button通常は画面の右下に表示し、現在表示している画面で行いたいメインのアクションを提供します。ToastAndroidの初期から存在する、メッセージを表示するためのものです。エラーメッセージを表示したり、ログインの成功などで使います。TabLayoutiOSではタブバーと呼びます。Guidelines:Tabs複数の画面を1画面に用意し、ユーザーのアクションによって画面を行き来できるようにするものです。タブ名は文字だけかアイコン付きが一般的です。AndroidだとTabLayoutは画面上部に設置するのが一般的でしたが、近年では下部に設置するようiOSに近づいてきている印象があります。私個人的には、上部にあると片手で端末を持っている場合に指が届かないので、下部に設置されるのは良い傾向だなと感じています。navigationiOSのタブバーと似たレイアウトになります。TabLayoutにも似ていますが、BottomNavigationViewは完全に異なるメイン機能間を切り替えるためのナビゲーションを提供します。アイテムの数も3〜5と制限があります。近年、画面下部にBottomNavigationView+画面上部にTabLayoutを設置するといったアプリが増えてきました。Guidelines:DialogsAndroidでは、上記図のようなダイアログが一般的です。ボタンは基本的に2つです。・ネガティブボタン:キャンセルといったネガティブな動作を割り当てます。・ポジティブボタン:OKや実行といったポジティブな動作を割り当てます。「ニュートラルボタン」と第三のボタンを設置することができますが、あまりオススメしません。ボタンが増えるとユーザビリティが下がる(ユーザーが正常な判断ができなくなる)ため、2つがよいかと思います。Guidelines:Cards最近のGoogle検索結果もCardViewになっていたのをご存知でしたか?各アイテムがまるでカードのようなViewになっていて、ひとつの物体として認識できます。影が映っているように見えるのも特徴で、フラットデザインからマテリアルデザインに変わった時の大きな特徴です。Guidelines:Snackbars簡単なメッセージを画面下部に表示するためのものです。Toastにも似ていますが、Toastはメッセージを表示するだけのものでしたがSnackBarはボタンを設置することが可能です。Googleフォトだと画像を削除すると「ゴミ箱に移動しました」とSnackBarが出ますが、そこに「もとに戻す」ボタンも用意されています。メッセージととにユーザーに何らかの行動をさせたい場合、便利です。(メール送信の取消しなど)Swipe-to-Refresh(Pull-to-Refresh)http://tech.furyu.jp/blog/wp-content/uploads/2018/10/swipetorefresh.mp4「引っ張って更新」と呼んだりします。一度通信して情報を読み込んだ後に更新をかけたい時に使います。WebブラウザやTwitterアプリにも使われています。重要度★ChromeCustomTabs通常はWebブラウザを立ち上げたり、WebViewを用いてWebページを表示していましたが、ChromeCustomTabsを使うとアプリ内のWebページ読み込みを大幅に高速化できます。ChromeCustomTabsはアプリ内に組み込まれたWebViewのような動作をするため、同一アプリ内での表示だとユーザーへ認識させることができます。まとめいかがだったでしょうか。AndroidにはiOSとは異なるViewがたくさんあり、似たものも使い方が多少異なっていたりします。ありますが、また少しずつ触れていけたらと思います。Tweet2018年11月2日pacemaker+corosync環境を作成した時にハマった話CorosyncPacemakerインフラこんにちは。ピクトリンク事業部インフラ課の粟田です。pacemaker+corosync環境をCentOS7上に構築した時にハマった話を書こうかと。unclean(offline)の文字列が見えたので、ググって出てきた結果を参照すると、再起動したら直ったというようなものが出てきたけれども解決に至らず......原因corosyncの設定時には(DNSで解決可能な)ホスト名を指定してたんですが、corosyncはこのホスト名を127.0.0.1と認識してたんでした。faultsなんで127.0.0.1になるんだろうと原因探していると/etc/hostsが悪さしてたんでした。localhost127.0.0.1にホスト名書くなよ......きっとこの辺の設定を全サーバで意識したくなかったせいなんだろうな。