chevron_left

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

cancel
Unknown Region https://plugout.hateblo.jp/

プログラムでハマったエラーとその解決方法についての備忘録メモ

普段はJava、Perl、Swiftメインですが、最近は違う言語を扱うことが多いです。

PlugOut
フォロー
住所
未設定
出身
未設定
ブログ村参加

2022/04/12

arrow_drop_down
  • JSONの末尾のカンマにご用心

    いつも気をつけているのだが、割とうっかりやらかすので戒めのためにメモ。 JSONは元々JavaScriptの記法を元にしたフォーマットだが、実はJavaScript上では許されているがJSONとしては許されていないものがある。 その代表例の一つが末尾のカンマだ。 例えば次はJavaScriptのオブジェクトの例だ。 例: sample1.js let data = {"key": "value",}; ここで"value"の後ろに , が付いているのがお分かりいただけるだろうか。 これはJavaScriptの記法上OKとなる。 ただし以下の場合は例外が発生する。 例: sample2.js l…

  • 【R言語】read.csv()で読み込む際にヘッダにXが付与されるのを防ぐ

    気軽にRStudioを使ってグラフを吐き出そうと思ったら、思わぬところで引っかかったのでメモ。 R言語でCSVファイルを読み込む際にはread.csv()を利用するのが便利だ。 例: demo1.R data <- read.csv('demo.csv', header=TRUE, row.names=1, encoding="UTF-8") 例:demo.csv 商品名,10月,11月,12月 商品A,100,110,120 商品B,110,110,100 商品C,120,100,110 CSVなので分かりにくいけれど、データのイメージとしては以下のような感じ。 数値については月毎の商品の売…

  • 【Java】外部のライブラリ利用時にはコンパイルされたバージョンに気をつけよう

    先日LTSであるJava21がリリースされたJavaについて。 xtech.nikkei.com メジャーバージョンがかなり早い頻度でリリースされるようになってきた一方で、開発者にとってはこんなメッセージで苦しまされることも多いのでは。 例: エラーメッセージ java.lang.IllegalArgumentException: Unsupported class file major version 61 ちなみに上記はgradle由来のもの。 利用しているライブラリのバージョンアップを行いたい場合、現在利用しているJavaのバージョンよりも新しいバージョンのみをサポートしている場合には注…

  • 【HTML】imgタグにはalt, title, figcaptionのどれを設定すべきか

    備忘録がてらメモ。 HTML上で画像の表示には主に [imgタグ] を使用するが、その画像の説明を追加する方法がいくつかある。 それぞれどのような場面で使用すべきかをまとめる。 alt属性 この [alt属性] には [画像が表示されない場合に何が表示されるべきか説明する文章] を設定する。 これは [alternative (代替) ] として定義されているもので、更に画像を認識できない人や状況のために、ページの読み上げツール等でも利用されている要素でもある。 例: [imgタグ] へ [alt属性] を設定 <img src="https://cdn-ak.f.st-hatena.com/…

  • 【Git】core.ignorecaseに気をつけよう

    何回も躓くので備忘録がてらにメモ。 割と理屈は分かっていても、いざ問題に遭遇すると原因だとパッと分からないのが辛いところ。 Gitではデフォルトだと[ファイル名の大文字小文字を無視する設定]になっている。 現在の設定を確認するには、リポジトリ上で以下のコマンドを実行すれば良い。 例: 確認 $ git config core.ignorecase そして [無効にする場合にはfalse] を、逆に [無視を有効にする場合はtrue] を設定すれば良い。 これは [大文字小文字を無視する機能] なので、くれぐれも逆に覚えない様に注意。 例: 設定 $ git config core.ignore…

  • 【Python】pandasでCSVファイルをParquetファイルへ変換する

    備忘録がてらメモ。 最近ビッグデータを扱うプロジェクトでは「Parquet」という列指向フォーマット(カラムナフォーマット)が好まれるようになってきた。 parquet.apache.org Parquetの利点は、なんといってもデータの読み込みの速さとストレージ容量の節約にあるだろう。 今回はPythonのpandasを利用して、CSV形式のファイルを読みこんでParquet形式のファイルに変換する簡単な方法をメモしておく。 今回は、次のようなCSVファイルを用意した。 例: data.csv "id","name","rating","birthday","registered_at" "…

  • 【Java】snappy-javaで生成したsnappy圧縮ファイルが壊れる事象への対処

    備忘録がてら記載。 まず[snappy-java]はJavaでSnappy圧縮を容易に行うためのモジュール。 github.com この[snappy-java]を利用して生成したファイルを別システムに食わせるプログラムを作っていたのだが、受け取るプログラム側で以下のようなエラーに直面した。 [SnappyBlock: RawUncompress failed] これはsnappy圧縮されたデータが正常に解凍できなかったということを意味している。 実は環境によって起きたり起きなかったりするので悩んでいたのだが、ようやく原因を突き止めた。 まずそれを説明するためには[snappy-java]の仕…

  • はてなブログの投稿記事の中から最長のタイトルを探す

    僕の雑記ブログ[DIGITAL COFFEE]の以下の記事で、遊びで実施した手法についてのメモ。 plugout.hatenablog.com はてなブログの投稿記事の中から、最長のタイトルを探す方法。 最初は[はてなブログのAPI]を利用しようと思ったが、ページングが面倒なのと、もっと手っ取り早い方法があったので辞めた。 その方法は、はてなブログの[エクスポート機能]を利用する方法だ。 ※ Linux前提で[cat][grep][sed][awk]を利用します。 まずははてなブログへログインしている前提で、管理画面から[設定 -> 詳細設定 -> 記事のバックアップと製本サービス]へと進む。…

  • Javaでコンパイルしたバージョンを知る

    備忘録がてらメモ。 コンパイルしたJavaのバージョンを知りたい場合は、以下のようにするとスマート。 例: javap -v Demo.class grep "major version" awk '{ print $3 - 44 }' ※ Demo.classは対象のclassファイル

  • 【JavaScript】データ型の落とし穴

    結構ハマっている人がいるので、整理がてらメモ。 JavaScriptでは変数は型を持たないが、値がデータ型を持つ。 例えば以下のプログラムでは、数値(number)が文字列(string)としてキャストされて文字列結合が行われる。 例1: demo1.js let hoge = 128; // number let fuga = 'abc'; // string let result = hoge + fuga; // string console.log(result); // 文字列として [128abc] が出力される 適当に扱っていてもよしなに扱われることが多いが、理解していないと思わ…

  • 「はてなブログ」と「はてなフォトライフ」について

    備忘録がてらにメモ。 「はてなブログ」で記事に画像をアップロードして使用する場合の話。 僕もよくスマートフォンの「はてなブログ」のアプリを利用するのだが、「はてなフォトライフ」がメンテナンス中だとアップロード処理が延々と終わらない事象になる。 このときアプリ側にはメンテナンス中の通知が表示されていないため、回線不調だとかセッション切れを疑ってアタフタすることになってしまいがちなので注意。 P.S. 雑記ブログをやっています。 よかったらこちらも読んでくださいね。 plugout.hatenablog.com

  • 【JavaScript】HTMLCollectionsでArray.prototype.forEach()などを使用する

    備忘録がてら。 ブラウザ上で[document.getElementsByClassName()]等を実行した場合に返却される[HTMLCollections]はArrayのような動きをするが、最低限の機能しか備わっていない。 もし[Array.prototype.forEach()]等を実行したいのであれば、[Array.prototype.forEach.call()]を利用すると実行可能。 ※ Indexed Collectionという規格に沿っていれば利用できるみたい 例:demo1.js Array.prototype.forEach.call(document.getElement…

  • 【Java】[java.math.BigInteger]について

    備忘録がてら。 Javaの[java.math.BigInteger]はlongでも扱えない様な大きな範囲の数値を扱うことができるクラス。 例えばコンストラクタに数値が格納された文字列を渡し、計算させることもできる。 Longの最大値を文字列に変換して与え、1足してみるサンプルは次の通り。 例: Demo1.java import java.math.BigInteger; public class Demo1 { public static void main(String... args) { BigInteger bigInteger = new BigInteger(Long.toSt…

  • 【Java】Lambda式で「ambiguous(あいまい)」になるケースについて

    ちょっとハマったのでメモ。 java.util.Functionやjava.util.ConsumerなどのFunctionalInterfaceなクラスのインスタンスを引数に取るメソッドに対して、Lambda式を与えると「ambiguous(あいまい)」としてコンパイルエラーになるケースが存在する。 例えば以下のクラスはコンパイルエラーになる。 例: Demo1.java import java.util.function.Consumer; import java.util.function.Function; public class Demo { public static void …

  • 【Python】文字列から数値へパースする際の落とし穴

    備忘録がてらメモ。 pythonにおいて文字列→数値へパースする際、使用できる文字はちょっと特殊で全角の「1」なども含まれる。 ただ当たり前だが、それを更に文字列に変換すると半角数字になるので注意。 例: demo.py raw_value = "1" # 全角の「1」を与える value = int(raw_value) # intへ変換 print(str(value)) # 半角の「1」が出力される 結果: demo.py 1 ちなみに余談だが[string.isdigit()]という関数は文字列が数字であるかどうかを返し、今回のような全角の「1」などでもちゃんとTrueを返す。 ただこ…

  • 【kotlin】文字列を日時型へパースするExtension

    ちょっと作ったのでここに記載。 日付関連のパースは、いつもちょっと面倒なのでExtensionを作ってしまった方が楽かなと。 実運用時にはフォーマットを外から与えるのではなく、別に専用のメソッドを作って中で固定して持ってしまった方が楽かもしれない。 ちなみにパースできない場合にはDateTimeParseExceptionを吐くのでご注意を。 (それが嫌ならtry-catchで括って返り値をNull許可にすればOK) StringExtension.kt import java.time.LocalDate import java.time.format.DateTimeFormatter i…

  • 【Java】アクセス修飾子の問題でアクセスできないEnumをリフレクションで取得する

    個人的メモ。 あるライブラリを弄っていて、アクセス修飾子がついていないEnumのインスタンスを引数に要求するメソッドに出くわしたのでこの方法を使った。 (そのメソッド自体はpublicなので、恐らくアクセス修飾子の考慮漏れか修正ミスだとは思う) 例: DemoType.java package secret; enum DemoType { HOGE, FUGA, FOO, BAR } この[DemoType]には修飾子がついていないので、このenumが属している[secret]というパッケージに属しているプログラムからしか参照できない。 (普通に使おうとしてもコンパイルエラーとなる) どうし…

  • 【Java】Lombokの拡張を行う

    Lombokを拡張する方法を探していたのだが、想定していたよりも情報量が少なかったので備忘録がてらここへ記録。 projectlombok.org 結果として、日本語、英語、中国語の技術記事をかき集めることになった。 カスタマイズはjavacのtools.jarを扱うことになるので、ハードルは割と高め。 (javacパッケージの圧倒的なドキュメント不足に苦しむことになるので、基本的には実装済みのコードを漁ることになるはず) ちなみにLombokのv1.18.16(2021/01/11時点での最新版)のビルドにはJava11以降が必要。 一応、以下の手順で一応カスタマイズ自体とJARのビルドが可…

  • 【JavaScript】Infinityへの加算及び減算の挙動について

    何遍Infinityについて書いているんだと言われたら、何も言えないのだけれど(白目) plugout.hateblo.jp plugout.hateblo.jp ゼロ除算自体が一般的にアンチパターンなので、意外と知らない事も多いなと。 今回はInfinityを使って加算及び減算した場合について備忘録がてら記録しておく。 今更ながらInfinityとは∞(無限)という意味で、JavaScriptではあえて指定しない限りは一般的にゼロ除算を行うと得られる値だ。 正の∞と負の∞が存在しており、それぞれ[Number.POSITIVE_INFINITY]と[Number.NEGATIVE_INFIN…

  • 【Java】[java.sql.ResultSet]の落とし穴

    実装的に当たり前といえば当たり前だけれど、知らないとハマりそうな話。 [java.sql.ResultSet]の[ResultSet.getLong()]や[ResultSet.getInt()]は、primitiveな値を返却するように実装されている。 なのでDB上でNULL許可されているようなカラムから情報を取得する場合、もしNULLを期待するような処理を書こうと思っても0Lや0などのprimitiveの初期値になってしまう。 なので、NULLを期待したい場合には以下のように考慮してプログラムを書く必要がある。 例: Demo.java import java.sql.ResultSet;…

  • 【Java】JacksonでのInfinityの扱いについて

    自分の備忘録がてら。 前回、JavaScriptのInfinityのJSONでの扱いについて書いた。 plugout.hateblo.jp 今回はJavaのJackson(com.fasterxml.jackson)だとどうなるのかなと思って試したのを残しておく。 github.com ちなみにInfinityはdoubleやfloatで0除算を行った場合に、その結果として取得される。 よく勘違いされるがJavaで0除算を行うと[java.lang.ArithmeticException]が発生されるというのは正確ではなく、intやlong等では発生するがdoubleやfloatでは発生しない…

  • 【JavaScript】[JSON.stringify()]にInfinityを与えるとnullになる

    自分の備忘録がてら。 [JSON.stringify()]はObjectからJSON文字列を生成する関数だが、結果で一部正確に反映されないものが存在する。 そのうちの一つがInfinityで∞(無限)という意味だ。 JSON文字列上、∞は表現できないためにnullになってしまう。 (尚、InfinityにはNumber.POSITIVE_INFINITYとNumber.NEGATIVE_INFINITYが存在し、単にInfinityとした場合はNumber.POSITIVE_INFINITYと同義になる) plugout.hateblo.jp 例: コンソールで実行1 > JSON.strin…

  • 【JavaScript】指定した文字数のランダムな英数字文字列を生成する

    備忘録がてら。 以下のプログラムは200文字のランダムな英数字文字列を生成する。 例: test.js let length = 200; // わかりやすく代入しているが、直指定すればワンライナーで書ける。 let str = Array.from({"length": length}, (v, k) => k) .map(e => Math.random()) .map(e => e.toString(32)) .map(e => e.substring(2)) .map(e => e[0]) .join(''); console.log(str); // 5vs1p7cs56obf6h6…

  • 【Java】[java.util.Optional]における匿名クラスの扱いに気をつけよう

    Javaの話。 ※ Java8及びJava15にて事象を確認。 以下のプログラム(Test1.java)はコンパイルエラーが発生する。 例: Test1.java import java.util.Optional; public class Test1 { public static void main(String... args) { Object object = Optional.of(new Object(){}) .orElse(new Object()); } } 例: Test1.javaのコンパイルエラー # javac Test.java Test.java:6: err…

  • 【JavaScript】ENUMの仕組みを用意する

    JavaScriptでは[enum]という単語は予約語だけれど、一般的な[enum]、つまりは列挙型の仕組みは用意されていない。 ja.wikipedia.org [JavaScript enum]でGoogle検索をかけると、連想配列を使って擬似的に実現する方法が出てくるけれども、個人的には[定義時の見難さ]と[定義された値を後から書き換えることができてしまう]のが良くないと感じていた。 なので、この機会にその2点をカバーできるように仕組みを整えた。 コード: ENUM.js class ENUM { structure = this.define(); define () { return…

  • 【Perl】便利なハッシュスライスを使いこなそう

    ハッシュスライスを使うと、ハッシュから複数の値を一気に取得したり、一気に代入したりすることができて便利。 取得の場合の例: 例: demo1.pl #!/bin/bash my %data = ('hoge' => 'fuga', 'foo' => 'bar', 'piyo' => 'piyopiyo'); my @values = @data{'hoge', 'foo', 'piyo'}; # 確認用 foreach my $value (@values) { print($value."\n"); } 出力: demo1.pl fuga bar piyopiyo このプログラム[demo1…

  • 【Perl】splitの際にエスケープされているものを含めないようにする

    タイトルの通り。 例えば「,(カンマ)」の場合。 CSVファイルの1行なんかを簡易的に「,(カンマ)」でsplitしたい場合、バックスラッシュなどでエスケープされている物はsplitの対象としたくなかったりする。 その場合はsplitで正規表現を用いて、以下のようにすれば良い。 例: sample.pl #!/bin/perl my $str = "hoge\\,fuga,piyo"; my @array = split(/(?<!\\),/, $str); foreach (@array) { print $_."\n"; } exit; 出力結果: sample.pl hoge\,fuga…

  • 【Java】[Generics]はしっかり設定して[RawType]を防ごう

    [Generics]はしっかり設定して[RawType]を防ごう(大事なことなので2回ry) 以下のプログラムはコンパイルエラーになる。 注: Java8にて確認。 例: Hoge.java import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.stream.Stream; public class Hoge { public static void main(String[] args) { Map map = new HashMap(); Stream.of(map) .…

  • 【Lua × JavaScript】Fengariのメモ

    TypeScriptを弄っていたはずが、いつの間にか楽しくてFengariを弄っていた(?)ので……調べながら試したことのメモ。 fengari.io FengariはJavaScriptで実装されたLuaのVMとのこと。 ブラウザ上でLuaのスクリプトを動かすことができる。 以下は簡単なHello Worldの例 例: index.html <html> <head> <title>Hello World</title> <script src="fengari-web.js" type="text/javascript"></script> </head> <body> <script t…

  • 【MATLAB】nchoosekによる[組み合わせ]の利用

    今回は以前に記事を書いた記事の、MATLAB版。 plugout.hateblo.jp MATLABで[組み合わせ]の処理実装するためには[nchoosek]を利用するのが一番スマート。 jp.mathworks.com 例: Demo1.m data = ["A", "B", "C", "D", "E"]; patterns = nchoosek(data, 3); [m, ~] = size(patterns); for i = 1: m pattern = patterns(i, :); disp(mat2str(pattern)); end 上記コードを実行すると以下が出力される。 >…

  • 【Lua × Java】LuaJのメモ

    LuaJについて、軽く触ったのでメモ。 LuaJは、LuaをJava上で動かせるようにするJavaのライブラリ。 C系だと気軽に使えて重宝するLuaですが、Javaでも使えるとなるとアプリのパッチなどで活躍するかも。 www.luaj.org Javaのプロジェクト内に組み込むのが一番適した使い方だとは思うけれど、気軽に試したければMaven RepositoryからJarをダウンロードしてきてコマンドとして実行すると良いかと。 mvnrepository.com 例: hello.lua print("Hello World!") 実行例: $ java -cp luaj-jse-3.0.1…

  • 【Java】文字列のnullの連結にご注意を

    Javaでのお話。 個人的に知らなかった、文字列の結合の仕様についてメモ。 ずっと以下のコードはNullPointerExceptionになると思い込んでいたのだが、どうやら違う様子。 例: Demo.java public class Demo { public static void main(String[] args) { System.out.println("hoge:" + null); // hoge:nullが出力される } } きちんとnullという文字列として出力される。 なんだかこの挙動はJavaScriptのundefinedに似ているなぁ……なんて。

  • 【Java】Auto-UnboxingでのNullPointerExceptionにご注意を

    Nullに対してAuto-Unboxingが働くと、NullPointerExceptionが発生する。 なのでラッパークラスとプリミティブで比較を行う場合は、思いがけない場所で落とし穴にハマってしまう。 例:Demo1.java public class Demo1 { public static void main(String[] args) { long hoge = 128L; Long fuga = null; System.out.println(hoge == fuga); // NulPointerExceptionが発生する } } 少しでもnullが入る可能性があるのであ…

  • 【Python】OpenCVのVideoWriterの落とし穴

    動画の出力処理を作成していてハマったので備忘録としてメモ。 OpenCVのVideoWriter()を使って動画ファイルを吐き出した時、その動画がプレイヤーで再生できないというトラブルに陥った。 docs.opencv.org 原因としてはコーデックの問題などたくさん考えられたが、今回のケースは結論から言うとVideoWriter()のコンストラクタで指定する[isColor=True]が問題だった。 この[isColor]を省略するとTrueが与えられる様になっているのだが、この変数の意味するところはTrueであれば(正確には偽でなければ)エンコードの際に色情報を期待して色々と吐き出し処理を…

  • 【Lua】tobooleanを実装する

    Luaには[tonumber]という値を数値に変換してくれる関数や[tostring]という値を文字列に変換してくれる関数がデフォルトで存在する しかし[toboolean]の様な、値を[boolean]に変換してくれる関数はデフォルトでは存在しない。 [boolean]という真偽値を表す型が存在するにも関わらずだ。 (ちなみLuaでは[booleanのfalse]と[nil]が偽として扱われ、それ以外の値は全て真となる) 無いならば作るしかない。 ということで、以下の様なコードを作成した。 例: demo.lua #!/usr/local/bin/lua function toboolean…

  • 【Python】カメラなどで撮影したノイズ混じりの線画を綺麗な白黒に加工する【OpenCV】

    本当は別で動画加工をするためにプログラムを作成していたのだが、たまたま別の用途に使用できそうな副産物のプログラムが出来上がったので備忘録として残す。 カメラで撮影した様なノイズ混じりの線画を、パソコン上で彩色しやすい様にはっきりとした白黒に変換するためのプログラムを作成した。 ちなみに使用するのはOpenCVなので「opencv-python」をpipなどでインストールして使える状態にする必要がある。 pip install opencv-python ちなみにOpenCVというのは画像処理や画像解析のためのライブラリ。 今回はこれのバージョン4.X系を使用する。 (4.Xとそれ以前では、引数…

  • 【Java】Optional.orElse()の落とし穴

    またしょーもない所で詰まったので備忘録がてらにメモ。 以下のプログラムで[hoge]内の[fuga]には何が代入されているかという問題。 例: Sample1.java package test; import java.util.Optional; public class Sample1 { public static void main(String[] args) { Hoge hoge = new Hoge(); Optional.of(hoge).orElse(hoge.withFuga("bar")); System.out.print(hoge.getFuga()); } pu…

  • 【Java】StreamやOptionalにおけるfilter()でのメソッド参照で、スマートに否定の条件式を指定する

    ※ 2019/12/23追記 コードの表記が崩れているご指摘を頂き、該当箇所を修正致しました。 ありがとうございます。 備忘録がてらメモ。 概ね実現したいのはタイトルの通り。 Java8から登場したStreamAPIの[Stream.filter()]は、条件に一致する要素だけをフィルタリングしてくれるとても便利なメソッドだ。 例: Demo1.java package test; import java.util.Arrays; public class Demo1 { public static void main(String[] args) { Arrays.asList("hoge"…

arrow_drop_down

ブログリーダー」を活用して、PlugOutさんをフォローしませんか?

ハンドル名
PlugOutさん
ブログタイトル
Unknown Region
フォロー
Unknown Region

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

商用