#PHPチュートリアル
Explore tagged Tumblr posts
Text

PHPプログラミング入門講座🔰【初心者でも1時間で学べるPHP入門!フル字幕】
#PHP基礎・入門#PHP#PHPチュートリアル#PHPプログラミング#PHP入門#PHP初心者#PHP講座#UCnEEaIbWQ8_bdqBgNNu4Q#サイバーフリークス株式会社#せお丸のITなんでも相談室#プログラマー#プログラミング#プログラミング勉強#プログラミング学習#プログラミング講座
0 notes
Text
【7/31〜8/19】3周年記念🌟白猫テニス配信キャンペーン開催!豪華報酬ゲットのチャンス🎁
白猫テニス3周年を記念して、配信キャンペーン開催!配信するだけで豪華報酬ゲットのチャンス✨
白猫テニストッププレイヤー様には、事前にエモモTシャツ&背景をセットして配信いただきます!
🎾白猫テニストッププレイヤーの配信をチェック!🎾
白猫テニストッププレイヤー様の配信をみて、ぜひプレイや配信の参考にしてみてください✨
配信時間などは各トッププレイヤー様にお任せとなります。ぜひアカウントをフォローして、配信通知をお受け取り下さい。
おまるーん様
ぽわまま様
ウェイン産業会長様
Zoo様
はぐりん様
ハム・エルレンシア様
やさいま様
アンナ・セイクリッド様
たけすてぃ様
やっさん様
涼月様
かんちゃん様
てんちょ様
れいもん様
白兎様
まお・アスピシャス様
※順不同
⏰実施期間⏰
2019年7月31日 (水) 16:00 〜 2019年8月19日 (月) 15:59
🎥配信者さん参加方法🎥
Step1:配信開始時にアプリ設定を「白猫テニス」にして、報酬条件に沿って配信をする Step2:キャンペーン終了後、後日運営からのお知らせに届く申請フォームにゲームのIDを申請する
こちらで完了です🙆
⭐️賞品⭐️
配信するだけでプレゼント!
エモモTシャツ(3種)
エモモ背景(1種)
1回の配信で、33分以上配信した方全員にプレゼント!
ボイス付き白猫テニススタンプ
※白猫テニスのゲーム内で使用できるスタンプです。
全員の総視聴時間数に応じてプレゼント!
10,000時間:オールスターフェスキャラガチャチケット×2
20,000時間:オールスターフェスキャラガチャチケット×2
25,000時間:オールスターフェスキャラガチャチケット×2
30,000時間:オールスターフェスキャラガチャチケット×2
33,333時間:オールスターフェスキャラガチャチケット×2
注意事項
ボイス付き白猫テニススタンプは、キャンペーン終了後にMirrativ(ミラティブ)アプリ内の運営からのお知らせより届く応募フォームへ必要事項を記入して申請してください。記載されている期日までにご返信ください。
「オールスターフェスキャラガチャチケットは、キャンペーン終了後に全員に配布します。配布日時などは『白猫テニス』公式Twitterでお知らせ予定です。※チュートリアルをクリアしている方への配布となります。
期日までに返答がない場合・その他運営が不適切と判断した場合、報酬が無効となります。あらかじめご了承ください。
エモモTシャツとエモモ背景は、キャンペーン終了後に対象者へ順次配布いたします。
キャンペーン期間中、白猫テニスの配信をミラティブ公式Twitterで紹介させていただく場合がございます。
端末の言語設定を日本語にしている方がキャンペーン参加対象です。日本語以外を設定されている場合、キャンペーンの参加対象外となります。
お問い合わせは、Mirrativ(ミラティブ)アプリ内の「お問い合わせ」からお願いいたします。
==============================
●トッププレイヤー様の選定につきまして2019年6月以降に白テニにログインしている方の中から、タワーやタイトル戦、イベントでの優勝実績や、上位入賞回数を参考にさせていただき、企画の趣旨や各プレイヤーの配信活動内容などに照らし、運営側にて総合的に判断し、選定いたしました。※具体的な選定基準に関するお問い合わせにつきましては、お答えしかねますので予めご了承ください。
==============================
■運営からのお知らせの確認方法
アプリ右下のベルマークをタップ→上部のタブを「運営」に切り替える
▼白猫テニスのダウンロードはこちら ➡︎https://colopl.co.jp/shironekotennis/redirect/rd_010.php
▼【公式】白猫テニスのTwitterはこちら 👉 https://twitter.com/stennis_colopl
▼「白猫テニス」の公式サイトはこちら 👉https://colopl.co.jp/shironekotennis/
👉「白猫テニス(リンクあり注意)」をアプリ登録をして「白猫テニス」の配信を楽しもう!!
※白猫テニスをマイアプリに登録すると、アプリTOP「マイアプリ」タブより一覧表示できます。また、白猫テニスの配信が始まると、PUSH通知を受け取ることができます。
Mirrativ(ミラティブ )とは
スマホ1台で、簡単に画面の生配信ができるアプリです。スマホだけで、ゲーム実況やバーチャルVTuberのようになって配信を楽しむことができます。
▼アプリのダウンロードはこちら 📱 ➡https://app.adjust.com/rjokdu_nh8snr
キャンペーンに関する免責事項
当企画は株式会社ミラティブが運営を行います。
必要と判断した場合には、本応募要項を変更できるほか、当企画の適正な運営を確保するために必要なあらゆる対応が出来るものとします。
参加者は当企画の参加にあたり、本応募要項および事務局の運営方針に従うものとし、その運営方針について一切異議を申し立てないものとします。
企画への参加はミラティブのスマホアプリからどなたでも可能です。
当選された方の権利を他人に譲渡���貸与などすることはできません。
不正行為が確認された場合は権利を無効とさせていただきます。
賞品付与対象者の方へのお知らせは、キャンペーン日程の終了以降、順次おこなう予定です。
賞品付与までは、お知らせから更に数日程度お時間をいただきます。本企画は予告無く変更、中止されることがあります。
本キャンペーンはApple Inc. アップルジャパン合同会社によるものではありません。
1 note
·
View note
Text
C++のライブラリをGoから呼び出す方法
C++のライブラリをGoから呼び出す方法
MacOS M1
Monterey 12.5
CMake
3.25.1
事前知識について
以下あたりで、C++のライブラリやCMakeの勉強をしました。
ライブラリのリンク方法をきっちり区別しよう -Qiita
CMake入門-基本概念と主な関数 -Qiita
C#で書いたライブラリをPHPやGoから呼び出す -Qiita
CMake Generator
チュートリアル: 独自のダイナミック リンク ライブラリを作成して使用する (C++)
コードを管理しているリポジトリはakubi0w1/call-cpplib-by-go-sample
C++のライブラリを作ってみる
テストということで適当に足し算します。
// cpplib/TestLibrary.h #ifndef TEST_H #define TEST_H #define DLL_EXPORT extern "C" __declspec(dllexport) #define DLL_CALL __stdcall DLL_EXPORT double DLL_CALL Add(double a, double b); #endif //TEST_H
// cpplib/TestLibrary.cpp #include "TestLibrary.h" double Add(double a, double b) { return a + b; }
CMakeまわり
CMakeLists.txtを書く
// CMakeLists.txt cmake_minimum_required(VERSION 3.23) project(test_library) set(CMAKE_CXX_STANDARD 14) add_compile_options(-fms-extensions) add_library(TestLibrary SHARED cpplib/TestLibrary.cpp cpplib/TestLibrary.h) # 静的ライブラリの場合は下記を指定する # add_library(TestLibrary STATIC cpplib/TestLibrary.cpp cpplib/TestLibrary.h)
CMakeのコマンドを実行するためのMakefileを作ります。
# Makefile CURRENT_PATH = $(shell pwd) # toolchains TOOLCHAIN_DIR = $(CURRENT_PATH)/.toolchain TOOLCHAIN_BIN = $(TOOLCHAIN_DIR)/bin # cmake CMAKE = $(TOOLCHAIN_BIN)/cmake/CMake.app/Contents/bin/cmake CMAKE_VERSION = 3.25.1 # packages UNAME_S := $(shell uname -s) ARCH := $(shell uname -m) ifeq ($(UNAME_S),Darwin) # See https://cmake.org/download/ CMAKE_ARCHIVE = cmake-$(CMAKE_VERSION)-macos-universal CMAKE_PACKAGE = https://github.com/Kitware/CMake/releases/download/v$(CMAKE_VERSION)/$(CMAKE_ARCHIVE).tar.gz endif ########################################### # cmake cmake-version: $(CMAKE) $(CMAKE) --version # See generators: https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html cmake-buildpj: $(CMAKE) $(CMAKE) -S . -B build/ -G"Unix Makefiles" cmake-buildlib: $(CMAKE) $(CMAKE) --build build/ $(CMAKE): mkdir -p $(TOOLCHAIN_BIN) mkdir -p $(TOOLCHAIN_DIR)/tmp-cmake cd $(TOOLCHAIN_DIR)/tmp-cmake && curl -Lo cmake.tar.gz $(CMAKE_PACKAGE) && tar -zxvf cmake.tar.gz mv $(TOOLCHAIN_DIR)/tmp-cmake/$(CMAKE_ARCHIVE) $(TOOLCHAIN_BIN)/cmake rm -rf $(TOOLCHAIN_DIR)/tmp-cmake
ライブラリをビルドする
Makefileで定義したターゲットを使ってビルドしてみる。
# プロジェクトファイルの作成 # build/が作成されます $ make cmake-buildpj # ライブラリのビルド # ライブラリの種類に応じて build/libTestLibrary.[a|dylib] が生成されます $ make cmake-buildlib
Goで呼び出す
静的ライブラリと動的ライブラリを呼び出してみる
静的ライブラリ
build/libTestLibrary.aが作成されていることを確認してください。
// main.go package main // #cgo LDFLAGS: -L./build -lTestLibrary // double Add(double a, double b); import "C" import ( "log" ) func main() { num1 := C.Add(1.5, 2.0) log.Printf("num: %+v", num1) }
goコードの実行をしてみる
$ go run main.go 2022/12/15 17:15:09 num: 3.5
動的ライブラリ
build/libTestLibrary.dylibがあることを確認してください。
// ライブラリを配置 $ sudo cp build/libTestLibrary.dylib /usr/local/lib/libTestLibrary.dylib
goのコードを書く
// main.go package main // #cgo LDFLAGS: -L. -lTestLibrary // double Add(double a, double b); import "C" import ( "log" ) func main() { num1 := C.Add(1.5, 2.0) log.Printf("num: %+v", num1) }
goコードの実行をしてみる
$ go run main.go 2022/12/15 17:17:17 num: 3.5
0 notes
Text
2022/8/17(Wed)
Laravel入門
難しくなってきた〜。チュートリアルやろうかなぁ。
いろんな本の中でPHPは「独習PHP」、 Laravelは「PHPフレームワーク Laravel入門(第2版)」を選んだのは適切だった気がする。
0 notes
Text
Microsoft office 2010 installer for windows 10 64 bit 無料ダウンロード.64 ビット版の Office 2010 をインストールする方法
Microsoft office 2010 installer for windows 10 64 bit 無料ダウンロード.無料のOffice 2010をWindows 10 64bitに入れる
最高のハウツーとチュートリアル.無料のMicrosoftOffice スターターをダウンロードする:ベストハウツー
Microsoft Office にStarterエディションという無償版があることをご存じですか。恥ずかしながらつい最近その存在を知り、Windows10 64bit版にインストールして利用できるようになりましたので紹介します。ただし、タイミンクが非常に悪く ・年10月にセキュリティサポートが切れて 詳細については、「Office のライセンス認証を行う」を参照してください。 64 ビ��ト版の Office をインストールする. 64 ビット版の Office をインストールする前に知っておく必要があること: 64 ビット版の Windows を実行している必要があります。 事前確認. 本Q&Aは、付属の「Microsoft Office プリインストールパッケージ」DVDメディアを使用せずに「Microsoft Office 」をインストールする方法です。 DVDメディアを使用してインストールする場合は、下記の関連Q&Aをご参照ください。
Microsoft office 2010 installer for windows 10 64 bit 無料ダウンロード.64 ビット版の Office をインストールする方法
事前確認. 本Q&Aは、付属の「Microsoft Office プリインストールパッケージ」DVDメディアを使用せずに「Microsoft Office 」をインストールする方法です。 DVDメディアを使用してインストールする場合は、下記の関連Q&Aをご参照ください。 Microsoft Office (Office ) において、64 ビット版のオペレーティング システム (OS) にインストール可能な 64 ビット版の製品が開発されました。 この資料では、64 ビット版 Office の導入前に検討すべき事項および 64 ビット版 Office のインストール方法 Nov 27, · 注:Office Starterは以下とのみ互換性があります Windows 視力はい Windows 7(XPもサポートしていません Windows 8)。 STEALTH SETTINGS - 無料のMicrosoft Office Starter Editionををダウンロード
多くのユーザー Windows 使用 マイクロソフトオフィス ちょうど編集したり、ファイルを読むことができるようにします Word si Excel 。 あなたがそれらの中にある場合、あなたは知っている必要があります マイクロソフト スイートルームのほか、提供しています ホーム , 学生 , ビジネス si 専門的 と スタータースイート 完全に フリー. Microsoft Officeのスターター それはあります スイートブリスター 、マイクロソフト社から提供されています OEMメーカー に含まれます システム Windows プレインストールされています 。 このスイートには含まれてい WordやExcelのアプリケーション 丁度2 限られたバージョン その、次のと 特徴 :.
Microsoft Officeのスターターの無料版をダウンロード. ではない交換用ものの 完全なOfficeスイート スイートスターターは購入する余裕がないユーザーを助けることができます Microsoft Officeのライセンス または必要に応じて残りのアプリケーションが他のスイートに含まれていないとみなさ。 彼らはあなたがスターターの最初の試みをインストールする前にすることをお勧めします 体験版 (60日無料) オフィス このアプリケーションに含まれるすべての機能部位とオプションをテストします。. 注:Office Starterは以下とのみ互換性があります Windows 視力はい Windows 7(XPもサポートしていません Windows 8)。. STEALTH SETTINGS - 無料のMicrosoft Office Starter Editionををダウンロード. テクノロジーに情熱を注いでおり、オペレーティングシステムに関するチュートリアルをテストして作成するのが好きです。 macOS、Linux、 Windows、WordPress、WooCommerce、LEMP Webサーバーの構成(Linux、NGINX、MySQL、PHP)について。 私は書きます StealthSettings年から.
Tipsチュートリアルとエコシステム内のデバイスに関するニュースを書き始めました。 Apple: iPhone、iPad、 Apple ウォッチ、HomePod、 iMac, MacBook、AirPodsおよびアクセサリ。.
November 25, December 2, いいえ・テンゴはWordをinstaladoません。 ・テンゴエルyの私VA BIENオープンオフィス。 ローのQUE乾草ユニコqueのestanヘッシュAlgun programasロス・ワードyの無puedoのmanejarパラ。. ツイートする 0. シェアする 0. Tipsチュートリアルとエコシステム内のデバイスに関するニュースを書き始めました。 Apple: iPhone、iPad、 Apple ウォッチ、HomePod、 iMac, MacBook、AirPodsおよびアクセサリ。 完全なカスタマイズ Windows Ultimateを搭載した7 Windows カスタマイザ November 25, プライベートモードでリンクを開く Browsing 右クリックメニューを使用してFirefoxで.
Soovin tasuta offisit 返信. コメント 返信をキャンセル コメント お名前 お使いのメールアドレス Website. クッキーとポリシー 当社のウェブサイトではCookieを使用して、お客様の好みを記憶し、繰り返しアクセスすることで、最も関連性の高いエクスペリエンスを提供します。 「すべて同意する」をクリックすると、すべてのCookieの使用に同意したことになります。 ただし、「Cookie Settings「管理された同意を提供するため。.
クッキー Settings すべて拒否 すべて受け入れる. 閉じる プライバシーの概要 このWebサイトでは、Cookieを使用して、Webサイト内を移動する際のエクスペリエンスを向上させます。 これらのうち、必要に応じて分類されたCookieは、Webサイトの基本的な機能の動作に不可欠であるため、ブラウザに保存されます。 また、このWebサイトの使用方法を分析および理解するのに役立つサードパーティのCookieも使用しています。 これらのCookieは、お客様の同意がある場合にのみブラウザに保存されます。 これらのCookieをオプトアウトするオプションもあります。 ただし、これらのCookieの一部をオプトアウトすると、 browsing 経験。. Necessary Necessary. 機能的な 機能的な. Performance Performance. アナリティクス アナリティクス. 分析Cookieは、訪問者がWebサイトとどのように対話するかを理解するために使用されます。 これらのCookieは、訪問者数、直帰率、トラフィックソースなどのメトリックに関する情報を提供するのに役立ちます。.
広告 広告. 広告Cookieは、訪問者に関連する広告とマーケティングキャンペーンを提供するために使用されます。 これらのCookieは、Webサイト全体の訪問者を追跡し、カスタマイズされた広告を提供するための情報を収集します。. その他 その他. このCookieは、GDPR CookieConsentプラグインによって設定されます。 Cookieは、「分析」カテゴリのCookieに対するユーザーの同意を保存するために使用されます。.
このCookieはGDPR Cookie Consentプラグインによって設定されます。 Cookieは、「必要」カテゴリのCookieに対するユーザーの同意を保存するために使用されます。. このCookieは、GDPR CookieConsentプラグインによって設定されます。 Cookieは、「その他」カテゴリのCookieに対するユーザーの同意を保存するために使用されます。. このCookieは、GDPR CookieConsentプラグインによって設定されます。 Cookieは、「パフォーマンス」カテゴリのCookieに対するユーザーの同意を保存するために使用されます。.
CookieはGDPR Cookie Consentプラグインによって設定され、ユーザーがCookieの使用に同意したかどうかを保存するために使用されます。 個人データは保存されません。.
0 notes
Link
はじめに 世はエンジニア戦国時代。Dockerくらい一般常識。Docker使えないなんてエンジニアを名乗れない。そんな時代です。(ほんとか?) この記事を書き始めた時の僕のDocker戦闘力は「Docker公式チュートリアルを眺めただけ」です。 なので逆に言えばDocker公式チュートリアルをやっただけの方にも理解できるかと思います。 (ちなみにKubernetes戦闘力は「なんでKubernetesをk8sって言うのかだけ知ってる」です。) この記事はそんな僕が「Docker/Kubernetesちょっと分かる」になるまでにやったことを後から追えるようにズラっと書き連ねたものになります。 使用するのは僕の大好きな言語ElixirとそのWebフレームワークPhoenixです。が、この記事でどの言語を用いているかは重要ではありません。 (記事内でElixirのコードはほぼ触らないですし) また、Railsが��かる方は以下の記事でRailsとPhoenixのコマンドを対応させて説明しているのでチラ見するとPhoenixで何をしようとしているか理解できるかと思います。 Rails経験者に贈るPhoenix入門 何か訂正や補足、アドバイスなどありましたら、是非是非コメントかTwitterまでお願いします!🙇♂️ この記事で扱う内容 Webアプリケーションを扱える環境をDockerfileで作成する docker-composeを使ってWebアプリケーション(+DB)を動かす 作成したimageをdockerhubに上げる Kubernetes(minikube)を使ってWebアプリケーション(+DB)を動かす Dockerfileの作成 では早速Dockerfileを作成していきます Dockerfileではこれから作成するコンテナで何をしようとしているかを定義します。 以下の公式リファレンスが参考になります。 Dockerfile リファレンス Dockerfile FROM elixir:1.10.2 RUN curl -sL https://deb.nodesource.com/setup_12.x | bash RUN apt-get install -y nodejs RUN npm install npm@latest -g RUN mix local.hex --force RUN mix archive.install hex phx_new 1.4.12 --force RUN mix local.rebar --force WORKDIR /app このDockerfileが何をしようとしているか 初心者なりに一行ずつ説明してみます。 親イメージを選択します。 イメージって何?という方は以下の公式チュートリアルの説明がわかりやすいです Part 1:概要説明とセットアップ | コンテナの概要を説明 この親イメージはElixir公式のimageです。 こういった公式で出ているイメージなどから自分の目的に即した環境が作れるようにDockerfileを記述していって、カスタムしていく訳です。 (今回だと自分の目的=Phoenixを動かせる環境となります) RUN curl -sL https://deb.nodesource.com/setup_12.x | bash RUN apt-get install -y nodejs RUN npm install npm@latest -g nodejsが必要なのでインストールしています。 ちなみにはじめはこの部分を以下のように記述していたのですが、(nodejsにnpmは同梱のはず) こうするとその後bash: npm: command not foundが出てしまいます。 以下のページを参考に上のコードに落ち着きました。 Dockerでphpコンテナとかにnpmをインストールするときのメモ RUN apt-get update \ && apt-get install -y nodejs RUN mix local.hex --force RUN mix archive.install hex phx_new 1.4.12 --force RUN mix local.rebar --force hexというElixirのパッケージ管理ツールをインストールします。 (Rubyでいうrubygems) ここで--forceがついてるのは以下のエラーが出るためです Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] ** (Mix) Could not find an SCM for dependency :phx_new from Mix.Local.Installer.MixProject 途中でyesと答えなければいけない部分があるのですが、それを--forceをつけることで無視してインストールできます。 postgresはどうすんの? はい、先ほどのDockerfileではElixir(Phoenix)の環境しか整っていません。 postgresのコンテナも作らなければいけないです。 しかし - postgresのコンテナとPhoenixのコンテナ間の通信はどうするの? - コンテナ間通信を頑張って設定したとしても毎回それを設定するの? - 毎回postgresのコンテナ、Phoenixのコンテナを両方立てるのめんどくせえ という問題たちが出てきます。 これらを解決してくれるのがdocker-composeです ※ちなみにdocker-composeを使わないコンテナ間通信は以下のページを参考にすればできそうです。 https://kitsune.blog/docker-network#i 「いやいや同じコンテナにDBも突っ込めばええやん!」について そうなるかもですが、コンテナを分けることにはちゃんと理由があります。 この後出てくるdocker-composeとKubernetesではアクセス分散のために複数のコンテナでWebサーバーを動かすことができます。 同じコンテナにDBも一緒に入れてしまうと、この際にDBもたくさんできてしまい、どのコンテナに接続されるかでDBの中身が変わってしまうと言う事態が起こります。 これを防ぐためにDBとWebでコンテナを分けてWebのコンテナを増やしても同じDBを参照するように設定すべきな訳です docker-composeを使用する docker-composeを使用するためにdocker-compose.ymlを作成します。 docker-compose.ymlにはdockerのコンテナ達やネットワークについてあるべき姿を記述します。 するとdocker-composeがそれを元に良しなに設定してくれるわけです。 以下のように作成します。 docker-compose.yml version: "3" #docker-composeのバージョン指定 services: #ここより下でserviceを定義 web: build: . #使用するDockerfileの場所 ports: #portをバインド - '4000:4000' volumes: #hostの./を/appとして共有 - .:/app command: mix phx.server #サーバー起動のためのコマンド depends_on: - db #webの開始前にdbを起動 db: image: postgres #使用するimage environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_HOST=db 以下の公式リファレンスがすごく参考になります。 Compose ファイル・リファレンス docker-compose.ymlに定義したcommandやportsはCMDやEXPOSEとしてDockerfileで定義することもできます。 これでDockerでElixir/Phoenixの環境を使用する準備ができました。 ※volumesに関してはファイルを共有できるという面と、コンテナの外にファイルを安全に置いておけるという面もあります。詳しくはKubernetesの章で出てきます。 適当なサンプルアプリを作ってみる テストもかねてサンプルアプリを作ってみます。(アプリ名はdododoにしました) $ docker-compose run web mix phx.new . --app dododo Creating network "docker-elixir_default" with the default driver Creating docker-elixir_db_1 ... done The directory /app already exists. Are you sure you want to continue? [Yn] y * creating config/config.exs * creating config/dev.exs * creating config/prod.exs * creating config/prod.secret.exs * creating config/test.exs * creating lib/dododo/application.ex * creating lib/dododo.ex * creating lib/dododo_web/channels/user_socket.ex * creating lib/dododo_web/views/error_helpers.ex * creating lib/dododo_web/views/error_view.ex * creating lib/dododo_web/endpoint.ex * creating lib/dododo_web/router.ex * creating lib/dododo_web.ex * creating mix.exs * creating README.md * creating .formatter.exs * creating .gitignore * creating test/support/channel_case.ex * creating test/support/conn_case.ex * creating test/test_helper.exs * creating test/dododo_web/views/error_view_test.exs * creating lib/dododo/repo.ex * creating priv/repo/migrations/.formatter.exs * creating priv/repo/seeds.exs * creating test/support/data_case.ex * creating lib/dododo_web/controllers/page_controller.ex * creating lib/dododo_web/templates/layout/app.html.eex * creating lib/dododo_web/templates/page/index.html.eex * creating lib/dododo_web/views/layout_view.ex * creating lib/dododo_web/views/page_view.ex * creating test/dododo_web/controllers/page_controller_test.exs * creating test/dododo_web/views/layout_view_test.exs * creating test/dododo_web/views/page_view_test.exs * creating lib/dododo_web/gettext.ex * creating priv/gettext/en/LC_MESSAGES/errors.po * creating priv/gettext/errors.pot * creating assets/webpack.config.js * creating assets/.babelrc * creating assets/js/app.js * creating assets/js/socket.js * creating assets/package.json * creating assets/css/app.css * creating assets/static/favicon.ico * creating assets/css/phoenix.css * creating assets/static/images/phoenix.png * creating assets/static/robots.txt Fetch and install dependencies? [Yn] y * running mix deps.get * running cd assets && npm install && node node_modules/webpack/bin/webpack.js --mode development * running mix deps.compile We are almost there! The following steps are missing: $ cd app Then configure your database in config/dev.exs and run: $ mix ecto.create Start your Phoenix app with: $ mix phx.server You can also run your app inside IEx (Interactive Elixir) as: $ iex -S mix phx.server また、しっかりホストとのファイル共有もできていることがわかります。 $ ls Dockerfile _build config docker-compose.yml mix.exs priv README.md assets deps lib mix.lock test config/dev.exsの微修正 config/dev.exsはdev環境の設定ファイルです。 データベースのホスト名をdbに変更しておきます。 config/dev.exs # Configure your database config :dododo, Dododo.Repo, username: "postgres", password: "postgres", database: "dododo_dev", hostname: "db", #fix show_sensitive_data_on_connection_error: true, pool_size: 10 DBの作成 $ docker-compose run web mix ecto.create Starting docker-elixir_db_1 ... done (省略) Generated dododo app The database for Dododo.Repo has been created うまく作成できました。 これでDBとの連携もうまくいっている事がわかります。 サンプルアプリを立ち上げてみる 以下のように表示されれば成功です。 dockerhubにあげる imageを確認してtagをつける $ 507e3f91e80f 55 minutes ago 1.28GB dododo_web latest d7724891c88c 4 hours ago 1.27GB elixir 1.10.2 d6641893fb96 12 hours ago 1.23GB postgres latest 73119b8892f9 2 days ago 314MB $ docker tag a9ff6e7b157f sanposhiho/phoenix:latest dockerhubにログイン $ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: sanposhiho Password: Login Succeeded 以下のリンクから適当にCreate Repositoryします。 https://hub.docker.com/repository/create 作ったRepositoryにpushします。 $ docker push sanposhiho/phoenix dockerhubにあげると何ができるのか dockerhubにあげる事でDockerfileが必要なくなります。 すなわちdocker-compose.ymlさえあれば先ほどの環境が作成できるわけです。 docker-compose.ymlを修正 Dockerfileを使用しない形にdocker-compose.ymlを修正します。 docker-compose.yml version: "3" services: web: image: sanposhiho/phoenix #先ほど作成したimage ports: - '4000:4000' volumes: - .:/app command: mix phx.server depends_on: - db db: image: postgres environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_HOST=db 変更箇所はwebのimageの部分です。 Dockerfileを参照していたのを先ほど作成したimageを指定しました。 これによりsanposhiho/phoenixをローカルで削除してからdocker-compose upしても $ docker-compose up Creating network "docker-elixir_default" with the default driver Pulling db (postgres:)... latest: Pulling from library/postgres 68ced04f60ab: Pull complete 59f4081d08e6: Pull complete 74fc17f00df0: Pull complete 8e5e30d57895: Pull complete a1fd179b16c6: Pull complete 7496d9eb4150: Pull complete 0328931819fd: Pull complete 8acde85a664a: Pull complete 38e831e7d2d3: Pull complete 582b4ba3b134: Pull complete cbf69ccc1db5: Pull complete 1e1f3255b2e0: Pull complete c1c0cedd64ec: Pull complete 6adde56874ed: Pull complete Digest: sha256:110d3325db02daa6e1541fdd37725fcbecb7d51411229d922562f208c51d35cc Status: Downloaded newer image for postgres:latest Pulling web (sanposhiho/phoenix:)... latest: Pulling from sanposhiho/phoenix 50e431f79093: Already exists dd8c6d374ea5: Already exists c85513200d84: Already exists 55769680e827: Already exists f5e195d50b88: Already exists f7e2598a9cb7: Already exists 9ba52fdf113f: Already exists 896d0883eede: Already exists 019ae449ef4b: Already exists a653e3c2dbc7: Pull complete 1b5116636524: Pull complete 6a7182c301e9: Pull complete ff51ec8f406c: Pull complete 4c53f0b7d33e: Pull complete 79b95deb3b15: Pull complete 4e0c0135d3e7: Pull complete Digest: sha256:ab7dbe3a514597f3e390f90de76de6465defb90103f58c3f08e34db97d890ae7 Status: Downloaded newer image for sanposhiho/phoenix:latest Creating docker-elixir_db_1 ... done Creating docker-elixir_web_1 ... done このようにsanposhiho/phoenixがなくても勝手にdockerhubから取ってきてくれます。 Kubernetesをやっていく 以下の記事を参考に先ほどの環境をKubernetes(minikube)でも動かしてみます。 Docker ComposeからMinikube + Komposeに移行してみよう Komposeと言うのはdocker-compose.ymlをKubernetes向けの設定ファイルに変換してくれる便利なやつです。 そもそもKubernetesって? 色々見ましたが以下の記事の前半部分の説明がとても分かり易かったです 数時間で完全理解!わりとゴツいKubernetesハンズオン!! Komposeを使う前に色々修正 Dockerfile Dockerfile FROM elixir:1.10.2 RUN curl -sL https://deb.nodesource.com/setup_12.x | bash RUN apt-get install -y nodejs RUN npm install npm@latest -g RUN mix local.hex --force RUN mix archive.install hex phx_new 1.4.12 --force RUN mix local.rebar --force RUN apt-get install ca-certificates #追加 COPY . /app #追加 WORKDIR /app これを先ほどの手順でdockerhubに上げます (僕はsanposhiho/phoenix_for_k8sとして上げました。) docker-compose.yml docker-compose.yml version: "3" services: web: image: sanposhiho/phoenix_for_k8s #変更 ports: - '4000:4000' command: mix phx.server depends_on: - db db: image: postgres ports: - "5432:5432" #追加 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_HOST=db 追加/変更の他にvolumeの部分が削除されています。 komposeで変換 $ kompose convert INFO Kubernetes file "db-service.yaml" created INFO Kubernetes file "web-service.yaml" created INFO Kubernetes file "db-deployment.yaml" created INFO Kubernetes file "web-deployment.yaml" created 幾つかのファイルが作成されました。 生成されたファイルを微修正 web-service.yamlに以下を追記します。 web-servise.yaml apiVersion: v1 kind: Service metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: web name: web spec: ports: - name: "4000" port: 4000 targetPort: 4000 selector: io.kompose.service: web type: NodePort #追加 status: loadBalancer: {} これにより外の世界からアクセス可能になります。 生成されたファイルを見ていく Komposeが生成してくれたファイルを見ていきます。 以下の公式ドキュメントが理解の上で役立つと思います。 Kubernetes | Kubernetesオブジェクトを理解する Komposeによって大きく分けて「Deployment」と「Service」の二つが作成されています。 Deploymentとは Deploymentに関しては以下の公式ドキュメントがわかりやすいです。 Kubernetes | Deployment 以下の記事も(少し古いですが)とても参考になりました。 Kubernetes: Deployment の仕組み deploymentはpod(Kubernetesの管理する最小単位)を管理します。 (正確にはpodを管理するReplicaSetを作成します。) 実際に作成されたweb-deployment.yamlを見てみます。 web-deployment.yaml apiVersion: apps/v1 #どのバージョンのKubernetesAPIを利用するか kind: Deployment #何についての定義ファイルか metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: web name: web #deploymentの名前 spec: replicas: 1 #replicaの数 selector: matchLabels: io.kompose.service: web #podのラベル定義 strategy: {} template: #deploymentが管理するpodの定義 metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: web spec: containers: - args: - mix - phx.server image: sanposhiho/phoenix_for_k8s imagePullPolicy: "" name: web ports: - containerPort: 4000 resources: {} restartPolicy: Always serviceAccountName: "" volumes: null status: {} web-deployment.yamlではspec.templateで指定されたpodを常に1つ維持するようにしています。 Serviceとは 以下の公式ドキュメントが参考になります。 Kubernetes | Service PodはそれぞれがIPアドレスを持っています。例えば今回のようにDBのPodとWebサーバーのPodに別れている場合、WebサーバーがDBのPodにアクセスするにはDBのPodのIPアドレスが必要になります。 そこでServiceはpodたちをセットで管理し(「DBのPod」「サーバーのPod」と言う風に管理)、そのセットに対してのアクセスが可能になります。 例えPodが動的に入れ替わったりしても一貫した方法でのアクセスが可能になります。 (Service無しだと、何かの��害で一つのPodが死んで、Deploymentが代わりのPodに入れ替えた時にはIPアドレスが変わってしまうのでアクセスができなくなってしまいます) 実際に作成されたweb-service.yamlをみてみます。 web-service.yaml apiVersion: v1 kind: Service metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: web name: web spec: ports: #管理するportに関して - name: "4000" port: 4000 targetPort: 4000 selector: #管理するPodの指定 io.kompose.service: web type: NodePort status: loadBalancer: {} 先ほど追加したtype: NodePortは指定しなかった場合デフォルト値としてClusterIPに指定されます。 ClusterIP: クラスター内部のIPでServiceを公開する。このタイプではServiceはクラスター内部からのみ疎通性があります。 これではクラスターの外部からのアクセスができなかったためNodePortに変更しました NodePort: 各NodeのIPにて、静的なポート(NodePort)上でServiceを公開します。そのNodePort のServiceが転送する先のClusterIP Serviceが自動的に作成されます。:にアクセスすることによってNodePort Serviceにアクセスできるようになります。 Serviceの公開 (Serviceのタイプ) minikubeを立ち上げておく ダッシュボードを開いておく ダッシュボードを使えば以下のようにPodなどの状態をブラウザから確認できます。 立ち上げ! ついにKubernetes上で立ち上げてみます。 $ kubectl apply -f db-deployment.yaml $ kubectl apply -f web-deployment.yaml $ kubectl apply -f db-service.yaml $ kubectl apply -f web-service.yaml これによってファイルに定義されたもの達が立ち上がります。 kensei-mba:docker-elixir nakatakensei$ kubectl get all NAME READY STATUS RESTARTS AGE pod/db-5fbcf655cd-2k7lw 1/1 Running 0 159m pod/web-87795996-r6rcf 1/1 Running 0 159m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) 4000:30249/TCP 159m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/db 1/1 1 1 159m deployment.apps/web 1/1 1 1 159m NAME DESIRED CURRENT READY AGE replicaset.apps/db-5fbcf655cd 1 1 1 159m replicaset.apps/web-87795996 1 1 1 159m DBを作成する kubectl exec -it web-87795996-r6rcf mix ecto.create で任意のコードをPodに対して実行させることができます。 また、このコードが通る=Serviceが機能してDBに繋いでくれていることを意味します。 ちゃんと立ち上がっているか確認 $ minikube service list |----------------------|---------------------------|--------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |----------------------|---------------------------|--------------|---------------------------| | default | db | No node port | | default | kubernetes | No node port | | default | web | | http://192.168.64.2:32566 | | kube-system | kube-dns | No node port | | kubernetes-dashboard | dashboard-metrics-scraper | No node port | | kubernetes-dashboard | kubernetes-dashboard | No node port | |----------------------|---------------------------|--------------|---------------------------| webのURLにアクセスします このようにPhoenixのTop画面が表示されれば成功です! これでも動いてはいますが… 現状の設定ではDBのPod内のみにDBのデータが存在します。 なのでDBのPodが死んだ時に全てのデータが死んでしまいます。 一回実験してみましょう ダッシュボードから作成されているKubernetes以外のService, Pod, deploymentを全て削除してください。 以下のようになれば合っています。 WebアプリケーションをDBを使うアプリケーションに作り直す PhoenixにもRailsと同様に便利なgeneratorの機能が搭載されています。 ローカルでgeneratorを使用します。 $ mix phx.gen.html Blog Post posts title:string content:string * creating lib/dododo_web/controllers/post_controller.ex * creating lib/dododo_web/templates/post/edit.html.eex * creating lib/dododo_web/templates/post/form.html.eex * creating lib/dododo_web/templates/post/index.html.eex * creating lib/dododo_web/templates/post/new.html.eex * creating lib/dododo_web/templates/post/show.html.eex * creating lib/dododo_web/views/post_view.ex * creating test/dododo_web/controllers/post_controller_test.exs * creating lib/dododo/blog/post.ex * creating priv/repo/migrations/20200308110013_create_posts.exs * creating lib/dododo/blog.ex * injecting lib/dododo/blog.ex * creating test/dododo/blog_test.exs * injecting test/dododo/blog_test.exs Add the resource to your browser scope in lib/dododo_web/router.ex: resources "/posts", PostController Remember to update your repository by running migrations: $ mix ecto.migrate 書かれているようにrouter.exにルーティングを追加しておきます。 lib/dododo_web/router.ex defmodule DododoWeb.Router do use DododoWeb, :router pipeline :browser do plug :accepts, ["html"] plug :fetch_session plug :fetch_flash plug :protect_from_forgery plug :put_secure_browser_headers end pipeline :api do plug :accepts, ["json"] end scope "/", DododoWeb do pipe_through :browser get "/", PageController, :index resources "/posts", PostController #追加 end # Other scopes may use custom stacks. # scope "/api", DododoWeb do # pipe_through :api # end end migrationします $ mix ecto.migrate 11:23:37.327 [info] == Running 20200308110013 Dododo.Repo.Migrations.CreatePosts.change/0 forward 11:23:37.335 [info] create table posts 11:23:37.392 [info] == Migrated 20200308110013 in 0.0s これで/postsにアクセスすると以下のようなアプリが作成できています (画像はNew Postから新たなpostを作成した後です) この変更をdockerhubのimageに反映させます。 先ほど説明した手順とほとんど同じなのでコマンドだけ載せておきます。 $ docker build . $ docker images #image idを取得 $ docker tag <image id sanposhiho/phoenix_for_k8s $ docker push sanposhiho/phoenix_for_k8s minikube環境で変更後のアプリケーションを動かす こちらもほぼ手順が変わらないのでコマンドだけ載せておきます。 $ kubectl apply -f db-deployment.yaml $ kubectl apply -f web-deployment.yaml $ kubectl apply -f db-service.yaml $ kubectl apply -f web-service.yaml $ kubectl get pods #pod nameの確認 $ kubectl exec -it mix ecto.create $ kubectl exec -it mix ecto.migrate 先ほどと違うのは最後に mix ecto.migrateが追加されていることです。これによってpostsテーブルがDBのPod内に作成されます。 画像使い回しですが、以下のページが/postsから確認できれば成功です。 (画像はまたもやNew Postから新たなpostを作成した後です) DBのPodを削除してみる ダッシュボードからDBのPodを削除します。 Deploymentによってすぐに新しいDB用のPodが作られます。(さすが) さて、先ほどのページを開き直してみるとどうなっているでしょうか 訳のわからんエラーが出ています。 「何回かDBにアクセスしようとしたけど、無理でしたー」というエラーです。 無事に(?)DBがPodが死んだことで消えてしまったことがわかりました。 ちなみに以下のコマンドでDBを作り直してPostsテーブルを再作成すると先ほどの「ほげほげ」のデータは残っていませんが、ページが正常に表示されます。 (作り直されたDBのPodに新しく出来たDBだから当たり前ですね) $ kubectl get pods #pod nameの確認 $ kubectl exec -it mix ecto.create $ kubectl exec -it mix ecto.migrate volumeを設定してDBの揮発を防ぐ 長々実験しましたが、このDBの揮発(=永続の逆。Podが死ぬとDBも一緒に消えてしまうと言う意)を防ぐにはvolumeを設定する必要があります。 volumeの設定方法ですが二つ存在しました。 (どっちがいいのかは分からないです…どなたか教えてください。) db-development.yamlのvolumesのみを弄る PersistentVolumeClaimを利用する 1. db-development.yamlのvolumesのみを弄る db-development.yaml apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: db name: db spec: replicas: 1 selector: matchLabels: io.kompose.service: db strategy: {} template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: db spec: containers: - env: - name: POSTGRES_HOST value: db - name: POSTGRES_PASSWORD value: postgres - name: POSTGRES_USER value: postgres image: postgres imagePullPolicy: "" name: db ports: - containerPort: 5432 volumeMounts: #追加 - mountPath: "/var/lib/postgresql/data" name: pgdata resources: {} restartPolicy: Always serviceAccountName: "" volumes: #追加 - name: pgdata hostPath: path: /Users/nakatakensei/docker-elixir/ #postgresのdataをhostのどこに置いておくか 2. PersistentVolumeClaimを利用する pvc-phoenix.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pv-claim spec: storageClassName: standard accessModes: - ReadWriteOnce resources: requests: storage: 1Gi db-development.yaml apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: db name: db spec: replicas: 1 selector: matchLabels: io.kompose.service: db strategy: {} template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.21.0 () creationTimestamp: null labels: io.kompose.service: db spec: containers: - env: - name: POSTGRES_HOST value: db - name: POSTGRES_PASSWORD value: postgres - name: POSTGRES_USER value: postgres image: postgres imagePullPolicy: "" name: db ports: - containerPort: 5432 volumeMounts: - mountPath: "/var/lib/postgresql/data" name: pgdata resources: {} restartPolicy: Always serviceAccountName: "" volumes: - name: pgdata persistentVolumeClaim: #1とはここが違う claimName: pv-claim 先ほどの手順で実験してもらうとどちらの方法を用いてもDB揮発しちゃう問題が解決したことがわかります。 (スクショを撮っても分かり難かったため、ここまで実際に手を動かして進めていただいた方は自分で実験してみてください) 終わりに 最終的なファイル達は以下のリポジトリに上がっています。 https://github.com/sanposhiho/docker-elixir-phoenix すごく長い記事になってしまいました。 しかし、個人的にDocker→Kubernetesと一緒の流れで学べるようなチュートリアルが無かったため記事を分けずにこのように進めました。 どなたかの役に立てば幸いです。 余談 ちなみに、この記事を読んでElixir/Phoenix勉強してみようかなって方がいましたら、この記事を元にDocker環境を立ててもいいですし、ローカルにElixir/Phoenixの環境を整えるには以下の記事が参考になるかと思います。 【2020/02最新】新品のMacBookでElixir(Phoenix)の環境を0から構築する 参考 記事内であげなかったけどチラチラ見て参考にさせていただいたサイトです。 DockerでRuby on Railsの開発をしよう kubernetesクラスタでRailsアプリを公開するチュートリアル Kubernetesの永続化 [PersistentVolume/PersistentVolumeClaim]
0 notes
Photo

[PHP / Laravel] 掲示板の実況プログラミング (チュートリアルの写経 / 解説なし) 今回参考にさせていただいたサイト 【Laravel 5.8対応】掲示板を作成するチュートリアル (ハンズオンで... source
0 notes
Text
なぜコンテナを導入するのか ~ 各職種への説得材料をまとめる
from https://qiita.com/tomoyamachi/items/dca29f53bc7e20ddd8ba?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
はじめに
本記事はディップ Advent Calendar 2019の記事です。
現在、ディップさんに週1回程度お邪魔して、(個人の趣味で)定期的にコンテナに関する勉強会を開催しています。 本記事では、コンテナに触ったことがない人に対して、コンテナ利用時のメリット��説明するための資料を公開します。 なお、ディップ社内ではPHPが利用している部署が多いので、PHPに関する記述が多いです。 注) この記事でことわりがない場合、「コンテナ」は「Dockerコンテナ」を指します。
コンテナ技術とコンテナイメージ
コンテナ技術とは、プロセスを隔離して実行するための技術です。 コンテナイメージ(イメージ)とは、「アプリケーションコードと依存関係を一つにまとめたファイル」です。 コンテナイメージを元に実行された、隔離されたプロセスになったものをコンテナと呼ばれます。

https://www.docker.com/resources/what-container
VMとの違い
VMは一つ一つにゲストOSが必要です。 コンテナは、プロセスを隔離してHostOS上で動作させることができます。 そのためオーバーヘッドや利用するリソースも少なく、高速に起動します。
https://www.docker.com/resources/what-container
コンテナを導入するメリット
新人教育関連
アプリケーションコードと依存関係を一つのイメージにまとめられる
最初の環境構築がめっちゃ楽になる
公式のコンテナイメージを利用すると、だいたいの設定は完了する

サービス開発者
開発環境の構築がコードベースで行える
開発開始までの時間が短い
VMに比べてコンピュータリソースを有効活用できる
既存の環境に影響を与えず、新しい環境を利用できる
実際にプログラムをインストールしなくてよい

以下の例では、PHPをインストールせず、PHP5.6とPHP7.3の各バージョンでPHPのコードを動かしています。 https://github.com/tomoyamachi/docker-tutorial/blob/master/00-introduction-ja.md
# ver5.6環境で実行 $ docker run --rm -it -v $(pwd)/00-php-sample:/app \ --rm php:5.6-cli-alpine \ php /app/main.php NULL # ver7.3環境で実行 $ docker run --rm -it -v $(pwd)/00-php-sample:/app \ --rm php:7.3-cli-alpine \ php /app/main.php Fatal error: Redefinition of parameter $void in /app/main.php on line 3
インフラ担当向け
セキュリティ担当向け
CI/CDを実行すると、自動でパッケージが最新のものになる
アプリケーションに関するパッケージのアップデート非常に楽
コンテナプロセスは非root権限で実行されるので、侵入されたときのリスクが下げられる
アプリケーションコードと依存関係を一つのイメージにまとめた「イメージ」ごとに責任を分割できる → どこで利用されているかわからないパッケージ/ライブラリを減らせる
ただし、Dockerやオーケストレーションツール(Kubernetesなど)に脆弱性が発見されることもある
FAQ
どういう原理で動くの?
Linuxカーネルの機能を組み合わせて動きます。 Mac / Windowsだと、Linuxカーネルの機能を小さくまとめたLinuxKitを動かしています。
これまで覚えた知識は無駄になるの?
無駄になりません。 たとえば、コンテナ間のネットワーク通信では、veth(バーチャルイーサネットデバイス)を用いて通信を実現しています。また、iptablesなどを駆使してコンテナ間の名前解決を行っています。 伝統的な手法を仮想的に行っていることが多いので、トラブルシュートの際は、これまでの知識が必要になってきます。
向いてないことはある?
たとえば以下の場合は向いてません。
複雑なモノリスアプリケーション Dockerは1プロセスごとにコンテナを分けることが推奨されます。そのため、複雑すぎてプロセスの分離が難しいものは向いていません。その場合は、LXCなど1コンテナで複数プロセス起動が許されているコンテナ技術をつかえます。
特殊なデバイス/リソースを利用する たとえば、現在NVIDIA以外のGPUを利用できません。特殊なリソースを利用したい場合、対応できないことがあります。
次のステップ
DockerHubのアカウントを作成
Docker Playground にDockerHubアカウントでログインする
「ADD NEW INSTANCE」でインスタンスをつくって、dockerコマンドを実行する
https://events.docker.com/learndocker-workshop/ の手順に沿ってコマンドを打つ
宣伝
PHPer向けのDockerチュートリアルを作成しました。 日本語で、さっとDockerを動かしたい人はこちらもどうぞ。
まとめ
実際の勉強会だと、最初の10分くらいで概要を説明して、2時間くらいハンズオン形式で実際にdockerを触っていきます。 うちの会社でもやってほしい、みたいなのがあればご相談ください。
0 notes
Text
Teamwork OP
Paizaで問題解いてたらJSだと厳しいのが出てきてぐぬぬりながらPHPで回答した。くやしいのでPythonに入門してる。今はインタプリタ入れてチュートリアルを読んだところ。リストとかタプルとかまだ何もわからんけどとりあえずstringがimmmutableなのはすごくいいと思った。リストとかタプルとかはまだわかんない(重要)のでPython Koan通してTDDでわかろうとおもう。
ここまでは前置きで、私がチームで仕事するにあたって大事にしている(けどうまくいっていない)考え方の話をしたいと思う。 前置きはあれだ、ただのポエマーではないですよアピール。
Teamwork OP
https://youtu.be/ugXC7g3p0JU
League of Legendsというゲームのマナー啓発動画。
要約
ゲームは楽しくやりたいし、勝てたらもっと楽しいでしょ?
個人の小手先のスキルよりチームワークが大事
怒りや責め合いは勝利を遠ざけることが統計的に証明されている
振る舞いと成果に相関性があることも統計的に証明されている
ポジティブな言動を多くするプレイヤーのほうが平均より多く勝利し、ネガティブな言動を多くするプレイヤーのほうが平均より多い敗北を経験している
助け合うほうが勝率が高い
Is Teamwork OP on REAL Jobs?
ポリシー
仕事は楽しくやりたいし、成功したい
小手先のスキルを重視するよりチームで助け合って成功を目指したい
気に入らないことがあっても怒ったり責めたりしないようにし、周囲がネガティブな言動をしたら止めたい
チームに貢献したい気持ちがあることを広く伝えていく
チームメンバーは助けるし、自分も助けを求める
ゲームと現実は違う(あたりまえ)
世の中必ずしも仕事を楽しみたい人ばかりじゃない
世の中必ずしもチームで仕事したい人ばかりじゃない
世の中必ずしも返報性の原理に従う人ばかりじゃない
世の中必ずしも成功と報酬が結びつくとは限らない
プログラマーとしてお仕事している以上どうしてもスキルは大事
ゲームと違って短時間で切れる縁ではないのでどうしても不満が相互に蓄積しがち
ゲーム内の理想や道徳と現実の乖離に耐えきれなくなって爆発することがだいぶ多い気がしている。
じゃあどうしたらいいのか
わかりません!一緒に正解を見つけてくれる仲間がほしい!!!
0 notes
Text
Electron-vueのビルドに詰まった話
ElectronはWebの技術でデスクトップアプリケーションを開発することが出来るものであるという。
そのVue版がelectron-vue。
依頼されたアプリをVueでちまちま作っていたところ、実はスタンドアロン環境で使うことが発覚。
そこそこ作ってしまった分を捨てて一から作り直すのは嫌なのでelectron-vueに移植して使い回しが出来ないかなと思い実行。
途中までは良かったのだけれど、これで最後だーという気持ちで実行したビルドでいきなりのエラー。
直前に手を入れた箇所を直してもエラーが出続ける。
そもそも、直前にしていたのがウインドウサイズの調整というごく単純な作業。
100pxくらい小さくしようかなーこれじゃ小さすぎるかなーとか、そんなことをしていたらいきなりのエラーでかなりビックリ。
エラーログを読んでもピンとこない。
エラーログの一部を検索にかけてそれっぽいissueに目を通し、それぞれのやり取りの中で提案されたことを片端から試してみるが結局上手くいかず。
また一から構築して、最終的には同様のエラーが出たのだけれど、それまでの間に一度だけビルドに成功したのでそれを最終成果物にするということで区切りにした。
CLIコマンド一つですぐに利用出来るテンプレートは便利だし、ステップアップのチュートリアルもそこそこある。
それらの指示の通りにコマンドを打ち込んでいくだけでそれらしいものは作れはするが、内部で何が起こっているのかが分からないままでは自分の頭で考えていることにはならないんだろうなと。
javascriptでもPHPでも何でもそうだけど「こうしたらこうなりますよ」ってところだけの理解ばかりに意識が向いていて「じゃあ、どうしてそうなるの?」という疑問に対し正しい仕組みを正しい言葉で表現する努力を怠っていた。
0 notes
Text
プログラミング言語ランキング、PythonがJavaを抜いて1位に
2018年5月の「PYPL PopularitY of Programming Language」が公開された。これによると、PythonがJavaを抜き1位に躍り出た。
PYPLはGoogle検索���ンジンにおいてプログラミング言語のチュートリアルが検索された回数から、対象となるプログラミング言語がどれだけ話題になっているかをインデックス化したもの。チュートリアルの検索回数を人気度と位置づけてランキングしている。
2018年5月におけるインデックスは次のとおり。
順位 プログラミング言語 インデックス値 推移 1 Python 22.8% ↑ 2 Java 22.5% ↓ 3 Javascript 8.57% ↑ 4 PHP 8.33% ↓ 5 C# 7.87% ↓ 6 C/C++ 6.26% ↓ 7 R 4.22% ↑ 8 Objective-C 3.56%…
View On WordPress
0 notes
Text
グダグダ言ってないでコード書けハゲ
今日は会社からメールが届��た。
僕が前に落ちた会社なんだけど、諦めきれずにもう一度お話してもらえないかとメールを送った所、また話をしてくれる事になった。
会社からしたら良い迷惑ではあるけど、自分が将来やりたい事と近くて働きたいと思っている。
ウダウダ悩んでいたけど、僕はコードを書くしかないのだ。やれ勉強だとチュートリアルをやっていて、後々パーフェクトPHPを見ながらフレームワークも作れたらなーとか思うけど、手段と目的が入れ替わっている事が否めないのだ。
もちろん、勉強は大切だ。本を読んで、ネットで調べて何より自分の手で動かして体系的に学ぶ必要が絶対にある。学生時代勉強してこなかったなら尚更だ。
大事なのはその2つのバランスなんだろう。どっちかに偏りすぎてもいけない。自分が作りたい物を作りつつ、都度分からなくなったら、調べて知識として入れる。作り終わって足りなかった部分をまた体系的に勉強する。
この両輪をグルグル回す事を意識したい。僕は人に使われてちょっと幸せになるようなサービスが作りたい。
作る上で一つのキーワードは人は自分に合ったレコメンドをしてほしいという事
Amazonのレコメンドでついつい買ってしまう。
Youtubeのおすすめ機能は時間をどんどん奪って行く。
Instagramの発見機能は自分が好きな写真がドンドンと出てくる。
本屋さんだって、何千冊もありまっせ!というよりあなたの為に3冊選びました!の方が流行るはずだ。
そういう流れとかも見て、サービス作れたらいいなーと。
まぁグダグダ言ってないでコード書きます。
0 notes
Text
PythonがJavaに迫る勢い - 7月の開発言語ランキング
PythonがJavaに迫る勢い – 7月の開発言語ランキング
1: ノチラ ★ 2017/07/09(日) 10:03:54.81 _USER 2017年7月の「PYPL PopularitY of Programming Language」が公開された。PYPLはGoogle検索エン��ンにおいてプログラミング言語のチュートリアルが検索された回数から、対象となるプログラミング言語がどれだけ話題になっているかをインデックス化したもの。チュートリアルの検索回数を人気度と位置づけてランキングしている。 2017年7月におけるインデックスは次のとおり。 順位 プログラミング言語 インデックス値 推移 1 Java 22.6% ↓ 2 Python 16.4% ↑ 3 PHP 9.1% ↓ 4 C# 8.2% ↓ 5 Javascript 8.0% ↑ 6 C++ 6.6% ↓ 7 C 6.5% ↓ 8 R 3.7% ↑ 9 Objective-C 3.6%…
View On WordPress
0 notes
Text
PythonがJavaに迫る勢い - 7月の開発言語ランキング
PythonがJavaに迫る勢い – 7月の開発言語ランキング
1: ノチラ ★ 2017/07/09(日) 10:03:54.81 _USER 2017年7月の「PYPL PopularitY of Programming Language」が公開された。PYPLはGoogle検索エンジンにおいてプログラミング言語のチュートリアルが検索された回数から、対象となるプログラミング言語がどれだけ話題になっているかをインデックス化したもの。チュートリアルの検索回数を人気度と位置づけてランキングしている。 2017年7月におけるインデックスは次のとおり。 順位 プログラミング言語 インデックス値 推移 1 Java 22.6% ↓ 2 Python 16.4% ↑ 3 PHP 9.1% ↓ 4 C# 8.2% ↓ 5 Javascript 8.0% ↑ 6 C++ 6.6% ↓ 7 C 6.5% ↓ 8 R 3.7% ↑ 9 Objective-C 3.6%…
View On WordPress
0 notes