Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all 21223 articles
Browse latest View live

Everyone mo Kane-Kosugi ni narou!!!

$
0
0

1. Hajimeni

Everyone ha kane kosugi san no romaji diary wo shitte imasuka?
English ga yomeru kigasuru to wadai ni natta yatsu desu!
(Ima ha koushin sarete nai youdesu…)

ズルいと話題! ケイン・コスギの爆笑ローマ字日記。しかし、その本当の理由は・・・
KANE & STAFF DIARY - Kane Kosugi

Sports ya Haiyuu toshite katuyaku suru kane san.
Totemo 45 sai no body toha omoe masen!
Watashi ha "Kiniku Banduke" to "Ninja sentai Kakurenjaa" no "Black ninja" ga
inshou ni nokotte imasu.

Koko deha Auto de Kane romeji Diary ni shimasu!!!

2.Kankyou

・MacBook Pro
・Python 3.7.4
・COTOHA API
・Google Translation API
・Visual Studio Code

3. Yaritai koto

入力_出力.png
3ttsu no API to Dictionary de jitsugen shimasu.

3.1 COTOHA Koyuu hyougen chuushutsu

image.png

3.2 Google Translation API

3.3Google_Translation_API.png

3.3 COTOHA Koubun kaiseki

image.png

3.4 Dictionary

image.png

3.5 Sonota

image.png

3.6 Moto no basho ni ate hameru

image.png

3.7 Subete romaji ni henkan

image.png

3.8 Buntou wo oomoji ni suru

image.png

4. Code

4.1 kane_kosugi.py

Click here !!
importrequestsimportjsonimportsysimportdictionaryimportrefrompykakasiimportkakasifromgoogle.cloudimporttranslateimportmojimojiBASE_URL="https://api.ce-cotoha.com/api/dev/nlp/"CLIENT_ID="COTOHA no CLIENT_ID wo irete kudasai"CLIENT_SECRET="COTOHA no CLIENT_SECRET wo irete kudasai"project_id="GCP no project_id wo irete kudasai"kakasi=kakasi()kakasi.setMode('H','a')kakasi.setMode('K','a')kakasi.setMode('J','a')conv=kakasi.getConverter()#COTOHA認証
defauth(client_id,client_secret):token_url="https://api.ce-cotoha.com/v1/oauth/accesstokens"headers={"Content-Type":"application/json","charset":"UTF-8"}data={"grantType":"client_credentials","clientId":client_id,"clientSecret":client_secret}r=requests.post(token_url,headers=headers,data=json.dumps(data))returnr.json()["access_token"]#構文解析
defparse(sentence,access_token):base_url=BASE_URLheaders={"Content-Type":"application/json","charset":"UTF-8","Authorization":"Bearer {}".format(access_token)}data={"sentence":sentence,"type":"default"}r=requests.post(base_url+"v1/parse",headers=headers,data=json.dumps(data))returnr.json()#固有表現抽出
defne(sentence,access_token):base_url=BASE_URLheaders={"Content-Type":"application/json","charset":"UTF-8","Authorization":"Bearer {}".format(access_token)}data={"sentence":sentence,"type":"default"}r=requests.post(base_url+"v1/ne",headers=headers,data=json.dumps(data))returnr.json()#google翻訳
deftranslate_text(text,project_id):client=translate.TranslationServiceClient()parent=client.location_path(project_id,"global")response=client.translate_text(parent=parent,contents=[text],mime_type="text/plain",source_language_code="ja",target_language_code="en",)fortranslationinresponse.translations:returnformat(translation.translated_text)#解析
defparsing(target):dic=dictionary.dictionay()forneinne_document['result']:print(ne)ifne['begin_pos']==0:ifne['class']=='ORG'orne['class']=='PSN'orne['class']=='LOC'orne['class']=='ART'orne['extended_class']=='Date'orne['extended_class']=='Nature_Color'orne['extended_class']=='Compound':target=target.replace(ne['form'],translate_text(ne['form'].upper(),project_id))else:ifne['class']=='ORG'orne['class']=='PSN'orne['class']=='LOC'orne['class']=='ART'orne['extended_class']=='Date'orne['extended_class']=='Nature_Color'orne['extended_class']=='Compound':target=target.replace(ne['form'],' '+translate_text(ne['form'].upper(),project_id))forchunkinparse_document['result']:fortokeninchunk["tokens"]:print(token)#文頭
iftoken["id"]==0:iftoken["pos"]=="Number":target=target.replace(token['form'],token['form'])else:fordic_selectindic:ifdic_select==token['form']:target=target.replace(token['form'],dic[token['form']])breakelifdic_select=='n9ez6ia2dfgQ':target=target.replace(token['form'],token['kana'])break#、。!など                          
eliftoken["pos"]=="句点"ortoken["pos"]=="読点":breakeliftoken["pos"]=="Number"ortoken["pos"]=="助数詞":kanji=re.findall("[ぁ-ん一-龥]",token['form'])ifkanji==[]:target=target.replace(token['form'],' '+token['form'])else:target=target.replace(token['form'],' '+token['kana'])eliftoken["pos"].endswith("接尾辞"):target=target.replace(token['form'],token['kana'])eliftoken["pos"]=="Symbol":target=target.replace(token['form'],' '+token['form'][0].upper()+token['form'][1:])#その他
else:fordic_selectindic:ifdic_select==token['form']:target=target.replace(token['form'],' '+dic[token['form']])breakelifdic_select=='n9ez6ia2dfgQ':target=target.replace(token['form'],' '+token['kana'])breaktarget=conv.do(target)returntargetif__name__=="__main__":document='今日からセンチュリー21のCM撮影です。ファイトー!!いっぱーつ!'document=document.lower()target=mojimoji.zen_to_han(document,kana=False)args=sys.argviflen(args)>=2:document=str(args[1])access_token=auth(CLIENT_ID,CLIENT_SECRET)parse_document=parse(document,access_token)ne_document=ne(document,access_token)text=parsing(target)text=text.replace('。 ','。 \n').splitlines()forkane_textintext:kane_text=kane_text.replace('ー','-')kane_text=kane_text.replace('。','.')kane_text=kane_text.replace('、',',')kane_text=kane_text[0].upper()+kane_text[1:]print(kane_text)

4.2 dictionary.py

Click here !!
#使い方
# ①文字数の多いものを上に記載してください。
# ②アルファベットは半角小文字で登録してください 例)'cm':'CM'
defdictionay():dictionay=\
    {\
    #10文字以上\
'ありがとうございます':'Thank you',\
    #9文字\
#8文字\ 
'シチュエーション':'situation',\
    #7文字\
#6文字\
'アンバサダー':'Ambassador',\
    'キャラクター':'character',\
    'クランクイン':'crank in',\
    'トーナメント':'tournament',\
    'トレーニング':'training',\
    'ファンクラブ':'fan club',\
    'プロジェクト':'project',\
    #5文字\
'ありがとう':'Thanks',\
    'アクション':'action',\
    'バースデー':'birthday',\
    'プレミアム':'premium',\
    'メッセージ':'message',\
    #4文字\
'イベント':'event',\
    'サポート':'support',\
    'シーズン':'season',\
    'スタート':'start',\
    'スポーツ':'sports',\
    'デザイン':'design',\
    'ハッピー':'happy',\
    'ファイト':'Fight',\
    #3文字\
'ゲーム':'game',\
    '誕生日':'birthday',\
    '皆さん':'everyone',\
    'メール':'mail',\
    'シーン':'scene',\
    'チーム':'team',\
    'ハード':'hard',\
    'パワー':'power',\
    'ホテル':'hotel',\
    'ボトル':'bottle',\
    'ラスト':'last',\
    'パワー':'power',\
    #2文字\
'から':'Kara',\
    'cm':'CM',\
    '休日':'holiday',\
    '筋肉':'muscle',\
    '日記':'diary',\
    '番付':'ranking',\
    #1文字\
#終了
'n9ez6ia2dfgQ':''\
    }returndictionay

Kane san no Diary Kara English wo tsukatte iru mono ya
tsukai sou na word wo pikku up shimashita.

5.Yatte miyou!

$ python Kane_kosugi.py "今日からセンチュリー21のCM撮影です。"
Kyou Kara Century 21 no CM satsuei desu.
$ python Kane_kosugi.py "スーパー変化、ドロンチェンジャー!ニンジャブラック、ジライヤ!人に隠れて悪を斬る。忍者戦隊!カクレンジャー見参!"
Suupaa henka, Dron Changer! Ninja Black, Jiraiya! hito ni kakurete aku wo kiru. 
Ninja Sentai! Kakuranger kenzan!
$ python Kane_kosugi.py "タウリン1,000mg配合リポビタンD!"
Taurin 1,000 mg haigou Lipovitan D!
$ python Kane_kosugi.py "筋肉番付で総合優勝しました。"
Muscle ranking de sougou yuushou shima shita.
$ python Kane_kosugi.py "デスティニープロダクションズ所属のケインコスギです。45歳、身長181cm、出身はアメリカのロサンゼルスです。"
Destiny Productions shozoku no Kane Kosugi desu. 
45 sai, shinchou 181 cm, shusshin ha America no Los Angeles desu.

Nagai bun demo OK desu!
2tsume ha henshin scene de "henka" shichai mashita.
"henge" shite hoshii noni...

6. Matome

Kore de daredemo kane san ni naremasu ne.
Ato ha Body wo kitaeru dake desu.
(Training ga ichiban kitsui yone...)

7.Sanshou

COTOHA API Portal
Qiita「募ってはいるが、募集はしていない」 人たちへ
Qiita オレ プログラム ウゴカス オマエ ゲンシジン ナル
Cloud Translation API の基礎を学びます。 - Google Cloud


製造業はオワコンと嘆く前に自身でAI取り入れ方を考えてみる

$
0
0

0.この記事の内容

製造業で特に生産技術の方が、個人単位でどのようにAI/機械学習に取り組むべきかを考えてみました。勉強中のため公開するほどのソースもありませんが、御意見御指摘等頂けたら幸いです。

1.読んでほしい人

・プログラム経験有無にかかわらず製造業に携わる方
・自身の会社がAIに取り組んでおらずオワコンを感じている方
・製造業×AIの達人の方(ご指導頂くため笑)

2.製造業におけるAI導入のジレンマ

企業によってAI開発に力を掛けている企業とかけてない企業に分かれますが、かけてない企業にとっては下記が悩みと思います。
○コスト対効果で即効性が出にくい
・分析手法が確立されきった分野であり、対応方法は人でまかなえている
 各項目の相関確認、lot毎のBoxプロットなどマクロ×人で時間をかけて分析している。
・QCDが追及され目先の業務に追われるため、担当がAI導入を検討する時間がない
・SW企業に依頼するにしてもコストが大きく、会社の上の方が理解できず、期間での費用対効果を厳しく求められる
○成功例の共有文化がない
・会社のノウハウに該当するため、情報具体例の共有がしにくい。
 だいたいブラックボックス&売り物になる。
⇒会社として力を入れてない企業にとっては参入障壁が高い分野と思います。業務とは別に個人開発をしはじめる事により、他のIT関係の方と共有や意見交流が出来ると考えました。

3.製造業で機械学習を取り入れるには?

三菱UFJ銀行傘下の三菱UFJリサーチ&コンサルティング発表の「ものづくり分野における人工知能技術の活用に関する調査報告書」によると、製造業におけるAI活用は下記のような分野が考えます。
l_mm_mono_ka_03.jpg
https://www.meti.go.jp/meti_lib/report/H29FY/000119.pdf
このうち、個人単位で一番考えやすい「歩留り」について、ゼロからいかにAIを取り入れるかを考えてみようと思います。

Q.なぜ歩留り改善なのか?

⇒A.一番データ環境が揃っており入手しやすく導入しやすいから。また自分の業務に一番近い項目だから。

3.ものづくり歩留りにおけるAI活用方法

歩留りとは、製造工程でinputした数に対するoutput(良品数)です。
プロセス工程で製造したものを検査工程で検査し良品のみを出荷します。歩留まりが悪いほど損失を生むため、生産技術の人は歩留まり向上に力を費やします。
今回は検査結果の分析とプロセスへのフィードバックを機械学習を使用する事により、分析時間の短縮を試みるものです。

4.検討内容

ログ整理⇒不良itemをランダムフォレストで推測⇒重要度の高いパラメータ抽出までを行うアルゴリズムをpythonで作成し使ってみる。

4-1.各工程のlogを入手し取り込む
S/N等で各プロセスと紐づいているデータを出来るだけ一つのテーブルにまとめる。
4-2.空白のデータを除去する。(dropna使用)
4-3.文字列を数値化し分析しやすくする。(OneHotEncoder使用)
4-4.不良が発生しているItemをy、その他のItemをXとし、Xを正規化する。
4-5.機械学習させる。(ランダムフォレスト使用)
4-6.答えと推測値が近いか確認する。
 近い⇒重要度の高いパラメータあり。
 異なる⇒logに重要度の高いパラメータが無い可能性有
4-7.重要度の高いパラメータを確認する。
パラメータからプロセスのどこが悪いかを推測しフィードバックをかける。

5.個人運用後のメリット

改善効果見込み:分析にかかる時間▼1‐2日

従来は層別に可視化し人が判断していたため、分析時間に数時間-数日取られていたが準備さえできていれば一瞬で答えがでるため、答えに向かった資料作製のみを準備すればいい事が分かりました。どのくらい役に立ったかの評価はこれからです。課題としては、結び付けられるデータに限りがあることですが、これは地道に活動を進めてデータ紐づけの重要性を多方面に認識してもらうしかないと思います。
個人としてデータ詳細を見る前に、「とりあえず機械学習で分析してあたりをつけてみる」をしばらく習慣化したいと思います。

宇都宮と甲府が強い、京都市は特に強い!

$
0
0

概要

  • 皆さんはデータの加工で、日本の住所を扱ったことあるでしょうか?
  • 例えば 神奈川の県庁所在地
神奈川県横浜市中区日本大通1
  • こういった文字列から、「都道府県名」 と 「市町村名」を切り出す作業が存在すると思います。
  • 本当は、こちらで紹介されているような方法を採用すると思いますが、、
  • 手軽にやりたいので正規表現でやってみたいと思います。軽いネタ程度でお付き合いいただければと。

ツールの紹介

使うデータ

  • 47都道府県の(都道府)県庁所在地の住所です。
  • 47行しか無いので、記事の末尾に貼り付けておきます。イメージとしては下記です。
北海道札幌市中央区北3条西6丁目
青森県青森市長島1-1-1
岩手県盛岡市内丸10-1

(以下省略)

では始めます

①シンプルに都道府県を切り出し

  • 都道府県名を切り出すには、「○○ 都・道・府・県」の○○を切り出せばいいので、正規表現で書くと
(.*)["都道府県"]

image.png

  • 大体、いけているのですが、下記がミスっていますね。。
市町村名区切り切り出した都道府県名
栃木県宇都宮市栃木県宇 宮市栃木県宇
山梨県甲府市山梨県甲 山梨県甲
京都府京都市京都府京 京都府京
  • そうです。正規表現は、なるべく長くマッチ(最長マッチ)で動くので、無駄な文字が含まれます。
  • 最短マッチ(を指定)にすればうまくいきそうです。

②都道府県を最短マッチで切り出し

  • 先程と一文字だけ変わり、が追加になっています。
  • さっき間違っていた3都道府県で見てみると、
(.*?)["都道府県"]

image.png

  • 最短マッチにしたことで、栃木、山梨は切り出せた!
  • ただ、京都が、 とは。。
市町村名区切り切り出した都道府県名
栃木県宇都宮市栃木 宮市栃木 → 🆗
山梨県甲府市山梨 山梨 → 🆗
京都府京都市京 → ❌

③2~3文字条件付き最短マッチで切り出し

  • 出現数が任意 *(アスタリスク)なのが失敗の原因です。
  • 都道府県名は短くて2文字(横浜 等)、長くても3文字(鹿児島 等)なので、2~3文字の条件を付けました。
(.{2,3}?)["都道府県"]

image.png

  • これでやっと正しく切り出せました!
市町村名区切り切り出した都道府県名
栃木県宇都宮市栃木 宮市栃木 → 🆗
山梨県甲府市山梨 山梨 → 🆗
京都府京都市京都 京都 → 🆗
  • では調子に乗って、市町村も切り出して行きましょう。

④都道府県 + 市町村 の2つを切り出す

  • 先程の都道府県の正規表現に、市町村の切り出し部分を追加しました。
(.{2,3}?)["都道府県"](.*)["市町村"]

image.png

  • 抜粋ですが、ダメそうな感、満載ですねww
  • そうです、忘れちゃだめです! 最短マッチの指定を。

⑤都道府県 + 市町村 の2つを切り出す(市町村も最短マッチ)

  • 市町村部分も最短マッチになるように を付けました!
(.{2,3}?)["都道府県"](.*?)["市町村"]

image.png

  • はい!だめです!
  • 市町村 ですね。区を追加しましょう!

⑥都道府県 + 区市町村 の2つを切り出す

  • を追加しました。これでどうでしょう。
(.{2,3}?)["都道府県"](.*?)["区市町村"]

image.png

  • 良さそうですね!やっと完成!
  • と思ったら、よくよく見たら

image.png
image.png

  • ルール的には、わかります。ただ、やはりこれ落ちつかないですね。。
  • やはり、北海道は、北海道ですね。

⑥北海 → 北海道にする

  • もう都道府県の部分は、北海道 or 他の46都府県にしてしまいましょう。
  • これで行けるでしょう。
(.{2,3}?["都道府県"]|北海道)(.*?)["区市町村"]

image.png

まとめ

一応の完成形

(.{2,3}?["都道府県"]|北海道)(.*?)["区市町村"]

京都の強さ

  • やはり京都府京都市は強いですね。
  • 区切り文字(都道府県市区町村)を赤で塗ると しか残りません。これは正規表現泣かせです。 image.png

見慣れた北海道

  • 道が抜けると、雰囲気出ません。の文字に感謝です。 image.png

お礼

  • こんなくだらない記事に最後までお付き合いいただきありがとうございました。
  • 最後に利用した住所一覧を添付しておきます。

(付録) 使ったデータ

北海道札幌市中央区北3条西6丁目
青森県青森市長島1-1-1
岩手県盛岡市内丸10-1
宮城県仙台市青葉区本町3-8-1
秋田県秋田市山王4-1-1
山形県山形市松波2-8-1
福島県福島市杉妻町2-16
茨城県水戸市笠原町978-6
栃木県宇都宮市塙田1-1-20
群馬県前橋市大手町1-1-1
埼玉県さいたま市浦和区高砂3-15-1
千葉県千葉市中央区市場町1-1
東京都新宿区西新宿2-8-1
神奈川県横浜市中区日本大通1
新潟県新潟市中央区新光町4-1
富山県富山市新総曲輪1-7
石川県金沢市鞍月1-1
福井県福井市大手3-17-1
山梨県甲府市丸の内1-6-1
長野県長野市大字南長野字幅下692-2
岐阜県岐阜市薮田南2-1-1
静岡県静岡市葵区追手町9-6
愛知県名古屋市中区三の丸3-1-2
三重県津市広明町13番地
滋賀県大津市京町4-1-1
京都府京都市上京区下立売通新町西入薮ノ内町
大阪府大阪市中央区大手前2丁目
兵庫県神戸市中央区下山手通5-10-1
奈良県奈良市登大路町30
和歌山県和歌山市小松原通1-1
鳥取県鳥取市東町1-220
島根県松江市殿町1番地
岡山県岡山市北区内山下2-4-6
広島県広島市中区基町10-52
山口県山口市滝町1-1
徳島県徳島市万代町1-1
香川県高松市番町4-1-10
愛媛県松山市一番町4-4-2
高知県高知市丸ノ内1-2-20
福岡県福岡市博多区東公園7-7
佐賀県佐賀市城内1-1-59
長崎県長崎市尾上町3-1
熊本県熊本市中央区水前寺6-18-1
大分県大分市大手町3-1-1
宮崎県宮崎市橘通東2-10-1
鹿児島県鹿児島市鴨池新町10-1
沖縄県那覇市泉崎1-2-2

Mac homebrew caskを使えるようにする

$
0
0

目的

  • homebrew caskを使ったことなかったので使用方法をまとめる

条件

  • MacのPCにてhomebrewが使用できる状態になっていること。

実施方法

  1. homebrew caskのインストール

    1. ターミナルにて下記コマンドを実行する。

      $brew cask
      
    2. 下記のように出力されれば正常にインストールされている。

      [21:05:59]shun-no-MacBook-Air~$brew cask
      ==>Tapping homebrew/cask
      Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
      remote: Enumerating objects: 16, done.
      remote: Counting objects: 100% (16/16), done.
      remote: Compressing objects: 100% (14/14), done.
      remote: Total 416303 (delta 6), reused 4 (delta 2), pack-reused 416287
      Receiving objects: 100% (416303/416303), 189.27 MiB | 2.96 MiB/s, done.
      Resolving deltas: 100% (294141/294141), done.
      Updating files: 100% (3628/3628), done.
      Tapped 1 command and 3536 casks (3,653 files, 203MB).
      Homebrew Cask provides a friendly CLI workflow for the administration
      of macOS applications distributed as binaries.
      
      Commands:
      
          --cache    display the file used to cache the Cask
          audit      verifies installability of Casks
          cat        dump raw source of the given Cask to the standard output
          create     creates the given Cask and opens it in an editor
          doctor     checks for configuration issues
          edit       edits the given Cask
          fetch      downloads remote application files to local cache
          home       opens the homepage of the given Cask
          info       displays information about the given Cask
          install    installs the given Cask
          list       with no args, lists installed Casks;given installed Casks, lists staged files
          outdated   list the outdated installed Casks
          reinstall  reinstalls the given Cask
          style      checks Cask style using RuboCop
          uninstall  uninstalls the given Cask
          upgrade    upgrades all outdated casks
          zap        zaps all files associated with the given Cask
      
      See also "man brew-cask"
      

アプリをインストールする

  1. インストールコマンドを下記に記載する。

    $brew cask install アプリ名
    

付録

  • homebrew caskを使用してAndroid Studioをインストールした時のログを下記に記載する。
[21:18:59]shun-no-MacBook-Air~$brew cask install android-studio
Updating Homebrew...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
==>Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==>New Formulae
bic                                cassandra-cpp-driver               iblinter                           polynote                           wapm
biosig                             gh                                 libfido2                           protoc-gen-grpc-web
cargo-instruments                  go@1.13                            literate-git                       terraform-provider-libvirt
==>Updated Formulae
readline ✔               cloud-watch              frege                    jetty-runner             mvnvm                    py3cairo                 terraform
ruby-build ✔             cobalt                   frege-repl               jflex                    n                        rav1e                    terragrunt
aliyun-cli               consul                   galen                    jhipster                 nagios-plugins           rds-command-line-tools   tflint
angular-cli              contentful-cli           gatsby-cli               joshua                   ncurses                  redpen                   tika
ansible                  crc                      gcviewer                 jruby                    netdata                  renameutils              tomcat
apache-spark             cromwell                 gdb                      jsonschema2pojo          netlify-cli              repo                     tomcat-native
apollo-cli               crowdin                  gdcm                     jsvc                     newman                   sbt                      tomcat@7
arduino-cli              crystal-icr              ghc@8.6                  k6                       nfdump                   sbuild                   tomcat@8
asciidoctorj             csound                   git-archive-all          kaitai-struct-compiler   ngt                      scala                    topgrade
atlassian-cli            cstore_fdw               git-credential-manager   kawa                     nifi                     scala@2.12               traefik@1
aurora-cli               deno                     git-fixup                kcptun                   nomad                    sccache                  typescript
autorest                 dependency-check         gitbucket                kompose                  now-cli                  sdedit                   ucon64
aws-cdk                  derby                    gitlab-runner            krb5                     ocrmypdf                 serverless               umlet
aws-cfn-tools            detekt                   glade                    kubectx                  octave                   shairport-sync           unbound
aws-okta                 devdash                  glooctl                  kubeseal                 ode                      shellharden              unifdef
aws-sdk-cpp              devspace                 go                       kubespy                  okteto                   shfmt                    upscaledb
bagit                    dita-ot                  go-bindata               kumo                     opa                      siege                    urh
balena-cli               ditaa                    go-jira                  languagetool             openapi-generator        signal-cli               v8
ballerina                ec2-ami-tools            godep                    lazygit                  openjdk@11               sjk                      vale
basex                    ec2-api-tools            golo                     lcm                      openssh                  sk                       vault-cli
bazel                    ed                       goreleaser               lego                     orientdb                 skaffold                 vaulted
beagle                   ejabberd                 gradle                   libpulsar                pandoc-crossref          skinny                   vegeta
berglas                  elb-tools                grafana                  libsoup                  parallel                 smali                    vert.x
bfg                      elixir                   groovy                   libstfl                  pgweb                    sn0int                   vnu
binaryen                 ensmallen                groovysdk                liquidctl                php                      snapcraft                vulkan-headers
bind                     etcd                     grpc                     mahout                   php@7.2                  solr                     walkmod
bit                      exploitdb                hadoop                   mallet                   php@7.3                  solr@7.7                 wasmer
boot-clj                 faas-cli                 hcloud                   mesa                     picard-tools             sonarqube                weaver
bundletool               fastbit                  helm                     meson                    pig                      sonarqube-lts            weechat
byobu                    fastlane                 helmfile                 micro                    plantuml                 sphinx-doc               wildfly-as
byteman                  fastqc                   hmmer                    micronaut                pmd                      spotbugs                 wiremock-standalone
carrot2                  fetchmail                hugo                     mill                     postgis                  sqlcipher                wireshark
cfn-lint                 ffuf                     i2pd                     minikube                 prestodb                 sqoop                    wtfutil
cfr-decompiler           findomain                igv                      minio                    prestosql                stanford-corenlp         xapian
cgal                     flashrom                 ipfs                     minio-mc                 procs                    stanford-ner             xmake
chisel                   flawfinder               jadx                     mk-configure             procyon-decompiler       stanford-parser          xmlsectool
circleci                 flow                     jasmin                   mmark                    proftpd                  stlink                   yle-dl
clojure                  fluid-synth              javacc                   mmseqs2                  protobuf-c               swagger2markup-cli       yq
clojure-lsp              flume                    jboss-forge              mockserver               protoc-gen-go            tailor                   zabbix
clojurescript            flyway                   jdnssec-tools            molecule                 pulumi                   tee-clc
closure-compiler         fmpp                     jenkins                  monetdb                  pumba                    telegraf
closure-stylesheets      fop                      jetty                    mongo-c-driver           pwntools                 teleport
==>Deleted Formulae
ghc@8.2                                     jpcsp                                       openjdk@12                                  sshrc

==>Downloading https://dl.google.com/dl/android/studio/install/3.6.0.21/android-studio-ide-192.6200805-mac.dmg
######################################################################## 100.0%==>Verifying SHA-256 checksum for Cask 'android-studio'.==>Installing Cask android-studio
==>Moving App 'Android Studio.app' to '/Applications/Android Studio.app'.🍺  android-studio was successfully installed!
  • 前述の出力がなされた後、アプリケーションのフォルダを確認したところ、Andorid Studioがインストールされていた。

    スクリーンショット 2020-02-27 21.30.20.png

自然言語処理100本ノック:73で苦労した話

$
0
0

背景

自分が書いた前の記事、「自然言語系サービス色々試してみた」の中でも引用させて頂いた「言語処理100本ノック 2015」。
各種自然言語サービスをもっと試す前に、基礎を固めておこうと思ってこの100本ノックを少しずつ進めている状況。
今までの課題は粛々と進めて、特筆すべき事は無く、Qiita書く程のネタは無かった。しかし、この課題73に関しては結構苦労したので、きっと参考になる人もいると思い、自分の復習も兼ねて記事にする事にした。

対象の課題

第8章: 機械学習
本章では,Bo Pang氏とLillian Lee氏が公開しているMovie Review Dataのsentence polarity dataset v1.0を用い,文を肯定的(ポジティブ)もしくは否定的(ネガティブ)に分類するタスク(極性分析)に取り組む.

感情分析をする課題ブロックですね。

72. 素性抽出

極性分析に有用そうな素性を各自で設計し,学習データから素性を抽出せよ.素性としては,レビューからストップワードを除去し,各単語をステミング処理したものが最低限のベースラインとなるであろう.

本題の課題73で使用する、特徴としての単語集め。機械学習界で前処理とか言われる部分かな?
各自で設計し、とはいうものの、「学習データである所の文章中に学習対象単語があるかどうかフラグ」以外の設計はあまりない気がする。不要と思われるデータを除外するぐらいかな?
※ストップワード:a とか the とか I とか頻繁に出すぎて学習に向かない単語
※ステミング処理:say, said など活用による変化の原形に変換して1種類の単語とする処理

73. 学習

72で抽出した素性を用いて,ロジスティック回帰モデルを学習せよ.

そして本題。説明文は1行で簡単に言ってくれています。一気にハードル上がった気がします。詳しくは次の節で説明。

完了までの道のり

以下のステップ一つ一つが課題になっててもおかしくない感じです。出来た今だから順調に書き出せてますが、とりかかった当初は右往左往。

学習データの行列化

機械学習するにはデータを行列化する必要がある(無くても頑張ればできるかもしれないが、まぁコード書くのも大変だし、実行速度も遅くなるだろう)。
課題72で、全学習データから抽出した単語が1000件、全学習データ10662件(課題71で作成)としたら、学習データレコードにその単語が含まれているかどうかの0/1フラグによる、10662×1000(+1 特徴と関係ない係数)の行列を作成。

行列作成部
importnumpyasnpdefgetMetrics(words_list,feature_wordlist):ret=[]forwordsinwords_list:xi=[]xi.append(float(1))# for theta0
forf_wordinfeature_wordlist:# f_word は言葉と出現件数のタプル
iff_word[0]inwords:xi.append(float(1))else:xi.append(float(0))ret.append(xi)returnnp.array(ret,dtype=np.float64)

このステップでの自分的イベント
1. numpy(python用行列演算ライブラリ) で行列作成体験

ロジスティック回帰モデル作成。

ここはAndrew先生に敬意を表し、Couseraの機械学習コースで勉強した、3週目のプログラミング課題2のステップをまねる。

シグモイド関数を作成

sigmoid関数
defsigmoid(z):# zはベクトル
return1.0/(1.0+np.exp(-1*z))

このステップでの自分的イベント
1. numpy.exp体験

予測関数を作成

sigmoid関数
defhypothesis(theta,X):returnsigmoid(np.dot(X,theta))

このステップでの自分的イベント
1. numpy.dot体験

コスト関数を作成

コスト関数
defcostFunction(theta,X,y):# theta, yはベクトル, X は行列
m=len(y)hyp=hypothesis(theta,X)wkz=np.log(hyp)wka=(-np.multiply(y,wkz))wkb=(1-y)wkc=np.log(1-(hyp))returnsum(wka-np.multiply(wkb,wkc))/m

このステップでの自分的イベント
1. numpy.multiply体験

傾き関数を作成

gradient関数
defgradient(theta,X,y):m=len(y)hyp=hypothesis(theta,X)wkdiff=(hyp-y)# m * 1    matrix
gradwk=np.dot(X.T,wkdiff)/mreturngradwk.T

このステップでの自分的イベント
1. 転置行列を体験

※Coursera機械学習ではコスト関数の戻り値がコスト値と傾き値。

fminuncでモデル算出

・・・ってあれ?pythonではこの関数無い? ネットで「fminunc python」と調べると、scipy.optimize というのがそれに該当するらしい。が、使用可能な関数に、minimize、fmin_cg、fmin_bfgsとかロジックなのか使用目的かが違うものがあり、さらにその引数が多いらしく、どれを使ったらよいのかこの関数を初めて使う(機械学習を触り始めた)人間にとっては迷宮以外の何物でもない。
SciPyのminimize公式リファレンス
SciPyのfmin_cg公式リファレンス
とりあえず見よう見まねでやってみた。

が、関数の実行結果を見るもθの重みづけ係数が全て0になってしまう。
考えられる原因は以下の通りだが、切り分け判断が出来ない。

  • 関数の使い方が悪い
  • 関数の戻り値の使い方が悪い
  • 引数として渡している関数に問題がある
  • 引数として渡しているデータが悪い

思い返すと、Courseraの学習では一つ一つのステップで提出し、都度それが正解かどうか分かったので、安心して先に進めた。しかし今回は正解が用意されていない。
そこで、素人の言語処理100本ノック:73を参考にさせて頂く事に。まずは、引数部分を少し変えたりして、正解の処理を完コピさせて頂く。その後、関数を自分のと入れ替えて投入データが間違ってないか、からの確認。そして順次チェックしていく。結果、以下の問題点が発見できた。

  • 整数値での配列を作っていた
  • Octaveのソースからの変更にミスがあった

それを修正した上で、関数のパラメーターを色々変えてみて、結果として以下の関数にまとまった。

学習
importscipy.optimizeasopdeflearnData(X,y):# theta, yはベクトル, X は行列
m,n=X.shapeinitial_theta=np.zeros(n,dtype=np.float64)returnop.minimize(fun=costFunction,x0=initial_theta,args=(X,y),method='TNC',jac=gradient,options={'maxiter':1000})

このステップでの自分的イベント
1. np.zerosを体験
2. scipy.optimize.minimizeを体験

前述learnData関数の戻り値をprintした結果。θはresult['x']で取得。
     fun: 0.2186551631728408
     jac: array([-1.24229859e-03, -4.02902790e-04, -3.13793105e-04, ...,
        4.57530540e-06, -1.85517634e-06, -1.74574424e-06])
 message: 'Converged (|f_n-f_(n-1)| ~= 0)'
    nfev: 188
     nit: 13
  status: 1
 success: True
       x: array([-0.6217017 ,  0.67637518, -0.43255428, ..., -1.12773972,
        3.85226178,  7.33103357])

検証

データとしては、以下の処理を施したもの。

  • ストップワードを除去
  • 各単語をステミング処理
  • 出現頻度が5回以下の単語は除去
課題77で使用する関数で正解率チェック
コスト関数
defcalcScore(theta,X,y):hyp=hypothesis(theta,X)ttlcnt=len(y)abs=np.abs(hyp-y)ok=np.count_nonzero(abs<0.5)print('ttl={0}, ok={1}, rate={2}'.format(ttlcnt,ok,ok*100/ttlcnt))

にて、以下の結果を得る。

結果
[0.99999379 0.34166364 0.00430491 ... 0.99475144 0.05514151 0.99999954]
ttl=10662, ok=9714, rate=91.10861001688238

ちゃんと学習自体は出来ている様子。

課題75で重要な単語チェック
課題75
deftopAndWorst10(theta,feature_wordlist):sortwklist=[]foridx,coefficientinenumerate(theta[1:]):sortwk={}sortwk[idx]=coefficientsortwklist.append(sortwk)sortedlist=sorted(sortwklist,key=lambdaelem:list(elem.values())[0],reverse=True)foridx,iteminenumerate(sortedlist[0:9]):key=list(item.keys())[0]val=list(item.values())[0]print('rank {0} = {1}, value = {2}'.format(idx,feature_wordlist[key],val))foridx,iteminenumerate(sortedlist[-9:]):key=list(item.keys())[0]val=list(item.values())[0]print('rank {0} = {1}, value = {2}'.format(len(sortedlist)-10+idx,feature_wordlist[key],val))

その結果。

重み出力
rank 0 = ('rival', 7), value = 15.487425109257911
rank 1 = ('dogtown', 7), value = 15.116509791167863
rank 2 = ('engross', 34), value = 14.714563379452631
rank 3 = ('creatur', 10), value = 14.258338401361565
rank 4 = ('grandeur', 10), value = 14.131937516077285
rank 5 = ('notch', 6), value = 13.126639961427905
rank 6 = ('leigh', 7), value = 13.013409404232442
rank 7 = ('gentli', 8), value = 12.77251552801514
rank 8 = ('uma', 6), value = 12.440912803170404
rank 3149 = ('uninspir', 13), value = -12.190452724510878
rank 3150 = ('51', 10), value = -12.530073693634368
rank 3151 = ('wilder', 8), value = -12.739129470469681
rank 3152 = ('ballist', 10), value = -12.952886580008153
rank 3153 = ('q', 7), value = -13.107108773450731
rank 3154 = ('drain', 7), value = -13.713487382294955
rank 3155 = ('dud', 9), value = -14.343427923426695
rank 3156 = ('badli', 23), value = -14.96784549758193
rank 3157 = ('mckay', 6), value = -17.096731503417494

学習データに対して、上記単語を検索してみると、確かに上位ランクの単語はポジティブ感想に多く、下位ランクはネガティブ感想に多い様子。
ただ、素人の言語処理100本ノック:75の結果とは結構違ってる・・・こちらの方は1文字の単語や記号抜いたりなどのデータクリーニングをより適切にやってるみたいですね。
おそらく自分の今の状態は素性抽出不足か過学習かという所でしょう。まぁこの状態の方が後続の「課題78:5分割交差検定」の有効性を確かめるには良さそうなのでこのまま進める事にします。

教訓

1ステップ毎の検証は、unittest作って、ちゃんとやりましょう。

参考にさせてもらったページ

素人の言語処理100本ノック:73

素人の言語処理100本ノック:75

Python fminunc 的替代方法

Coursera / Machine Learningの教材を2度楽しむ

共役勾配法によるコスト関数最適化

初心者向け入門書を読んでみた 第1弾 ※編集中

$
0
0

以前執筆した「初心者向け入門書2冊を比較してみた」という記事で、紹介した本それぞれについて記事を書くと言っていたのにずっと放置していたので、1冊ずつ紹介していきます。
今回は『改訂3版 これからはじめるプログラミング 基礎の基礎』を紹介します。

どんな本?

タイトル通り「プログラミングの基礎の基礎」から学ぶ入門書です。
「コンピューターの仕組みって?」「そもそもプログラミング言語って何?」など、土台の部分を丁寧に説明してくれています。
「プログラミングを始めたものの、基本的なことがよく分からない」という初心者の方には最適な良書です。
また「新人さんに基礎を教えたいけど、どう教えたらいいか分からない」という中級以上の方にもおすすめかと思います。
ただし、特定の言語について解説しているわけではないので、あくまで全体像をつかみたい方向けです。
また、丁寧に説明している分ページ数も多いので、活字が苦手な方は読むのがつらいかもしれません。

おすすめしたい理由

この本をおすすめしたい理由は以下の3点です。
1. 文章が分かりやすい
2. 実例が分かりやすい
3. プログラミングに必要な考え方を丁寧に説明
以下でひとつずつ説明していきます。

文章が分かりやすい

著者が「中高生向けに書いた」というだけあって、とても読みやすい文章です。
「入門書なのに、専門用語だらけで分かりづらい…」と感じることは少ないでしょう。
例えば、○○に関しては以下のように書かれています。

実例が分かりやすい

プログラミングに必要な考え方を丁寧に説明

まとめ

意外と知らない並列処理のメリット

$
0
0

Quoraの並列処理のメリットは何ですか?を参考にしてます。

処理の前後関係がないアルゴリズムを同時に実行できる。

単純にN個の並列化で処理時間がN分の1になるわけではないことに注意

日本のスーパーコンピュータ『京』も並列コンピュータです。

【PHP+MySQL】データベースに格納した画像データを表示する方法(base64エンコード)

$
0
0

1.DBに格納した画像を表示したい。

特定のフォルダに入っている画像の表示ではなく、DBに格納した画像(バイナリデータ)
を表示する方法を知りたい。
そんな場合に使える方法を調べてみた。

一般的にある下記方法を実行すると、真っ黒い画面しか出てこない。

<?php$img=file_get_contents("test.jpg");//ここでdbに$imgを格納//格納した$imgをselectして取り出しheader('Content-type: image/jpeg');echo$img;?>

解決方法は4へ。

2.恐竜の画像を格納するテーブルの作成

画像はmediumblob型として保存

create table tbl_dinoimg (
 id integer,
 img mediumblob,
 ext varchar(10),
 primary key(id)
);

3.実際のデータが格納されているテーブル

dino_image1_pre.jpg

4.DBに格納した画像バイナリデータをbase64に変換後、htmlに出力するソース

dino_display_image2.php
<?php$dbname='db_dino';$dsn='mysql:dbname='.$dbname.';host=localhost:3308;charset=utf8mb4';$user='root';$password='root123';$dbh=newPDO($dsn,$user,$password);$sql_select="SELECT ext,img FROM tbl_dinoimg WHERE id = ?";$result1=$dbh->prepare($sql_select);//パラメータをセット$id=1;$result1->bindparam(1,$id,PDO::PARAM_INT);$result1->execute();$row=$result1->fetch(PDO::FETCH_ASSOC);//取得した画像バイナリデータをbase64で変換。$img=base64_encode($row['img']);?><!-- エンコードした情報をimgタグに表示 --><imgsrc="data:<?phpecho$row['ext']?>;base64,<?phpecho$img;?>"><br>

5.画像表示に成功

dino_image0_pre.jpg


【Ansible】文字列から取り出した数値のデータ型が文字列になっている場合の解決策

$
0
0

はじめに

<バージョン>
ansible 2.9.1

以下のPlaybook内のように、test_strという変数の中にある123という数値を
取り出して加算(7を足す)しようと思ったのですが上手くいきませんでした。
(123 + 7 = 130 という計算をしようとしています)

int_test1.yml
----name:int TESThosts:localhostgather_facts:novars:ansible_python_interpreter:/usr/bin/python3test_str:"aaa123bbb"tasks:-name:factset_fact:get_number:"{{test_str.split()[1]|int}}"-name:debugdebug:msg:"get_number:{{get_number+7}}"

実行結果1(失敗)

intというfilterを用いて、123という文字列を値に変換しているはずなのに
正しく認識されていないようです

出力1
PLAY [int TEST] *****************************************************************************************************************************************************************************

TASK [fact] *********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ********************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on (get_number : {{ get_number + 7 }}): coercing to Unicode: need string or buffer, int found"}

PLAY RECAP **********************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

原因究明用Playbook

以下、3パターンの方法を調べます。データ型はtype_debugを用いて確認します。
パターン1(結果はdebug1) ←失敗例のパターン
 set_factで123という文字列を値に変換する
パターン2a(結果はdebug2a)
 set_factでは123という文字列の取り出しのみ行う→他の変数(ここではget_number2a)
 に代入するときに値に変換する
パターン2b(結果はdebug2b)
 set_factでは123という文字列の取り出しのみ行う→他の変数には代入せずに
 値に変換する

int_test2.yml
----name:int TESThosts:localhostgather_facts:novars:ansible_python_interpreter:/usr/bin/python3test_str:"aaa123bbb"tasks:-name:fact1set_fact:get_number1:"{{test_str.split()[1]|int}}"-name:debug1debug:msg:"get_number1:{{get_number1}}is{{get_number1|type_debug}}"-name:fact2set_fact:get_number2:"{{test_str.split()[1]}}"-name:debug2adebug:msg:"get_number2a:{{get_number2a}}is{{get_number2a|type_debug}}"vars:get_number2a:"{{get_number2|int}}"-name:debug2bdebug:msg:"get_number2b:{{get_number2}}is{{get_number2|int|type_debug}}"

実行結果2

パターン2bの場合でのみ、正しく値に変換されました。
intというフィルタも万能ではないようです。

出力2
PLAY [int TEST] *****************************************************************************************************************************************************************************

TASK [fact1] ********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug1] *******************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "get_number1 : 123 is unicode"
}

TASK [fact2] ********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug2a] ******************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "get_number2a : 123 is unicode"
}

TASK [debug2b] ******************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "get_number2b : 123 is int" #正しく整数型(int)に変換されている
}

PLAY RECAP **********************************************************************************************************************************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

修正後Playbook

以上のことから、
文字列から値を取り出した場合、set_factや変数への代入時にintを使っても値に変換されない
ことがわかったので、これをもとにPlaybookを修正しました。

int_test3.yml
----name:int TESThosts:localhostgather_facts:novars:ansible_python_interpreter:/usr/bin/python3test_str:"aaa123bbb"tasks:-name:factset_fact:get_number:"{{test_str.split()[1]}}"-name:debugdebug:msg:"get_number:{{get_number|int+7}}"

実行結果3

想定通り、123 + 7 = 130 という計算を行うことが出来ました。

出力3
PLAY [int TEST] *****************************************************************************************************************************************************************************

TASK [fact] *********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ********************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "get_number : 130"
}

PLAY RECAP **********************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

AI開発に向けたPythonの開発環境構築

$
0
0

1.概要

AIについていろいろ勉強している中で、いよいよAIそのものを開発していこうと思っております。今回その中で開発環境を構築しましたので、その内容を記載したいと思います。

作成した開発環境
OS:Windows10
Python:3.7.4
Anaconda:3

2.Anacondaの導入

AI開発のプラットフォームとして今回Anacondaを選択しました。Anacondaは、

  • AI開発に必要なツール一式がそろっている
  • 導入が簡単

ということで今回選んでみました。ただ、以下のようなデメリットもあるようです。

  • 重い
  • ツールが多すぎてどうすればいいかわからなくなる...

デメリットについてはまだわかっておりませんが、使いづらいようであれば変えてみようと思います。

Anacondaのインストール

以下のサイトからAnacondaをダウンロードしてください。また、すでにPythonをインストールしている場合は、一旦アンインストールしてからAnacondaを導入してください

https://www.anaconda.com/distribution/

image.png

最新版の3.7を選択し、OSに合わせて対象をダウンロードしてください

image.png

後はデフォルトのまま次に進めばいいのですが、「Add Anaconda to my PATH environment variable」には必ずチェックを入れてください。
※非推奨と赤字で表示されますが、チェックを入れないとPythonがうまくインストールされないようです。

image.png

ダウンロードが完了したら、Anacondaのフォルダにある「Anaconda Powershell Prompt」を起動してください。(今後はこのツール上からPythonを動かしていきます。)

image.png

そして、「Python」と入力し以下画面が表示されれば、開発環境のインストールが完了しています。

image.png

3.仮想環境の構築

次のPythonの仮想環境を構築します。(Pythonで開発していると、各バージョンの違いによって解決の難しいエラーが多く発生するため、仮想化が必須のようです…)

開発環境を作りたいフォルダに移動し、以下コマンドを入力してください。入力することで、任意の仮想環境を作成することができます。

python -m venv (任意の仮想環境名)

以下例では、デスクトップに「test」という仮想環境を構築しています。

image.png

次に仮想環境を起動させます。まず仮想環境内のフォルダに移動します。

cd (任意の仮想環境名)

以下コマンドを入力すれば、仮想環境を起動できます。

.\Scripts\activate

起動が成功すれば、画面の左に(任意の仮想環境名)が表示されます。
(以下例では「test」と緑色で表示されています)

image.png

この状態で必要なソフトをインストールしたりします。仮想環境を閉じる場合は、以下コマンドを入力してください。

deactivate

以下画面のように、左側に記載されていた(任意の仮想環境名)が消えれば、仮想環境が閉じたことになります。

image.png

4.まとめ

今回AIの開発環境を導入してみました。次回からこの仮想環境に必要なツールをインストールし、実際の開発を行っていきたいと思います。

Railsのプロジェクト作成時の手順をまとめてみる

$
0
0

はじめに

エンジニアになる為に勉強中。Railsを使ったWEBアプリケーション開発をベースに学習を進めています。
・・・ので、今後よく出くわすであろうRailsでのプロジェクト作成に慣れていきたい!と感じました。
正直、数こなせば自然と体が覚えるだろうと思ってはいるのですが・・・早い段階でまとめておけばメモ代わりになるかなーなんて思って記事投稿してみました(笑

この記事について

  • 環境構築はすでに終わっている前提で書いていこうと思っています。
  • プログラミング初学者の記事です。記事の中に認識が誤っている部分があるかもしれません(汗
  • 上記理由から、同じく経験が浅い方はあまり参考にしないことをお勧めします!

プロジェクトの雛形〜rails sでローカルサーバー立ち上げまで

プロジェクトの雛形作成をしよう

まずは、プロジェクト作成の場所を決めます。
デスクトップに「projects」というディレクトリを作るもよし、ホームディレクトリ(家のアイコン)の配下に「projects」というディレクトリも作るもよし。
作ったら、ターミナルを起動して、"cd"コマンドを駆使して「projects」フォルダまで移動。

#コマンド
 ユーザ名 $rails new アプリケーション名 -オプション名

#Railsのバージョンを指定したいならこっち
 ユーザ名$ rails _○.○.○_ new アプリケーション名 -オプション名

 ・アプリケーション名:これから作りたいプロジェクトの名前
 ・オプション名: mysqlの環境設定をするなら、-d mysql

オプション名については、他にも-skip-turbolinks(ajaxで取得したhtmlでbodyを入れ変えてページ遷移できようになるとか・・・)とか色々あるっぽいけど、今の知識じゃ「貴様にはまだ早い。」状態なので深追いはやめます(苦笑

ところで・・・railsって、今現在どのバージョンが使用率高いんですかね?
調べてみたもののRailsが下火になっているっていう悲しい情報ばかり出てくる・・・。

Bundle installをしよう

・・・の、前に準備

アプリ作成時に必要となるライブラリなどをインストールする必要があるので、bundle installを実行したい。
・・・けど、その前に手動で追加が必要なgemも合わせてインストールすると楽かも。

①rails newで作ったプロジェクトを適当なエディターで開く
②app/Gemfileに必要であろうgemを記載!

#app/Gemfile/の末尾に以下の追記
 gem 'pry-rails'
 gem 'devise'

だいたいマストなのがこの子たち。
pry-rails
 デバッグをする時にあると便利
 (と言っても僕はbinding.pryくらいしか使った事ないけど・・・)
devise
 ユーザー登録するのなら必須。色々いい感じにやってくれるありがたい存在!
 (本当は仕組みも気になるから自力で実装してみたい)

念願のbundle install

ターミナルに戻って、作成したプロジェクトのフォルダまでcdしまくる。
pwdコマンドを入力して、今いるディレクトリが間違っていないか確認!(これ大事)
ここでBundle installのコマンド入力

#コマンド
 ユーザ名$ bundle install

Bundle complete! の文字が出てたら成功。
エラーが出たら、表示されたエラーメッセージをもとに大人しくググろう。

DataBaseを作ろう

アプリに紐づくDBを作成する。
これがないとこの先に出てくるrails sがうまく機能しない!(と思う)
まずは、pwdで作ったプロジェクトのディレクトリ内にいることを確認。
そんでもって以下コマンドを実行

#コマンド
 $ rails db:create

Created database 'our_blog_development'
Created database 'our_blog_test'

これが表示されていれば作成完了!

ローカルサーバーを立ち上げよう

これもまたpwdして、作ったプロジェクトのディレクトリ内にいることを確認してから実行。
※違うプロジェクトの中で実行すると別のプロジェクト用のサーバーが立ち上がってしまうから間違えないように。

#コマンド
 ユーザ名& rails s

#成功したら以下の文章が表示される(他にもだらだらと出力されている)
 Use Ctrl-C to stop
 Started GET "/"for・・・ごにょごにょ

上にも書いてある通り、rails sで起動したサーバーを止める時は、Ctrl + CでOK。
bundle updateとかする時には一度サーバーを止めた方がいいかも。

あと、サーバーはしょっちゅう立ち上げる→停止するをやるので、サーバー管理用でターミナルをもう一つ用意しておくと楽!

localhost:3000にアクセスする

rails sしてサーバー起動中に、http://localhost:3000へアクセス!
下の画面が出てれば、最低限の準備が完了!

スクリーンショット 2020-03-07 13.50.50.png

MVCの準備

ルーティングにルートパスを設定しよう

http://localhost:3000
↑にアクセスした時にindex.htmlを表示できるようにルーティングパスをまず記入する。

app/config/routes.rb
Rails.application.routes.drawdorootto: 'コントローラー名#アクション名'end

 コントローラ名にはこれから作成したいコントローラ名を指定
 アクション名には指定したコントローラー内に書かれているアクションを指定
 今回はルートパスだし、7つのアクションのうちのindexにするのが主流かも。

これで、localhost:3000へアクセスした時
「〇〇っていうコントローラーの××のアクションに記載された処理を実行しまっせ」
となる。

じゃあ、次は、コントローラーを作成!

コントローラーの作成をしよう

一旦、ターミナルに戻る。
お決まりのpwdコマンドで、今いる場所を確認してから、コントローラー作成のコマンドを実行!

#コマンド
 ユーザ名$ rails g controller 作成したいコントローラー名

コントローラ名は複数形にしておくといいっぽい!

作成したコントローラーにindexアクションを記述しよう

app/controllers/決めたコントーラ名_controller.rb
classコントローラ名Controller<ApplicationControllerdefindexendend

今はindexが表示できればそれでいいので、indexアクションには特になにも記述しない。
※作ったコントローラーは ApplicationControllerっていうクラスを継承しているみたい。

はい。次はモデルの作成!

モデルを作成しよう

モデルは、DBとのやりとりを色々受け持ってくれる橋渡しキャラ。
一つのモデルに対して、一つのDBしか紐づかないぞ!

#コマンド
 ユーザ名$ rails g model モデル名

(これもpwdでディレクトリ間違ってないかしっかり確認してから実行!)

モデル名は、さっき作ったコントローラ名の単数形にしたものにしておこう!
コントローラとモデルの紐付きがわかりやすくなるから。
例えば、messagesというコントローラーを作ったら、それに対応するモデル名はmessageにするとよし!

マイグレーションファイルを確認しよう

モデルを作ると、マイグレーションファイルも同時にできる!
これは、DBを作る時の設計図的なものなので、必要なカラムとか、キーの制約とかを用途に合わせて追記してあげよう!

/db/migrate/20xxxxxxxxxxxx_create_messages.rb
classCreateMessages<ActiveRecord::Migration[5.2]defchangecreate_table:postsdo|t|#--ここに追加したいカラムを記載--t.string:coment#--↑こんな感じに、データ型とカラム名を書いてあげる--t.timestampsendendend

書き終わったらマイグレートしよう!

マイグレートして、テーブルを作成しよう

マイグレーションファイルの修正が終わったら、またターミナルに戻って、コマンド入力!

#コマンド
 ユーザ名 $ rails db:migrate

これをして初めてテーブルが出来上がる!
※今後カラムを追加したり削除する時はまた新たにマイグレーションファイルを作る必要がある!
今あるファイルを修正してもエラーの原因になるだけなので、間違って触らないように!

ビューを作成して最低限の準備を完了させる!

コントローラに紐づいたビューを作成しよう!

viewファイルは勝手に作ってくれません!・・・ので、自力で準備が必要です!
と、いうことで、一旦仮置きで空のファイルを格納する必要があります!

適当なテキストエディタ(AtomでもVSCでも)で、作成したプロジェクトを開いてあげましょう!
現段階で↓のディレクトリがこんな感じ担っていると思います!

/プロジェクト名/app/views/
 └ layouts/
 └ 作成したアクションコントローラーのフォルダ/

この作成したアクションコントローラーのフォルダ内に「index.html.erb」を作成しよう!

/プロジェクト名/app/views/
 └ layouts/
 └ 作成したコントローラーのフォルダ/
   └ index.html.erb ←作成する

せっかくなので、index.html.erbに以下の一文でも入力しておきましょう!

app/views/layouts/コントローラーと同じ名前のフォルダ/index.html.erb
Hello Rails!

最後に動作確認をしよう

↓にアクセス!
http://localhost:3000

スクリーンショット 2020-03-07 14.46.02.png
↑この画面が出れば疎通確認OK!

あとは必要に応じてHTML/CSS(Haml,Sassとかでも)を記述して頑張ってWEBアプリケーションを作っていこう!(丸投げ)

ここからが一番しんどい!でも頑張っていきましょう!

最後に

あくまで自分の作業用メモと思って書いてます。
が・・・途中から誰かに伝えるような記述に変わってますね。
Railsにまだ慣れていない人間が書いているので、鵜呑みにしないようにしてください!
加えて、経験豊富な方で「これ、違うよ」「こっちの方が便利だよ」などがあればコメント頂けますと幸いです!

上場前のベンチャーに入ってストックオプションで一攫千金は可能か?

$
0
0

Quoraの上場前のベンチャーに入ってストックオプションで一攫千金を狙うのは日本でも出来ますか?を参考にしてます。

アメリカの場合

シリコンバレーでは,上場しそうな会社に入社して、ストックオプションで億万長者になる人が多いです。ストックオプションの一獲千金を目当てに会社を転々とし、たくさんのお金を稼ぐ人もいるそうです。

果たして、この方法は日本でも可能でしょうか?

もらえるお金の規模感は違いますが、日本でも同じことは出来ます。
しかし、この方法はリスクもあります。

上場できず、倒産の可能性、また入社してからの上場が早すぎてストックオプションがあまりもらえないなどといった事があります

ベンチャーと言ったらIT関連が思い浮かびがちですが、飲食店関連の会社の上場ののパターンなどもあるようです。

【Laravel】バリデーション独自ルールの作成方法

$
0
0

Laravelでバリデーション独自ルールを作成することがあったため備忘録。

Ruleクラスを継承したクラスを作成する

App\Rules配下にルールのクラスを作成します。

下記のコマンドを実行

php artisan make:rule {ルール名}

例)

php artisan make:rule Phone

実行すると下記のようなファイルが作成されます。

Phone.php
<?phpnamespaceApp\Rules;useIlluminate\Contracts\Validation\Rule;classPhoneimplementsRule{/**
     * Create a new rule instance.
     *
     * @return void
     */publicfunction__construct(){//}/**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */publicfunctionpasses($attribute,$value){//}/**
     * Get the validation error message.
     *
     * @return string
     */publicfunctionmessage(){//}}

ルールの作成

作成したファイルにルールを追加します。
passes()にはバリデーション判定のルールを返すよう記載し、

Phone.php
publicfunctionpasses($attribute,$value){//}

passes()の引数
$attributeにはフィールド名、
$valueにはそのフィールドの値が入っています。

今回の例では電話番号のチェックを行いたいため、下記のように設定します。

Phone.php
publicfunctionpasses($attribute,$value){returnpreg_match('/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/',$value);}

message()にはエラーメッセージを記載します。

Phone.php
publicfunctionmessage(){return'正しい電話番号を入力してください。';}

下記のように記載することもできます。

Phone.php
publicfunctionmessage(){returntrans('validation.phone');}

この場合は言語ファイルにメッセージを追加する必要があります。

resources/lang/ja/validation.php
'phone'=>'正しい:attributeを入力してください。','attributes'=>['phone'=>'電話番号',

独自ルールを使う

作成したルールをフォームリクエストで使用してみます。

UserRequest.php
useApp\Rules\Phone;publicfunctionrules(){return['phone'=>['required',newPhone],];}

作成したルールのオブジェクトを呼び出すことで使用できます。
|で記載することはできません。


サービスプロバイダーに記述する

上記で作成したルールでは、|でバリデーションルールを記載できません。
そのため、|で記載したい場合はサービスプロバイダーに記述します。

サービスプロバイダーに設定する

作成したルールが使用できるよう、AppServiceProviderに設定します。

AppServiceProvider.php
<?phpnamespaceApp\Providers;useIlluminate\Support\ServiceProvider;useIlluminate\Support\Facades\Validator;classAppServiceProviderextendsServiceProvider{/**
     * Register any application services.
     *
     * @return void
     */publicfunctionregister(){//}/**
     * Bootstrap any application services.
     *
     * @return void
     */publicfunctionboot(){Validator::extend('phone','App\Rules\PhoneRule@passes');}}

boot()内で上記のように記載します。
Validator::extend()の第一引数はフォームリクエストで使用する際のルール名となります。

サービスプロバイダーに直接記載する方法

上記で記載したルールを作成する方法をせずに、サービスプロバイダーに記載することでルールが作成できます。

AppServiceProvider.php
/**
     * Bootstrap any application services.
     *
     * @return void
     */publicfunctionboot(){Validator::extend('phone',function($attribute,$value,$parameters,$validator){returnpreg_match('/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/',$value);});}}

ルールを使用する

上記で作成・設定したルールを使用します。
作成したルールをフォームリクエストで使用してみます。

UserRequest.php
publicfunctionrules(){return['phone'=>'required|phone',];}

上記のように|で記載できます。

製薬企業研究者のためのMySQLインストール方法

$
0
0

はじめに

ここでは、MAMPのインストールによってMySQL環境を構築する方法を解説します。

MAMPのインストール

MAMPのダウンロードページにアクセスします。
「Free Download」をクリックしてインストーラーをダウンロードします。

MAMP_download.PNG

インストーラーを立ち上げ、画面の指示通りに進んでいけばインストールできます。

MAMPの起動

サーバーを起動するには、MAMPをダブルクリックして立ち上がるウィンドウで、「Start Servers」をクリックします。

MAMP_start.PNG

すると、サーバーのところが緑色に点灯します。

MAMP_ready.PNG

「Open Webstart page」をクリックすると、以下のようなウェブページが立ち上がります。

MAMP_webpage.PNG

ここから、Tools -> phpMyAdminを選択すると、phpMyAdminの管理画面が立ち上がります。

MAMP_phpmyadmin.PNG

Windowsだと、Apache serverが立ち上がらない場合があります。
そんなときは以下の記事を参考に設定を変更すると良いです。
https://qiita.com/saigu/items/75db7df4b7d18804a5e0

MAMPの停止

サーバーを停止するには、「Stop Servers」をクリックするだけです。

MAMP_stop.PNG

しばらくすると、サーバーの緑色に転倒していたところが消え、「Start Servers」という表示に変わります。

まとめ

ここでは、MAMPのインストール方法について解説しました。
Windowsはややインストールしにくいですが、一度インストールできればMySQLを利用する準備は完了です。

初心者から始めるJava、for文・while文

$
0
0

はじめに

この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

環境

言語:Java11、JDK13.0.2
動作環境:Windows10

for文

for文とは、条件文に基づいて、ループから抜けるまで繰り返し処理を行うための、繰り返し処理文のひとつである。回数を指定して繰り返す場合に向いている。

for文の基本形
for ( 初期化文 ; 条件文 ; 更新文 ){
     //繰り返し処理;
}

それぞれの役割はこちら。


  • 初期化文
  • for文内部の繰り返し処理で用いる一時変数を宣言し、その初期化を行う文。カンマ,で区切ることで複数の変数を宣言・初期化できるが、そのすべてを同じ変数型にする必要がある(for文の外部で宣言済みの変数を除く)。
  • 条件文
  • 真偽値を戻す式を用いて、繰り返し処理を続行する(truefor文から抜ける(false)かを判定する文。条件文を複数記述することはできないが、前回扱った論理積&&・論理和||を用いて複合条件を設定することはできる。
  • 更新文
  • 繰り返し処理を一度終えた後、一時変数の値を変更するときの処理を書く文。初期化文同様、複数の処理を扱うことが出来る。更新文が適用されるか・いつ適用になるか、は特に注意を払う必要がある。

for文は入れ子にして記述することができるため、より複雑な繰り返しを行うこともできるが、今回は割愛。

for文実践

amount10Years.java
doubleamount=100000;for(intyear=1;year<10;year++){amount*=1.02;}System.out.println("10年後には"+amount+"円になる。");//何かが足りない……

これだと初年度が2年目になってしまい、9回分の複利計算しかできていない。初期値の設定を間違えると回数に響く。

while文

for文と並び、繰り返し処理を行う文である。想定した条件に達するまでひたすら繰り返す場合に向いているが、for文以上に無限ループを生みやすくなっているので注意が必要。

while文の基本形
while (条件文){
     //繰り返し処理;
}

条件文についてはfor文の説明にあるものを見ていただきたい。

なお別の形として、do~while文も存在している。最低1回は繰り返し処理を行うため、必須の処理を含む場合に用いるのがよい。セミコロン;の位置にはくれぐれも注意。

do~while文の基本形
do{
 //繰り返し処理;
} while (条件文);

while文実践

whileAmount150k
doubleamount=100000;intyear=0;//今度はちゃんと初年度を0にしたwhile(amount<=150000){amount*=1.02;}System.out.println(year+"年経てば150000円を超える予定。");//1年経たずに目標金額に届いただと……

こんどはyear++をwhile文の処理に含めなかったために最終出力がおかしくなってしまった。

終わりに

すごく便利な文だが、勘違いを残したままだととんでもない結果につながる危険も持っている。金利計算やアルゴリズムなど、絶対に間違えられない領域に使われるためしっかり理解していきたい。
今回の参考に、Javaの資格試験の本を乗せたが、{ }(中かっこ)がついてないとか入れ子の構造が深くなっていて理解に時間がかかるとか、インクリメントデクリメントが大量に敷き詰められているとか。理解力と集中力の両方が求められるよい問題がそろっている。

参考

出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版

Java SE11 Silver 問題集(通称黒本)


Linux学習記録①計画とか

$
0
0

急遽業務上の都合でLinuxスキルが必要になった。
せっかくなので、技術獲得に向けての七転八倒と阿鼻叫喚を記録したいと思う。

【私の経歴】
・インフラエンジニア(half decade)
・メインフレーム関係のシステム構築やら保守やら
・経験クライアント業界は色々

【なぜLinuxを触ることになったか】
・今後のキャリアを考えた時、メインフレームの知識しか無い現状が心もと無く思えた。
 →職場のプロジェクトでサーバー系のチームが未経験可のヘルプ要員募集をかけていたので、手を挙げたら運よく採用。
  
【学習プラン(ざっくりの予定)】
・自宅PCに環境構築
・『新しいLinuxの教科書』を終わらせる

ヘルプ先が慈悲深くもLinux勉強期間の猶予を恵んでくださったので、迷える子羊としてはお喜び頂ける人材になるべく精進する決意であります。

記録はまず3日続けばいいや。
るんるんやります。

Mac Audacity(オーダシティ)のインストールを行う

$
0
0

目的

  • Podcasterの味方AudacityをMacにインストールする方法をまとめる
  • 誰でもこの投稿を見ればインストール可能な様にまとめる

導入環境

  • PC
    • 本体: MacBook Air (11-inch, Mid 2012)
    • プロセッサ: 1.7 GHz デュアルコアIntel Core i5
    • メモリ: 8 GB 1600 MHz DDR3
    • グラフィック: Intel HD Graphics 4000 1536 MB
  • OS
    • macOS Catalina(10.15.3)

実施手順概要

  1. ダウンロード
  2. インストール
  3. 録音確認

実施手順詳細

  1. ダウンロード
    1. 下記のリンク先を表示する。
    2. 下記が表示される。 スクリーンショット 2020-03-05 20.53.38.png
    3. 「Audacity macOS SMG」をクリックする。 スクリーンショット 2020-03-05 20.54.43.png
    4. ダウンロードが開始されるので完了するまで待機する。 スクリーンショット 2020-03-05 20.55.11.png
    5. ダウンロードフォルダを開く
    6. ダウンロードしたインストーラ(audacity-macos-X.X.X.dmg)が存在することを確認する。
  2. インストール
    1. ダウンロードフォルダを開く
    2. ダウンロードしたインストーラ(audacity-macos-X.X.X.dmg)をダブルクリックで起動する。 スクリーンショット 2020-03-05 20.57.12.png
    3. 下記のウインドウが出たら同ウインドウ上でAudacityのアイコンをアプリケーションフォルダにドラックする。 スクリーンショット 2020-03-05 20.17.22.png
    4. アプリケーションフォルダにAudacityが追加されたことを確認する。 スクリーンショット 2020-03-05 20.19.55.png
    5. アプリケーションフォルダのAudacityアイコンをダブルクリックする。
    6. 下記のウインドウが開いたら「開く」をクリックする。 スクリーンショット 2020-03-05 20.21.05.png
    7. アプリが起動し下記のウインドウが開いたらインストールは完了である。 スクリーンショット 2020-03-05 20.58.24.png
    8. ヘルプ情報のご案内ウインドウの「閉じる」をクリックする。
  3. 録音確認
    1. Audacityを起動し、下記の画面が開いていることを確認する。 スクリーンショット 2020-03-05 21.04.47.png
    2. 自分のMacに内蔵マイクと内蔵スピーカーが存在していることを確認しウインドウの上部の帯のマイクマークの右横のウインドウに「内蔵マイク」、スピーカーマークの右横に「内蔵出力」となっていることを確認する。(内蔵音声入出力がないMacの場合は取り付け後、内蔵音声入出力端末を選択する。)
    3. スクリーンショット 2020-03-05 21.11.21.png
    4. ウインドウの上部の帯の録音ボタン(赤い丸)をクリックする。
    5. 下記の様に音声の波形が表示されることを確認する。

bundle installの度に"BUNDLE_WITHOUT"が追加されて開発環境だけで使用したいgemがインストールできない

$
0
0

本番環境でのgemのインストールで少しハマったので備忘録として記録

これまでローカル環境でgemのインストールをする際に、development環境やtest環境のgemのインストールがなぜかうまくいかないという問題が発生していました。
本番環境では開発環境で使用するrubocopなどのgemってそもそもインストールする必要がないよなと思い、ローカル環境から一度立ち戻って確認してみることに。

ハマった点

1. 下記のようにGemfile内に記載されているgroup developmenttest内のgemのインストールがうまくいかない。

group:developmentdogem'web-console','>= 3.3.0'gem'listen','>= 3.0.5','< 3.2'gem'spring'gem'spring-watcher-listen','~> 2.0.0'gem'pry-rails'gem'pry-doc'gem'pry-byebug'gem'pry-stack_explorer'gem'pry-alias'gem'rb-readline'# コーディング規約gem'rubocop',require: falsegem'rubocop-performance',require: falsegem'rubocop-rails',require: falseendgroup:testdogem'capybara','>= 2.15'gem'selenium-webdriver'gem'webdrivers'end

2. project内の.bundle/config内の下記記述が削除しても、bundle installの度に追加されてしまう。

---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITHOUT: "development:test"

原因調査

bundle configを実行することで、bundleの設定を確認することができます。
bundlerでは一度実行したオプションは保存されて、2度目以降の実行では自動でオプションを付加した状態で実行されているようです。

mbp13:sample_app user$ bundle config
Settings are listed in order of priority. The top value will be used.
path
Set for your local app (/Users/user/development/ams_app/.bundle/config): "vendor/bundle"
Set for the current user (/Users/user/.bundle/config): "vendor/bundle"

without
Set for your local app (/Users/user/dev/sample_app/.bundle/config): [:development, :test]
Set for the current user (/Users/user/.bundle/config): [:development, :test]

どうやらアプリ固有のbundle設定でも、ユーザ単位のbundle設定でもbundle install実行時にdevelopment環境やtest環境のどちらのgemもインストールしない設定となっているようですね。

解決方法

下記の2つのファイルからBUNDLE_WITHOUT: "development:test"の削除を行う。
/Users/user/dev/sample_app/.bundle/config
/Users/user/.bundle/config

※もちろん、PATHに含まれるuser,sample_appで表される「ユーザ名」、「アプリ名」についてはそれぞれの環境のものであると思います。

削除が完了したら、再度bundle configコマンドを実行して先ほどのbundleオプションの記述が消えていることを確認してください。

mbp13:sample_app user$ bundle config
Settings are listed in order of priority. The top value will be used.
path
Set for your local app (/Users/user/dev/sample_app/.bundle/config): "vendor/bundle"
Set for the current user (/Users/user/.bundle/config): "vendor/bundle"

ここまできたらこれまで同様にbundle installをしていただければ開発環境で使用したいgemがインストールできるかと思います。
bundle install実行後もこれまでとは異なり、BUNDLE_WITHOUT: "development:test"がconfingファイルに追加されることはありません。(bundle configで確認できます。)
本来アプリ単位でgemの管理を行うためのbundlerですが、より優先度の高いユーザのbundle configで常にdevelopmenttestのgemはインストールしないという設定がされてしまっていたということですかね。

最後に

勉強し始めで色々なチュートリアルなどをする中で、コマンド実行してしまったんですかね。
初学者あるあるかと思いますが、コマンドを打つ前にコマンドの意味をちゃんと調べるのは大切ですね。最初に見つけたドキュメントに飛びついてとりあえずコマンドを打つのも後々苦しむことになったりすることもまた一つ勉強になりました。

本番環境ではBUNDLE_WITHOUTの設定を用いて、開発で使用していたgemをインストールしない設定にしておくのが本来の使い方何ですかね。

ご指摘などありましたらコメントよりよろしくお願いします。

初心者から始めるJava、入れ子・break・continue

$
0
0

はじめに

この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

環境

言語:Java11、JDK13.0.2
動作環境:Windows10

入れ子

マトリョーシカ人形を見たことがあるだろうか。サイズが違う相似の物体をたくさん重ねたものだ。ここで扱う入れ子は制御構造のネスト(入れ子)である。
ifforwhileの文が。処理の中にまた制御構造を内包する状態になっており、二重ループ・三重ループなど階層的な処理を行うのに向いている。

break

break自体はswitch文のときに触れたが、入れ子の後で説明するなら「今処理しているネスト(入れ子)を中断し、上位のループに入る」動きになる。仮に無限ループに入っていたとしても、break文の条件を満たせば抜けることが出来る。
以下、参考の黒本からの引用

breakの使用例
intnum=0;while(true){num++;if(num==3){break;}System.out.println(num);}

continue

continuebreakとよく間違えるのだが、continueした場合はcontinue以下の繰り返し処理を丸ごとスキップして更新文に移行する
continueの実例は後日追記。思いついたコードがどれもコンパイルエラーでうまくいかなかった。特に練習が必要だ。

実践

失敗例を見てみよう。

nestingTwo.java
classnestingTwo{publicstaticvoidmain(String[]args){intforLoop=0;intwhileLoop=0;//合計回数は9回のはずfor(;forLoop<3;forLoop++){while(whileLoop<3){whileLoop++;}}System.out.println("処理は終了しました。");System.out.println("最終結果は、for文が"+forLoop+"回、While文が"+whileLoop+"回でした。");}}/* 処理は終了しました。
   最終結果は、for文が3回、While文が3回、合計で3回、でした。 */

whileLoopはforの入れ子内で一度3になった後は条件を満たしており、forが一度回っただけでそれ以降の変更がなされていない。
forの回数×whileの回数 にするため、今回はこうした。

after
(省略)inttotalCounter=0;//合計回数は9回のはずintwhileLoopTemporary=0;for(;forLoop<3;forLoop++){while(whileLoop<3){whileLoop++;totalCounter++;whileLoopTemporary=whileLoop;}whileLoop=0;}System.out.println("処理は終了しました。");System.out.println("最終結果は、for文が"+forLoop+"回、While文が"+whileLoopTemporary+"回、合計で"+totalCounter+"回、でした。");}}

while内でたまった回転数を逃がすwhileLoopTemporaryを作り代入し、後からfor文内で0に初期化している。
もっとスマートな方法があるはず。

終わりに

ラベルという、ラベルを張った処理へ制御を移す機構もあるようだが、ここでは割愛。どこかで見たgo toと同じものだろうか。

参考

出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版
Java SE11 Silver 問題集(通称黒本)

Mac homebrew caskを使えるようにする

$
0
0

目的

  • homebrew caskを使ったことなかったので使用方法をまとめる

条件

  • MacのPCにてhomebrewが使用できる状態になっていること。

実施方法

  1. homebrew caskのインストール

    1. ターミナルにて下記コマンドを実行する。

      $brew cask
      
    2. 下記のように出力されれば正常にインストールされている。

      [21:05:59]shun-no-MacBook-Air~$brew cask
      ==>Tapping homebrew/cask
      Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
      remote: Enumerating objects: 16, done.
      remote: Counting objects: 100% (16/16), done.
      remote: Compressing objects: 100% (14/14), done.
      remote: Total 416303 (delta 6), reused 4 (delta 2), pack-reused 416287
      Receiving objects: 100% (416303/416303), 189.27 MiB | 2.96 MiB/s, done.
      Resolving deltas: 100% (294141/294141), done.
      Updating files: 100% (3628/3628), done.
      Tapped 1 command and 3536 casks (3,653 files, 203MB).
      Homebrew Cask provides a friendly CLI workflow for the administration
      of macOS applications distributed as binaries.
      
      Commands:
      
          --cache    display the file used to cache the Cask
          audit      verifies installability of Casks
          cat        dump raw source of the given Cask to the standard output
          create     creates the given Cask and opens it in an editor
          doctor     checks for configuration issues
          edit       edits the given Cask
          fetch      downloads remote application files to local cache
          home       opens the homepage of the given Cask
          info       displays information about the given Cask
          install    installs the given Cask
          list       with no args, lists installed Casks;given installed Casks, lists staged files
          outdated   list the outdated installed Casks
          reinstall  reinstalls the given Cask
          style      checks Cask style using RuboCop
          uninstall  uninstalls the given Cask
          upgrade    upgrades all outdated casks
          zap        zaps all files associated with the given Cask
      
      See also "man brew-cask"
      

アプリをインストールする

  1. インストールコマンドを下記に記載する。

    $brew cask install アプリ名
    

付録

  • homebrew caskを使用してAndroid Studioをインストールした時のログを下記に記載する。
[21:18:59]shun-no-MacBook-Air~$brew cask install android-studio
Updating Homebrew...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
==>Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==>New Formulae
bic                                cassandra-cpp-driver               iblinter                           polynote                           wapm
biosig                             gh                                 libfido2                           protoc-gen-grpc-web
cargo-instruments                  go@1.13                            literate-git                       terraform-provider-libvirt
==>Updated Formulae
readline ✔               cloud-watch              frege                    jetty-runner             mvnvm                    py3cairo                 terraform
ruby-build ✔             cobalt                   frege-repl               jflex                    n                        rav1e                    terragrunt
aliyun-cli               consul                   galen                    jhipster                 nagios-plugins           rds-command-line-tools   tflint
angular-cli              contentful-cli           gatsby-cli               joshua                   ncurses                  redpen                   tika
ansible                  crc                      gcviewer                 jruby                    netdata                  renameutils              tomcat
apache-spark             cromwell                 gdb                      jsonschema2pojo          netlify-cli              repo                     tomcat-native
apollo-cli               crowdin                  gdcm                     jsvc                     newman                   sbt                      tomcat@7
arduino-cli              crystal-icr              ghc@8.6                  k6                       nfdump                   sbuild                   tomcat@8
asciidoctorj             csound                   git-archive-all          kaitai-struct-compiler   ngt                      scala                    topgrade
atlassian-cli            cstore_fdw               git-credential-manager   kawa                     nifi                     scala@2.12               traefik@1
aurora-cli               deno                     git-fixup                kcptun                   nomad                    sccache                  typescript
autorest                 dependency-check         gitbucket                kompose                  now-cli                  sdedit                   ucon64
aws-cdk                  derby                    gitlab-runner            krb5                     ocrmypdf                 serverless               umlet
aws-cfn-tools            detekt                   glade                    kubectx                  octave                   shairport-sync           unbound
aws-okta                 devdash                  glooctl                  kubeseal                 ode                      shellharden              unifdef
aws-sdk-cpp              devspace                 go                       kubespy                  okteto                   shfmt                    upscaledb
bagit                    dita-ot                  go-bindata               kumo                     opa                      siege                    urh
balena-cli               ditaa                    go-jira                  languagetool             openapi-generator        signal-cli               v8
ballerina                ec2-ami-tools            godep                    lazygit                  openjdk@11               sjk                      vale
basex                    ec2-api-tools            golo                     lcm                      openssh                  sk                       vault-cli
bazel                    ed                       goreleaser               lego                     orientdb                 skaffold                 vaulted
beagle                   ejabberd                 gradle                   libpulsar                pandoc-crossref          skinny                   vegeta
berglas                  elb-tools                grafana                  libsoup                  parallel                 smali                    vert.x
bfg                      elixir                   groovy                   libstfl                  pgweb                    sn0int                   vnu
binaryen                 ensmallen                groovysdk                liquidctl                php                      snapcraft                vulkan-headers
bind                     etcd                     grpc                     mahout                   php@7.2                  solr                     walkmod
bit                      exploitdb                hadoop                   mallet                   php@7.3                  solr@7.7                 wasmer
boot-clj                 faas-cli                 hcloud                   mesa                     picard-tools             sonarqube                weaver
bundletool               fastbit                  helm                     meson                    pig                      sonarqube-lts            weechat
byobu                    fastlane                 helmfile                 micro                    plantuml                 sphinx-doc               wildfly-as
byteman                  fastqc                   hmmer                    micronaut                pmd                      spotbugs                 wiremock-standalone
carrot2                  fetchmail                hugo                     mill                     postgis                  sqlcipher                wireshark
cfn-lint                 ffuf                     i2pd                     minikube                 prestodb                 sqoop                    wtfutil
cfr-decompiler           findomain                igv                      minio                    prestosql                stanford-corenlp         xapian
cgal                     flashrom                 ipfs                     minio-mc                 procs                    stanford-ner             xmake
chisel                   flawfinder               jadx                     mk-configure             procyon-decompiler       stanford-parser          xmlsectool
circleci                 flow                     jasmin                   mmark                    proftpd                  stlink                   yle-dl
clojure                  fluid-synth              javacc                   mmseqs2                  protobuf-c               swagger2markup-cli       yq
clojure-lsp              flume                    jboss-forge              mockserver               protoc-gen-go            tailor                   zabbix
clojurescript            flyway                   jdnssec-tools            molecule                 pulumi                   tee-clc
closure-compiler         fmpp                     jenkins                  monetdb                  pumba                    telegraf
closure-stylesheets      fop                      jetty                    mongo-c-driver           pwntools                 teleport
==>Deleted Formulae
ghc@8.2                                     jpcsp                                       openjdk@12                                  sshrc

==>Downloading https://dl.google.com/dl/android/studio/install/3.6.0.21/android-studio-ide-192.6200805-mac.dmg
######################################################################## 100.0%==>Verifying SHA-256 checksum for Cask 'android-studio'.==>Installing Cask android-studio
==>Moving App 'Android Studio.app' to '/Applications/Android Studio.app'.🍺  android-studio was successfully installed!
  • 前述の出力がなされた後、アプリケーションのフォルダを確認したところ、Andorid Studioがインストールされていた。

    スクリーンショット 2020-02-27 21.30.20.png

Viewing all 21223 articles
Browse latest View live