社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

pyxel ウィンドウ作成

Pyxel (ピクセル) はPython向けのレトロゲームエンジンです。
[pyxel公式](https://github.com/kitao/pyxel/blob/master/README.ja.md)

import pyxel

TILE_SIZE = 8
MAP_WIDTH = 29
MAP_HEIGHT = 23

class Snake:
  def __init__(self):
    pyxel.init( MAP_WIDTH * TILE_SIZE, MAP_HEIGHT * TILE_SIZE, scale=3, fps=20, caption="Snake Game")
    pyxel.run(self.update, self.draw)

  def update(self):
    pass

  def draw(self):
    pass

Snake()

このようなゲームウィンドウ(何も表示されていない)が作成できます。
f:id:blueskyarea:20200620220415p:plain

(自分用) Kotlin Quiz 1

Q1. Kotlinの全てのクラスは共通の ? スーパークラスを持つか ?

Q2. 以下の Derived クラスに明示的に Base クラスでスーパータイプを宣言してください。

open class Base(p: Int)

class Derived(p: Int) ???

Q3. Kotlin内のクラスは、 プライマリコンストラクタ と1つまたは複数の何コンストラクタ を持つことができる ?

Q4. 以下の宣言にプライマリコンストラクタを明示してください。

class Person(firstName: String) {
}

(解答例)
=======================================
A1.
Any スーパークラス
Any は java.lang.Object ではない。

A2.

open class Base(p: Int)

class Derived(p: Int) : Base(p)

A3.
セカンダリコンストラク

A4.

class Person constructor(firstName: String) {
}

View has onTouchListner called on it but doesn’t override performClick (kotlin)

問題
以下のようにある ImageView のインスタンスに対して、setOnTouchListener を実装して画像に対するタッチイベントを実装したところ、動作はするのですが、”View has onTouchListner called on it but doesn’t override performClick” の警告がIDE上で表示されたままになりました。

image.setOnTouchListener { v, event ->
(省略)

対処
performClickをoverrideしないといけないという警告ですが、元の ImageView に対して行うのは大変なので、CustomImageView というクラスを作成して、そこで override してあげるようにします。
2つのコンストラクタもきちんと定義しておかないと、コンパイルエラーになります。

class CustomImageView : AppCompatImageView {
    constructor(ctx: Context) : super(ctx)

    constructor(ctx: Context, attrs: AttributeSet): super(ctx, attrs)

    override fun performClick(): Boolean {
        super.performClick()
        return true
    }
}

レイアウトファイル上で、CustomImageView を使用するように指定します。
パッケージ名+クラス名で指定します。

        <com.itstudy365.lesson.CustomImageView
                android:id="@+id/enemy_image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="40dp"
                android:layout_gravity="center"
                app:srcCompat="@drawable/imagefile"/>

アクティビィティ側において、CustomImageView の型でインスタンスを生成するようにします。

private val image: CustomImageView = this.findViewById(R.id.enemy_image)

以上で警告が表示されなくなりました。

SQLite データの更新

特定のフィールドの数値を1だけインクリメントする更新を行います。
インクリメントの更新であれば、”set フィールド名=フィールド名+増分” で可能です。

データベースヘルパークラス内に、以下のような関数を用意します。
words テーブルの "count_questions" フィールドの値を1だけインクリメントします。

fun updateByCorrectAnswer(id: Int) {
  // Get database connection object
  val db = writableDatabase

  // Statement for update
  val sqlUpdate = "UPDATE words set count_questions = count_questions+1 where _id = ?"
  var stmt = db.compileStatement(sqlUpdate)
  stmt.bindLong(1, id.toLong())
  stmt.executeUpdateDelete()
}

結果、以下のように1つのフィールドの値が0から1に更新されます。
f:id:blueskyarea:20200616224747p:plain

(自分用) Scala Quiz 2

Q1.
Scala で以下のような Any 型をキャストするには ?

val x: Any = 1
val y: Int = ???

Q2.
以下のコレクションを Seq(1,2,3,4,5,6) にするには ?

Seq(Seq(1,2,3), Seq(4), Seq(5, 6))

Q3.
Seq(scala.collection.Seq)とは?

Q4.
ディレクトリ内のファイルを削除するには ?

import scala.reflect.io.Directory
import java.io.File

val directory = new Directory(new File("/share/output/result"))
directory.???

(解答例)
===================================
A1.

val x: Any = 1
val y: Int = x.asInstanceOf[Int]

A2.

Seq(Seq(1,2,3), Seq(4), Seq(5, 6)).flatMap { x => x }

A3.
Iterableのうち順序を持つもの。
全てのcollectionはIterableであるため、順序がある(要素にindexでアクセスできる)コレクションは全てSeqとなる。
※SeqでないコレクションにはMapやSetがある

A4.

import scala.reflect.io.Directory
import java.io.File

val directory = new Directory(new File("/share/output/result"))
directory.deleteRecursively()

(自分用) Java Quiz 1

Q1. Java でプログラムされたライブラリで kuromoji とは何か?

Q2. kuromoji で文章をトークンに分解するクラスは?

Q3. kuromoji でトークンの品詞を返却する Token クラスのメソッドは?

Q4. kuromoji でトークンに分解された単語を返却する Token クラスのメソッドは?

Q5. kuromoji ですべての情報を文字列で返却する Token クラスのメソッドは?

Q6. java.lang.String クラスのメソッドで、以下の中で正規表現が使用できるのは?
replace / replaceAll / replaceFirst

Q7. 以下のエラーが意味することは ?

javax.net.ssl.SSLException: Received fatal alert: protocol_version

(解答例)
===========================================
A1.
Solrに同梱されている形態素解析器。辞書が内包されている。

A2.
Tokenizerクラス

A3.
getPartOfSpeechLevel1
※バージョンにより異なる

A4.
getSurface
※バージョンにより異なる

A5.
getAllFeatures
※バージョンにより異なる

A6.
replaceAll / replaceFirst

A7.
TLS プロトコルのバージョンが一致していない。
Java 1.8では、デフォルトのTLSプロトコルはv1.2で、Java 1.6および1.7では、デフォルトは廃止されたTLS1.0。

(自分用) Scala Quiz 1

Q1. リストの定義方法は ?

val list = ???

Q2. 文字列が特定の文字で開始されているかを確認するには ?

val text = "hoge"
text.???("h")

Q3. 数値から文字列にどのようにキャストする ?

val number = 7
val text = number.???

Q4. scalajava.util.List を foreach にするには ?

Q5. 以下の出力結果は ? (true or false)

val textA = new String("テキスト")
val textB = new String("テキスト")

println(textA == textB)
println(textA.equals(textB))

Q6. Javaでは全てのクラスが Object クラスから派生している。では Scala では?

Q7.
以下のように、ダブルクオーテーション記号を3つつなげた"""で囲んだ文字列を何と呼ぶか?

scala> val greet = """Hello.
     | My name is Tom.
     | I like baseball.
     | """

Q8.
以下の文字列からURL部分を空白に置換するには ?

val greet2 = """Hello.
My name is Tom.
https://xxx.co/CoRLSLA
I like baseball.
"""

Q9.
以下に当てはまるタプルを宣言してください。

val sample: Tuple2[String, Int] = ???

Q10.
以下のエラーの意味は?

error: return outside method definition

(解答例)
===================================
A1.

val list = List(1, 2, 3)

A2.

val text = "hoge"
text.startsWith("h")

A3.

val number = 7
val text = number.toString

A4.
以下のライブラリをインポートすることで、暗黙の型変換が行われる。

import scala.collection.convert.WrapAsScala._

A5.
どちらも true

println(textA == textB) // true
println(textA.equals(textB)) // true

A6.
scala.Any クラス

A7.
生文字リテラルエスケープ文字を持たず、複数行の文字列を記述できる。

A8.

greet2.replaceAll("http[s].*","")

A9.

val sample: Tuple2[String, Int] = ("hoge", 7)

A10.
リターン式 return e は名前付きのエンクロージングメソッドや関数の中でしか使えないという言語仕様。
例えば以下のような定義を行うと、同エラーが発生する。

val hoge = (x: Int) => { return x }