別に, 英単語でもなくてもいいけども.
テキストでの
「問題」と「解答」
のペアを覚える方法.

昔ながらの「書いて覚える」という方法とともに
「カード」を使った方法も効率的だろうと思います.
いまどきは, だれもがスマホを持ってる時代.
スマホは 世界中で喋られてる言語をある程度流暢に喋ることができますよね.
そんなスマホをつかって, 目だけでなく, 耳も使って効率的に
「音声付きカード」スタイルで単語を覚えていく方法をば.
別に, 英単語でもなくてもいいけども.
テキストでの
「問題」と「解答」
のペアを覚える方法.

昔ながらの「書いて覚える」という方法とともに
「カード」を使った方法も効率的だろうと思います.
いまどきは, だれもがスマホを持ってる時代.
スマホは 世界中で喋られてる言語をある程度流暢に喋ることができますよね.
そんなスマホをつかって, 目だけでなく, 耳も使って効率的に
「音声付きカード」スタイルで単語を覚えていく方法をば.

Jarとかclassファイルをデコンパイルしてくれるやつ。
brew tap homebrew/binary
brew install jad
さらっと, 眺めて jad いれてみようと,
~ $ jad -bash: jad: command not found ~ $ brew search jad homebrew/binary/jad ~ $ brew install jad Error: No available formula for jad Searching taps... homebrew/binary/jad ~ $ jad -bash: jad: command not found
ん, tap するのか.
~ $ brew tap homebrew/binary Cloning into '/usr/local/Library/Taps/homebrew/homebrew-binary'... remote: Reusing existing pack: 137, done. remote: Total 137 (delta 0), reused 0 (delta 0) Receiving objects: 100% (137/137), 21.78 KiB | 0 bytes/s, done. Resolving deltas: 100% (63/63), done. Checking connectivity... done. Tapped 13 formula ~ $ brew install jad Downloading http://www.varaneckas.com/jad/jad158g.mac.intel.zip ==> Downloading http://www.varaneckas.com/jad/jad158g.mac.intel.zip ######################################################################## 100.0% /usr/local/Cellar/jad/1.5.8g: 4 files, 456K, built in 5 second > ~ $ ja > Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov ([email protected]) > Usage: jad [option(s)] <filename(s)> > Options: -a - generate JVM instructions as comments (annotate > -af - output fully qualified names when annotatin > -b - generate redundant braces (braces > -clear - clear all prefixes, including the default one > -d <dir> - directory for output file > -dead - try to decompile dead parts of code (if there are any > -dis - disassembler only (disassembler > -f - generate fully qualified names (fullnames > -ff - output fields before methods (fieldsfirst > -i - print default initializers for fields (definits > -l<num> - split strings into pieces of max <num> chars (splitstr > -lnc - output original line numbers as comments (lnc > -lradix<num>- display long integers using the specified radi > -nl - split strings on newline characters (splitstr > -noconv - don't convert Java identifiers into valid ones (noconv > -nocast - don't generate auxiliary cast > -noclass - don't convert .class operator > -nocode - don't generate the source code for method > -noctor - suppress the empty constructor > -nodos - turn off check for class files written in DOS mod > -nofd - don't disambiguate fields with the same names (nofldis > -noinner - turn off the support of inner classe > -nolvt - ignore Local Variable Table entries (nolvt > -nonlb - don't insert a newline before opening brace (nonlb > -o - overwrite output files without confirmatio > -p - send all output to STDOUT (for piping > -pa <pfx>- prefix for all packages in generated source file > -pc <pfx>- prefix for classes with numerical names (default: _cls > -pe <pfx>- prefix for unused exception names (default: _ex > -pf <pfx>- prefix for fields with numerical names (default: _fld > -pi<num> - pack imports into one line using .* (packimports > -pl <pfx>- prefix for locals with numerical names (default: _lcl > -pm <pfx>- prefix for methods with numerical names (default: _mth > -pp <pfx>- prefix for method parms with numerical names (default:_prm > -pv<num> - pack fields with the same types into one line (packfields > -r - restore package directory structur > -radix<num>- display integers using the specified radix (8, 10, or 16 > -s <ext> - output file extension (default: .jad > -safe - generate additional casts to disambiguate methods/field > -space - output space between keyword (if, while, etc) and expressio > -stat - show the total number of processed classes/methods/field > -t<num> - use <num> spaces for indentation (default: 4 > -t - use tabs instead of spaces for indentatio > -v - show method names while decompiling
入れることはできたけど, 「brew tap」てなにをしてるのだろう.
しれっと機能追加されてたのか,
いや, 気付かなかっただけのか.
上部メニュー[Help]から[Search]に設定したい単語を入力すると,
その下に関係する設定項目がプルダウンなかんじでサジェストされるのですが,
そのサジェスト項目を選択すると,
上部のメニューそれぞれが自動でビロ~ンとプルダウンされて,
どこからその設定画面に行けるのか分かりやすくなってる.
例)「import」関連の設定項目を探したい場合

設定項目が多くて行ったり来たりして, めんどくさかった設定変更が
素早く移動できて設定の試行錯誤したいとき便利になってます.という話.
以下, 「Find Action」と併用すればさらに便利になるでしょう.
こんな風にアプリをシステム系レイヤにのせて
他のアプリ上に常駐表示させることができる
Android 向け SDK が無料で公開されている.
[APP][2.2+] Tooleap - The Multitasking SDK - xda-developers
Androidアプリでフローティング型のUIを実現できるソフトウェア開発キット「Tooleap SDK」がリリース | juggly.cn

開発者向けページもしっかりある.

フローティングできるフレームなライブラリを構成するクラス群は,
公式の Android SDK に近いレベルで構成している模様.

com.tooleap.sdk Class Hierarchy (Tooleap SDK)
だが, しかし, 無料とはいえ,

adb コマンドがめんどくさい場合は
コマンドを補完(completion)してもらいましょう.
何が補完できるか.
・オプション
・サブコマンド
・デバイスにインストールしているパッケージ名
・ローカル/リモートファイル名
・パソコンに接続しているデバイスシリアル名
...
# /* vim: set ai ts=4 ft=sh: */
#
# Copyright 2011, The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
_adb() {
unset -v have
type $1 &> /dev/null && have="yes"
if [ "$have" != "yes" ]; then
return
fi
local where i cur serial
COMPREPLY=()
serial="${ANDROID_SERIAL:-none}"
where=OPTIONS
for ((i=1; i <= COMP_CWORD; i++)); do
cur="${COMP_WORDS[i]}"
case "${cur}" in
-s)
where=OPT_SERIAL
;;
-p)
where=OPT_PATH
;;
-*)
where=OPTIONS
;;
*)
if [[ $where == OPT_SERIAL ]]; then
where=OPT_SERIAL_ARG
elif [[ $where == OPT_SERIAL_ARG ]]; then
serial=${cur}
where=OPTIONS
else
where=COMMAND
break
fi
;;
esac
done
if [[ $where == COMMAND && $i -ge $COMP_CWORD ]]; then
where=OPTIONS
fi
OPTIONS="-d -e -s -p"
COMMAND="devices connect disconnect push pull sync shell emu logcat lolcat forward jdwp install uninstall bugreport help version start-server kill-server get-state get-serialno status-window remount reboot reboot-bootloader root usb tcpip"
case $where in
OPTIONS|OPT_SERIAL|OPT_PATH)
COMPREPLY=( $(compgen -W "$OPTIONS $COMMAND" -- "$cur") )
;;
OPT_SERIAL_ARG)
local devices=$(command adb devices 2> /dev/null | grep -v "List of devices" | awk '{ print $1 }')
COMPREPLY=( $(compgen -W "${devices}" -- ${cur}) )
;;
COMMAND)
if [[ $i -eq $COMP_CWORD ]]; then
COMPREPLY=( $(compgen -W "$COMMAND" -- "$cur") )
else
i=$((i+1))
case "${cur}" in
install)
_adb_cmd_install "$serial" $i
;;
pull)
_adb_cmd_pull "$serial" $i
;;
push)
_adb_cmd_push "$serial" $i
;;
reboot)
if [[ $COMP_CWORD == $i ]]; then
args="bootloader recovery"
COMPREPLY=( $(compgen -W "${args}" -- "${COMP_WORDS[i]}") )
fi
;;
shell)
_adb_cmd_shell "$serial" $i
;;
uninstall)
_adb_cmd_uninstall "$serial" $i
;;
esac
fi
;;
esac
return 0
}
_adb_cmd_install() {
local serial i cur where
serial=$1
i=$2
where=OPTIONS
for ((; i <= COMP_CWORD; i++)); do
cur="${COMP_WORDS[i]}"
case "${cur}" in
-*)
where=OPTIONS
;;
*)
where=FILE
break
;;
esac
done
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $where == OPTIONS ]]; then
COMPREPLY=( $(compgen -W "-l -r -s" -- "${cur}") )
return
fi
_adb_util_complete_local_file "${cur}" '!*.apk'
}
_adb_cmd_push() {
local serial IFS=$'\n' i cur
serial=$1
i=$2
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $COMP_CWORD == $i ]]; then
_adb_util_complete_local_file "${cur}"
elif [[ $COMP_CWORD == $(($i+1)) ]]; then
if [ "${cur}" == "" ]; then
cur="/"
fi
_adb_util_list_files $serial "${cur}"
fi
}
_adb_cmd_pull() {
local serial IFS=$'\n' i cur
serial=$1
i=$2
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $COMP_CWORD == $i ]]; then
if [ "${cur}" == "" ]; then
cur="/"
fi
_adb_util_list_files $serial "${cur}"
elif [[ $COMP_CWORD == $(($i+1)) ]]; then
_adb_util_complete_local_file "${cur}"
fi
}
_adb_cmd_shell() {
local serial IFS=$'\n' i cur
local -a args
serial=$1
i=$2
cur="${COMP_WORDS[i]}"
if [ "$serial" != "none" ]; then
args=(-s $serial)
fi
if [[ $i -eq $COMP_CWORD && ${cur:0:1} != "/" ]]; then
paths=$(command adb ${args[@]} shell echo '$'PATH 2> /dev/null | tr -d '\r' | tr : '\n')
COMMAND=$(command adb ${args[@]} shell ls $paths '2>' /dev/null | tr -d '\r' | {
while read -r tmp; do
command=${tmp##*/}
printf '%s\n' "$command"
done
})
COMPREPLY=( $(compgen -W "$COMMAND" -- "$cur") )
return 0
fi
i=$((i+1))
case "$cur" in
ls)
_adb_shell_ls $serial $i
;;
/*)
_adb_util_list_files $serial "$cur"
;;
*)
COMPREPLY=( )
;;
esac
return 0
}
_adb_cmd_uninstall() {
local serial i where cur packages
serial=$1
i=$2
if [ "$serial" != "none" ]; then
args=(-s $serial)
fi
where=OPTIONS
for ((; i <= COMP_CWORD; i++)); do
cur="${COMP_WORDS[i]}"
case "${cur}" in
-*)
where=OPTIONS
;;
*)
where=FILE
break
;;
esac
done
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $where == OPTIONS ]]; then
COMPREPLY=( $(compgen -W "-k" -- "${cur}") )
fi
packages="$(
command adb ${args[@]} shell pm list packages '2>' /dev/null 2> /dev/null | tr -d '\r' | {
while read -r tmp; do
local package=${tmp#package:}
echo -n "${package} "
done
}
)"
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${packages}" -- "${cur}") )
}
_adb_shell_ls() {
local serial i cur file
local -a args
serial=$1
i=$2
if [ "$serial" != "none" ]; then
args=(-s $serial)
fi
where=OPTIONS
for ((; i <= COMP_CWORD; i++)); do
cur="${COMP_WORDS[i]}"
case "${cur}" in
-*)
where=OPTIONS
;;
*)
where=FILE
break
;;
esac
done
file="${COMP_WORDS[COMP_CWORD]}"
if [[ ${file} == "" ]]; then
file="/"
fi
case $where in
OPTIONS)
COMPREPLY=( $(compgen -W "$OPTIONS" -- "$cur") )
_adb_util_list_files $serial "$file"
;;
FILE)
_adb_util_list_files $serial "$file"
;;
esac
return 0
}
_adb_util_list_files() {
local serial dir IFS=$'\n'
local -a toks
local -a args
serial="$1"
file="$2"
if [ "$serial" != "none" ]; then
args=(-s $serial)
fi
toks=( ${toks[@]-} $(
command adb ${args[@]} shell ls -dF ${file}"*" '2>' /dev/null 2> /dev/null | tr -d '\r' | {
while read -r tmp; do
filetype=${tmp%% *}
filename=${tmp:${#filetype}+1}
if [[ ${filetype:${#filetype}-1:1} == d ]]; then
printf '%s/\n' "$filename"
else
printf '%s\n' "$filename"
fi
done
}
))
# Since we're probably doing file completion here, don't add a space after.
if [[ $(type -t compopt) = "builtin" ]]; then
compopt -o nospace
fi
COMPREPLY=( ${COMPREPLY[@]:-} "${toks[@]}" )
}
_adb_util_complete_local_file()
{
local file xspec i j
local -a dirs files
file=$1
xspec=$2
# Since we're probably doing file completion here, don't add a space after.
if [[ $(type -t compopt) = "builtin" ]]; then
compopt -o plusdirs
if [[ "${xspec}" == "" ]]; then
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -f -- "${cur}") )
else
compopt +o filenames
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -f -X "${xspec}" -- "${cur}") )
fi
else
# Work-around for shells with no compopt
dirs=( $(compgen -d -- "${cur}" ) )
if [[ "${xspec}" == "" ]]; then
files=( ${COMPREPLY[@]:-} $(compgen -f -- "${cur}") )
else
files=( ${COMPREPLY[@]:-} $(compgen -f -X "${xspec}" -- "${cur}") )
fi
COMPREPLY=( $(
for i in "${files[@]}"; do
local skip=
for j in "${dirs[@]}"; do
if [[ $i == $j ]]; then
skip=1
break
fi
done
[[ -n $skip ]] || printf "%s\n" "$i"
done
))
COMPREPLY=( ${COMPREPLY[@]:-} $(
for i in "${dirs[@]}"; do
printf "%s/\n" "$i"
done
))
fi
}
if [[ $(type -t compopt) = "builtin" ]]; then
complete -F _adb adb
else
complete -o nospace -F _adb adb
fi
Cross Reference: /sdk/bash_completion/adb.bash
以下のようなコンソール出力になります.
「adb」と文字を入力したあとのひとつスペースに注意しながらの
~ $ adb <TAB> -d devices help pull shell usb -e disconnect install push start-server version -p emu jdwp reboot status-window -s forward kill-server reboot-bootloader sync bugreport get-serialno logcat remount tcpip connect get-state lolcat root uninstall ~ $ adb -<TAB> -d -e -p -s ~ $ adb -s 01f9739f4fd1471c 192.168.10.101:5555 ~ $ adb push a.apk /<TAB> /acct/ /dev/ /init.environ.rc /mnt/ /sdcard/ /ueventd.rc /cache/ /etc/ /init.mako.rc /persist/ /seapp_contexts /vendor/ /charger /file_contexts /init.mako.usb.rc /proc/ /sepolicy /config/ /firmware/ /init.rc /property_contexts /storage/ /d/ /fstab.mako /init.superuser.rc /res/ /sys/ /data/ /init /init.trace.rc /root/ /system/ /default.prop /init.cm.rc /init.usb.rc /sbin/ /ueventd.mako.rc ~ $ adb uninstall <TAB> Display all 217 possibilities? (y or n) android com.facebook.orca com.adamrocker.android.input.simeji com.facebook.pages.app com.adobe.flashplayer com.farproc.wifi.analyzer com.adobe.reader com.gmail.jp.raziko.radiko com.alensw.PicFolder com.google.android.apps.adm com.amazon.mp3 com.google.android.apps.ads.publisher com.americanexpress.android.acctsvcs.japan com.google.android.apps.authenticator2 com.andrew.apollo com.google.android.apps.books com.android.apps.tag com.google.android.apps.chromecast.app
特に, ローカル/リモートディレクトリの補完が快適です.
そんな bash の 補完(completion)なスクリプトは他にもいろいろ見つかります.
android-completion/android at master · mbrubeck/android-completion · GitHub
metasystem/modules/android/shell/bash-completion.sh at master · garethstockwell/metasystem · GitHub
adb - romannurik-code - Roman's miscellaneous sample code - Google Project Hosting
お試しあれ.