Translate

BTemplates.com

Powered by Blogger.

2019年7月28日日曜日

2019-07-26 07-27 到達点メモ


.text()を行う際にDOM操作をする際にそもそもタグの指定が間違っていないか
確かめたい時は.html()でやると
テキストデータを取得する方法としては間違っていないが
タグの指定は間違っていないかどうかが分かる。

例えば、以下の様なテーブル構造があったとする

<table class="test_tag nononaga_tag">
  <tr>
    <th>TEST</th>
    <td><a rel="nofollow" target="_blank" href="https://www.nononagainfo.com/">https://www.nononagainfo.com/</a></td>
  </tr>
</table>
この際に、欲しいデータが、tdタグのURLアドレスだった場合、
$ ('table.test_tag').text ();
もしくは、
$ ('table.nononaga_tag').text ();
では取得できない。

この場合、正しいやり方は以下のどちらかである。
$ ('table.test_tag td').text ();
$ ('table.nononaga_tag td').text ();
*理由はよくわかっていないが、 ('table.test_tag table.nononaga_tag  td').text ();
では取得できない。何か指定方法が間違っているのかもしれない。

大体目標の作業は終わったと思う。
これで作業がグッと楽になるはず。

例えば、以下の構造があったとして
ノノナガというデータを取りたいとする。
<div class="job_type">
  <div class="programmer">
    <span class="user_name">
    ノノナガ
    </span>
  </div>
</div>

その場合は、以下のようにすればよい
$('.job_type').find('.user_name')

参考サイト:jQueryで子要素を取得する方法:children(), find()
https://uxmilk.jp/10873

jQueryとJavaScriptがごっちゃになってしまってるので気を付けないといけない
.find()はjQueryの話。

タグ内に不要な改行が入っており、且つそれがブラウザ上で反映されていないので
その表示に近づけたい場合は、以下のようにやればよい。

◆htmlでのデータ
<p>


あいうえお
</p>


◆ブラウザでの表示
あいうえお

var copyHtml = '<p>' + $ ('.aiueo').html ().replace (/\n/g, '') + '</p>';
var copyText = $ (copyHtml).text ();
console.log (copyText);

一旦HTMLデータを出力し、そこでreplaceで改行(\nのことで<br>のではない)
そのあと、タグが消えるのでhtmlに戻すためにpタグで囲んでやる

他のごみデータの削除もこれで対処できるかもしれない。

今日はここまで。

2019年7月26日金曜日

2019-07-23、07-24、07-25 到達点メモ


DOM操作とjQueryとJavaScriptがごっちゃになっていて分かんねぇぇえええ

function内で他のDOMの値が取れないのは何でなんだ・・・。
.text()じゃなかったからだった・・・。(*ずっと.textでやっており、後ろの括弧が無かった)

クリップボードにコピーするのは以下のサイトが役に立ったというかコピペした。

[jQuery] テキストエリアの内容をクリップボードにコピーするボタンを設置したい
https://migi.me/jquery/copy-clipboard/

思った以上に手間取った。
正直、未だに分かっていないことも多い・・・。

最終的に必要なところを全部ボタン化してコピーしたいのだが
今のところh1タグのところしか作れていない・・・。

あと、特定のURLときのみ機能するようにしないと調べ物しながらだと邪魔すぎる・・・。

2019-07-24

URLの指定は普通に楽だった。
urlを取得する構文を書き、document.URL.match で一部分の重要な箇所が一致するかを見れば普通に場合別けができた。

参考サイト:jQueryでURLを取得してページごとに条件分岐させる
https://designsupply-web.com/knowledgeside/1592/

データを取得する際に、タグとかの状態でhtmlデータを取得したい場合は
単純に.html()で取得できる。
.text()だと、<br>の改行が認識されないので、自力で変換してやる必要がある

参考サイト:【jQuery】textメソッド改行入らない
https://teratail.com/questions/36078

なお、JavaScriptで変換する場合は.replaceを使う必要がある
また、条件を満たすものを全部変換したい場合は、正規表現を使う必要がある。

参考サイト:特定の文字列を全て置換する[Javascript]
https://qiita.com/DecoratedKnight/items/103ab57431b6c448e535

参考サイト:基本的な正規表現一覧
https://murashun.jp/blog/20190215-01.html

参考サイト:エスケープ, 特殊文字
https://ja.javascript.info/regexp-escaping

また引っかかったところとしてスラッシュとバックスラッシュがごっちゃになってしまい
本来、スラッシュ(/)をやりたかったのをバックスラッシュ(\)と勘違いしてしまい
\\ と入力して袋小路に入っていた。
正しいやり方は \/ である。

DOMの指定の仕方で、仮に<h3 class="h3_hoghoge">を指定しようと思ったが、他のクラスにも同じ名前があったので、<section class="sec1234_hoghoge"><h3 class="h3_hoghoge">を指定したいとする。


その場合は、以下の様な指定をすればよい
*正しい例
$ ('section.sec1234_hoghoge>h3.h3_hoghoge')

無論、以下の様な指定はできない
*ダメな例
$ ('section.sec1234_hoghoge').$('h3.h3_hoghoge')

jQueryのセレクタメモ(リンク先は階層関係の指定の部分からになっている)
https://qiita.com/Thought_Nibbler/items/5d4fc40a4d4325128b24#%E9%9A%8E%E5%B1%A4%E9%96%A2%E4%BF%82%E3%81%AE%E6%8C%87%E5%AE%9A

その他
たまにクラス名で
<div class="hoge momomo">
という風にスペースで区切ってあるものがあるが
これは、クラス名が二つになっており、"hoge momomo"というクラス名のわけではない。
正しくは、"hoge"と"momomo"の二つである

参考サイト
スペースを含んだクラス名を jquery で指定できない
https://ja.stackoverflow.com/questions/22510/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E5%90%AB%E3%82%93%E3%81%A0%E3%82%AF%E3%83%A9%E3%82%B9%E5%90%8D%E3%82%92-jquery-%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84

2019-07-25
本当に皆自由に書くんだなぁ・・・。
ブラウザで表示される内容と実データの中身に乖離がありすぎるのですが、それは・・・。

一番簡単なのは、一度htmlデータで出力した後に
それを再度htmlデータとして取り込みをそれを.text()で出力するのが良い
ただし、ブラウザで表示されるのと実データは違うので(CSSなどで表示に変化が出ているのだろうか・・・?)
実データがアレだと結局手直しが必要になる。

正規表現で、下のように赤字の部分だけ変えたくない場合とかがある
    /<div>テスト<\/div>\n(.*?)<\/th>\n(.*?)<td/,

その時は以下のように書けばよい
'<div>テスト<\/div>\n$1<\/th>\n$2<td class="test_class"'

参考サイト
文字列の一部だけを変更したい
https://hodade.com/seiki/page.php?r_ichibu

日付や年数の加算減算をしたい場合は、
.setDate()をすればよい。

あと、紛らわしい事として、
*.getMonth()で取得できる数値は0~11になっている
*年数を取得したい場合は,.getFullYear()
がある
なお、文字列から日付に変換したい場合は
var date = new Date ('2019-07-25');
でも可能

参考サイト
【JavaScript】日付処理
https://qiita.com/kazu56/items/cca24cfdca4553269cab
JavaScript の Date は罠が多すぎる
https://qiita.com/labocho/items/5fbaa0491b67221419b4
javascriptで日付(月・日)を加算(減算)してみた
http://shoprev.hatenablog.com/entry/2014/09/18/223316

X番目のthのタグを指定するには
th:nth-child(X)とやればよい
一番最初の番号は1。0ではない

jQueryでTABLE要素の操作
https://rfs.jp/sb/javascript/js-lab/jquery-table.html

末尾の文字を削除する場合は
'aaaaaf'.slice( 0, -1 ) ;
とやればよい

先頭、末尾の文字を削除する方法
https://lab.syncer.jp/Web/JavaScript/Snippet/5/

タグの指定が間違っていないはず?なのだが上手く行かない
元のHTMLの構造がおかしいのか、それとも、なんか指定が間違っているのか・・・?

目標の大体は解決できたので今日はここまで。


2019年7月18日木曜日

2019-05-11、05-24、07-18 到達点メモ


Android App Bundleについて調べる。

端折った大雑把な解釈だが、apkだと全部の端末に対応しないといけないので
余分なデータが含まれてしまう。
そこでGooglePlay側で必要なデータだけコンパイルするようにすることで
容量が減る。という解釈だと思っている。


Android App Bundle でアプリサイズを削減
https://rakuishi.com/archives/android-app-bundle/

Android App Bundle のすゝめ
https://note.mu/numero_dev/n/n36ccca859ae5

Android アプリバンドル (Android App Bundle) について学んだ
https://vividcode.hatenablog.com/entry/android/app-bundle


というかちゃんと調べたら公式ドキュメントの方がありましたね・・・。
About Android App Bundles(Android Developers)
https://developer.android.com/guide/app-bundle/

Android App Bundle でアプリや機能をオンデマンド配信する(GooglePlayConsoleヘルプ)
https://support.google.com/googleplay/android-developer/answer/9006925


あまりに久しぶりなので色々アップデートしたのが
またなんか動作が変わってる・・・。

DeployGate関連
Gradle SyncでgetPackageApplication()の警告を解決した
https://firespeed.org/diary.php?diary=kenz-1911

コンパイルに失敗したのでjreからjdkに変更
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

というかAndroid App Bundleの対処をする前に動作確認をして
一旦これであげようかなぁ・・・。


GIMPを使ってロゴ消しなどをやりたい場合。

Windowの場合は、以下のサイトに移動してプラグインをダウロードする
https://github.com/pixlsus/registry.gimp.org_static/blob/master/registry.gimp.org/files/Resynthesizer_v1.0-i686.zip

C:\Users\user名\.gimp-2.8\plug-insに
ReadMe以外の解答したファイルを全て移動させる。

消したい部分を少し大きめに囲んだうえで
フィルター → 強調 → Heal selectionを選択し行うと
少し時間がかかるが奇麗な感じに修正してくれる。
ギリギリの大きさで選択すると、変な線が残る場合がある。

軽くしかReadMeを読んでいないのだが、Pythonをあらかじめ入れておく必要があるらしい。
自分は既にPythonを入れているので其処の検証はしていない。


参考サイト
https://github.com/bootchk/resynthesizer
https://github.com/pixlsus/registry.gimp.org_static/blob/master/registry.gimp.org/files/Resynthesizer_v1.0-i686.zip
GIMPで画像の一部を削除する方法!Ver2.10でのスマート消去の使い方
【GIMP】画像の一部をキレイに消す方法


引っ越しとか色々あって凄くこの手のページを開くのが久しぶりすぎる・・・。

ちょっと内職の作業がクソ面倒なのでエクステンションで如何にかできそうなので
前々からやろうやろうと思っていた調査を始めることにした。

目標としては、
・開いているページURLをボタンでコピーできるようにする
・特定の情報をボタンでコピーできるようにする(のちのちは、一部の情報は加工した状態のものをコピーできるようにしたい。)

久しぶりすぎて大分色々忘れているのだが、おそらくDOMの操作をすればいけそう

以下のサイトが進める上で参考になりそう。

Chromeブラウザの拡張機能を作ってみたい初心者向けに開発方法を紹介!【サンプルあり】
https://qiita.com/guru_taka/items/37a90766f4f845e963e5
Extend the Browser(公式ドキュメント)
https://developer.chrome.com/extensions


というかDOMの書き替えは、どちらかというとJavaScriptとかJQueryの領域だわ
普通にボタンの追加とか、要素の取得とかはそっちで行けそうな気がする。

参考サイト
jQueryでDOM操作する際の基本記述を勉強し直してみたよ。
http://programmerbox.com/2013-09-26_jquery_dom_basic_description/

特定のURLのときだけ動かすみたいなことはmanifest.jsonでやるっぽいので
それを踏まえた上で如何にかできそう

何時まで経っても更新しないのはあれなので今日はここまで

2019年5月3日金曜日

2019-02-27、03-01、05-03 到達点メモ


前に作ったプロジェクトを起動してSyncしたところ以下のエラーが出た。

Error:No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

幾つか参考にしたサイトだと、NDKをダウンロードして
足りないファイルを入れよう。という話が出ていたのだが
その肝心のmips64el-linux-androidが無かった。

参考サイト:Android Studio 3.2 でビルドエラー「No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android」が出た時の対処方法
参考サイト:Error:No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android


下記のサイトによると、どうもバージョンが上がるとmips64自体が対応されなくなったようである。恐らくなくなってしまった可能性が高い。

参考サイト:"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android" のコメントより

で、対策に関しては、gradleのバージョンを
 classpath 'com.android.tools.build:gradle:3.3.1'
に上げた後にGradle自体?のバージョンを4.10.1?に上げたところ
エラーが出なくなった。

で、なおしてたらなんか見覚えのあるエラーを見つけた。
Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.11

案の定、以前の日記に同じ現象があった

という訳で前回と同じように以下のように修正した
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"


久しぶりにAdMobを動かしたら、落ちたんだが???
一部のみを抜粋するが、こんなエラー文だった。

02-27 22:12:43.031 28083-28083/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nononagainfo.www.admobtest, PID: 28083
    java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException: 
    
    ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions here: https://goo.gl/fQ2neu to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: https://goo.gl/h17b6x.                           *
    ******************************************************************************
    
    
        at android.app.ActivityThread.installProvider(ActivityThread.java:5921)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5510)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5449)
        at android.app.ActivityThread.-wrap3(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1587)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6184)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
     Caused by: java.lang.IllegalStateException: 
    
    ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions here: https://goo.gl/fQ2neu to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: https://goo.gl/h17b6x.                           *
    ******************************************************************************
    
    
        at com.google.android.gms.internal.ads.zzze.attachInfo(Unknown Source)
        at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(Unknown Source)
        at android.app.ActivityThread.installProvider(ActivityThread.java:5918)
        ... 10 more

で、対策を簡単に述べると
AndroidManifest.xmlに以下のようにAdMobのIDを追加する必要があるようである。
<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="[ADMOB_APP_ID]"/>
    </application>
</manifest>

更に言うと、 Google Mobile Ads SDK バージョン 17.0.0 でこの対策をしないと
クラッシュするようである

参考サイト:スタートガイド - AndroidManifest.xml を更新する


ruby

evalは文字列をコードとして実行することができる
例:
puts eval "1+2"


javascript

puppeteerで特定のサイトを開いたらチェックボックスにチェックを入れるといった事をしたかった。
なので、以下のように書いた

const puppeteer = require ('puppeteer');
(async () => {
  const browser = await puppeteer.launch ({
    headless: false,
    defaultViewport: {
      width: 1366,
      height: 728,
    },
  });
  const page = await browser.newPage ();
  var linkAdders = 'https://www.nononagainfo.com/';
  await page.goto (linkAdders, {waitUntil: 'domcontentloaded'});
  await page.click ('#test_test_testID');
  await page.waitFor (100);

  const page2 = await browser.newPage ();
  var linkAdders2 = 'https://play.google.com/store/apps/details?id=com.aaa.nononaga.voicetimerr';
  await page2.goto (linkAdders2, {waitUntil: 'domcontentloaded'});
  await page2.waitFor (100);

  const page3 = await browser.newPage ();
  var linkAdders3 ='https://www.nononagainfo.com/p/blog-page_1.html';
  await page3.goto (linkAdders3, {waitUntil: 'domcontentloaded'});
  await page3.waitFor (100);
}) ();

・ヘッドレスモードとは、CUIのみで処理を行う事。
つまり、普通にGUIとして使いたい(ブラウザを表示したい)場合は、launchメソッドで
headless: falseを入れてあげればよい。
・デフォルトだと表示画面が小さいのでlaunchメソッドでdefaultViewport: {}の値を指定する必要がある
・executablePathで、起動するデフォルトchromeをしているすることができるが
その際の注意として、/(バックスラッシュ)は、一つではなく二つ指定する必要がある。
例:'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'
・チェックボックスに関しては、clickメソッドに対象のIDを指定すればチェックボックスにチェックが入る。
・複数のタブを作りたい場合は、browser.newPage ();を新しく作ればよい

参考サイト:Puppeteer で Headless Chromeを操ってE2Eテストする(予定) - 入力・操作編
参考サイト:Puppeteerでスクレイピング

ただ、一つ問題があってキャッシュを保持したかったのだが
(元々の目的から考えるに当たり前なのだが)保持することは出来なかった。

なんか、操作できる良いやつってなんかあったっけ・・・?


気が付いたら、二ヶ月もたってたわ・・・。

RubyのStringのdeleteの仕様について

以下のコードを書くとどういう結果になると思いますか?

puts "chochoc".delete("ch")

理想
ooc

現実
oo

deleteはどうも一文字ずつを削除する仕様の様で
二文字だけを消したい場合はこの書き方ではできない
どう実装するかというとgsubを使う

puts "chochoc".gsub(/ch/,"")

以上。


2019年2月27日水曜日

2019-02-11、12、15、25、27 到達点メモ


コマンドプロンプト

入力を受け付ける
set /p testdata=

値を代入する
echo %testdata%

参考サイト:バッチファイルでよく使う書き方まとめ


Node.js

コマンドプロンプトから入力した値を使いたい。
例えば以下のように入力した場合、testdataという文字列を使いたいとします
node index.js testdata

この場合、index.js上では以下のように指定する必要があります
var data = process.argv[2];

参考サイト:Node.jsでコマンドライン引数を取得する


ruby

downto
大きい順から特定の値まで一づつカウントダウンする
大きい値から調べたい時は便利。

String[0,x]
左がインデックス番号で、右が文字数。

計算の順番

a=1
b=5
puts a+b > 9 ? "Fin" : a+b

で10以上の時はFinと表示するもしくは、10未満の時は
aとbの合計結果を出したいとする

その際に、毎回a+bって書くのが嫌ので
これを一行に纏めようとした。

a=1
b=5
puts result = a+b > 9 ? "Fin" : result

例えば、上記のように書くと、結果は空になる。
計算の順番的に代入は後になっているものと思われる。
そこで以下のように書けば、ちゃんと合計結果が出る

a=1
b=5
puts (result = a+b) > 9 ? "Fin" : result

正直な所、競技プログラミング以外でこのように一行で書く意味はあまりないと思うが
やり方として覚えておくとよいと思う。

重複の削除の仕方

処理速度の問題は置いておくとして
結果だけ見れば配列の重複したものを削除したい場合
s="testcase".to_a
s.uniq と s | [] と s|s
は全部同じ結果になる

[n..m]と[n...m]の違い

[n..m]
ピリオド二つの奴は、n番目からm番目という意味

[n...m]
ピリオド三つの奴は、n番目からm-1番目という意味。つまり、m番目を含まない

[n..(m-1)]ってやるよりは見た目的には奇麗だが
見逃しが起きそうではある。

参考サイト
[] (Array)

検証してみた話。

rubyで配列のユニークな奴を取りたい場合は
array.uniq か array|[]のどちらかを使えばよいのだが
結局どちらが早いのだろうか?
と思ったので、以下の条件でテストしてみた。
・文字列は1000文字で、AからCのランダムな文字が入る
・同じ文字列を一万回重複削除し、そのタイムを取得する
・100個のタイムを取得し、最大値、最小値、平均値を求める

以下が実際に検証したコードである

valueRandom = Random.new(1024)
alphabet=("A".."Z").to_a
moji = 1000.times.map{alphabet[valueRandom.rand(3)]}

uniqTimes = []
100.times do
    stratTime = Time.now.to_r
    10000.times.map{moji|[]}
    endTime = Time.now.to_r
    uniqTimes << endTime - stratTime
end
puts "array|[]"
puts "FastTime:#{uniqTimes.min.to_f}"
puts "SlowTime:#{uniqTimes.max.to_f}"
puts "AverageTime:#{(uniqTimes.inject(:+)/100).to_f}"

uniqTimes = []
100.times do
    stratTime = Time.now.to_r
    10000.times.map{moji.uniq}
    endTime = Time.now.to_r
    uniqTimes << endTime - stratTime
end
puts "array.uniq"
puts "FastTime:#{uniqTimes.min.to_f}"
puts "SlowTime:#{uniqTimes.max.to_f}"
puts "AverageTime:#{(uniqTimes.inject(:+)/100).to_f}"


結果は以下のようになった。

array|[]
FastTime:0.525499
SlowTime:0.669585
AverageTime:0.55385082

array.uniq
FastTime:0.524965
SlowTime:0.602402
AverageTime:0.55188603

ある意味分かり切った事ではあったが
正直誤差の範囲内だと思う。

今回は、uniqの方が早いが処理順番が逆だった時は
array|[]の方が早かったのでもっと回数をこなすとまた違う結果が出るのかもしれない。

ただ、単純に重複削除をするのであれば
分かりやすいuniqが一番無難なのでは?と思った。

2019年2月8日金曜日

2019-01-30、02-01、02-07、02-08 到達点メモ


AtCoderのRubyでのB - Minesweeperのネタバレあり。


何故か2019/1/30にイスラエルから700くらいアクセスがあった。
普段10くらいしかないのに、一体何があったし・・・。
ざっと調べてみたが、何か事件があった訳ではないようだ。
VoiceTimerでググってみたが、何か特別なことがあった訳でないようだし・・・。
本当に謎だ。

Android

エミュレーターで720dpの画面のテストをしたい場合
xlargeが720dp

Node.js

ワンクリックで特定のサイト群を一括起動する機能が作りたかったので作った。
運用していくと色々やりたいことが出てきそうだが、
ひとまずはnpmのライブラリにあるopenerで十分実現できる
var opener = require ('opener');

opener ('chrome');
opener ('http://yahoo.co.jp);
opener ('http://google.com');
opener ('https://www.nononagainfo.com/');

上記の通りにやるとタブが増える感じで
起動することができる。
他のブラウザを立ち上げていると特に立ち上げたいものが多い場合だと
そっちにが立ち上がる時があるので注意。
やり方がなかなか見つからなかったから
案外難しいのかと思ったが凄く簡単だった。

参考サイト:openerを使ってnpmスクリプトからブラウザを開いてみる
参考サイト:opener
参考サイト:npm script を試す (サンプル付き忘備録)

AtCoder Ruby

B - Minesweeper
動作が上手く行かない時の検証の仕方が凄く下手だ。
今回の問題は文字列の中に含まれる"."が、0の時になることがありえるので
本来は、"#"で検索をかける前に、"."を全て0に変換する必要があるのだが
それを最初にやらなかった為、出力結果が本来加算されるべきところで加算されていなかった。

最初に変換をやっとけと言われてしまえばそれまでなのだが
そもそも変換がきちんと行われていないということに気づくのが遅すぎた。
デバッグの仕方が悪いのはわかるのだが、具体的にどう理屈をつけてやればいいんだろう?

いや、そもそもPrintデバックから卒業する時なんだと思う。
と、下のサイトを見て思いました。
printデバッグにさようなら!Ruby初心者のためのByebugチュートリアル

あと、メモとして書いておくが
事前に0の数値の配列を作っておくという手法は盲点だった。
確かにそれをやったほうが速そうではある。

rubyだと nil || "AAA" だと "AAA"が採用されるようである

具体例

puts nil || "BBB"
結果はBBB

puts "AAA" || "BBB"
結果はAAA


2019年1月29日火曜日

タスクバーの音量調節アイコンがクリックしても反応しない時でも音量調節をする方法


Windows + R → sndvolを入力して実行

これで別の音量調節のウィンドウが立ち上がるので、それで調節する。

◆他の対処法1
タスクバーの日付の部分を右クリックして
タスクバーの設定から通知領域のタスクバーに表示するアイコンを選択しますをクリック
音量の部分を一度オフにしてオンにすると元に戻ることがあるらしいが前回は戻らなかった。

◆他の対処法2
再起動して戻るときもあるらしいが、前回試したときはそうならなかった。