プレミアム会員にならなくてもヤフオクに出品できた
楽天オークション終了のお知らせだそうですね。
やっぱり時代はネットフリマかーと思い、色々ググってたんですが、なんかヤフオク!がフリマアプリとして出てくるんですよね。で、iOSのヤフオク!アプリの出品ボタン押してみたら、即決価格での出品はプレミアム会員にならなくてもできるようになってるみたいです。
新出品機能「ワンプライス出品」リリースのお知らせ -お知らせ - ヤフオク!
この記事にはプレミアム会員じゃなくもよいっていう重要なことが書いてないですけどね・・
というわけで、早速いらなくなった初代iPadを出してみたら、一瞬で売れてびっくり。ヤフオク!はすごいですね。プレミアム会員じゃないと、10%の手数料を取られるそうですが(プレミアム会員は8.64%)、便利なのでちょくちょく利用させてもらおうと思います。
パソコンを交換
電源ボタンの接触部が物理的に壊れてしまい、やむなく交換となりました。
たまたま義母が最近パソコンを買ったので、使わなくなったものをもらいました。
まあ、これは自分が選んだやつなので、スペックもそこそこで普通に使えそうです。
■マシンのスペック比較
- | 壊れたやつ | 交換したやつ |
CPU | Core i5-2400 | Core i5-3470 |
メモリ | 8GB | 4GB→8GB(メモリを入れ替え) |
ディスク | SSD120GB+HDD500GB | SSD120GB+HDD500GB |
OS | Windows10 Pro | Windows10 Pro(ライセンスをコピー) |
若干立ち上がりが遅いような気がしますが、気のせいでしょうか。
あと、壊れたPCについてたSSD+HDDのデータは、すぐには使わないのですが、
一応読み出せるよう、ハードディスクケースってのを買ってみました。
玄人志向 HDDケース 外付け USB3.0 USB2.0 3.5型 SATA接続 ハードディスク 電源連動 レグザ アクオス トルネ インフィニア 動作確認済み GW3.5AA-SUP3/MB
- 出版社/メーカー: 玄人志向
- メディア: Personal Computers
- クリック: 1回
- この商品を含むブログを見る
最近動画編集とか、ハイスペックを要求する作業をしていないので、
またこれで2〜3年は使えそうです。
ちなみにWindows7からWindows10に無償アップグレードしたクチなんですが、
Windows 10 のダウンロード
からツールを入手して、ISOイメージを作ると、クリーンインストールするDVDが作れます。
無線LANつないで、Chromeインストールしたら、大体普段のことは出来ちゃいますから、
クリーンインストールでも問題なかったです。
さくらのクラウド使ってみた
昨日、
【eLV勉強会】 Dockerを触ってみよう ~初心者向けDockerハンズオン~ - ~ITエンジニア勉強会~ engineer'sLearning・Vesper | Doorkeeper
の勉強会にお伺いした際、さくらのクラウドの2万円分のクーポンをいただきましたので、上のsshの検証するのにお試しで使ってみました。
EC2と比較しての感想は、、
- コンソールのGUIが見やすい気がする
- マシン止めてもディスクに課金されていることがわかりやすい
- 公開鍵認証必須じゃないので、敷居は低いと思う
- サーバの起動が遅いと思う
- REST APIの表示いらんでしょ
- マシンの起動・停止するのに3クリックはいまいち
- ちょっとお高いのでは(まだ無料で使えてるので、文句言う筋合いではないが)
- 課金情報がリアルタイムに表示されないようですが
というところでした。
もっと色々複雑なことをやると違いが見えてくるのかも知れませんが、しょせんコマンドの検証レベルだと、わりとプリミティブなところに目が行きますね。そしてやっぱりAmazonはすごいなということかと思います。
「ProxyCommandによるsshの多段接続について」をコマンドライン引数でやる
ProxyCommandによるsshの多段接続について -- ぺけみさお
ググりが足りない気もするけど、どこのブログも.ssh/configで設定するやり方ばかりだったので、コマンドライン引数でやる方法を試してみた。
ホストの役割とユーザ
_.host | _.役割 | ユーザ |
host01 | クライアント | user |
host02 | 踏み台サーバ | hoge |
host03 | ターゲットサーバ | moge |
実行結果
[user@host01 ~]$ ssh -i .ssh/id_rsa_host03 -o "ProxyCommand=ssh hoge@host02 nc %h %p" -l moge host03
Last login: Thu Aug 11 19:10:39 2016 from host02
[moge@host03 ~]$
というわけで、host01からhost03に直接つながったように見えます。
この後exitすると、、
[moge@host03 ~]$ exit
logout
Connection to host03 closed.
[user@host01 ~]$ Killed by signal 1.[user@host01 ~]$
なぞの"Killed by signal 1."が表示されますね。なぜでしょう。。
Spring Dataを使って、自動的に監査証跡を保存する
業務アプリケーションを作っていると、監査証跡ということで、作成者、作成日時、更新者、更新日時を保存するということがあると思います。Spring Dataのアノテーションを使うと、自動でセットしてくれるので、アプリケーションで決まりきったコードを書かなくて済むということみたいです。
Task.java(モデルクラス)
package sample.model; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.util.Date; @Entity @EntityListeners(value = AuditingEntityListener.class) public class Task { @Id @GeneratedValue private Long id; private String taskName; @CreatedBy private String createdBy; @Temporal(TemporalType.TIMESTAMP) @CreatedDate private Date createdDate; @LastModifiedBy private String modifiedBy; @Temporal(TemporalType.TIMESTAMP) @LastModifiedDate private Date modifiedDate; public Task() { } @Override public String toString() { return "Task{" + "id=" + getId() + ", taskName='" + getTaskName() + '\'' + ", createdBy='" + getCreatedBy() + '\'' + ", createdDate=" + getCreatedDate() + ", modifiedBy='" + getModifiedBy() + '\'' + ", modifiedDate=" + getModifiedDate() + '}'; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTaskName() { return taskName; } public void setTaskName(String taskName) { this.taskName = taskName; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public Date getCreatedDate() { return createdDate; } public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; } public String getModifiedBy() { return modifiedBy; } public void setModifiedBy(String modifiedBy) { this.modifiedBy = modifiedBy; } public Date getModifiedDate() { return modifiedDate; } public void setModifiedDate(Date modifiedDate) { this.modifiedDate = modifiedDate; } }
StartupRunner.java(呼び側)
package sample; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import sample.jpa.TaskRepository; import sample.model.Task; public class StartupRunner implements CommandLineRunner { protected final Log logger = LogFactory.getLog(getClass()); @Autowired private TaskRepository taskRepository; @Override public void run(String... args) throws Exception { // Generate a new record. Task task = new Task(); task.setTaskName("task1"); Task savedTask = taskRepository.save(task); System.out.println(savedTask); Thread.sleep(1000); // Update the record after 1sec. savedTask.setTaskName("task2"); Task savedTask2 = taskRepository.save(savedTask); System.out.println(savedTask2); } }
AuditingConfig(監査証跡の設定クラス)
package sample.jpa; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.AuditorAware; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @EnableJpaAuditing @Configuration public class AuditingConfig { @Bean public AuditorAware<String> createAuditorProvider() { return new SecurityAuditor(); } @Bean public AuditingEntityListener createAuditingListener() { return new AuditingEntityListener(); } public static class SecurityAuditor implements AuditorAware<String> { @Override public String getCurrentAuditor() { return "taka2"; } } }
実行結果(抜粋)
Task{id=1, taskName='task1', createdBy='taka2', createdDate=Sat Jul 23 23:38:44 JST 2016, modifiedBy='taka2', modifiedDate=Sat Jul 23 23:38:44 JST 2016} Task{id=1, taskName='task2', createdBy='taka2', createdDate=Sat Jul 23 23:38:44 JST 2016, modifiedBy='taka2', modifiedDate=Sat Jul 23 23:38:45 JST 2016}
呼び側ではtaskNameしかセットしていませんが、createdBy/createdDate/modifiedBy/modifiedDateの各フィールドがセットされていますね。サンプルなので、ユーザは固定の文字列返してますが、webアプリケーションなら、ログインユーザを返すところでしょうね。
SHURE カナル型イヤホン SE112m+購入
【国内正規品】SHURE カナル型 高遮音性イヤホン リモコン・マイク付 SE112m+ グレー SE112M+-GR-A
- 出版社/メーカー: SHURE
- 発売日: 2014/10/23
- メディア: エレクトロニクス
- この商品を含むブログを見る
前使ってたイヤホンが断線か何かで片方聞こえなくなってしまったので、新たに購入。
つなぎで使ってたEarPodsのリモコンが便利で、
ていう条件でAmazonを探し、一番売れ筋のものを選んでみました。
装着感
大中小のイヤーチップが付属していますが、自分にはデフォルトで装着されている中のものが最もフィットしました。
音質
若干高音が強くシャリシャリしてる感じがしますが、エイジングということもあるそうなので、しばらく様子見かなと。
(7/14 追記)
数日使っていましたが、耳が慣れたのか、エイジング出来たのか、どっちなのか分かりませんが、気にならなくなりました。
その他
EarPodsや前に使っていたSonyのものに比べてケーブルが太いので、ちょっと取り回しが不便です。慣れのような気もしますが、マイナスポイントです。