たくろぐ!

28歳プログラマーの思うことと備忘録

SES面談対策質問問答集

技術や知識を問われる質問

個人でWebサービススマホのアプリーケーションを作ったことはありますか。

あります。現在Rails Tutorialというネット教材をベースとしたSNSサービスを作成しており、言語はRuby on Railsを使用しています。
バージョン管理にはGitを使っており、GitHubにてリポジトリ管理しています。
チームでの開発経験もあるのでGitは一通りソース管理できます。

フレームワークを使った開発経験はありますか。

あります。Ruby on Railsです。経歴書では◯のプロジェクトの機能追加を担当し、サードパーティのライブラリをインストールして開発も行いました。

大量のデータの分析を行ったことはありますか。

ありません。少し質問の回答とはずれるのですが、◯のプロジェクトでこのシステムに登録している約20,000人のユーザに動員可能かどうかのレスポンスを集計して表示させるという機能があったので分析まではしていませんが、イメージはできます。

UI・UXの設計を行ったことはありますか。

ありません。ですがUIという意味では、実際にWordPressでブログを運営してGoogle Analyticsでクリック率や成約率の高い広告の配置や、ユーザに嫌われるサイト構成などは理解しています。またUXという意味では、リードナーチャリングやストーリーテリングの重要性を理解しており、設計にも力に慣れると思います。

スマホアプリの作成を行ったことはありますか。

ありません。とても興味がある分野でもあるので、ハイブリッドアプリ開発としてザマリンを使って見たいと思っています。

インフラ設計を行ったことがありますか。

ありません。LPICレベル1を昨年取得し、興味が出ている分野です。ですが実際に勉強してとても広い分野だと痛感したので今もっと時間があればチャレンジしたいと思っています。

ある特定の言語について使用経験があるか。

あります。静的言語でいうとJava動的言語でいうとRubyです。今はRubyが一番自分の中ではしっくりきているので、まずはRubyを極めたいです。

複数の言語を使ったことがありますか。

あります。静的言語ではJavaがありますが、動的言語もあるなかで堅い分プログラミングする上でハードルが高いと思っているので純粋にプログラミングを楽しめるという意味で個人的にRubyを選んで使っています。

チーム開発を行ったことはありますか。

あります。4人のメンバーがいるプロジェクトでの開発で私は開発を担当しました。GitやRedmineでプロジェクトを管理していたのでお作法的なところは理解しています。

gitは使ったことはありますか。

あります。GitHubにてリポジトリ管理しています。
チームでの開発経験もあるのでGitは一通りソース管理できます。

gitを使っていて、コメントをする方が多いですか。される方が多いですか。

プルリクを送るか、レビューが多いかという意味で回答させていただくとプルリクを送る方が多いです。
質問の意図と回答はあっていますか?

Githubを使っているか

使っています。GItLabのような同様のサービスにも興味が出てきて、ブランチモデルのワークフローも最近知りました。

設計経験はあるか

経験を問われる質問

自分が一番活躍・貢献できると思うことは何ですか。

自身でメディアサイトを運営して主にSEOでの内部施策を実施した経験から、ユーザ側に立ったシステム構築を意識して開発することができます。

今までに最も成果をあげた経験はなんですか。

プログラミングとは関係がないかもしれませんが、メディアの運営としてSEO対策、特に内部施策としてユーザのストレスにならないメディアを作って立ち上げ3ヶ月で60万PV程度のサイトにすることができました。
この経験を生かして、開発に携われるプロジェクトでは業務を着実に形にすることに加えて、ユーザ目線に立ちユーザのストレスにならないパフォーマンスの出るプログラムを書きたいです。

苦労した経験はありますか。(プロジェクトを遂行する上で困ったことはありますか。)

直近で参画したプロジェクトでテストリーダーを務めていたときに、テスト実行者には技術的なことを知らずとも実施できるようにドキュメントに起こすことに苦労しました。その経験から今も意識していることは自分なりの言葉で技術的なことを説明できることと、誰でもわかる言葉をなるべく使うということです。

これまでの案件の中で良い、自分に合っていると思ったプロジェクトの進め方はあったか

新しい技術に敏感で、エンジニアとしての成長のために勉強会などチーム全体としてのパフォーマンスを向上させようとするチームワークのある環境です。以前のプロジェクトでは、PMの方がいたのですがもともとエンジニア出身だったため自分でもプログラムを書きながら共有するために勉強会を実施してくれたのでエンジニアとしてのスキルアップができました。
少し甘えているかもしれませんが、今どんなすごい人でも初めはみんな初心者であるのでスキルアップをし続けられる場はとても大切だと思います。

自分が最もパフォーマンスを発揮できるのはどういうときか(環境、姿勢など)

商談と雑談のバランスがいい環境です。
商談というのはエンドユーザとの打ち合わせなどだけでなく、仕事に関する会話全体のことを指していて、雑談はそのまま仕事に直接的には関係がない会話です。
特に雑談ですが、チームメンバーが雑談ができるチームというのは強いと思う理由は、チームメンバー同士の理解が進むからです。 チームメンバーとの共通点を見つけられば、心理的にぐっと距離が縮まって話やすくなったり、知らない相手のことを知ることでお互いに相手のことを知ろうという意識が生まれて質問がしやすくなると思います。
もちろん仕事をやっているので仕事が一番ですが、休憩時間など合間の時間で自然とチームで情報共有できる環境が大切だと思います。

どうしてエンジニアになりたいと思ったか

アイディアを形にできるという可能性が今一番ある仕事だと思ったからです。
世の中にはたくさんのアイディアに溢れていますが、それを実際に実行して形にする人が少ないと思います。
私は思ったことはやることの大切さを独立してから経験したのですが、やはり当時のことを振り返ると生き急いだと感じることも少なくなく、地に足をつけてアイディアを形に変える仕事を考えてエンジニアという仕事が魅力的だと感じました。
また適正の意味でいうと、大学では文系でしたが数学などの理系の勉強も好きで、Webマーケティングなどでデータを扱ったこともあってロジカルに考えることも好きだったので自分にあっていると思いました。

Gitコマンドでつまづいたところ

ec2-user:~/environment/example2 (master) $ git push --delete origin static-pages

Username for 'https://github.com': taaaaak Password for 'https://taaaaak@github.com': To https://github.com/taaaaak/static_pages.git ! [remote rejected] static-pages (refusing to delete the current branch: refs/heads/static-pages) error: failed to push some refs to 'https://github.com/taaaaak/static_pages.git'

=> (原因)static-pagesブランチがまさかのmasterになってた。
=> (解消)Githubの Settings > Branches > Default Branchをmasterに変更した。

Webアーキテクチャの変遷調べてみたぞ

1991-1993年

HTMLの出現、のちにXHTMLに。

1994年

Netscape社によるNetscape Navigatorの発表。
CGIの全盛。
動的ページの実現。
同時に問題も表面化。

1995年

Javascriptの発表。

1990年代後半

ページ・インライン・モデルの普及(PHPASPJSPなど)。
CGIの衰退。

2000年代

MVCアーキテクチャが普及。
ここからアーキテクチャはあまり変わっていない。
役割の分離を果たすことで、以下のようなメリットがある
・コーディング作法を統一できる
・コード量が低減できる
・メンテナンスコストを低減できる
など

参考文献

https://www.nic.ad.jp/ja/materials/iw/2008/proceedings/F2/IW2008-F2-05.pdf
https://www.unisys.co.jp/tec_info/tr110/11001.pdf

【備忘録】Ruby on Railsでのエラーメッセージ

ルール

  • エラー内容
  • 発生した原因
  • 解消方法

全て記述すること。

rvm周り

[赤]Unknown ruby interpreter version (do not know how to handle): samurai.

=> (原因)rvm use samurai --defaultを実行
すでにgemsetの名前にsamuraiが設定されているものだと思ってた。
=> (解消)rvm use 2.0.0-p648@samurai --defaultを実行

[黒]YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0).

[赤,黄]There was an error(23).

Checking fallback: ftp://pyyaml.org/download/libyaml/yaml-0.1.6.tar.gz Checking fallback: https://www.mirrorservice.org/sites/pyyaml.org/download/libyaml/yaml-0.1.6.tar.gz No fallback URL could be found, try increasing timeout with:

echo "export rvm_max_time_flag=20" >> ~/.rvmrc  

=> (原因)rvm pkg install libyamlを実行
=> (解消)rvmsudo rvm pkg install libyamlを実行

[赤]Error running './configure --prefix=/usr/local/rvm/rubies/ruby-2.0.0-p648 --disable-install-doc --enable-shared',

please read /usr/local/rvm/log/1522984209_ruby-2.0.0-p648/configure.log There has been an error while running configure. Halting the installation.

=> (原因)rvmsudoしないでreinstallしたとき起こった。
=> (解消)rvmsudo rvm reinstall ruby-2.0.0-p648を実行

WARNING: Please be aware that you just installed a ruby that is no longer maintained (2017-04-01), for a list of maintained rubies visit:

http://bugs.ruby-lang.org/projects/ruby/wiki/ReleaseEngineering

Please consider upgrading to ruby-2.4.1 which will have all of the latest security patches.

=> (原因)Rubyのバージョンが古いって怒られてる。
=> (解消)Rubyの最新バージョンを使う。

$ bundle install

The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java. Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/. Resolving dependencies... Bundler could not find compatible versions for gem "activesupport": In snapshot (Gemfile.lock): activesupport (= 5.1.6)

In Gemfile: rails (= 5.1.4) was resolved to 5.1.4, which depends on activesupport (= 5.1.4)

coffee-rails (= 4.2.2) was resolved to 4.2.2, which depends on
  railties (>= 4.0.0) was resolved to 5.1.6, which depends on
    activesupport (= 5.1.6)

Running bundle update will rebuild your snapshot from scratch, using only the gems in your Gemfile, which may resolve the conflict.

=> (原因)bundle updateをしていない。
=> (解消)bundle updateを実行してから、bundle installを実行する。

ec2-user:~/environment $ rails 5.1.7 new undifined_version

/usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems.rb:271:in find_spec_for_exe': can't find gem railties (= 5.1.7) (Gem::GemNotFoundException) from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems.rb:299:inactivate_bin_path' from /usr/local/rvm/gems/ruby-2.4.1/bin/rails:23:in <main>' from /usr/local/rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:ineval' from /usr/local/rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in `

'

=> (原因)Railsのバージョンがインストールされてない。
=> (解消)バージョンを確認してrails newする。

rails -vでそのプロジェクトで指定したバージョンが表示されない

qiita.com

=> (原因)ローカルのruby環境に複数のバージョンのrailsがインストールされている?
=> (解消)上記の手順にてプロジェクトごとにrailsのバージョンをGemfileに指定してbundle install --path vendor/bundleする。

テスト関連

ec2-user:~/environment/example2 (static-pages) $ rails test

Running via Spring preloader in process 7108 Run options: --seed 8985

Running:

Run options: --seed 8985

Running:

FF

Failure: StaticPagesControllerTest#test_should_get_about [/home/ec2-user/environment/example2/test/controllers/static_pages_controller_test.rb:19]: Expected at least 1 element matching "title", found 0.. Expected 0 to be >= 1.

/home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in method': undefined methodtest_should_get_about' for class `Minitest::Result' (NameError)

=> (原因)app/views/static_pages/home.html.erbが完全なhtml形式でない。
=> (解消)完全なhtml形式でerbファイルを作成する。

### c2-user:~/environment/example2 (static-pages) $ rails test
Running via Spring preloader in process 9908
Run options: --seed 45204

Running:

Run options: --seed 45204

Running:

....EE

Error:
StaticPagesControllerTest#test_should_get_about:
SyntaxError: /home/ec2-user/environment/example2/app/views/static_pages/about.html.erb:2: syntax error, unexpected tIVAR, expecting ')'
@output_buffer.safe_append='<!DOCTYPE html>
^
test/controllers/static_pages_controller_test.rb:22:in `block in <class:StaticPagesControllerTest>'

/home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in method': undefined methodtest_should_get_about' for class `Minitest::Result' (NameError)

=> (原因)<% provide(:title, "About" %> かっこの閉じ忘れ。
=> (解消)ちゃんと閉じる。

ec2-user:~/environment/example2 (static-pages) $ rails test

Running via Spring preloader in process 10955
Run options: --seed 17459

Running:

Run options: --seed 17459

Running:

EE

Error:
StaticPagesControllerTest#test_should_get_contact:
ArgumentError: Expecting a selector as the first argument
test/controllers/static_pages_controller_test.rb:30:in `block in <class:StaticPagesControllerTest>'

/home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in method': undefined methodtest_should_get_contact' for class `Minitest::Result' (NameError)

=> (原因)テスティングファイルでassert_selectメソッドの引数(セレクタ)に:を入れていた。
=> (解消):を入れない。

コンソール関連

rails console --sandboxを抜けたらエラーメッセージが表示される。(詳細は以下)

/usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:98:in initialize': Permission denied @ rb_sysopen - /usr/local/rvm/rubies/ruby-2.4.1/.irbrc_history (Errno::EACCES) from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:98:inopen'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:98:in save_history' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:64:inblock in extended'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:433:in block in run' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:433:ineach'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:433:in run' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:385:instart'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/commands/console/console_command.rb:62:in start' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/commands/console/console_command.rb:17:instart'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/commands/console/console_command.rb:97:in perform' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/thor-0.20.0/lib/thor/command.rb:27:inrun' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in invoke_command' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:indispatch' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/command/base.rb:63:in perform' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/command.rb:44:ininvoke'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/commands.rb:16:in <top (required)>' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:inrequire'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in block in require' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258:inload_dependency'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in require' from /home/ec2-user/environment/example2/bin/rails:9:in'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in load' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:inblock in load'
from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258:in load_dependency' from /home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:inload'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in require' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:inrequire' from -e:1:in `

'

=> (原因)設定ファイルを編集してエラー内容を許容する。
=> (解消)touch ~/.irbrcしてから、~/.irbrcファイルを以下のように編集する。

IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:AUTO_INDENT_MODE] = false
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 200
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-history"

ec2-user:~/environment/example2 (modeling-users) $ rails test

Running via Spring preloader in process 4895 Started with run options --seed 3061

Run options: --seed 3061---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---] 0% Time: 00:00:00, ETA: ??:??:??

Running:

ERROR["test_layout_links", Minitest::Result, 0.017652772000019468] test_layout_links#Minitest::Result (0.02s) ActiveRecord::RecordNotUnique: ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: column email is not unique: INSERT INTO "users" ("name", "email", "created_at", "updated_at", "id") VALUES ('MyString', 'MyString', '2018-05-11 00:42:39.721826', '2018-05-11 00:42:39.721826', 298486374)

E 12/0: [ ] 0% Time: 00:00:00, ETA: ??:??:??

Error: SiteLayoutTest#test_layout_links: ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: column email is not unique: INSERT INTO "users" ("name", "email", "created_at", "updated_at", "id") VALUES ('MyString', 'MyString', '2018-05-11 00:42:39.721826', '2018-05-11 00:42:39.721826', 298486374)

Error: SiteLayoutTest#test_layout_links: NoMethodError: undefined method `each' for nil:NilClass

/home/ec2-user/environment/example2/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in method': undefined methodtest_layout_links' for class `Minitest::Result' (NameError)

=> (原因)test/fixtute/users.yamlにデフォルト値が入力されていて、新規作成した重複データのバリデーションに引っかかった。
=> (解消)fixtureのデフォルトのテストデータを削除する。

ワイ氏、ガラケーを無くす(1か月前に)

ハイコストハイリスクミドルリターン

買ったばかりのスマホ落として意気消沈中のところ、すみません、今キャンペーンで今のお気持ちを聞いているんですが、、、

・・・はい、とういうことで(どういうことだよw)、今日はキャリアで契約して新品のiPhoneを落としたときめっちゃ落ち込まない方法を教えるぞ。

これでおまいらのような情弱でも大手キャリア(ドコモ、ソフバン、auとかな)から搾取されないようになるから耳をかっぽじってよく聞けよな!

ワイのスマホ事情

落ち込まない方法はズバリ、ガラケーを使う、っだ!!!

頭の上に疑問符が浮かんでいるおまえら、安心しろ、ワイの頭の上にも疑問符はあるぞ。

ええと、ワイは今スマホガラケー2台持ちでガラケーは通話専用として使っているんだな。

というのもワイは出先にPCを持っていくこと山の如しなので(?)、ポケットWi-Fiを常に持ち歩いているわけだ。

しかもレンタルWi-Fiで容量無制限のSIMを契約しているもんだから、スマホの本体を買うだけで(通話のできない)スマホが使えるというわけだ。(補足:通話はできないが、通信は無制限に使えると言いたいみたいだ)

今使っているスマホauiPhone6 128GBで、すでに2年くらい使ってるかな。

ワイの感覚だと、5s(c)以降のスペックは通信における待ち時間のストレスレベルはさほど変わらないから古いモデルを使い続けるのが一番コストが安いわけだ。

最近はもはや6も巷でみなくなってきているから6sになるかもしれないな。

今日秋葉原のお店でau版iPhone6s 64GBが19,999円で売ってたんだが、2年前ワイは6を22,400円くらいで買ったぞ。

だいたい2,3世代前のスマホはそれくらいの価格に落ち着くんだな。

これに毎月のWi-fi使用料が4,400円だから、2年(24ヶ月)で105,600円。

で6の値段と合わせて、128,000円。これが2年の支払総額な。

月で5,334円くらいか。

で肝心のガラケーだけど、これは3年契約で月々割の適用対象になり実質0円で本体購入したことになる。

で月々は話し放題で1,380円くらい。これにSMSと0570通話料金が加算されて平均するとだいたい月2,000円かな。

つまりスマホ+ガラケー2台持ちで考えると、通話し放題+通信し放題で7,400円くらいということか。

いや、結構かかってるな笑。

でもいまどき月初から通信制限かかったンゴって人も多いだろうし、子供がスマホで動画見すぎて自分がスマホ使えなくなったとかって人もいそうだしな。

まぁ悪いことは言わないから、日本のクソ金持ち企業から搾取されるのはやめとけ。

Wi-Fiはレンタルしろ

言葉通り、レンタル一択だからな。

間違っても量販店の人の良さそうなお兄さん捕まえて「ポケットワイファイってやつ契約したらアイパットもらえるんでしょ〜?」なんて聞くなよ?

最悪、「携帯用の無線ルーターを契約したらiPadがもらえますか?」と聞けよ?

iPadアイパッドだ、ド。ポケットワイファイは家にルーターあるだろ?あれの携帯できるやつだぞ。これにスマホに入ってるのとおなじようなSIMが入ってるわけだ。

とりあえずそれくらいは知っとけよ?ルーターが何かが知りたいやつはこの記事そっ閉じしな。

で、おすすめのレンタル無線ルーターはこれだ。

www.wifi-rental.com

さっき調べたら1日1GB制限がかかって5,480円となってるみたいだな。

てか1日1GBで無制限って言うなよw30GB制限だろそれは。

とはいえ、これでキャリアの7GB制限は余裕で超えられるぞ。

格安SIMの会社と契約したとしても10,000円以内には収まる計算になるな。

あ、そうそう、この会社は価格.comからキャンペーンページに飛べば月額1,000円くらい安くなったと思うから必ず価格.com経由で契約するんだぞ。

これ忘れるだけで年間12,000円損するからな!

ちなみに量販店だと、無線ルーターの契約が2年か3年なんだけど、このレンタルルーターの場合はいつ返してもOKだからな。

紛失したときのリスクさえ許容すれば最強のパートナーだぜ。

☆ふ☆ん☆し☆つ☆し☆た☆と☆き☆の☆り☆す☆く☆

ガラケーは契約が切れたら別のキャリアにMNP転出しろ

この辺はもはや王道で何も言うことはないな。

スマホ同様、キャリアは熾烈な顧客の奪い合いをしているため他社からの機種変更だと大幅に割引してくれることが多い。

以前量販店に勤めていた知り合いが言ってたが、週末はヨドバシで通常より大幅に割引して販売促進しているからこのビッグウェーブに乗るといいかもな。

ワイはそのとき月々数十円とか言われたけど、急いでたからその場でサインしなかった。

で、更新月に交渉しに行ったらやっぱりそれはたまたま在庫処分(古いガラケー(もちろん新品))していて契約数を取りたいためにキャンペーンをやっていただけって話らしいので、普通にやると3年契約で月々1,300円くらいになると思う。

突発的にキャンペーンやることも多いっぽいから乞食速報くんたちは毎日量販店のお兄さんの顔色を伺うだけの簡単なお仕事に勤しむといいぞ。

まとめ

とりあえずまた更新します。

【初心者向け】これだけは覚えろ!Linuxコマンド超厳選7!!

テスターでもこれはまじで覚えろ

くっそ初心者向けにこれくらいは覚えとけというLinuxコマンドをまとめてみた。

初心者とは言え、Linuxって何?おいしいの?っていう人はもはやこの記事にたどり着けないはずなので早速やっていくぞ。

[ls] listの意味だぞ

lsコマンドは現在いるディレクトリ(サーバの"場所"だな)の直下(配下)にあるファイルやフォルダを一覧表示してくれるやつ。

f:id:takkuso:20180404091127j:plain

$ lsの実行結果($はコピーすんなよ。$はコマンドを受け付けてるよ!ってマークだぞ。)

f:id:takkuso:20180404091217j:plain

なんかenvironmentって出て来たな。そう、それが今いるディレクトリの直下にある"フォルダ"だ。

f:id:takkuso:20180404091432j:plain

ちなみに"ファイル"だと文字の色が違うな。

この場合、.txtって拡張子も買いてあるしわかりやすいだろ。

この環境(cloud9)だと青っぽい文字のやつはフォルダで、黒い文字のやつはファイルだな。

さてちょっと難しくなっていくぞ。

f:id:takkuso:20180404091756j:plain

これを実行するぞ。とりあえず今は考えるな、やれ。いや、やってくださいお願いします(懇願)。

先進まないからぁ(震え声)、、、

$ ls -aの実行結果

f:id:takkuso:20180404092004j:plain

このlsコマンドの後ろにハイフン付きで入力したのはlsコマンドの"オプション"だ。

オプションはコマンドの後ろに-hとか--helpをつけるとそのコマンドで使えるオプションリストが出てくるので使いたいコマンドのオプションを知りたい場合は使って見るといい。

そもそもこの-hもヘルプオプションだぞ。

オプションだけじゃなくてそもそもそのコマンドの意味とかも書いてるぞ。

最初はとにかく変態になり切って-h(hentaiの"h")を使いまくることだな。

で、話は戻るけど今回の-aだな。

aオプションというのはallと言う意味だ。すべて。

listコマンドのallオプションというと、つまり、そうだ。

【.(ドット)から始まる隠しファイル(フォルダ)も含めて出力する】って意味だ。

隠しファイルというのはユーザになるべく編集してもらいたくないような設定ファイルとかが多く含まれてるよな。

これ中身変えられるとまじヤバいんすけど僕、ってPCから言われちゃうようなファイルですわ。

bashっていう名前がついてるお仲間が多いのと、なんかmで終わるお仲間が多いくらい覚えてればいいですわ。

[pwd] print working directoryの意味

本当はlsコマンドで-laオプションと、-ltrオプションを教えたかったんだけど、

まぁ自分でググって知識を深めてくれ。

自発的にググる方が能動的行動によって脳が快感を覚えるからな。(ンギンモヂイイいいいってなる)

で、次はpwd

print working directoryという意味で、日本語で言うと今の作業ディレクトリを標準出力に出力して〜って意味。

もっとわかりやすくいうと、ターミナル(Winの場合コマンドプロンプト)に現在いるディレクトリがどこか表示して!って意味。

まぁ習うより慣れろなので。

$ pwdの実行結果

f:id:takkuso:20180404094252j:plain

これで現在いるディレクトリが/home/ec2-userということがわかったな。

そのディレクトリの下にさっきのbashなんちゃらとか、mで終わるやつがあるってことだな。

[cd] change directoryの意味

じゃあ次だ。どんどんいくで(生粋の関東人)。

では今のディレクトリからenvironmentディレクトリに降りていくで。

降りていくとかはよく使うからな。

エクスプローラGUIベースの、ファイル開くやつ。ブラウザじゃないぞ)と違って、ターミナルはCUIだからツリー構造を頭の中で意識するとわかりやすいよな。

下の階層に降りる、上の階層に上がる、やで。

じゃあやっていくで。

$ cd environmentの実行結果

f:id:takkuso:20180404095253j:plain

$マークの前が変わったな。

そうや、これで現在いるディレクトリが「~/」→「~/environment」になったということやで。

~/はそのユーザのホームディレクトリのことをさしてるんやで。

ホームディレクトリにいくにはcdのあとに何も指定せずに実行するんや。

$ cdの実行結果

f:id:takkuso:20180404095552j:plain

ホームディレクトリに戻れることが確認できたやろか。(関西弁しんどくなってきた)

そしたら間髪入れずにさっきのディレクトリに戻るッ!(ここからジョジョ

$ cd -の実行結果

f:id:takkuso:20180404100105j:plain

(クッ、こいつご丁寧にpwdまでしてくれてやがるッ)

というかんじで直前のディレクトリに戻りたい場合はcd -を実行するといい。

これならめっちゃ深い階層まで降りていってホームディレクトリに行った後またすぐ戻るときに楽だな。

つまり暗い美人より明るいブスってことだな(いみふ)。

[mkdir] make directoryの意味

では続いてディレクトリを作成するmkdirコマンドっだ!だっふんだ!(脱糞ぷーん)

いったんcdでホームディレクトリまで戻って、

$ mkdir testの実行結果

f:id:takkuso:20180404105114j:plain

で、ls -aすると、

$ mkdir testの実行結果

f:id:takkuso:20180404105319j:plain

おやおや、穏やかじゃないねえ、testというディレクトリができてるじゃあないか。(穏やかだよ)

mkdirにもオプションがあって、-pとかは覚えておくといいかな。

[mv] moveの意味

では続いてファイルを移動させるためのmvコマンドだ。

このmvを使って、environment.txtファイルをmkdirで作成したtestディレクトリに移動させるぞ。

$ mv environment.txt test/の実行結果

f:id:takkuso:20180404110906j:plain

で、ls test/でtestディレクトリ配下を確認と。

$ ls test/の実行結果

f:id:takkuso:20180404111056j:plain

はい、これで移動ができたね。たえちゃん、やったね!

[rm] removeの意味

じゃあ次に今作ったenvironment.txtを削除してみるか(無慈悲)。

rmも覚えるべきオプションが2つあるから合わせて覚えていってな。

ではさっそく。

と、その前にctrl + Lでターミナルをクリアしとくか。

こうするとコマンドで汚染されて行ったコンソール(ターミナルとほぼイコールだな今回の場合)がリセットというかクリーンされるから見辛くなったら都度やるのがいいな。

では気を取り直して。

rm test/environment.txtの実行結果

f:id:takkuso:20180404111715j:plain

何も変わらないけど、ここでls test/をすると

ls test/の実行結果

f:id:takkuso:20180404111829j:plain

なくなっとう。

ではこのrmコマンドでファイルではなくてディレクトリごと削除したい場合はそのままでもできるのかという話だけど、結論はできないっす。

そうしたい場合、-rを使うと再帰的にディレクトリごと削除できる。

f:id:takkuso:20180404112316j:plain

あとフォルダにファイルがまだ存在するときに-fでいちいちファイルを削除するかどうか聞かれなくなる。

こんなかんじ。

f:id:takkuso:20180404112635j:plain

rm -rf test2/の実行結果

f:id:takkuso:20180404112755j:plain

どないなもんだい!(?)

[less] 意味はわからない

最後に本来はviというCUIベースのエディタの説明をしたいところだけど、viだけで記事が書けるくらいエディタは奥が深いのでここではビューア(閲覧のみ)をサポートしてるlessコマンドを紹介すっぞ。

lessはファイルの中身を閲覧するためのコマンドっつう説明がオメーラにはいーんじゃねえか?なぁ、ベジータ

本当はvi起動もできるから閲覧しかできないわけではない、そういう理解だと読者を悩ませることになるのがわかっているのかカカロット

いやー手キビシーな、まるでチチみてえだ。

んでもまっ、最初はファイルの中身を見るときに使って、見終わったらctrl + cで閉じる、これさえ覚えればおめえもスーパーサイヤ人の仲間入りダゾお(適当)。

catとの違い、moreとの違いなんかも比較されるからググって見ると理解が深まるかもな。オラ、ワクワクすっぞ(適当)。

まとめ

これでも超超超初級レベルでっす(書くの3時間かかった、、、そっちかよ)。

守破離と言う言葉もある通り、まずはできる人の真似をしながら技術習得に励んでくれたまえ。

皆の衆〜、まーた食べログが改悪じゃああああああ我に続けえええええええ

きっかけ

これから始める僕らの会社に入社(まずは契約だけど)してくれる人の歓迎会をするために久々に食べログで調べ物したらランキングのページングがなくなってやがるんですがこれはいったい・・・

これまじで困らないか?

一気に人気店予約取りづらくなるでえ。

ん?お気づきだろうか・・・

みるとこんなかんじなんよ。

f:id:takkuso:20180404001548j:plain

末端スクロールすると、

f:id:takkuso:20180404001834j:plain

おやおや、物騒な世の中だねえ、いきなりサービス改悪とな?

ファッ!!?

ついに食べログさん課金にご執心のためさらにサービス改悪して絞って来ましたかと。

そうですかと思い、Developer Toolsを立ち上げてリロードしたら

ファッ?(変わってない・・・のか?)

f:id:takkuso:20180404002300j:plain

課金ユーザ囲い込み戦略じゃないだ、と、、、

というのも以前は明らかな改悪だったんですよ。

以前の改悪というのはだいたい数年前(2,3年?)にスマホでブラウザアプリ(SafariとかChromeとかね)から食べログにアクセスするとランキングが頭5件しか出てこなくてその先見るには有料登録してね〜みたいな表示になってたやつです。

でもPC版は全く影響なかったので僕はいつも美味しいお店探すときはPC開いてお店に電話してました。

路上とか道端とかで。

で、今回もまた絞ってきたかと思ってスマホ版でみたら20位まで見れてるんですが、、、

あれ?食べログさんどうしました?息してる?

こんなときWebマーケターやめなきゃよかったって思うわ。

これがスマホ版。

わかんねけど、N/Aになってるのはデータ取れてない時期があるんじゃないの、わかんねけど。

f:id:takkuso:20180404003248j:plain

でこれがPC版。

結構安定してる。

f:id:takkuso:20180404003406j:plain

察するに、あれだな、締め出ししすぎてユーザに飽きられちゃったんだな。

放置プレイもやめぎわが大事だぞっ☆

ちなみに、新宿だけに絞らないでエリアで絞って検索したらページングできるんだなぁ。

サービス改悪は逃げだぞっ!攻めの姿勢でできることはないんかーい

まとめ

普通にまた改悪かよ〜仕方ねえかきn・・・とは思わなかったけど、普通にいいサービスだからマネタイズ方法もっとなんとかして頑張って欲しいっすわ。

お店から取るのは楽だけど、それ最初からやると自分の首を締めることになるで〜。(未上場の人間が言う戯言)

使うかもわかんねクーポン発行させてお店に負担させてないでネイティブアプリユーザに中谷美紀みたいな年上妖艶美女と行ける焼肉デート1回30,000円コースとか用意しろよ(俺得)。

いや現実的にはまずはいつも幹事やってるユーザに口コミ参加型クーポン発行したり、ポイント還元したりしてじゃんじゃん安く使ってもらって食べログの中でも厳選されたグルメメンバーとしてサイト内レビューをもらってブランディングするとか、

お店や地域対抗で来店者数を競うランキング形式のイベント企画するとか、

メニューを限定して美味しかったお店を投票制にしてランキングにするとか、

いろいろあるだろうに。人少なくてもさ。

まぁ僕が思ってる以上に社内がけんけんがくがくしてるとは思うんだけどホント大丈夫か?

好きなサービスだけに頑張って欲しいだけなんだけどさまじで。

ドロン!