【超軽量】Red HatからJavaフレームワーク「QUARKUS」がリリースされた
Red Hatから、新しくJavaフレームワーク「QUARKUS」が公開されました。
既存のJavaライブラリにも対応しているフルスタックのフレームワークです。
「QUARKUS」とは
特徴としては、
- 従来からの伝統的な「インペラティブモデル」
- 最近注目されている「リアクティブモデル」
この両モデルを可能とするフレームワーク。
簡単に言うと、
- 今までの伝統的でスタンダードな開発モデル「命令型」も扱える
- 先進的で今流行りの開発モデル「反応型」も使える
中でも、最大の特徴が
「Javaアプリなのに超軽量なコンテナイメージにできる」
という点です。
GraalVMのコンパイラを用いて、アプリをコンテナ化できる
つまり、
「Javaアプリが瞬時に起動するコンテナイメージを作れちゃう」
といった特徴もあり、DockerやKubernetesのようなコンテナ環境を扱うDevOps界隈では、
まさに待ちわびていたようなフレームワークということで非常に注目されています。
超軽量なJavaアプリをKubernetesの世界へ
これまでJavaアプリケーションは、JavaVM自体の立ち上げに時間がかかるということもあり、
リソース消費量の少ない軽量なアプリケーションを必要とするDocker×Kubernetesのような開発モデルにおいて、
「コンテナ環境の良さを十分に活用できない」という大きな課題がありました。
QUARKUSのようなフレームワークは、Javaアプリで分散コンピューティングを実現する上で障壁となっている「起動時間」という課題を解決する糸口となるでしょう。
所感
今回リリースされたQUARKUSは、今後のKubernetesやサーバレス環境において、
Javaを先進的なプラットフォームにしていく流れの中心になっていくでしょうね。
※QUARKUSの導入手順やGraalVMのインストール手順などは、別の記事にまとめたいと思います。
参考
QUARKUSの公式サイトのデザイン個人的に好きです。
詳しい導入手順などは公式ドキュメントなどを参考にしてみてください。
おしゃれで使いやすいテキストエディタAtomがやばい
最近ちょっとメモを取るときでも Markdown記法で書くことが増えたので、いいエディタないかなと探してました。
VSCodeとかもいいんですが、
- コード開いてる
- ごちゃごちゃさせたくない
っていう理由で別のソフトウェアとして開きたいなと。
(タスクバーにピン留めして、Windows + 数字キー
で起動する人なので)
ブラウザ版だとHackMDあたりがいいんですが
どうしても自分はファイルとして残しておきたいので
今回は見た目もおしゃれで初期設定が楽そうなAtomを使うことにした。
Atomってなに
追加パッケージなどいろいろ追加すれば、 自分好みにカスタマイズできるテキストディタ
Atomの導入方法
公式サイトからクライアントをダウンロードしてインストールするだけ
おすすめポイント
個人的には 初期設定のダークテーマが真っ黒過ぎず、 黒板に白い文字で書く感じで好き(VSCodeも好き)
エクスプローラもついてて、いろいろと便利 たぶんこれ使うとさくらエディタとか戻れなくなる
よく使うショートカット
- markdownプレビューを表示:
Ctrl + Shift + M
- コマンドパレット?を表示:
Ctrl + Shift + P
- 文字サイズを大きく:
Ctrl + Shift + ;
- 文字サイズを小さく:
Ctrl + -
とりあえず有効化・無効化しておくべき設定
- 自動折返し
Ctrl + Shift + P
Editor: Toggle Soft Wrap
を選択して、Enter
- スペルチェックを無効化
Ctrl + Shift + P
spell-check
をDisableを選択
※英語のスペルチェックも無効化するので注意
最初にインストールするパッケージ
- 日本語化
Ctrl + Shift + P
Instal
と入力
Settings View: Install Packages and Themes
を選択。
総評
総合的に記事を書いたり、 メモをがっつりプレビュー見ながらmd記法で書きたいならいい感じ
【Python】scheduleライブラリで定期実行を実装してみよう
通常スクリプトは、最後の処理を実行したら終了してしまいますが
今回は1時間おき、または指定した時刻に定期的に実行することができる便利なライブラリ「schedule」を紹介します
手順
1.必要なモジュールのインストール
2.定期実行処理を実装
1.必要なモジュールのインストール
今回はscheduleというモジュールを利用
$ pip install schedule
2.定期実行処理を実装
定期実行したい処理にスケジュールを割り当てます
下記、公式ドキュメントのサンプルコードを参照
import schedule import time def job(): print("I'm working...") # 10分ごとに実行 schedule.every(10).minutes.do(job) # 1時間ごとに実行 schedule.every().hour.do(job) # 毎日10時30分に実行 schedule.every().day.at("10:30").do(job) # 毎日月曜日に実行 schedule.every().monday.do(job) # 毎週水曜13時15分に実行 schedule.every().wednesday.at("13:15").do(job) # 毎時17分に実行 schedule.every().minute.at(":17").do(job) while True: schedule.run_pending() time.sleep(1)
参考
所感
今回はscheduleというモジュールを使って簡易的に定期実行化しました。
他にもCircleCIやheroku,crontabなど定期実行する手段はいくつかあるので要件に適した方法を探してみてください
【プログラミング入門】クラスや変数の命名規則をまとめてみた
導入
今回はJavaのお話
おそらく大抵の人は、
「そんなの知ってる」
「なに当たり前のことを言ってるのか」
という内容ですが、
先日、若手エンジニア同士の勉強会で
話題に挙がったので、備忘録も兼ねて
内容をまとめておきたいと思います
そもそも命名規則って?
命名規則とは、
開発をしていく上で実装するクラスやメソッド、変数などにつける
「名前の付け方」のこと
つまり、ルールのことです
どんな命名規則があるの?
- コンスタントケース(または、アッパーケース)
- パスカルケース(または、アッパーキャメルケース)
- キャメルケース(または、ローワーキャメルケース)
- スネークケース
- チェインケース(または、ケバブケース)
言語や組織によって、呼び方は色々あるみたいです。
一般的な呼び名ものは?
- キャメルケース
- パスカルケース
- スネークケース
- チェインケース
それぞれの特徴
名称 | 表記例 | 説明 | 主な用途 |
---|---|---|---|
パスカルケース | ItemSearchController | 先頭と要素語の先頭が大文字 | クラス |
キャメルケース | getItemInfo | 先頭だけ小文字で要素語の先頭は大文字 | メソッド、変数 |
スネークケース | user_id | アンダースコア(_)で単語を区切る | 定数や変数 |
チェインケース | modal-header | ハイフン(-)で単語を区切る | HTMLのidやclass |
コンスタントケース | INSTANCE_URL | すべて大文字 | 定数 |
所感
プログラミング歴が浅い人ほど
何気なく真似しながら開発してますが、
早い段階から命名規則を意識して開発すれば
変数名を見ただけでどんな用途なのか理解できるので
リーディングスキルが上がりそう
また、人によって読みやすさは違うと思うのですが
言語や開発チームによって、統一の仕方は違うので
基本的には、先人の慣習や流儀に従うのがいいですね
【30分タイムアタック】Python×Twitter フォロバ自動化
せっかくSNS始めたので、
なるべく輪を広げたい
だけど、あまり時間かけたくない
自動化して楽したいなってことで
Pythonで検索するとすぐに出てくる
Twitterの自動化シリーズですね
今日のコードは
いちいちフォロワーみて、
「あ、この人フォロー返すの気づかなかった」とかいうのを
コマンド実行だけで、勝手にやってくれるやつです
ゴール
$ Python AutoFollowBack.py
これ実行したら、フォロワー全員自動でフォロバしてくれる感じ
手順
- 1.follower_idを取得
- 2.follow_idを取得
- 3.not_followed_user_idを算出
- 4.for文で回して、1人ずつ自動フォローする
1. follower_id(自分をフォローしてくれている人)を取得
follower_id = api.followers_ids()
2. follow_id(自分がフォローしている人)を取得
follow_id = api.friends_ids()
3. not_followed_user_id(フォローされているけど、自分がフォローしていない人)を算出
手順1と2の和集合を求める
そこから、フォローしてる人を除外する
フォローできていない人が算出できる
not_followed_user_id = set(follower_id + follow_id) ^ set(follow_id)
4. for文で回して、1人ずつ自動フォローする
あとは、フォローできていない人をフォローする処理だけですね
コード
import tweepy import sys import TwitterAuth api = TwitterAuth.getTwitterApi() follower_id = api.followers_ids() follow_id = api.friends_ids() not_followed_user_id = set(follower_id + follow_id) ^ set(follow_id) number_of_followed = 0 for user_id in not_followed_user_id: try: api.create_friendship(user_id) number_of_followed += 1 except Exception as e: print(e) print('number_of_followed : {}'.format(number_of_followed))
※最後に確認のため、フォローした人数出力してます
ちなみに、
import TwitterAuth api = TwitterAuth.getTwitterApi()
ここは、API取得するところをモジュール化してます
おまけ
同様にして、 not_follow_me_user_id(フォローしてるのにフォローしてくれていない人)は 和集合から、手順1のフォローしてくれている人を除外すればいいですね
not_follow_me_user_id = set(follower_id + follow_id) ^ set(follower_id)
最初からfor文回して、1人ずつフォローしているかどうか判定して
フォローしていなければフォローするっていうコード公開している人いるけど
そもそも2つの集合のどちらの数が多いかわからないのに、
forのなかにforいれていくのは、危険じゃないかな・・・
追記
tweepyのコードスニペット見返してたら、
こんなのあった
for follower in tweepy.Cursor(api.followers).items(): follower.follow()
これでも全員フォローできるみたい
【Pyhton】リスト内包表記×open()を使って認証情報などを別ファイルで保管する方法
このアクセストークンの情報はソースコードに格納したくないので
一旦、txtファイルとして、別で保持することにした。
ファイル読み込み×リスト内包表記
import sys try: path = 'AccessTokenInfo.txt' with open(path, encoding='utf-8') as f: row = [s.strip() for s in f.readlines()] CONSUMER_KEY = row[0] CONSUMER_SECRET = row[1] ACCESS_TOKEN = row[2] ACCESS_SECRET = row[3] except FileExistsError: print('ファイルが存在しないため、強制終了') sys.exit
認証情報を格納するtxtファイルを作成
AccessTokenInfo.txtというファイルを作成
それぞれ上から順に保存しておくだけ
AccessTokenInfo.txtファイルの中身サンプル
QJdS5MrjZMBqF5sD84jVLD583tAdCH iQ6qFNn2WMUh9KNvL3nrZ4Wmktp25A b2YpRPytv4D4tDWg3iFRTuyuYn9eHz B6cJwRV4HVU3wttyVvavnVh73DsynF
※ただのランダム文字列です
まあ、暗号化とかその辺はローカルで動かすだけなので今回は考えなくていいでしょう
【30分タイムアタック】Python × tweepyでいいねとフォローを自動化
今日のTAテーマは 昨日の続きでTwitterのAPIを使って
「指定したワードをつぶやいた人に対して、いいねとフォローをする」
これを自動化します
といっても、crontabとかで
定期実行するわけでもないので
厳密には自動化ではないですが
コマンド入力するだけで済むので
何十件〜何百件とページを
見て回る必要はなくなりますね
ゴール
所要時間:30分
$ python AutoLikeAndFollow.py "検索したいワード"
これで検索ワードにひっかかるツイートのいいねとツイート主をフォローする
要件
- 指定したワードをツイートしているユーザー情報を取得
- そのツイートをいいね
- そのユーザーをフォロー
- 引数で検索ワードを随時指定できるようにする
手順
指定ワードで検索してユーザー情報を取得する
指定したツイートをいいねする
指定したユーザーをフォローする
※アクセストークンは''の中に入れる
import tweepy import sys CONSUMER_KEY = '' CONSUMER_SECRET = '' ACCESS_TOKEN = '' ACCESS_SECRET = '' auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) api = tweepy.API(auth) # 指定した条件(検索ワード、検索件数)に一致するユーザ情報を取得 search_word = sys.argv[1] search_results = api.search(q=search_word, count=30) # 取得したユーザーを1件ずついいね、フォローしていく for result in search_results: status_id = result.id status_text = result.text user_name = result.user.name user_id = result.user.id try: # いいね api.create_favorite(status_id) print('Liked Status : ' + status_text) except Exception as e: print(e) try: # フォロー api.create_friendship(user_id) print('Followed : ' + user_name + '(@' + user_id + ')') except Exception as e: print(e)
フォローのところは今コメントアウトしてます。 なぜならテストする感じで
$ python AutoLikeAndFollow.py "test"
ってやったりすると、
全く関係ないような人をフォローしてしまったりするので。
フォローは、自動フォロバする感じにしようかな
追記
Invalid or expired token.
こんなエラーが出るようになったら、
トークンの再発行やアプリの再作成をして
4つの認証情報を新たに取得して実行すればいけます。
※おそらくBotや大量リクエストに対して、制限をしたりしているのでしょう