まずは習慣づけに絡みまくってみる

出合い系アプリ

相変わらず使い続けてるわけですが、
なんか進展があったかというと別にないよね。

で、ちょっと気分的に下火になりがちだったので
それじゃつまらんなと思って適当に絡みまくることにした。

まずはやり取りを継続する。

結局のところ関係を構築して継続させていくには、
こっち側の努力みたいなのが必要だろうことは分かる。

友達関係もそうなんだけど、自分の方から連絡して遊びに誘ってってやれば
今だって遊んでくれる友達はいる。

正直ちょっと面倒ではあるんだけど、自らなんだよね。
それは前々から思ってたところなんだけど。

ということで一気に10人以上にメッセージを送りまくる。

ちょっと面倒かなと思いきや、この方が結構気楽な面もあることに気づく。

たくさんの子とやり取りすると一人ひとりの反応にいちいち一喜一憂しなくて済む。
メッセージが途絶えちゃったりとか、返事が来なくても気にしないで済みますね。

返事来た。あ、この子か。返事返そう。

そんなことしてると返事が来ない子がいても、気にならない。

全員から返事来なかったら、凹むかもしれんけどねw

なんか軽い感じがするかもしれないですが、
まずは友達ぐらいの関係でも作れないと面白くないもんね。

 
スポンサーリンク

古いPCをリビング用にリノベーション

光回線にした時に無料でもらったPC。

CPUがCeleron D 331ってやつで
今ではYoutubeもカクカクで視聴に耐えないというスペック。
DVDドライブじゃなくてCDドライブだし、フロッピーなんかも付いてるし。

これってもう使えないの?と言われてPuppy Linuxを入れて動かしてみたら
ネット見るだけでもカクカクで結局使われず放置されていた。

前からリビングのTVでネットが出来たらいいなという要望があって
この前、PCを新しくした際に取り出したCore2Duoに入れ替えてみることにした。

まだ使えるから勿体無いってのはあるけど、
またPCいじりがしたくなってしまった方が動機としては大きい。

リビング用PCにするにあたって問題は画面出力がD-subしかないことだった。
テレビはHDMIだから、D-subをHDMIに変換する何かが必要。

探したけれど安くて使えそうなものってのは見つからない。
変換はコンバーターってのがあるけど意外と高いんで、そんなら安いグラボでも付けたほうが良さそうってことでグラボを買うことにした。

値下げ交渉の機会

某量販店へ行きネットで見つけたグラボを探すと
ネットより店舗に置いてあるグラボの方が値段が高い。

これはまた久しぶりに値下げ交渉のネタが見つかったなと思ってやってみることに。

ネットで見たと言っても今回はその量販店のネット上の価格だから
受け入れてくれる可能性は高いだろうとは思っていた。

だけど一応手順というか、どうやって始めるかと
もし無理ですと言われたら、どうひと押ししようかは予め考えておいた。

「つまり同じ商品であるのに、改めてネット上で注文しろということですか?」

ゲットモアには、フレーミングっていうのがあるけど
その時自分が考えたのはいいフレーミングとは言えないか。

あとは
「送料無料でされてるようですけど、手配や送料などのコストが無駄だと思いませんか?」

とか考えたけど、値下げより送料とかのコストの方が低いかもしれなくて
これは微妙かなぁみたいな。

最終的には
「顧客を不満にするのが、御社の目標ですか?」

これは本に載ってるフレーズ。フレーミングや規範を使ってる。
その時はこのフレーズは出てこなかったけど。

ということで、あとは誰に対してどうスタートするか。

まずはスマホで表示されてる商品と自分が持ってる商品が同じものであることを確認してもらってから、こっちはこの値段なんですけどと言ってみることにした。

レジの人に言ってみたら、別の人が来てその人が値段確認。
その後ネット上の価格で売ってもらえることになった。

ということで今回もその程度で終了。
実は久しぶりってのもあってこんなことするぐらいでも手が震えてしまったんだけどさ。

でも考えてみれば安くなったとはいえグラボは4千円ほど。
今回の要件はHDMI出力出来るようにするってだけだから
探せばもっと古くて安いグラボはあっただろう。

ちょっと何かを試せたから、それでOKかなと。

PCセットアップ

PCはスリムタイムなのでグラボもロープロファイル対応というものを購入。

最初商品を取り出した時、PC本体から出てしまうくらい長くて
あれ・・間違えたか?と思ったけど、付け外しが出来るタイプだった。
初めて買ってみたんで知らなかった。

またまた今回インストールしたOSはUbuntu。
Windowsのバックアップイメージをリストアしてみたんだけど、やっぱ起動しなくて結局これ。
ただUbuntuでも十分いろいろと出来る。

グラボのドライバは最新のはなかったけど、勝手に当たるオープンのやつでの動くから十分。
ちょっと驚いたのが、グラボに接続したHDMIでも音が出るってことだった。
グラボのHDMIって音声出力もしてくれるんだね。

リビング用なのでキーボードは無線で使えるものでタッチパッド付き。
これも買ったまま使ってなかったけどようやく陽の目を見ることになった。

今回PC再利用にあたって
眠ってたいろんな資源、DVDドライブ・HDD・PC本体・キーボードなどが有効活用出来て嬉しいですね。
使わないと勿体無いですからね。


Youtubeは全画面でも余裕。


abemaTVはこんぐらいの大きさじゃないとしんどいレベル。
追記:これはfirefoxだからでした。chromeなら全画面でもさくさく観れます

今回のPCは親が使うもので用途はこんなもん。
あとはdTVが見れれば最高なんだけども・・

 
スポンサーリンク

リファクタリング作業

リーダブルコードを読みながら、少しコードの修正作業をしていた。

今回あのゲームを作っていく中ではまたいろいろと勉強になった。
あんま使ってなかったgitを使いつつバージョン管理してみたりとかね。

よく言われてるように、プログラミングは実際に何か作るものがあって
それを作っていく過程でだいぶ勉強になるものだね。

英語もそうなのかな。

一応今回のコードは載せておこう。
何か指摘があったら歓迎します。


import RPi.GPIO as GPIO, time
import subprocess, random
from subprocess import Popen

proc = Popen(["mpg321", "bgm.mp3"])

GPIO.setmode(GPIO.BCM)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 割り込みハンドラ 左移動
def go_left(*arg):
	global x
	global y
	global rotation
	global obj_type
	global matrix
	global can_interrupt

	if (can_interrupt):
		clear_obj(x, y, rotation, obj_type, matrix)
		x -= 1
		if (check_overlap(x, y, rotation, obj_type, matrix)):
			x += 1
		write_obj(x, y, rotation, obj_type, matrix)

# 割り込みハンドラ 右移動
def go_right(*arg):
	global x
	global y
	global rotation
	global obj_type
	global matrix
	global can_interrupt
	
	if (can_interrupt):
		clear_obj(x, y, rotation, obj_type, matrix)
		x += 1
		if (check_overlap(x, y, rotation, obj_type, matrix)):
			x -= 1
		write_obj(x, y, rotation, obj_type, matrix)

# 割り込みハンドラ 回転
def turn(*arg):
	global x
	global y
	global rotation
	global obj_type
	global matrix
	global can_interrupt

	if (can_interrupt):
		prev_rotation = rotation
		clear_obj(x, y, rotation, obj_type, matrix)
		rotation = (rotation + 1) % 4
		if (check_overlap(x, y, rotation, obj_type, matrix)):
			rotation = prev_rotation
		write_obj(x, y, rotation, obj_type, matrix)

GPIO.add_event_detect(12, GPIO.FALLING, callback=go_left,  bouncetime=140)
GPIO.add_event_detect(25, GPIO.FALLING, callback=go_right, bouncetime=140)
GPIO.add_event_detect(24, GPIO.FALLING, callback=turn,     bouncetime=140)

# GPIO LEDpin anode_side
#   21      9
#   16     14
#   23      8
#   20     12
#    4      1
#   22      7
#   17      2
#   27      5
anode = [21,16,23,20,4,22,17,27]

# GPIO LEDpin cathode_side
#   13     13
#   14      3
#   15      4
#    5     10
#   18      6
#    6     11
#   19     15
#   26     16
cathode = [13,14,15,5,18,6,19,26]

for i in anode:
	GPIO.setup(i, GPIO.OUT)
	GPIO.output(i, GPIO.LOW)
for i in cathode:
	GPIO.setup(i, GPIO.OUT)
	GPIO.output(i, GPIO.HIGH)

def obj_calc(x, y, rotation, obj_type):
	# ブロックの形6種類
	form_type = [[ 0, -1,  0,  1,  0, 2],
                     [-1, -1,  0, -1,  0, 1],
                     [ 0, -1, -1,  0,  0, 1],
                     [ 0, -1, -1,  1,  0, 1],
                     [ 0,  1,  1,  0,  1, 1],
                     [ 0,  1,  1, -1,  1, 0]]
	return_obj = []

	obj = form_type[obj_type]
	count = 0
	while count < 3:
		relative_y = obj[count*2 + 0]
		relative_x = obj[count*2 + 1]
		rotate_times = 0
		while rotate_times < rotation:
			tmp = relative_y
			relative_y = relative_x
			relative_x = tmp
			relative_x = -relative_x
			rotate_times += 1

		return_obj.append(x + relative_x)
		return_obj.append(y + relative_y)
		count += 1

	return return_obj

def write_obj(x, y, rotation, obj_type, matrix):

	x2,y2,x3,y3,x4,y4 = tuple(obj_calc(x,y,rotation,obj_type))

	matrix[y][x]   = 1
	matrix[y2][x2] = 1
	matrix[y3][x3] = 1
	matrix[y4][x4] = 1

def clear_obj(x, y, rotation, obj_type, matrix):

	x2,y2,x3,y3,x4,y4 = tuple(obj_calc(x,y,rotation,obj_type))

	matrix[y][x]   = 0
	matrix[y2][x2] = 0
	matrix[y3][x3] = 0
	matrix[y4][x4] = 0

def check_overlap(x, y, rotation, obj_type, matrix):

	x2,y2,x3,y3,x4,y4 = tuple(obj_calc(x,y,rotation,obj_type))

	if (matrix[y][x]   == 1 or
            matrix[y2][x2] == 1 or
            matrix[y3][x3] == 1 or
            matrix[y4][x4] == 1   ):
		return True
        else:
                return False


# 落下スピードを返す関数
def speed_calc(matrix):
	speed = 0
	gleaming_led = 0

	# 光るLEDの個数を数える
	for i in range(1,9):
		for j in range(1,7):
			if(matrix[i][j] == 1):
				gleaming_led += 1
	if(gleaming_led < 6):
		speed = 2550
	elif(gleaming_led < 10):
		speed = 2250
	elif(gleaming_led < 15):
		speed = 1850
	else:
		speed = 1600

	return speed


# ラインが揃ってたら消す関数
def clear_line(matrix):
	del_index_list = []
	for i in range(1,9):
		if(matrix[i].count(1) == 8):
			del_index_list.append(i)
	length = len(del_index_list)
	if(length > 0):
		del_index_list.reverse()
		for i in del_index_list:
			del matrix[i]
		for i in range(length):
			matrix.insert(1,[1,0,0,0,0,0,0,1])


# 2次元表を90度右に回転させる関数
def change_deg(matrix):
	changed_matrix = []
	tmp = []

	for xi in range(1,7):
		for yi in range(8,0,-1):
			tmp.append(matrix[yi][xi])
		changed_matrix.append(tmp)
		tmp = []

	return changed_matrix

x = 4
y = 1
rotation = 0
can_interrupt = True
matrix = [
	[0,0,0,0,0,0,0,0],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,0,0,0,0,0,0,1],
	[1,1,1,1,1,1,1,1]
]

try:
	obj_type = random.randint(0,5)
	write_obj(x, y, rotation, obj_type, matrix)
	speed = speed_calc(matrix)
	count = 0
	while True:
		if (count > speed):                                             # 一定の速度で落下させる
			can_interrupt = False                                   # 落下中は割り込みさせない
			clear_obj(x, y, rotation, obj_type, matrix)             # ブロックを消す
			y += 1                                                  # 一個下に落ちる
			if (check_overlap(x, y, rotation, obj_type, matrix)):   # 重なりを調べる
				y -= 1                                            # 重なってたら戻す
				write_obj(x, y, rotation, obj_type, matrix)       # ブロックを書き込む
				clear_line(matrix)                                # ラインが揃ってたら消す

				x = 4                                             # また一番上から始める
				y = 1
				rotation = 0
				obj_type = random.randint(0,5)

				# if (check_overlap(x, y, rotation, obj_type, matrix)):   # スタート時点の重なりを調べる
				#	break                                           # 重なってたらゲームオーバー
				write_obj(x, y, rotation, obj_type, matrix)
			else:
				write_obj(x, y, rotation, obj_type, matrix)

			speed = speed_calc(matrix)
			count = 0
			can_interrupt = True

		changed_matrix = change_deg(matrix)
		# LED点滅部
		for i in range(6):
			for j in range(8):
				if(changed_matrix[i][j]):
					GPIO.output(anode[i],GPIO.HIGH)
					GPIO.output(cathode[j],GPIO.LOW)
					GPIO.output(anode[i],GPIO.LOW)
					GPIO.output(cathode[j],GPIO.HIGH)
		count += 1

except KeyboardInterrupt:
	GPIO.cleanup()

GPIO.cleanup()
proc.terminate()

 
スポンサーリンク
1 2 3 4 54