HiFiberry DAC+ (TI PCM5122 사용)와 호환되는 PiFi DAC+ 에 있는 IR receiver를 사용하기

https://wiki.geekworm.com/DAC%2B

아두이노 세트에 있는 IR remote controller를 사용해서 Volumio를 제어해 해보자

해당 IR remote contorllor는 NEC protocol을 사용한다.

https://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol 

1. DTB overlay 추가 (gpio-ir, PiFi DAC+ 보드는 IR rx data가 gpio 26 핀에 연결되어 있음)

/boot/userconfig.txt 
# Add your custom config.txt options to this file, which will be preserved during updates
dtoverlay=gpio-ir,gpio_pin=26

2. IR 레코딩

IR 레코딩은 아래 링크를 참고했다.

https://memories.tistory.com/10

아두이노에서 확인한 키 값을 사용해도 되지만, LIRC에서 레코딩해서 생성한 lircd.conf를 사용하고, 아두이노에서 읽은 값은 교차 검증용으로 사용. (IR 레코딩을 해보니, 실제값 4바이트 이후 더미 4바이트가 기록되어 있어서 더미 값은 삭제했다)

3. Volumio IR configuration 파일 (lircd.conf, licrc)을 push

/data/INTERNAL/ir_controller/configurations/<<설정 이름>> 폴더를 생성하고 파일을 복사. (리모콘에 있는 로고를 따라 "CAR" 라고 정함)

CAR_lirc.zip
0.00MB

4. Volumio 플러그인에서 IR Conroller Configuration에서 <<설정 이름>>  ("CAR")을 선택

5. 이제 IR remote controller로 플레이어 제어~~

레이저 프린터가 망가져서 새로 구매할때, 네트웍 프린팅 기능이 없는 프린터를 구매해서
네트웍 프린팅 기능에 대한 아쉬움이 있었다.
라즈베리 파이를 네트웍 프린터 서버로 이번 연휴에 세팅. (CUPS & Google cloud printing)

https://www.instructables.com/id/Minimal-Raspberry-Pi-Google-Cloud-Print-Server/

 

Minimal Raspberry Pi Google Cloud Print Server

Minimal Raspberry Pi Google Cloud Print Server: I was cleaning up my electronic junk, and believe me I order a lot of stuff online and then lose track of it. Back in 2014 I ordered a Raspberry Pi, model B and it just came out of a box lying under some othe

www.instructables.com

Step 8번 대신 cloudprint, cloudprint-service를 설치하고, authfile.json 파일을 생성 및 cloudprint를 등록하면 된다.

$ sudo apt-get install cloudprint cloudprint-service
$ sudo /usr/sbin/cloudprintd -c -a /var/lib/cloudprintd/authfile.json
$ sudo systemctl restart cloudprintd.service
$ sudo systemctl status cloudprintd.service
● cloudprintd.service - Google Cloud Print proxy service
   Loaded: loaded (/lib/systemd/system/cloudprintd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-05-05 13:57:29 KST; 3s ago
     Docs: man:cloudprint-service
 Main PID: 3659 (cloudprintd)
    Tasks: 1 (limit: 2200)
   Memory: 15.5M
   CGroup: /system.slice/cloudprintd.service
           └─3659 /usr/bin/python3 /usr/sbin/cloudprintd -a /var/lib/cloudprintd/authfile.json

Ubuntu 사용자로서 Rhythmbox를 기본 뮤직 플레이어로 사용하는데,

Lyrics Plugin에서 K-Pop가사를 지원하는 소스가 없어, 알송 가사 서비스를 가져오도록 추가함.


1. Python requests를 이용 ALSong Lyrics 추출 (Artist, Title)

https://item4.github.io/2018-10-20/Fetch-Alsong-Lyrics-with-Python/


2. lLyrics에서 Artist, Title의 한글 문자열이 Hangul Jamo (U+1100 ~ U+11FF)방식으로 표현되어

이를 Hangul Syllables (U+AC00 ~ U+D7AF)로 전환 후 UTF-8 인코딩하도록 추가 작업

https://pypi.org/project/jamotools/

추가수정 : 유니코드 한글이 왜 자모로 변환되었는지 찾았습니다. lLyrics에서 NFKD로 정규화를 해서 Hangul Jamo로 전환되었던거네요.

lLyrics.py:492:        artist = unicodedata.normalize('NFKD', artist)

lLyrics.py:494:        title = unicodedata.normalize('NFKD', title)

jamotools 대신 unicodedata를 쓰는 것으로 바꿨습니다.

ALSongLyricsParser.py:52:            title = unicodedata.normalize("NFC", self.title),

ALSongLyricsParser.py:53:            artist = unicodedata.normalize("NFC", self.artist),


작업한 소스 저장소 :

https://github.com/jang574/lLyrics



unicodedata에서 유니코드 정규화를 지원함.

#!/usr/bin/python3

import unicodedata


text1 = b'\xe1\x84\x80\xe1\x85\xb5\xe1\x86\xaf\xe1\x84\x80\xe1\x85\xa1\xe1\x84\x8b\xe1\x85\xa6'

text2 = b'\xea\xb8\xb8\xea\xb0\x80\xec\x97\x90'


print("text1 : {}".format(text1.decode('utf-8')))

print("text2 : {}".format(text2.decode('utf-8')))


print("------ text1 -------")

for c in text1.decode('utf-8'):

    print( unicodedata.name(c))


print("------ text2 -------")

for c in text2.decode('utf-8'):

    print( unicodedata.name(c))


print("------ Normalize text1 using NFC -------")

for c in unicodedata.normalize("NFC", text1.decode('utf-8')):

    print( unicodedata.name(c))


print("------ Normalize text2 using NFD -------")

for c in unicodedata.normalize("NFD", text2.decode('utf-8')):

    print( unicodedata.name(c))

출력

text1 : 길가에

text2 : 길가에

------ text1 -------

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG I

HANGUL JONGSEONG RIEUL

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG A

HANGUL CHOSEONG IEUNG

HANGUL JUNGSEONG E

------ text2 -------

HANGUL SYLLABLE GIL

HANGUL SYLLABLE GA

HANGUL SYLLABLE E

------ Normalize text1 using NFC -------

HANGUL SYLLABLE GIL

HANGUL SYLLABLE GA

HANGUL SYLLABLE E

------ Normalize text2 using NFD -------

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG I

HANGUL JONGSEONG RIEUL

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG A

HANGUL CHOSEONG IEUNG

HANGUL JUNGSEONG E


Ubuntu 14.04 LTS 64bit 기준으로 정리.

https://www.tensorflow.org/install/install_linux


위 링크에 virtualenv를 이용하여 설치하는 내용도 정리되어 있다.

하지만, 실제 따라해 보니 아래와 같이 설치할 수 있는 패키지가 없다고 한다.

$ pip install --upgrade tensorflow

Downloading/unpacking tensorflow

  Could not find any downloads that satisfy the requirement tensorflow

Cleaning up...

No distributions at all found for tensorflow

Storing debug log for failure in /home/oooo/.pip/pip.log


~/.pip/pip.log 를 보면 현재 리눅스 머신에 설치되어 있는  python과 호환이 안된다고 모두 건너뛴다.

Downloading/unpacking tensorflow

  Getting page https://pypi.python.org/simple/tensorflow/

  URLs to search for versions for tensorflow:

  * https://pypi.python.org/simple/tensorflow/

  Analyzing links from page https://pypi.python.org/simple/tensorflow/

    Skipping https://pypi.python.org/packages/00/16/c8ba385fc6511ca362f32326cd1d6a99bbbabbc8341607ff70c290e0be7b/tensorflow-0.12.1-cp34-cp34m-manylinux1_x86_64.whl#md5=981c0a406eb9865423b11c03b489040d (from https://pypi.python.org/simple/tensorflow/) because it is not compatible with this Python

...

    Skipping https://pypi.python.org/packages/7e/7c/f398393beab1647be0a5e6974b8a34e4ea2d3cb7bd9e38bd43a657ed27d1/tensorflow-1.0.1-cp27-cp27mu-manylinux1_x86_64.whl#md5=5c88e656fcd34cd89d4cf48d3ec7dd67 (from https://pypi.python.org/simple/tensorflow/) because it is not compatible with this Python
...

python은 Ubuntu 14.04에서 배포되는 버전이다.
$ python --version
Python 2.7.6

$ dpkg -l python2.7
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  python2.7      2.7.6-8ubunt amd64        Interactive high-level object-ori

$ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> print(sysconfig.get_config_vars('CONFIG_ARGS'))
["'--enable-shared' '--prefix=/usr' '--enable-ipv6' '--enable-unicode=ucs4' '--with-dbmliborder=bdb:gdbm' '--with-system-expat' '--with-system-ffi' '--with-fpectl' 'CC=x86_64-linux-gnu-gcc' 'CFLAGS=-D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro'"]
>>> 
>>> import pip
>>> print(pip.pep425tags.get_supported())
[('cp27', 'cp27mu', 'manylinux1_x86_64'), ('cp27', 'cp27mu', 'linux_x86_64'), ('cp27', 'none', 'manylinux1_x86_64'), ('cp27', 'none', 'linux_x86_64'), ('py2', 'none', 'manylinux1_x86_64'), ('py2', 'none', 'linux_x86_64'), ('cp27', 'none', 'any'), ('cp2', 'none', 'any'), ('py27', 'none', 'any'), ('py2', 'none', 'any'), ('py26', 'none', 'any'), ('py25', 'none', 'any'), ('py24', 'none', 'any'), ('py23', 'none', 'any'), ('py22', 'none', 'any'), ('py21', 'none', 'any'), ('py20', 'none', 'any')]

위 정보에 따르면, 현재 기준으로 https://pypi.python.org/pypi/tensorflow
에서 tensorflow-1.2.0rc1-cp27-cp27mu-manylinux1_x86_64.whl
설치가능 해야 하는데 안됨.

구글링하여, cp27-none 으로 설치.
$ pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.2.0rc1-cp27-none-linux_x86_64.whl
$ pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.2.0rc1-cp27-none-linux_x86_64.whl


현재 ubuntu는 locate 명령을 위해 mlocate 패키지를 제공하는데,

mlocate 을 설치하면, cron.daily 에 updatedb.mlocate을 등록해 놓고,

매일마다 파일을 미리 인덱싱하여 DB(/var/lib/mlocate/mlocate.db)에 저장하도록 한다.


개인적으로 소스 컴파일 후에 결과물의 파일을 검색하는 경우가 많은데,

이전날 인덱싱한 DB가 이런 경우 별로 도움이 되지 않아서

locate 명령을 않 쓰고, find 명령으로 검색을 한다.


만약 locate 명령을 안 쓴다면, 과감히 mlocate 패키지를 지우자.

sudo apt-get purge mlocate


밤마다, cron.daily로 하드 긁는 소리도 없어지고,

DB 파일도 지워서 HDD에 여유공간도 생긴다. (내 경우는 약 500MB)

집에서 사용하는 작업용 PC는 Ubuntu 14.04인데, 오늘 HWE EOL 경고창이 떠서 확인해보니, 16.04 Xenial HWE Stack (v4.4. Kernel)으로 업그레이드하라는 권고이다.

https://wiki.ubuntu.com/1404_HWE_EOL


1) Xenial HWE Stack으로 업그레이드 해야 할 패키지들 확인

$ sudo hwe-support-status --show-replacements

linux-signed-generic-lts-xenial libgl1-mesa-glx-lts-xenial linux-signed-image-generic-lts-xenial libgl1-mesa-glx-lts-xenial:i386 linux-generic-lts-xenial libwayland-egl1-mesa-lts-xenial linux-image-generic-lts-xenial xserver-xorg-lts-xenial


2) 업그레이드 패키지 설치

$ sudo apt-get install linux-signed-generic-lts-xenial libgl1-mesa-glx-lts-xenial linux-signed-image-generic-lts-xenial libgl1-mesa-glx-lts-xenial:i386 linux-generic-lts-xenial libwayland-egl1-mesa-lts-xenial linux-image-generic-lts-xenial xserver-xorg-lts-xenial


완료.


Simply use the official PPA :

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update

Option 1 : You don't have libreoffice yet :

Open a terminal (Ctrl+Alt+T) and run:

sudo apt-get install libreoffice

Option 2 : You already have an old version of LibreOffice (4.x) :

Open a terminal (Ctrl+Alt+T) and run:

sudo apt-get upgrade


More information :

https://launchpad.net/~libreoffice


Kernel panic으로 kernel dump를 했을때, dump를 분석하는 툴.

http://people.redhat.com/anderson/


소스는 github에서 받을 수 있다.

https://github.com/crash-utility/crash


빌드할때 타겟에 맞게 빌드가 필요하다.

ARM : $ make target=ARM

ARM64 : $ make target=ARM64


"no termcap library found" 에러 메시지가 발생했다면, libncurse5-dev 추가 설치가 필요하다. (Ubuntu 14.04 기준)

$ sudo apt-get install libncurses5-dev 



얼마전 Ubuntu 12.04에서 14.04 (정확히 14.04.2) 로 바꾸었는데,

libgl1-mesa-glx 를 설치할때 설치가 아래의 오류로 설치가 불가능한 이슈가 발생했다.


The following packages have unmet dependencies:

         libcheese-gtk23 : Depends: libclutter-gtk-1.0-0 (>= 0.91.8) but it is not going to be installed

                           Depends: libcogl15 (>= 1.15.8) but it is not going to be installed

         libcheese7 : Depends: libclutter-gst-2.0-0 (>= 0.10.0) but it is not going to be installed

                      Depends: gstreamer1.0-clutter but it is not going to be installed

         libclutter-1.0-0 : Depends: libcogl-pango15 (>= 1.15.8) but it is not going to be installed

                            Depends: libcogl15 (>= 1.15.8) but it is not going to be installed

        E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.


관련 이슈가 아래 링크에 리포트되어 현재는 수정된 듯.

https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/1424491


14.02.2 배포버전으로 갈아탄 나로서는 급한대로 #24에 언급한 workaround 방식으로 해결.

https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/1424491/comments/24

: # sudo apt-get install libcheese*


Android, WebOS, ChromeOS 등 각각의 Embedded Linux 프로젝트마다 상이한 빌드시스템 환경을 구축하고 있다.

해당 프로젝트를 빌드하려면, 빌드시스템에 대한 기본적인 이해가 필요하다.


Android

repo 를 이용한 package 관리하고, 빌드는 make, m, mm, mmm 명령을 사용.

package 추가시 repo의 manifest에 해당 package를 추가 하는 방식.

관련 링크:

https://source.android.com/source/using-repo.html

http://elinux.org/Android_Build_System


WebOS

OpenEmbedded/Yocto project를 이용, bitbake 명령을 사용한다.

관련 링크:

http://www.openwebosproject.org/docs/build_guide#openembedded

https://www.yoctoproject.org/


ChromeOS

Gentoo Linux의 Portage build system을 이용. emerge 명령이 사용된다.

관련 링크:

http://www.chromium.org/chromium-os/build

https://devmanual.gentoo.org/index.html


NOOBS  : Operating System install manager - Raspberry Pi

Buildroot를 이용.

관련 링크:

https://github.com/raspberrypi/noobs

http://www.buildroot.org/

http://elinux.org/Buildroot


그밖에 빌드 시스템들은 아래 링크에 정리되어 있다.

http://elinux.org/Build_Systems

+ Recent posts