chevron_left

メインカテゴリーを選択しなおす

cancel
週末!プログラミング部 https://natsu-no-omoide.hatenablog.jp/

某電機メーカの奴隷SE。 最近、若手が増えて開発の最前線を退きはじめました。 でも生涯ソフト開発者として生きたいという想いを消せず。 仕事で開発者ができないならせめて自分の好きなことを書き綴りたいと考え、このブログを開設しました。

夏の思い出
フォロー
住所
未設定
出身
未設定
ブログ村参加

2020/12/20

arrow_drop_down
  • Pythonでデザインパターン 拾参ノ型「Visitor」

    今回はPythonの勉強しながらデザインパターンのVisitorをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Visitorとは 直訳すると「訪問者」ですね。 wikiには「 アルゴリズムをオブジェクトの構造から分離するためのデザインパターンである。分離による実用的な結果として、既存のオブジェクトに対する新たな操作を構造を変更せずに追加することができる。」とあります。 wikiの説明から解釈するに、 既存のオブジェクトからアルゴリズムを分離。 これで既存のオブジェクトはデータ構造だけを持ったオブジェクトになる 分離したアルゴリズムは別のオブジェクトに。 デー…

  • Pythonでデザインパターン 拾弐ノ型「Decorator」

    今回はPythonの勉強しながらデザインパターンのDecoratorをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Decoratorとは 直訳すると「飾り付けをする人」ですかね。 wikiには「既存のオブジェクトに新しい機能や振る舞いを動的に追加することを可能にする」とあります。 直訳やwikiから推測するにいまあるオブジェクトに飾り付けを行うためのパターンのようです。 ゚+.(◕ฺ ω◕ฺ )゚+. Decoratorについて考えてみる 今回は顔文字をデコってみたいと思います(・`ω´・)b まずはデコレーションするベースクラスComponentを用意しま…

  • Pythonでデザインパターン 拾壱ノ型「Composite」

    今回はPythonの勉強しながらデザインパターンのCompositeをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Compositeパターンとは 直訳すると「複合物」や「混合物」みたいな意味でしょうか。 wikiには「ディレクトリとファイルなどのような、木構造を伴う再帰的なデータ構造を表すことができる」とあります。 このパターンはwikiにもあるとおりオブジェクトで木構造を表現するためのものです! Compositeパターンについて考えてみる 木構造というとファイル構造が一番イメージしやすいですかね? 今回はCompositeパターンを使ってディレクトリツリ…

  • Pythonでデザインパターン 拾ノ型「Strategy」

    今回はPythonの勉強しながらデザインパターンのStrategyをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Strategyとは 直訳すると「戦略」ですね。 wikiには「アルゴリズムを使用者から独立したまま様々に変化させることができるようになる」とあります。 このパターンはBridgeパターンとよく似ていますが、 Bridgeパターンは機能拡張を目的としているのに対して、Strategyパターンは機能切り替えを目的にしている?という勝手なイメージを持っています。。 いずれにしてもjavaやC#など、インタフェースがある言語ではあまり使わないパターンかな…

  • Pythonでデザインパターン 玖ノ型「Bridge」

    今回はPythonの勉強しながらデザインパターンのBridgeをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Bridgeとは 直訳すると「橋」ですね。 wikiには「"橋渡し"のクラスを用意することによって、クラスを複数の方向に拡張させることを目的とする」とあります。 このパターンは、オブジェクトとオブジェクトの間にワンクッション挟むイメージです。 JavaやC#みたいにインタフェース機能がある言語だとあまり使わない気もしますね(;´瓜`) Bridgeについて考えてみる いつものごとくいい例が思いつきませんが、以下のようなインタフェースがあったとします。 …

  • Pythonでデザインパターン 捌ノ型「AbstractFactory」

    今回はPythonの勉強しながらデザインパターンのAbstractFactoryをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 AbstractFactoryとは 直訳すると「抽象的な工場」になります。 wikiには「関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的とする」とあります。 AbstractFactoryについて考えてみる 突然だが醤油ラーメンを作ろうと思う(・`ω´・;) # スープを作る soup = Soup(SoySauce()) # 醤油ベース # 麺を作る nood…

  • Pythonでデザインパターン 漆ノ型「Builder」

    今回はPythonの勉強しながらデザインパターンのBuilderをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Builderとは 直訳すると建築者という意味になります。 wikiには「 オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする」とあります。 Builderパターンは「オブジェクトを生成する過程は同じだけど、性質の異なるオブジェクトを作成する」ためのパターンのようです。 ・・・(´・ω・`)? Builderパターンについて考えてみる いい例かどうかわかりませんが、RESTful Web APIのレスポンスを題材に考…

  • Pythonでデザインパターン 陸ノ型「Prototype」

    今回はPythonの勉強しながらデザインパターンのPrototypeをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Prototypeとは 直訳すると「原型」や「模範」という意味になります。 wikiには「生成されるオブジェクトの種別がプロトタイプ(典型)的なインスタンスであるときに使用され、このプロトタイプを複製して新しいオブジェクトを生成する」とあります。 Prototypeパターンとは「オブジェクトからオブジェクト(複製)を作成するパターン」です。 javaやC#とかでいうとclone()のことですね(・`ω´・)b 試行錯誤の時間 Pythonにおける…

  • Pythonでデザインパターン 伍ノ型「Singleton」

    今回はPythonの勉強しながらデザインパターンのSingletonをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Singletonとは 直訳すると「単一要素」みたいな意味になります。 wikiには「そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのこと」とあります。 Singletonパターンはwikiにも説明があるとおり、クラスのインスタンスが複数作られないようにするためのメカニズムです。 アプリケーション全体で統一しなければならない仕様を実装しなければならないときに役に立ちます。 私はデザインパターンの中でこのパターンが一番…

  • Pythonでデザインパターン 肆ノ型「FactoryMethod」

    今回はPythonの勉強しながらデザインパターンのFactoryMethodをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 FactoryMethodとは 直訳すると「工場手続き」みたいな意味になります。 wikiには「他のクラスのコンストラクタをサブクラスで上書き可能な自分のメソッドに置き換えることで、 アプリケーションに特化したオブジェクトの生成をサブクラスに追い出し、クラスの再利用性を高める」とあります。 FactoryMethodについて考えてみる wikiの文言だと私にはよくわからなかったので、 いつものごとく色々コードを書いて自分なりの理解を書いて…

  • Pythonでデザインパターン 参ノ型「TemplateMethod」

    今回はPythonの勉強しながらデザインパターンのTemplateMethodをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 TemplateMethodとは 直訳すると「型板手続き」みたいな意味になります。 wikiには「ある処理のおおまかなアルゴリズムをあらかじめ決めておいて、そのアルゴリズムの具体的な設計をサブクラスに任せること」とあります。 TemplateMethodについて考えてみる TemplateMethodパターンは抽象クラスを使用することで実現することができます。 いつもどおり、ざっくりした例で説明してみます。 以下はテンプレートクラス:T…

  • Pythonでデザイン・パターン 弐ノ型「Adapter」

    今回はPythonの勉強しながらデザイン・パターンのAdapterをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Adapterとは 直訳すると「適合させるもの」という意味になりますが、 直訳だと少しわかりにくいですね(;´Д`) wikiには「既存のクラスに対して修正を加えることなく、インタフェースを変更することができる」とあります。 アダプタと言われると、身近なものではACアダプタが思いつきます。 ACアダプタはコンセントからとったAC(交流)をDC(直流)に変換し、電子機器に電源を供給するための装置です。 このことからアダプタとは、何かからの入力を、変換…

  • Pythonでデザイン・パターン 壱ノ型「Iterator」

    今回はPythonの勉強目的でデザイン・パターンのIteratorをやってみました。 他のパターンにつきましては、以下の目次記事をご参照ください。 Iteratorとは 直訳だと「繰り返す」や「反復」という意味になります。 wikiには「コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供する」とあります。 プログラミング言語には配列、リスト、ハッシュテーブルなどのデータを1つのオブジェクト(集合体)にまとめる仕組みがあります。 しかし、データへアクセスする方法はオブジェクト毎に異なるので、オブジェクトを利用するユーザは「オブジェクト毎に…

  • Pythonを勉強しながらデザイン・パターンを勉強してみる

    最近、Pythonの勉強を始めてみました。 私は新しい言語を覚えるとき、とにかく真似てもいいから色んなコードを書いて、その言語の雰囲気を味わうようにしています。 そんな勉強方法が良いかはさておき(・`ω´・;) 今回も色んなコードを書いてみるところから始めたいと思いますが、基本的な文法や考え方は他の言語を使っているからなんとなくわかる気がします。 なので、今回は題材としてデザイン・パターンをPythonで書いていってみようかと思います。 実は、長らくプログラマーをやっていたのにデザイン・パターンも真面目に勉強したことがなかったのでこの機会に一緒にお勉強してみたいと思います(;´Д`) 使うかど…

  • Pythonにおけるクラスの使い方とスコープを確認してみる

    会社の若い子たちがPhysonで機械学習とかやっているようなので自分も勉強してみることにしました。 基本的な文法はなんとなくわかる気がするので、Pythonにおけるクラスの使い方とスコープから初めてみたいと思います。 自分のお勉強目的の備忘録なのでわかりにくい表現を使うかもしれませんがお許し下さいm(T▽T)m スコープ確認用のクラス 今回は動作確認用に以下のクラスを準備しました。 # coding: utf-8 class testClass : # publicなクラス変数 class_variable_A = 1 # privateなクラス変数 __class_variable_B = …

  • Cortex-M4でCMSISライブラリを使わずにSysTickを制御してみる

    前回までは、Cortex-M4でCMSISライブラリを使わずにGPIO制御してみました。 今回は、Cortex-M4でCMSISライブラリを使わずにSysTickを制御してみたいと思います。 SysTickとは ARMマイコンが周辺機器とは別に持っている24ビットのシステム・タイマです。 特徴としては以下のとおりです。 LOADレジスタ値(再ロード値)をVALレジスタ(カウンタ値)に読み込む。 VALレジスタ値をカウント・ダウンする。 VALレジスタが0になるとSysTick割り込みを発生させる。 VALレジスタが0になると1. を実施する。 用途としてはOSのスケジューリングを行うためのシス…

  • Cortex-M4でCMSISライブラリを使わずにGPIO制御してみる(拡張)

    前回は、Cortex-M4でCMSISライブラリを使わずにGPIO制御してみました。 今回は、その延長で複数のGPIOを制御してLチカさせます。 内容は前回やったことに毛が生えたような感じですが、今後やりたいことがあり、そのデバッグ目的のためにやります。 User LEDについて STM32F407VGに搭載されているUser LEDは、red/blue/green/orangeの4種類あります。 いずれもポートグループはDグループのようです。 実装してみる 全体を説明すると長くなるので、ここでは部分的に紹介します。 Tagは「20210110_01」です。 ポートグループのテーブルを作成 今…

  • Cortex-M4でCMSISライブラリを使わずにGPIO制御してみる

    前回は、eclipse Embedded CDTでSTM32F407VG(Cortex-M4)のベアメタルをデバッグしました。 今回は、CMSISライブラリを使わずにGPIOを制御してUser LED(green)をLチカさせてみたいと思います。 User LED(green)の接続先 まずはUser LED(green)の接続先を探します。 接続先は、STM32F4DISCOVERYのユーザマニュアルに記載されています。 これによるとUser LED(green)は、PD12(ポートグループDの12番)に接続されているようです。 レジスタの調査 今回はCMSISライブラリを使用しないのでPD…

  • eclipse Embedded CDTを使ってAMR用のベアメタルをデバッグしてみる

    前回はeclipse Embedded CDTをインストールしてWidnowsだけで動くAMR用のベアメタル開発環境を構築してみました。 今回はeclipse Embedded CDTを使用してAMR用のベアメタルをデバッグしてみました。 備忘録として残します。 プロジェクトを作成する eclipseを起動してメニューバーより File > New >Projectを選択します。 C Projectを選択してプロジェクトを作成します。 今回はproject typeを STM32F4xx C/C++ Project をにしました。 またTarget processor settingsよりCo…

  • eclipse Embedded CDTでAMR用のベアメタル開発環境を作ってみる

    eclipseを使用したARMの開発環境 eclipse Embedded CDT が便利だという話を小耳にはさみました。 eclipse Embedded CDT はeclipseにクロスツールチェーンやプラグインを追加して使うような開発環境のようです。 今回は、Windows 10 64bitマシンにeclipse Embedded CDTによる開発環境を構築してみました。(・`ω´・)b eclipse Embedded CDTのインストール Javaをインストール Node.jsをインストール xPack Package Manager(xpm)のインストール windows-buil…

  • システムコールを実装してnewlibのprintfを使えるようにする

    Raspberry pi のベアメタル開発環境構築の続編です。 以前、Crosstool-NGでRPiのベアメタル開発環境を作るときに、newlibも一緒にインストールしました。 今回は、システムコールを実装してnewlibのprintf()を使えるようにしてみようと思います。 printfがないと簡単なデバッグも面倒ですからね( ^ω^;) システムコールとは システムコールとは、OSの機能をアプリケーションが利用するための機構のことです。 https://ja.wikipedia.org/wiki/システムコール 簡単な絵を描いてみました アプリケーションはOSやハードウェアの機能を使用す…

  • SimulinkとC#で共有メモリを使ったプロセス間通信をさせてみる

    前回は、MATLABとC#で共有メモリを使ったプロセス間通信をさせてみました。 今回は、SimulinkとC#で共有メモリを使ったプロセス間通信をさせてみたいと思います。 SimulinkからCコードを呼び出すにはS-Functionブロックというものがあります。 また、S-Functionブロックをより簡単に作ることができるS-Function Builderというものもあります。 https://jp.mathworks.com/help/simulink/c-c-s-functions.html https://jp.mathworks.com/help/simulink/s-funct…

  • MATLABとC#で共有メモリを使ったプロセス間通信をさせてみる

    今回はMATLABとC#で共有メモリを使ったプロセス間通信を試みたいと思います。 MATLABで共有メモリを使ったプロセス間通信としてmemmapfileを使う例があります。 しかし、memmapfileはページファイル内のメモリマップの読み書きできません。 また、メモリマッピング用のMATLAB関数はいまのところmemmapfileだけのようです。 したがってMATLAB単体ではページファイルのメモリマップにアクセスすることができないため、CのMapViewOfFile()やC#のSystem.IO.MemoryMappedFilesとの連携は難しそうです。 そこで以前行った、「CとC#で共…

  • MATLABからCライブラリを呼び出してみる

    前回は、MEX関数を使ってMATLABからCコードを呼び出してみました。 今回はすこしだけ発展させて、MEX関数をライブラリ化してMATLABから呼び出してみたいと思います。 https://jp.mathworks.com/help/matlab/call-c-library-functions.html MATLABが呼び出すCライブラリのサンプルは、MATLABをインストールしたときに一緒にインストールされています。 以下のコマンドを使うことでサンプルプログラムがインストールされているパスを調べることができます。 今回はこのサンプルプログラムを参考にしました。 >> fullfile(m…

  • MATLABからCコードを呼び出してみる

    MATLABではコマンドラインからユーザー独自のC/C++プログラムを組み込み関数のように呼び出すことができ、 これらのプログラムはMEX関数と呼ばれているようです。 https://jp.mathworks.com/help/matlab/call-mex-files-1.html MEX関数はMATLABを高速化させるためによく利用されているようなので使いこなせるようになれば色々と役に立ちそうです。 なので今回はMEX関数というものがどんな感じなのか味見してみようと思います。 やり方は公式サイトの説明を見るのもよいですが以下の方々が書かれた説明のほうがわかりやすかったので参考にさせていただ…

  • CとC#で共有メモリを使ったプロセス間通信をさせてみる

    ちょっとCとC#で共有メモリを使ったプロセス間通信が必要になったので調べてみました。 共有メモリを使用したプロセス間通信は昔からあるので、ネットで探せばやり方がたくさん出てきます。 今回は特にわかりやすかった以下のサイトを参考にさせていただき、自分が使いやすいように若干アレンジを加えました。 https://qiita.com/kkent030315/items/38559687812924c279a9 C側ソースコード OpenSharedMemoryMappingObiect() RefSharedMemoryMappingObiect() C#側ソースコード SharedMemoryクラ…

  • 小さな開発用マシンを作ってみる

    DeskMiniを購入してみた 最近、開発専用のマシンが欲しくなりました(´・ω・`) なにかちょっと試したいとき、巨大なデスクトップを起動させるほどでもないけどRaspberry Piみたいなシングルボードだとパワー不足で心もとない。 そんなとき、小さくて気軽に使える開発専用のマシンが欲しいなぁと思っていました。 そこで見つけたのが「DeskMini」です(・`ω´・)b DeskMiniはASRock製のベアボーンPCキットです。 簡単に小型PCが自作できるということで以前から気になっていました! 今回はDeskMiniを使って開発専用のマシンを作ってみたいと思います(^ω^)/ ちなみに…

  • RPiでAMP環境を構築してみる

    今回は、Crosstool-NGで作ったRPiのベアメタル開発環境を使用して、Raspberry Pi(以降、RPi)でAMPシステムを作ってみたいと思います(・`ω´・)b AMPシステムとは Raspberry Pi OSをインストールしてみる Raspberry Pi OSが使用するメモリとCPUコア数を制限してみる ベアメタルアプリケーションの作成 ベアメタルアプリケーションをAMPで動かす Raspberry Pi OSとベアメタルアプリケーションで共有メモリを試す AMPシステムとは AMPシステムとはAsymmetrical Multi Processingの略で、マルチコアプロ…

  • QEMUでRPiをエミュレートしてみる

    前回は、Crosstool-NGでtoolchainを構築して、RPi3のチュートリアルをビルドしてみました。 今回は、ビルドしたカーネルを動かしてみたいと思います(・`ω´・)b ・・・が、ビルドするたびにカーネルをSDカードにコピーするのも手間なのでQEMUというエミュレータ環境を使ってみます。 QEMUはオープンソースのプロセッサエミュレータです。 PowerPC、SPARC、ARMなど多くのプロセッサを模擬することができます。 特に、2.12からはRaspberry Pi3のモデルをサポートしているようです。 ただし、QEMUの公式バイナリではまたサポートされていないようなので自分でビ…

  • Crosstool-NGを使ってRPiのベアメタル開発環境を構築してみる

    前回、格安でRasperry Piを手に入れたのでこれらを使ってベアメタルプログラミングをしてみようと思います。 まずは開発環境の構築から(・`ω´・)b 開発環境の構築にはCrosstool-NGを使います。 Crosstool-NGは、toolchain(コンパイラ、アセンブラ、リンカなどの開発環境)を自動生成してくれるツールです。ARMやMIPSなどさまざまなアーキテクチャをサポートしています。 今回は、Winodws10上でBoW(Bash on ubuntu on Windows)を動かし、その上で開発環境を構築しました。 BoWのubuntuのバージョンは、18.04 LTSです。…

  • 格安でRaspberry Piを手に入れた

    年末にフラっと立ち寄ったハードオフでRaspberry Pi3 B+(RPi3)とRaspberry Pi 4B(RPi4) 4GB RAMモデルを見つけました。ジャンク品扱いで売られており、2つで7000円くらいだったかなぁ(;´Д`) 新品で買うとRPi3が6000円くらい、RPi4が8000円くらい(2020年1月調べ)なのでかなり儲けものだったのではないでしょうか?もちろん壊れている可能性もありましたがσ(^_^;) Raspberry Pi4 Model B(4GB)価格: 8160 円楽天で詳細を見る せっかくブログを立ち上げたのでしばらくはこの子たちを使って遊んでみたいと思います…

arrow_drop_down

ブログリーダー」を活用して、夏の思い出さんをフォローしませんか?

ハンドル名
夏の思い出さん
ブログタイトル
週末!プログラミング部
フォロー
週末!プログラミング部

にほんブログ村 カテゴリー一覧

商用