CSS 표준 권고에 따른 크기의 단위로 em, px 가 자주 사용된다.

시스템간의 호환성을 유지 하기 위해 사용하는데 기준값을 중심으로 상대적인 값을 지정하여 사용한다.

  • em : font-size 를 기준으로 한다.
  • px : pixel 모티터의 해상도에 따라 상대적인 크기를 갖는다.
  • 기타 : ex,in,cm,mm,pt,pc 등의 단위를 사용하기도 한다.

기준이 되는 크기

  • 1em은 16px, 12pt와 같은 크기를 갖는다. (pt는 폰트 사이즈를 정하는 단위)


Posted by twintail twintail
TAG CSS, em, px

간혹 그냥 해도 되요 하면 


umount 안하고 fsck 경고를 무시하고 검사하시고 

디스크 날렸어요 하시는 분들이 계시는데 


물론 설명이 부족했다고 생각은 합니다.


디스크를 fsck로 안전하게 검사하는 방법은 다음과 같습니다.


$ sudo touch /forcefsck 

$ sudo reboot


or 


$ sudo shutdown -rF now


둘다 부팅시에 강제로 fsck 를 수행합니다.


감사합니다.

Posted by twintail twintail

예를 들어 우체국에서 제공하는 DB정보는 대체로 euc-kr/iso8859-1 로 제공되는 경우가 있다.

이외에도 윈도우에서 작성한 데이터등이 euc-kr일 경우 최근 추세가 utf-8을 사용하는 분위기이므로 변경이 필요하다.


먼저 파일의 인코딩을 확인해야 한다.

$ file test.txt

test.txt: UTF-8 Unicode text


UTF-8이므로 UTF-8을 사용하는 콘솔(iTerm)에서 정상적으로 내용이 표시된다.

$ cat test.txt

가나다라마바사아


iconv를 사용하여 euckr로 변경한다.

$ iconv -futf8 -teuckr test.txt > test_euckr.txt


변경된 내용을 확인하면 눈치채신분들도 있겠지만 euc-kr로 변경되어 UTF-8을 사용하는 콘솔에서 정상 표시되지 않는다.

$ cat ./test_euckr.txt

�����ٶ󸶹ٻ��


파일의 인코딩을 확인한다.

$ file test_euckr.txt

test_euckr.txt: ISO-8859 text


euc-kr/ms949/iso8859 라고 봐도 무관하겠죠? 


반대로 euckr 에서 utf8로 변경할 경우 

$ iconv -feuckr -tutf8 test_euckr.txt > test_utf8.txt


$ cat test_utf8.txt

가나다라마바사아

다시 정상적으로 표시된다.



참고하세요. :)


Posted by twintail twintail

원문을 나름대로 이해하는 것으로 사실과 다를 수도 있습니다.

원문 : http://www.zdnet.com/article/build-your-own-supercomputer-out-of-raspberry-pi-boards/


왜 만들었을까? 하는 얘기가 나옵니다. DIY computing이라는 말도 나오구요.


32개의 라즈베리로 클러스터링한 분과 인터뷰 내용도 있습니다.

만드는 법에 대한 글은 Creating a Raspberry Pi-Based Beowulf Cluster 여기에서 확인이 가능합니다.


이분이 만든 이유는 봄방학중에 전산실 개보수가 있어서 연구진행을 계속 할 수가 없어서 대안으로 찾았던 것이 저렴한 라즈베리파이를 이용한 클러스터링이었습니다.(연구 필요성에 의한.) 


덧붙이면 실제 클러스터링을 통한 성능 향상이 아니라 연구를 위한 데이터 처리에 사용하기 위한 코드를 작성하기 위한 시스템이라고 보시면 될 것입니다.


beowulf cluster라는 것은 mpich와 네트워크를 사용하여 여러대의 저성능 컴퓨터를 활용한 시스템이었고 이것에 맞아 떨어진 것이 마침 저가로 공급되던 라즈베리파이 였다는 것입니다.


뒷부분에 얘기도 있지만 플립플롭테스트를 했다고 하지만 100대 슈퍼컴퓨터(클러스터링을 하는 컴퓨터라고 생각됩니다.)에는 들지 못했다는 얘기가 있네요.


클러스터가 아니라도 단 1개의 라즈베리로도 클러스터링과 같은 동작을 하게 하여 테스트를 할 수 있습니다.


아래에 올렸던 글처럼 3개를 묶어서 사용한 이유는 마침 생긴 라즈베리를 가지고 해볼 기회가 있어서 했던 것이고, 3대를 묶어서 클러스터링을 하는 것은 사실 크게 의미가 없습니다.


일반적으로 사용하는 OS의 용도는 연구용/수치연산용이 아니니까요.




Posted by twintail twintail

조건은 두가지


1. 리눅스와 윈도우를 듀얼 부팅으로 사용하고 있다.

2. 윈도우 가상머신에서 apt-get을 사용하지 않는다.


장점

1. 재부팅없이 시스템에 접근이 가능하다.

2. 윈도우에서 사용하면 한없이 느리다.


제약조건 

1. 모든 명령은 관리자 모드로 실행해야한다.

2. 윈도우에서 vitual box를 실행하고 다른 파티션에 설치된 linux를 이용하는 것을 기본으로 한다.


설정 방법

1. 파티션 확인

VirtualBox VMs>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands listpartitions -rawdisk \\.\PhysicalDrive0


1       0x07  0   /32 /33  13  /163/19           100         2048

2       0x07  13  /163/20  1023/239/63        276427       206848

6       0x83  1023/239/63  1023/239/63        192423    566331392 <-- linux

5       0x82  1023/239/63  1023/239/63          7986    960415744  <-- swap(?)


이런 결과가 나타나면 83은 extfs던가 그렇고 82는 swap파티션을 표시한다.

5,6은 하나의 묶음 :)


2. 가상머신 생성.

Virtual Box에서 linux를 선택후 다음 파일시스템을 vmdk로 설정 -> 다음 -> 해서 기본으로 설정.

Virtual Box VM 폴더로 이동.


대부분은 아래와 비슷한 위치에 위치함.

C:\Users\[username]\VirtualBox VMs>


3. 가상 디스크 생성


다음 명령을 실행하여 vmdk를 생성함.

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands createrawvmdk -filename "Ubuntu Linux (Real).vmdk" -rawdisk \\.\PhysicalDrive0 -partitions 6,5


4. 가상 디스크를 virtual box에 적용


저장소 적용후 시스템 시작을 하면 사용이 가능하다. 이후, virtual box tools를 설치한다.



!! 주의사항. : virtual box에서 real partition을 사용할 경우 apt-get등을 사용하여 업데이트를 하지 말것. (해보면 알아요~)



Posted by twintail twintail

라즈비안에서 언어 설정 관련 오류가 발생하는 경우 (펄 혹은 업데이트 할경우 나오는 메시지)

다음과 같은 경고 메시지가 나온다면 


Get:5 http://mirrordirector.raspbian.org/raspbian/ wheezy/main mpich2 armhf 1.4.1-4.2 [391 kB]

Fetched 2416 kB in 2s (910 kB/s)

perl: warning: Setting locale failed.

perl: warning: Please check that your locale settings:

        LANGUAGE = (unset),

        LC_ALL = (unset),

        LC_CTYPE = "UTF-8",

        LANG = "en_US.UTF-8"

    are supported and installed on your system.

perl: warning: Falling back to the standard locale ("C").

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

Selecting previously unselected package libhwloc5:armhf.


아래의 명령을 수행하여 해결 할 수 있다.


$ export LANGUAGE=en_US.UTF-8

$ export LANG=en_US.UTF-8

$ export LC_ALL=en_US.UTF-8

$ locale-gen en_US.UTF-8

$ dpkg-reconfigure locales


 그래도 해결은 안된다~! 그냥 .bashrc에 적어 넣을것~!

Posted by twintail twintail

클러스터링을 하면서 3대를 사용하면서 전원을 3개씩 넣는것이 불편하여 1개로 통합하였습니다.


강원전자에서 판매하는 미니 USB 3.0포트를  전원으로 활용하고 바닥에 배치하고,

라즈베리 파이 3개를 삼각형 형태로 조합하고 스페이서를 사용해 위치를 고정하게 했습니다.


USB와 랜포트를 사용하기 위해 위쪽으로 향하게 하여 제작하였습니다.


집에 남아도는 폐품을 모았다고 하는 편이 좋을 것 같네요. 

파이 3개를 삼각형으로 묶는데는 아이패드 케이스 포장재를 사용했고, 스페이서는 예전에 사용하고 남은 것들을 조합해서 갯수를 맞춰서 간신히..


전원연결에 사용한 부분은 구입을 했지만 3M 케이블 (500원인가?) 연결부를 분해해서 납땜을 좀 해봤네요. 거의 10년만에 해본 납땜입니다.

드릴같은 기본적인 도구도 없어서 전기인두로 구멍을 내서 사포로 다듬고 해서 만들었습니다. 그냥 재미로 보시면 될 것 같습니다.


아래쪽 에 보이는 것은 팬입니다. 12V용이라 회전속도는 빠르지 않지만 하단에서 통풍을 통해 냉각하기에는 충분해 보입니다. GPIO에서 5V전원을 사용합니다. 



동작중인 상태의 상단 모습. 안쪽 아래 부분에 보이는 파란색 램프가 USB허브의 동작램프입니다. 5V 3A를 전원을 통해 공급하므로 3대를 동작하는데는 무리가 없습니다. 오버 클럭을 사용하는 경우에는 전압을 생각해 봐야 합니다. 때문에 오버클럭은 800Mhz modelate를 사용합니다.

1Ghz를 사용할 경우 간혹 컴파일시에 오류가 발생하기도 하여 800으로 정하였습니다.


하단의 쿨러와 전원용 USB 3.0 허브, 스위치가 개별로 없어 전원을 연결하면 3개의 라즈베리가 동시에 켜집니다. 쓰나 안쓰나 똑같은 5V 3A라서 아직은 무시하고 있지만 조만간 스위치를 달아주거나 분해하거나 할 것 같네요.


전원부 뒤쪽의 모습. 오른쪽에 보시면 USB 3.0케이블을 연결 할 수 있습니다. 

전원과 USB 3.0케이블을 연결할 경우 더 안정적인 전원 이중화 효과를 볼수도 있고 요즘 많이 사용하는 휴대용 배터리를 전원 대용으로 연결도 가능합니다.


나중에는 다시 만들라고 해도 안 만들것 같고, 몇일전에 미니 스위치 허브가 생겼는데 위쪽에 차곡차곡 쌓아 버릴까 하는 생각도 합니다. :)


Posted by twintail twintail

raspberry pi 2 model b / mysql cluster 설치.


- 참고 사이트

https://markswarbrick.wordpress.com/2013/09/02/getting-mysql-cluster-compiled-installed/

블로그 내용을 참고하여 순서대로 진행한다.
추가로 bison을 설치한다. cmake이후 bison이 없다는 메시지가 나와서 그냥 설치.
$ sudo apt-get install bison

cmake 빌드시 경로 지정이 필요한다. 만일 지정하지 않는 다면 /usr/local 에 설치되는 경우가 발생할 수 있음.
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql


- db 생성 및 실행과정은 mysql Document 를 참고함.

http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-configuration.html


- 주의 사항

노드 구성은 1개 노드로 구성이 가능함.(단일 서버와 다를 바가 없음. 파이 3개를 사용함.)

추후 SD 메모리를 복사하여 서비스를 구성함.

SD 메모리가 8GB일 경우 설치 후 OS를 포함하여 6~7GB를 차지하므로 16GB이상의 SD메모리를 사용해야 한다. 

추후 메모리를 확장하는 방법도 있다. 예를 들어 16 -> 32 기가로 옮겨갈 경우  img를 사용하여 이동할 수는 있지만  32GB 중 16GB만을 파티션으로 사용하고 나머지 16GB는 프리 영역으로 생성이 된다. 잔여 영역인 16GB를 데이터 영역으로 파티션하고 특정 경로에 마운트하고 사용하는 방법도 있다. 여유가 된다면 16~32GB를 사용하는 것이 좋다. (어차피 메모리 디스크이므로 복잡하게 파티션 나누고 할 필요가 없다.)

만일 이미지 복제후 파티션이 필요하다면 다음 명령을 사용한다.
$ sudo parted

오버클럭을 할 경우 컴파일시 오류가 발생할 수 있다. 전압이 2V 상승하게 되어 전원 부족으로 컴파일시 오류가 발생한다.
Modest 800MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt 로 설치할 경우 이상없음을 확인.

컴파일하는 시간은 이전 모델에서는 4시간 정도 걸렸다고 하는데 이번 모델에서는 약 1시간 정도가 소요된다.(쿼드코어~!)

mysql 을 빌드(make)하고 설치(make install)에 성공했다고 해도  mysqld는 정상적으로 동작하지 않는다. 시스템 DB가 없으므로 생성해 줘야 한다.
$ cd /usr/local/mysql
$ sudo scripts/mysql_install_db
$ sudo bin/mysqld_safe

DB생성 후 pid 오류로 서버가 올라가지 않을 경우는
$ chown –R mysql ~/mysql

그밖의 경우는 대부분 설정 오류로 클러스터에 대한 개념 구성도를 확인하면 쉽게 해결이 가능하다.
domain/ip 에 의한 접속 설정시 한가지 방법을 사용한다.
domain 이 있을 경우에만 domain을 사용하여 설정한다.


-- 업데이트 중인 문서로 부정확한 정보를 포함하고 있음 --

Posted by twintail twintail

겨우 이것 때문에..?


윈도우에서 해보겠다고 시작한 것이 잘못이었나? 


$ gem install libv8 -v '3.11.8.17' -- --with-system-v8

Fetching: libv8-3.11.8.17.gem (100%)

Temporarily enhancing PATH to include DevKit...

Building native extensions with: '--with-system-v8'

This could take a while...

Successfully installed libv8-3.11.8.17

Parsing documentation for libv8-3.11.8.17

Installing ri documentation for libv8-3.11.8.17

Done installing documentation for libv8 after 1 seconds

1 gem installed


헐..;

$ gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\Program Files\MySQL\MySQL Server 5.6\li

b" --with-mysql-include="C:\Program Files\MySQL\MySQL Server 5.6\include" --with-mysql-dir="C:\Progra

m Files\MySQL\MySQL Server 5.6"'

Temporarily enhancing PATH to include DevKit...

Building native extensions with: '--with-mysql-lib="C:\Program Files\MySQL\MySQL Server 5.6\lib" --wit

h-mysql-include="C:\Program Files\MySQL\MySQL Server 5.6\include" --with-mysql-dir="C:\Program Files\M

ySQL\MySQL Server 5.6"'

This could take a while...

Successfully installed mysql2-0.3.16

Parsing documentation for mysql2-0.3.16

Installing ri documentation for mysql2-0.3.16

Done installing documentation for mysql2 after 0 seconds

1 gem installed


Posted by twintail twintail

예를 들어 14/02/24 또는 140224등으로 표시하면 2014중 앞 2자리를 잘라내야 하는데

java에서는 주로 format 함수를 사용하거나 문자열일 경우 자리 2자리를 버리는 과정을 거치고는 한다.

다.

   1: package codebasis;
   2:  
   3: import java.text.SimpleDateFormat;
   4: import java.util.Date;
   5:  
   6: import org.junit.Rule;
   7: import org.junit.Test;
   8: import org.junit.rules.TestName;
   9: import org.slf4j.Logger;
  10: import org.slf4j.LoggerFactory;
  11:  
  12: public class DateFormatPracticeTest {
  13:  
  14:     @Rule
  15:     public TestName name = new TestName();
  16:  
  17:     final Logger logger = LoggerFactory.getLogger(DateFormatPracticeTest.class);
  18:     
  19:     @Test
  20:     public void test() {
  21:         // fail("Not yet implemented");
  22:         long currentTimeMillis = System.currentTimeMillis();
  23:         Date date = new Date(currentTimeMillis);
  24:         
  25:         logger.info(name.getMethodName() + "-------- start");
  26:         logger.info(Long.toString(currentTimeMillis));
  27:         logger.info(date.toString());
  28:         
  29:         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
  30:         logger.info(sdf.format(date));
  31:         
  32:         sdf = new SimpleDateFormat("yy");
  33:         logger.info(sdf.format(date));
  34:         
  35:         sdf = new SimpleDateFormat("yyyy");
  36:         String formatedYear = sdf.format(date);
  37:         logger.info("Stirng formated Year = " + formatedYear);
  38:         long yearValue = Long.parseLong(formatedYear);
  39:         logger.info("long Valued Year = " + formatedYear);
  40:         
  41:         yearValue = yearValue % 100;
  42:         logger.info(String.valueOf(yearValue));
  43:         
  44:         logger.info(name.getMethodName() + "-------- end");
  45:     }
  46:  
  47: }
   1: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   2:     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   3:     <modelVersion>4.0.0</modelVersion>
   4:     <groupId>codebasis</groupId>
   5:     <artifactId>CodePractice</artifactId>
   6:     <version>0.0.1-SNAPSHOT</version>
   7:     <properties>
   8:         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   9:     </properties>
  10:     <dependencies>
  11:         <dependency>
  12:             <groupId>junit</groupId>
  13:             <artifactId>junit</artifactId>
  14:             <version>4.8.1</version>
  15:             <scope>test</scope>
  16:         </dependency>
  17:         <dependency>
  18:             <groupId>org.slf4j</groupId>
  19:             <artifactId>slf4j-api</artifactId>
  20:             <version>1.7.6</version>
  21:         </dependency>
  22:         <dependency>
  23:             <groupId>org.slf4j</groupId>
  24:             <artifactId>slf4j-simple</artifactId>
  25:             <version>1.7.6</version>
  26:         </dependency>
  27:     </dependencies>
  28: </project>

 

작성하다 보니 역시 익숙한 SimpleDateFormat을 사용하면 간단합니다.

반면에 long 형의 연도를 받았다면 예를 들어 2014에서 뒷자리 두자리만 남기려면 2014 % 100하면 됩니다.

 

참고 : Long 과 long 을 간혹 혼용하시는 경우가 있는데 같아 보이지만 다른 용도로 사용됩니다.

Long은 객체(클래스)이고 long은 변수입니다.

 

Posted by twintail twintail