バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)NTT DATA Technology & Innovation739 views•79 slides
RSS(Atom) を配信していないサイトの RSS を自前で用意する気になり、お手軽に作れそうだった Google Apps Script(GAS) で web の記事1を参考に作ったのですが、その際に RSS の xml を作るのが面倒だったので、 規定のフォーマットのオブジェクトを渡したら xml に変換するライブラリを用意しました。 GAS で RSS 配信サービスが必要な方、もしよろしければお使いください。 なお、 RSS 配信と謳っておきながら対応している xml は Atom のみです。 依存ライブラリの設定 GAS のエディタ画面のメニューの [リソース]-[ライブラリ...] をクリックしてダイアログを開きます。 [ライブラリを追加] という入力欄に MuOceWm5hEHRyN-rW66jK0WxlxRXaDxkn という値を入力し、 [追加] ボタンをクリックします。
以前、GoogleAppsScript (以降、GAS) にてXMLを扱ったことがありました*1。 GoogleAppEngineとGoogleAppsScriptでアルクマを追いかける - メモ的な思考的な そんな中、先日GASのリリースノートが更新され、今までのXMLがDeprecatedとなり、今後はXML Serviceというものを使うことになりました。また、公式Blogにも記事がアップされています。 Release Notes - Google Apps Script — Google Developers XML changes in Apps Script - Google Apps Developer Blog そこで新しいXML Serviceを使って何か作ろうと考えたところ、RSSフィードもXMLの一つということを思い出し、GASでRSSフィードを作成・出力してみること
What's the role of Go in a universe where Rust exists? Imagine you’re a developer who mainly works with Go. You go to an event and, while chatting with some people, you decide to share with them the news that you wrote a small tool that does something. You claim that since you wrote it in Go, it’s fairly fast, it’s a single binary, etc. The group seems pleased with your recount and you start feeli
Blog by msyk Talk about computer, network and how we should work. Mountain Lionで登場した通知センターは賛否ありますが、まあ、慣れてくると別に気にならないというか、逆にシステム側で便利につかえるようにどんどんなってきているので、今となってはなくなると不便な人も多いかもしれません。挙動は以前よりシステム環境設定の「通知」で変更はできますが、10.8では、コマンドラインから通知を出せなかったということがあります。しかしながら、それができるようになりました。スクリプトから通知ができます。 そのためのベースの機能は、AutomatorとApple Scriptでの通知のサポートです。それぞれ、次のようなアクションおよびコマンドが追加されています。display notificationコマンドはStandard Addi
android / iosで配信する、webview経由、railsのgameアプリで、push通知を実装する機会があったので、push通知に関して、サービスを比較してみた。 Amazon Simple Notification Service 最初の100万送信無料、以降100万送信ごとに0.5USD mobile backend ニフティクラウドのサービス。無料で200万プッシュ、または月額3万円で1,000万プッシュまで可能 Appvisor push 料金非公開だが、導入事例が結構すごい CORE PUSH 100ユーザまで無料、25,000ユーザまで月額9,800円 Growth Push 月100万APIアクセスまで無料。その後は月額9,900円(月200万APIアクセス) Kii Cloud 月100万プッシュまで無料。その後は7セント/1,000通の従量課金 少し前の記事
例えば、ターミナルでruby weather.rbを実行すると、こんな感じで表示してくれます。 やっていること Livedoorが提供しているお天気WebサービスのAPIに6桁からなるCity IDを渡し、 返ってきたJSONをパースし、 その結果をTerminal-notifierに渡す 通知センターで何かしたい時に、Rubyで気軽にさくさくっと書けるあたりが面白いね。 ソースコード # # 天気予報をOSXの通知センターで表示するサンプルプログラム # require 'json' require 'open-uri' require 'terminal-notifier' def notify_weather # location_idについては、以下を参照のこと # http://weather.livedoor.com/forecast/rss/primary_area.xml
基本的に、重たい作業はあまりしないのですが、Macが古いのでLaTeX4ページをビルドするにも数秒掛かる. いまこんな感じで執筆中。 atom で texファイルに打ち込み watchdog モジュールで監視されている 変更来た!!ってなったら、invoke ファイルが走る. (近いうちにfabに変えたい) makefile はよく分からない.(文法が気持ち悪い) 走り終わったら, 通知センターに通知される。"LaTeX Build Finish!!"的な。 この記事は、slackが流行る中敢えて通知センターを使おうという話。 セットアップ モジュールを入れましょう pync 1.6.1 #! python from pync import Notifier def mac_notify(msg=""): try: Notifier.notify("Task Finish. %s " %
Fitbit Web API で色々と詰まるPosted on Mon, Dec 24, 2018 Tags fitbit, api, golang, ddd DDD を手になじませるため、Go言語 & DDD習作を作りたかったまず、そもそもやりたいこととして、Fitbit の睡眠情報と運動の情報を Google Calendar に同期させたかった。 そのためには、 Fitbit の認証を通すFitbit から Sleep, Activity のデータを取得Google Calendar の認証を通すGoogle Calnedar に Sleep, Activity を予定として追加というプロセスが必要だった。これを実はちょうど 1年前に Python で作っていた。 Go-zen-chu/fitbit2gcal: Get data from Fitbit and register th
macOSをHigh Sierraにアップデートしたら、cURLのバージョンが7.54.0になっており、さらにHTTP/2の利用ができるようになっていました。 iOS10からはAPNs Provider APIを利用したPUSH通知が受け取れていたため、pemファイルさえあればローカルのmacOSからiPhone実機へ向けたPUSH通知を送れます。 念のため、curlコマンドからnghttp2込みでビルドされているのを確認するのは-Vです。 $ curl -V curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps p
みなさん、こんにちは。グリーのかとじゅん(@j5ik2o)です。 このエントリは GREE Advent Calendar 2013 の 18日目の記事です。よろしくお願いします。 私がグリーに入社してやっていることは、プログラミング言語 Scalaとドメイン駆動設計(以下、DDD)の布教活動です。布教活動といっても宣伝するだけでは具体性に欠けるので、実際に開発チームに入ってScalaやDDDの技術支援を行っています。本エントリでは、Scalaを用いたDDDの設計と実装をどのように行っているかを、DDDを知らない人でもできるだけわかりやすく説明したいと思います(Scalaわかっていると読みやすいですが、あんまり複雑なコードは出てこないのでなんとなく読めるのではないかと思います)。なお、DDDの実践例は他にもあります。一例だと思って読んでいただければ幸いです(先日のSNSチームでのドメイン駆
概要 やや古い記事だけど、InfoQ のドメイン駆動設計・開発の実践には次のように書かれています。 ドメイン・クラスがData Access Object(DAO:データ・アクセス・オブジェクト)クラスに依存し、サービス・クラスがドメイン・クラスに依存するという設計上の依存関係がDDDによる実装に際してDIを"なくてはならない"ものにしています。 Python の場合、DI(依存性の注入)の実現には Inject が便利です。 利用例 ざっと100行程度でサンプルを書くと、このような形になります。 # -*- coding: utf-8 -*- import uuid from abc import ABCMeta, abstractmethod import inject def config(binder): binder.bind(UserRepository, UserMemory
コードで学ぶドメイン駆動設計入門 〜エンティティとバリューオブジェクト編〜 - じゅんいち☆かとうの技術日誌 コードで学ぶドメイン駆動設計入門 〜振る舞いとサービス編〜 - じゅんいち☆かとうの技術日誌 コードで学ぶドメイン駆動設計入門 〜ファクトリ編〜 - じゅんいち☆かとうの技術日誌 コードで学ぶドメイン駆動設計入門 〜リポジトリ編〜 - じゅんいち☆かとうの技術日誌 引き続き連投エントリ。次はアグリゲート。 実は最近まで「アグリゲートってなんだろう、、ライフサイクルの話題なのか」なって誤認識してたのですが、もう一度原書を読みなおして、やっと理解。まぁ、このパターンはすでに実施していたので、改めてこれはアグリゲートという名前かと知ったという次第。 つまるところ、アグリゲートとは、簡単にいうとライフサイクルを取り扱う境界のことですね。そもそも、Aggregateとは集約という意味があって
コードで学ぶドメイン駆動設計入門 〜エンティティとバリューオブジェクト編〜 - じゅんいち☆かとうの技術日誌 コードで学ぶドメイン駆動設計入門 〜振る舞いとサービス編〜 - じゅんいち☆かとうの技術日誌 コードで学ぶドメイン駆動設計入門 〜ファクトリ編〜 - じゅんいち☆かとうの技術日誌 引き続き連投エントリ。私も来年で39歳になります。そして息子が7歳。いいおやじですが、脳は衰えないと言われています。鍛えれば鍛えたほど進化できると信じます。 ということで、リポジトリ編に入ります。 リポジトリ リポジトリは、ライフサイクルの途中から最後にフォーカスし、オブジェクトの永続化と永続化されたそのオブジェクトを検索する手段を提供するオブジェクトです。このように説明すると、DAOに近い印象を持つかもしれませんが、DAOはRDBMSやSQLなどのインフラストラクチャ層の関心事を含んでいるので、ここでは
コードで学ぶドメイン駆動設計入門 〜エンティティとバリューオブジェクト編〜 - じゅんいち☆かとうの技術日誌 コードで学ぶドメイン駆動設計入門 〜振る舞いとサービス編〜 - じゅんいち☆かとうの技術日誌 と続いて、このエントリはファクトリ編を解説します。 ドメインオブジェクトのライフサイクル これまで紹介したエンティティやバリューオブジェクト、サービス(以下、これらをドメインオブジェクトと呼ぶことにします)はライフサイクルを持っています。 ライフサイクルと聞くと、newされてからGCされるまでの間を想像します。しかし、一般的なアプリケーションでは、実際はVMのライフサイクルを超えるライフサイクルを扱うことが多いと思います。たとえば、テキストエディタで編集したデータを永続化する場合などです。テキストエディタのデータは単なるバイト配列と捉えるのではなく、ドメインモデルとして捉えることができます
コードで学ぶドメイン駆動設計入門 〜エンティティとバリューオブジェクト編〜 - じゅんいち☆かとうの技術日誌 からの連投エントリ。振る舞いとサービス編です。今回もコードを使って解説したいと思います。 サービスとは、モノとして扱うと不自然なものをサービスに分類しようという考えです。 ドメインで扱う概念の中には、1つの機能や処理が単体で存在していて、もの(オブジェクト)として扱うのが不自然なものもある。そうしたものは、サービスという形でユビキタス言語に組み込む。サービスは基本的に状態をもたない(stateless)。 佐藤さんが語られている通りに、従来のサービスとDDDのサービスはレイヤーの位置関係が違います。今までのサービスはDDDのアプリケーション層です。このエントリでは、今までのサービス(DDDのアプリケーション層)の話は一切出てこないので、今までのサービスの概念を一旦忘れましょうwそう
先日、DevLOVEで発表した「コードで学ぶドメイン駆動設計入門」ですが、入門としながらも難しかったかもしれません。モデリングの話は難しい方の話題なので仕方ないのですが、できるだけわかりやすく補足するブログを書いてみたいと思います。 まず、レイヤードアーキテクチャの話ですが、こちらのスライドを参照してください。 DEVLOVE HangarFlight で話したスライド&ソースコード - じゅんいち☆かとうの技術日誌 平たく言うと、そのアプリケーションが解決する問題の領域がドメインです。ドメインとそれ以外のものをごっちゃにしないようにしたのが、ドメイン駆動設計だと考えればよいと思います。 一般的に業務システムでは、対象業務がドメインに成り得ますので、ドメインは業務に準えて語られることが多いと思います。ドメインに登場する概念をユビキタス言語*1として定義し、モデルに落としこむというのが設計の
2010年も今日で終わりですが、皆様におかれましてはどのような年でしたか。 私は、この一年で「新しい技術の価値観」と「人との出会い」の二つの機会が恵まれた年でした。仕事に、コミュニティ活動に、お世話になった皆様、本当にありがとうございました。2011年も、皆様にとって良い年であることを祈っています。 さて、僭越ながら、Scala Advent Calendar jp 2010の最後を努めさせていただきます。31日になってすぐなのですが、帰省の都合で早めにエントリを投下しますm(__)m Scalaの個別のノウハウは、すでにいろいろなブログで紹介されているので、ここではScalaでDDDを始めるために必要な情報を提供したいと思います。DDDをコードで具体的に知りたい人は、以下のエントリを参照してください。DDDは設計思想なので100人のプログラマがいれば100通りの設計や実装があると思います
バージョン Python 3.7.0 目次 ユーザ関連の処理を実装 テスト用のリポジトリを実装 テストを実装 参考文献 おまけ ディレクトリ構成 ファイルを分割しているので、ディレクトリ構成を載せておきます。 DDD_application_service ├── test │ └── test_user_application_service.py ├── user.py ├── user_application_service.py ├── user_repository.py ├── user_service.py └── user_summary_model.py import uuid from typing import List from DDD_application_service.user import User, FullName, Username, UserI
バージョン Python 3.7.0 目次 テスト用のリポジトリを実装 リポジトリの依存を除去 参考文献 おまけ ディレクトリ構成 ファイルを分割しているので、ディレクトリ構成を載せておきます。 DDD_test_repository ├── in_memory_user_reposiotry.py ├── programn.py ├── test │ └── test_program.py ├── user.py └── user_service.py import uuid from typing import Union from DDD_test_repository.user import UserId, FullName, Username, User class InMemoryUserRepository: def __init__(self): self.data =
バージョン Python 3.7.0 目次 各モデルを利用する テスト 参考文献 各モデルを利用する この記事以前に、実装した値オブジェクト エンティティ ドメインサービスを使って、ビジネスロジックを表現します。 from __future__ import annotations import sqlite3 import unittest import uuid from dataclasses import dataclass @dataclass(frozen=True) class UserId: value: str @dataclass(frozen=True) class Username: value: str @dataclass(frozen=True) class FullName: first_name: str family_name: str @datacla
import dataclasses import unittest @dataclasses.dataclass(frozen=True) class FullName: full_name: str @dataclasses.dataclass class User: def __init__(self, full_name: FullName): self.full_name = full_name def change_full_name(self, new_name: FullName) -> None: if new_name is None: raise ValueError(f"{new_name} is invalid argument") self.full_name = new_name class TestUserEntity1(unittest.TestCase)
バージョン Python 3.7.0 目次 値オブジェクトの説明 値オブジェクトのルール 値オブジェクトを作る理由 参考文献 おまけ 値オブジェクトの説明 値オブジェクトとは、「一意に識別して変更を管理する必要がないモノ」。 適切に設計していれば、値を想定外に書き換えられてしまうリスクがなくなり、安心して開発ができます。 値オブジェクトのルール 値オブジェクトを作るときのルールが3つ存在します。 状態を変更不可能にする 同一の値オブジェクト同士を同じオブジェクトと判断できる 交換可能である 状態を変更不可にする pythonでイミュータブル(変更不可)なクラスを作るには、dataclassを使うと良いでしょう。 ただ、dataclassはpython3.7から使用可能です。 (dataclassに関して参考になる記事) import dataclasses @dataclasses.dat
バージョン Python 3.7.0 目次 リポジトリの実装 DBに関する処理を除去 テスト 参考文献 おまけ ディレクトリ構成 ファイルを分割しているので、ディレクトリ構成を載せておきます。 DDD_repository ├── program.py ├── test │ └── test_program.py ├── user.py ├── user_repository.py └── user_service.py import sqlite3 from typing import Union from DDD_repository.user import Username, User, UserId, FullName class UserRepository: def find(self, username: Username) -> Union[User, None]: c
バージョン Python 3.7.0 目次 ドメインサービスとは エンティティ自身に横断的な知識を実装 ドメインサービスに横断的な知識を実装 使う場面によっては別の案があるかも ドメインサービスとは ドメインサービスは、値オブジェクトとエンティティの横断的な知識を実装することが許されている。 エンティティ自身に横断的な知識を実装 エンティティに横断的な知識を持たせるように実装してみる。 ユーザ自身に他のユーザとの重複を判断させるのは、確かに違和感がある。 from __future__ import annotations import unittest import uuid from dataclasses import dataclass @dataclass(frozen=True) class UserId: value: str @dataclass(frozen=True)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く