list view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/textView2"
        android:layout_weight="0.08" />
</LinearLayout>

rss parse

package com.capital.anew;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Handler handler;
    private final String RSS_URL = "http://m-shige1979.hatenablog.com/rss";
    private TextView text1;
    private String RssText;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        handler = new Handler();
        setContentView(R.layout.activity_main);
        text1 = (TextView)findViewById(R.id.textview1);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){

        MenuItem item1 = menu.add("UPDATE");
        item1.setIcon(android.R.drawable.ic_menu_upload);

        item1.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
            @Override
            public boolean onMenuItemClick(MenuItem item){

                Thread thread1 = new Thread(){
                    @Override
                    public void run(){
                        try {
                            RssText = RssParse.getRss(MainActivity.this, RSS_URL);

                            handler.post(new Runnable(){
                                @Override
                                public void run(){
                                    text1.setText(RssText);
                                    Toast.makeText(MainActivity.this, "読み込み終了", Toast.LENGTH_SHORT).show();

                                }
                            });
                        } catch (Exception e){
                            Log.d("sample", e.getMessage());
                        }
                    }
                };
                thread1.start();
                return false;
            }
        });

        item1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        int id = item.getItemId();

        if(id == R.id.action_settings){
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}

package com.capital.anew;

import android.content.Context;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class parse {
public static String getRss(Context context, String url)
throws IOException {

StringBuilder sb = new StringBuilder();

AndroidHttpClient client = AndroidHttpClient.newInstance(“TEST”);
HttpGet get = new HttpGet(url);

try {
HttpResponse response = client.execute(get);

BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = null;
while((line = br.readLine()) != null){
sb.append(line);
}
} finally {
client.close();
}
return sb.toString();
}
}
[/code]

android unresolved dependencies error when creating a new project

エラーログに記載のdependenciesを修正する

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

Gradle Build Runningがやけに時間がかかる。

そもそもandroid sdkとは?
Android SDK【Android Software Development Kit】
Android OSを搭載したスマートフォンやタブレット端末で動作するプログラムを開発するために必要なソフトウェアをひとまとめにしたパッケージで、コンパイラやデバッガ、ライブラリ、デバイスドライバ、ドキュメント、サンプルコード、パソコン上で端末を再現するエミュレータなどで構成される。

constraint-layout:1.1.2を1.1.0にしたらエラーが消えた。1.1.2は新しいversionだから、新しすぎると駄目なのか。Gradle build finished. 謎だ。

implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'

classとidの違い

■class:
「種別名を割り当てる」
→ 同じclass名を、1ページ中に何度でも使える。

■id:
「固有の名前を割り当てる」
→ 同じid名は、1ページ中に1度しか使えない。

<!-- .content#title -->
<!-- /.content#title -->

centosでgrepする

まず、vagrantにログインして、適当にディレクトリを作ります。

[vagrant@localhost ~]$ mkdir grep
[vagrant@localhost ~]$ cd grep
[vagrant@localhost grep]$ git version
git version 2.2.1

git hubから適当に機械学習のコードをgit cloneしてきます。

[vagrant@localhost grep]$ git clone https://github.com/nyk510/machine-learning.git
Cloning into 'machine-learning'...
remote: Counting objects: 112, done.
Receiving objects: 100% (112/112), 2.49 MiB | 673.00 KiB/s, done.
remote: Total 112 (delta 0), reused 0 (delta 0), pack-reused 112
Resolving deltas: 100% (55/55), done.
[vagrant@localhost grep]$ ls
machine-learning
[vagrant@localhost machine-learning]$ ls
black_scholes.py  figures  gibbs_sampling.py  prml  readme.md  requirements.txt

では、適当にblack_scholes.pyでSIGMAが使われている箇所を抜き出しています。

[vagrant@localhost machine-learning]$ grep SIGMA black_scholes.py
SIGMA = 0.30
d = -(np.math.log(S_0 / K) + ((r - SIGMA * SIGMA / 2.) * T)) / (SIGMA * np.power(T, 0.5))
V_c = S_0 * stats.norm.cdf(-d + SIGMA * np.power(T, .5)) - K * np.exp(-r * T) * stats.norm.cdf(-d)
V_p = K * np.exp(-r * (T - t)) * stats.norm.cdf(d) - S_0 * stats.norm.cdf(d - SIGMA * np.power(T - t, 0.5))
    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.power(T, 0.5))
    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.power(T, 0.5))

行番号をつけたい時は grepに -nをつける

[vagrant@localhost machine-learning]$ grep -n SIGMA black_scholes.py
18:SIGMA = 0.30
22:d = -(np.math.log(S_0 / K) + ((r - SIGMA * SIGMA / 2.) * T)) / (SIGMA * np.po      wer(T, 0.5))
23:V_c = S_0 * stats.norm.cdf(-d + SIGMA * np.power(T, .5)) - K * np.exp(-r * T)       * stats.norm.cdf(-d)
24:V_p = K * np.exp(-r * (T - t)) * stats.norm.cdf(d) - S_0 * stats.norm.cdf(d -       SIGMA * np.power(T - t, 0.5))
29:    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.p      ower(T, 0.5))
35:    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.p      ower(T, 0.5))

ファイル名のみ

[vagrant@localhost machine-learning]$ grep -l SIGMA *
black_scholes.py
grep: figures: ディレクトリです
grep: prml: ディレクトリです

ファイル名と行番号は”-rn”

[vagrant@localhost machine-learning]$ grep -rn import *.py
black_scholes.py:9:import numpy as np
black_scholes.py:10:import matplotlib.pyplot as plt
black_scholes.py:11:import scipy.stats as stats
gibbs_sampling.py:7:import numpy as np
gibbs_sampling.py:8:import matplotlib.pyplot as plt
gibbs_sampling.py:9:import scipy.stats as stats

あーこれこれ、やりたかったの。

Power-shellでgrepのようなことをしたい

powershellを起動し、Select-String “search name”で検索する。

file

powershell

> select-string "server" koneksi.php

koneksi.php:3:  $server         = "localhost"; //sesuaikan dengan nama server
koneksi.php:8:  $connect = mysql_connect($server, $user, $password) or die ("Koneksi gagal!");
koneksi.php:12: // $con = mysqli_connect($server, $user, $password, $database);

select-string はslsでも代替可能。

> sls "user" koneksi.php

koneksi.php:4:  $user           = "root"; //sesuaikan username
koneksi.php:8:  $connect = mysql_connect($server, $user, $password) or die ("Koneksi gagal!");
koneksi.php:12: // $con = mysqli_connect($server, $user, $password, $database);

unixのcatとのようなコマンドはmore

n> more koneksi.php
        /* ===== www.dedykuncoro.com ===== */
        $server         = "localhost"; //sesuaikan dengan nama server
        $user           = "root"; //sesuaikan username
        $password       = "enter"; //sesuaikan password
        $database       = "kuncoro_login"; //sesuaikan target databese

        $connect = mysql_connect($server, $user, $password) or die ("Koneksi gagal!");
        mysql_select_db($database) or die ("Database belum siap!");

        /* ====== UNTUK MENGGUNAKAN MYSQLI DI UNREMARK YANG INI, YANG MYSQL_CONNECT DI REMARK ======= */
        // $con = mysqli_connect($server, $user, $password, $database);
        // if (mysqli_connect_errno()) {
        //      echo "Gagal terhubung MySQL: " . mysqli_connect_error();
        // }

複数ファイルを検索する場合は、ワイルドカードを使う。

 sls "user" *.php

koneksi.php:4:  $user           = "root"; //sesuaikan username
koneksi.php:8:  $connect = mysql_connect($server, $user, $password) or die ("Koneksi gagal!");
koneksi.php:12: // $con = mysqli_connect($server, $user, $password, $database);
login.php:7:    $username = $_POST["username"];
login.php:10:   if ((empty($username)) || (empty($password))) {
login.php:17:   $query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
login.php:24:           $response->message = "Selamat datang ".$row['username'];
login.php:26:           $response->username = $row['username'];
login.php:32:           $response->message = "Username atau password salah";
login.php:44:   // $username = $_POST["username"];
login.php:47:   // if ((empty($username)) || (empty($password))) {
login.php:54:   // $query = mysqli_query($con, "SELECT * FROM users WHERE username='$username' AND password='$password'")
;
login.php:61:   //      $response->message = "Selamat datang ".$row['username'];
login.php:63:   //      $response->username = $row['username'];
login.php:69:   //      $response->message = "Username atau password salah";
register.php:7: $username = $_POST["username"];
register.php:11:        if ((empty($username))) {
register.php:14:                $response->message = "Kolom username tidak boleh kosong";
register.php:27:                if (!empty($username) && $password == $confirm_password){
register.php:28:                        $num_rows = mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$username."'"));
register.php:31:                                $query = mysql_query("INSERT INTO users (id, username, password) VALUES(0,'".$username."','".$passw
ord."')");
register.php:42:                                        $response->message = "Username sudah ada";
register.php:48:                                $response->message = "Username sudah ada";
register.php:62:        // $username = $_POST["username"];
register.php:66:        // if ((empty($username))) {
register.php:69:        //      $response->message = "Kolom username tidak boleh kosong";
register.php:82:                // if (!empty($username) && $password == $confirm_password){
register.php:83:                //      $num_rows = mysqli_num_rows(mysqli_query($con, "SELECT * FROM users WHERE username='".$username."
'"));
register.php:86:                //              $query = mysqli_query($con, "INSERT INTO users (id, username, password) VALUES(0,'".$username."'
,'".$password."')");
register.php:97:                //                      $response->message = "Username sudah ada";
register.php:103:               //              $response->message = "Username sudah ada";

ほお~

TortoiseGitとは

TortoiseGitは、GitのクライアントツールでWindowsのシェルエクステンションとして機能

では、試しに、Android-Login-Register-MySQLをgit cloneしてみましょう。
https://github.com/dedykuncoro/Android-Login-Register-MySQL

コマンドラインのgit cloneではなく、GUIで提供されます。

URLがcloneするurl
Directoryが保存するローカルのパス
Depth, Recursive, Clone into Bare Repo, Branch, Origin Nameがありますね。
Load Putty Key, SVN Repositoryもあります。SVNはsubversionでしょう。
Subversionはめっきり見なくなりました。

OKを押下でCloneされています。