Pythonの便利な構文-内包表記の紹介

2020 年 3 月 16 日 by masy

今回はPythonの内包表記という構文を紹介します。

内包表記はリスト・辞書・集合等の生成を簡潔に記述するための構文で、
それぞれリスト内包表記・辞書内包表記・集合内包表記などと呼ばれます。
内包表記を上手に用いる事でコードの可読性を高める事ができます。

リスト内包表記

まずは内包表記を使用しない方法で、1~9の2乗の数値をリスト型で生成してみます。

data = []
for x in range(1, 10):
    data.append(x ** 2)

print(data)


>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81]

これをリスト内包表記で書き直すと下記の通り簡潔に記述できます。

data = [x ** 2 for x in range(1, 10)]
print(data)

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81]

リスト内包表記にはif文を使う事もできます。
例えば、xが偶数の場合のみ取得対象とするには下記のように記述します。

data = [x ** 2 for x in range(1, 10) if x % 2 == 0]

その他の内包表記も使い方は同様なので、表記方法のみ紹介します。

辞書内包表記

{キー:値 for x in リスト等}

例)価格オブジェクトのリストから、価格IDと値の辞書を生成

{x.price_id: x.value for x in prices}

>>>
{'PRICE-0001': 100, 'PRICE-0002': 200, 'ITEM-0003': 300}

集合内包表記

{値 for x in リスト等}

例)契約オブジェクトのリストから、商品IDの集合を生成

{x.item_id for x in contracts}

>>>
{'ITEM-0001', 'ITEM-0002', 'ITEM-0004'}

ちなみに内包表記内のforやifは複数記述してネストさせる事も可能ですが、
可読性を損なうためそのような使い方はしないようにしましょう。
そのような場合は、内包表記を使わない方が可読性の高いコードになります。

これまで内包表記を知らなかったという方は、ぜひ上手に活用してみてください。

videoタグを利用したストリーミング配信について

2020 年 2 月 10 日 by egamit

■ストリーミング配信の特徴
PCやスマホなどの端末に動画ファイルを保存することなく、動画を見ることができる
⇒逆に動画ファイルを保存して動画を見るのがダウンロード方式

■Http Live Streaming(HLS)
HTTPプロトコルで動画のストリーミング配信ができる技術。Apple社が提唱
・Flashなどのプラグイン不要でHTML5 Videoタグで再生できる
・PC、スマホなど多くのデバイスで対応

■HLSの構成と仕組み
構成
・一定時間ごとに分割した動画ファイル(tsファイル (Appleは10秒ごとに分割することを推奨))
・上記tsファイルをリスト化したインデックスファイル(m3u8ファイル)

仕組み
(1)PCのブラウザ(HTML5 video)やスマホの動画プレーヤはm3u8ファイルをHTTP経由で取得する。
-> 例えば、HTML5 Videoタグのsrc属性にはm3u8ファイルのURLが設定されている
(2)m3u8ファイルの中身にはtsファイルが順番に記載されているため、HTTP経由で記載されている順番で取得する
(3)取得したtsファイルを動画として再生する
(4)次のtsファイルを取得する

■配信の様子を見てみよう

PCブラウザのGoogle Chromeを使うことを前提にして話を進めます。
まず、以下のURLにアクセスします。
https://flowplayer.com/developers/tools/stream-tester?stream=0

そして、キーボードのF12を押して開発ツールを開きます。
そこからNetworkタブをクリックし、XHRでフィルタをします。この時点でm3u8が取得されていると思います。

次に、ページ中ほどにある動画の再生ボタンをクリックします。すると、tsファイルがリストに表示されます。
このようにしてHLSの配信ではtsファイルを順次取得して映像を再生しています。

ここでお気づきの方もいるかと思いますが、開発ツールのリストにはm3u8が2つあります。これはいったいどういうことでしょうか?
まず、playlist.m3u8の中身を見てみましょう。リストをクリックします。

いろいろ書かれていると思いますが、m3u8ファイルが複数記載されていると思います。

 

これはHLSの特徴であるアダプティブビットレート配信という仕組みなのですが、
視聴する端末のネットワーク帯域に合わせて適切なビットレート(BANDWIDTH)と解像度(RESOLUTION)の動画を選択して再生します。
筆者の環境ではビットレート4Mbps,解像度1920×1080のplaylist_1080.m3u8を選択しました。
そして、playlist_1080.m3u8の中身を見てみると、tsファイルのリストが記載されています。このtsファイルは開発ツールのほうにも表示されています。

ということで、今回はストリーミング配信のHttp Live Streaming(HLS)について簡単ではありますが解説しました。
最後まで閲覧していただきありがとうございました。

様々なデバイスに活躍するFlutterの紹介

2020 年 1 月 19 日 by mishi
「Flutter」をご存知でしょうか?
様々なデバイスに適用できるオープンソースフレームワークで、

「勉強したいんだけど何をやれば良いかわからない。」という方にオススメです。

これからの開発で聞く機会が増えてくると思いますので、参考になればと思います。

(さらに…)

【第2回】Spring Boot ApplicationをCentOS7にデプロイしてみた(準備編)

2020 年 1 月 19 日 by uma

どうも、umaです。

今回は、Apache + Tomcat連携をサンプルのwarファイルを使用して設定していき、理解を深めていきます。

【サンプルwarファイルはこちら】

(さらに…)

【第1回】Spring Boot ApplicationをCentOS7にデプロイしてみた

2020 年 1 月 19 日 by uma

お久しぶりです、umaです。

今回は、ローカルで作成していたアプリケーションをインターネットに公開しよう!ということで行った手順をまとめました。

第一回目は、CentOS上でSpring Boot Applicationを実行するところまでやってみました。

なお、ローカルでSpringBootApplicationを作成する手順はEclipse+SpringBoot+MavenでHelloWorld をご覧ください


(さらに…)

メモリーリーク解析

2019 年 12 月 13 日 by tom

業務で実施したメモリーリーク解析について紹介します。
メモリーリークはプログラムが確保したメモリを解放せず、確保したままになってしまうことで、プログラムが実行されるごとにメモリが確保されていきます。
パフォーマンスモニタなどで発生の現象は確認できますが、問題の個所を特定するには骨が折れます。

今回はリークを発生させるサンプルを作成し、実際に動作させ解析ツールを用いて発生個所を特定してみます。

(さらに…)

パーセプトロンについて

2019 年 12 月 13 日 by bb

こんにちは。今回ご紹介するのは、「パーセプトロン」についてです。
パーセプトロンとは、1957年にアメリカの研究者によって考案されたアルゴリズムのことです。
何故そんな昔のアルゴリズムの紹介を?と思うかもしれません。
このパーセプトロン、実はニューラルネットワーク(ディープラーニング)の起源となるアルゴリズムなんです。
また、2019年秋季の応用情報技術者試験では、このパーセプトロンが午後の記述問題に取り上げられました。

早速見ていきましょう。
パーセプトロンとは、図に表すと以下のようになります。
(さらに…)

Linuxサーバをルータにしてみよう!

2019 年 11 月 1 日 by fuku

こんにちは。fukuです。

今回はある案件で仮想Webサーバを構築した際に本番環境と同様のIPアドレスを設定した状態で
開発用PCから参照できるようにできないかと調べてみました。

本来なら間にルータなどを挟んであげれば別セグメント間でも通信ができるようになるのですが、
ただ、ルータが無い!足りない!といったこともあるので
今回は、間にLinuxサーバをおいてルータの代わりにする方法をご紹介します。
(さらに…)

PythonのExcelライブラリ「openpyxl」の紹介

2019 年 10 月 7 日 by masy

最近業務で使用した「openpyxl」というPythonライブラリを紹介します。

「openpyxl」はPython言語でExcelの読み書きを行うためのオープンソースのライブラリです。
現在も開発が続けられており、2019/09/25にバージョン3.0.0がリリースされています。

 

インストール方法

多くのPythonライブラリと同様にpipでインストールできます。

pip install openpyxl

 

既存のExcelファイルからデータを取得する例

簡単なサンプルとして、Excelファイルからデータを取得してファイルに書き出す例を見てみましょう。
このような単純なプログラムであれば数行のコードで実現できます。
(さらに…)

IISにおける「セッション管理」

2019 年 9 月 17 日 by uma

こんにちは、umaです。

今回は、以前VB.NETでの開発時に起きた、セッション周りでの不具合を忘れぬため。また先輩方にせっかく教えていただいたことをしっかりと残すうえでも、メモ代わりに残します。

Webアプリケーションを実現するHTTPは状態を持たない(ステートレス)なプロトコルです。値を保持するためには、状態をどこかで管理する必要があります。その一つが「セッション管理」です。

IISにおける「セッション管理」

そもそもIISには3つのセッション管理があります。

  1. InProc(インプロセス)モード
  2. StateServer(ステートサーバー)モード
  3. SQL Serverを用いたセッション管理

(さらに…)