[ASM] IT Block

이게 ARM에만 관련된 것인지는 확실치 않다.

일단 ARM Compiler toolchain Assembler Reference에 IT instruction에 관한 설명(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjabicci.html)이 있다.

IT는 (If-Then) instuction을 말한다. 이름에서 알 수 있듯이, 분류는 Branch and control instruction 이다. IT instruction은 4개의 이어지는 instructions conditional로 구성되는데, 이를 IT block이라고 한다. 이들 condition은 모두 같을 수도, 일부는 다른 것들과 논리적으로 반대일 수도 있다. 이 instruction이 conditional flags를 바꾸지는 않는다.

IT{x{y{z}}} {cond} 로 쓰인다.

x는 그 IT block에서 두번째 instruction을 위한 condition switch, y는 세번째, z는 4번째, cond는 첫번째이다.

IT block의 2번째에서 4번째 instruction은 다음 중 하나일 수 있다:

T: Then. cond condition이 적용된다.

E: Else. cond의 반대 condition이 적용된다.

BKPT instruction을 제외한 IT block 안의 (branches를 포함하는) instrcution들은 {cond} 부분에 condition을 적어야 한다.

assembler가 뒤의 instruction에 적힌 condition에 따라 자동으로 생성해주므로, IT instrcution을 작성할 필요는 없다. IT instruction을 작성한다면, assembler가 그 validity를 체크한다.

ARM code를 assembling할 때 assembler가 같은 체크를 하지만, IT instrcution을 생성하지는 않는다.

CMP, CMN, TST를 제외한 condition code flags에 영향을 주지 않는 16-bit instrcution들은 IT blcok안에서 사용되어도 상관없다.

IT block 안의 BKPT instrcution은 언제나 실행되기 때문에 {cond} 부분 안에 condition은 필요없다. IT bock은 그 다음 instrcution부터 이어진다.

NOTE: AL condition을 사용함으로써 unconditional instruction을 위한 IT block을 사용할 수 있다.

IT block 안에서의 conditional branches는 IT block 밖에 있는 것보다 더 긴 branch range를 갖는다.

IT block 안에 다음 instruction들은 허용되지 않는다

  • IT
  • CBZ, CBNZ
  • TBB, TBH
  • CPS, CPSID, CPSIE
  • SETEND

IT block이 사용될 때 다른 제한은 다음과 같다.

  • PC를 바꾸는 branch나 다른 instrcution은 그 instruction이 그 block의 마지막 instruction일 때만 허용된다.
  • exception handler로부터 되돌아가기 전까지는 IT block 안의 어떤 instruction으로도 branch할 수 없다.
  • IT block 안에서 어떤 assembler directive도 사용할 수 없다.

NOTE: assembler는 IT block 안에서 이들 instruction들이 사용되면 disgnostic message를 출력한다.

[Raspberry Pi] 라즈베리파이에 미디어위키(MediaWiki) 설치

라즈베리파이의 OS, Raspbian에서는 패키지를 제공하므로 매우 간단하다.

sudo apt-get install mediawiki

 

설치하면 apache2의 available configuration에 mediawiki라는 새로운 configuration(/etc/apache2/conf-available/mediawiki.conf)이 생긴다.

아래의 Alias를 풀어서 /mediawiki 로 접근해도 된다.

#Alias /mediawiki /var/lib/mediawiki

 

난 VirtualHost를 이용한다.

/etc/apache2/sites-available/wiki.dasomoli.org.conf

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName wiki.dasomoli.org

        ServerAdmin dasomoli@gmail.com
        DocumentRoot /var/lib/mediawiki

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/wiki_error.log
        CustomLog ${APACHE_LOG_DIR}/wiki.access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        Include conf-available/serve-cgi-bin.conf
</VirtualHost>

 

이제 mediawiki configuration을 enable 하자

sudo a2enconf mediawiki

wiki.dasomoli.org site도 enable하자

sudo a2ensite wiki.dasomoli.org.conf

apache2도 reload하자

sudo service apache2 reload

 

이제 wiki.dasomoli.org에 접속해서 mediawiki 설치를 시작한다.

설치가 끝나면 LocalSettings.php 파일을 저장할 수 있는데, 이 파일을 /etc/mediawiki/LocalSettings.php 로 저장한다.

다시 wiki.dasomoli.org로 접속해보면. 설치된 위키를 볼 수 있다!

 

If I Had My Child to Raise Over Again – Diana Loomans

If I had my child to raise over again,

I’d finger paint more, and point the finger less.

I’d do less correcting, and more connecting.

I’d take my eyes off my watch, and watch with my eyes.

I would care to know less, and know to care more.

I’d take more hikes and fly more kites.

I’d stop playing serious, and seriously play.

I’d run through more fields, and gaze at more stars.

I’d do more hugging, and less tugging.

I would be firm less often, and affirm much more.

I’d build self-esteem first, and the house later.

I’d teach less about the love of power,

And more about the power of love.

It matters not whether my child is big or small,

For this day forth, I’ll cherish it all.

[Perl] 정규식으로 문자열 찾기

#!/usr/bin/perl -w

open(F, "cl.txt");

@strings = <F>;

sub getIssue
{
    foreach $line (@strings) {
        $lihttps://ko.perlmaven.com/matching-numbers-using-perl-regexne =~ s/^\s+//;
        $line =~ s/\s+$//;
        if ($line =~ /\[[I|i][S|s][S|s][U|u][E|e]\s*[#]*\]\s*([A-Za-z0-9_.\-]+)/) {
        $desc = $1;
        
        return $desc;
    }

    $desc;
};

$issue = &getIssue();

close(F);

.* 가 모든 문자.

참고 : https://ko.perlmaven.com/matching-numbers-using-perl-regex

[C++11] Variable declaration

1. typedef 대신 using 사용

typedef double salary;

위는 아래와 같이 사용 가능하다.

using salara = double;

2. 자료형을 자동으로 결정: auto

int n = 2;

auto answer1 = n;

당연히 값을 넣어야 타입이 정해진다.

3. 자료형을 자동으로 결정: decltype

3.1. decltype ( function() ) var;

function의 return value type으로 변수 선언

3.2. decltype ( variable1 ) var;

variable1으로 var 선언

3.3. decltype ( (variable1) ) var;

variable1의 reference로 var 선언

가스 보일러 교체 가이드

가스 보일러 교체를 알아보고 했다.

요약하면,
상향식/하향식, FF/FE 방식, 집 평수, 온수 사용량, 고급기능 쓰고 싶은지에 따라 일반/콘덴싱, 보일러 용량, 제조사, 모델을 정한다. 그 후 가스검사비, 보험 및 서류 접수비, 연도 교체가 필요한지와 그 비용, 배관 청소를 해주는지, 가스관을 교체해야 한다면 그 비용, 벽에 구멍(코어) 뚫어야 한다면 그 비용, 배관 부속을 뭘 쓰는지, 조절기가 혹시 각방에 있다면 어떤지, 분배기 교체가 필요한지 보고 교체 필요하다면 그 비용을 문의하고 견적을 받아 하고 싶은 곳에서 하면 된다.

가스 보일러는 일단 일반 보일러와 콘덴싱 보일러로 나뉜다. 콘덴싱이 효율이 크게 좋다고 광고하지만 크게 차이는 안난다고도 하는데 아무튼 가스비가 덜 나오는 것은 사실이다. 다만, 보일러 가격이 일반 보일러보다 더 비싸므로 고려해서 선택한다. 난 그냥 콘덴싱 ㅋ

두 보일러 간 교체, 즉, 일반->콘덴싱 혹은 콘덴싱->일반인 경우는 방식 차이로 연기가 빠져 나가는 길(배기구), 즉 연도를 교체해야 한다. 따라서 이 비용이 발생하는데, 이걸 그냥 해주는데도 있고 추가 비용으로 받는데도 있다. 콘덴싱 보일러의 경우 연도가 위로 기울어지도록 설치되어야 하고, 일반 보일러는 아래쪽을 향하도록 설치되어야 한다. 콘덴싱 보일러의 경우는 에어컨처럼 응축수가 발생하므로 이 물이 빠져나갈 배수구가 보일러 설치 위치의 3미터 이내에 있어야만 한다. 콘덴싱 보일러의 경우, 환경부 주도로 저녹스 보일러 교체 지원금을 주기도 하므로 콘덴싱 보일러를 골랐다면 시청 등 지자체에 알아보자. 현재는 마감ㅠㅠ 2018년 2월 말부터 아마 다시 접수받지 않을까 한다.

보일러를 고르고 나면, 용량을 정해야 하는데 난방 면적 즉, 평형에 따라 적절한 용량이 정해져 있다. 온수를 많이 쓴다면 윗 등급을 쓰는 것이 좋다고도 하는데, 아무래도 보일러 가격이 좀 더 비싸다. 난방비는 면적이 같다면 같은 연료를 사용하므로 난방비 차이는 없다고 한다. 이 글을 참고하면, 난방 면적 * (500~600) + 온수 사용을 위한 10000 또는 넉넉히 16000 으로 계산하면 된다고 한다. 일반적으로는 전용면적 24평(공급 면적 3x평)의 경우, 일반 보일러는 20K, 콘덴싱은 22K를 쓰는 것이 좋다고 한다.

온수 방식에 따라 순간식과 저탕식으로 나눌 수 있는데, 온수 저장 탱크가 있느냐, 없느냐 차이이다. 저탕식은 대용량 온수 공급에 더 장점이 있고 난방과 온수가 함께 되지만, 아무래도 보일러 크기가 크고, 예열이 필요하고, 연료비가 더 든다. 순간식은 반대로 예열없이 난방이나 온수가 바로 되고, 온수 사용 시에만 급탕이 이뤄지므로 연료비가 덜 들지만, 온수를 쓸 때는 난방이 안된다. 대부분의 보일러는 순간식이다.

보일러 제조사는 경동, 린나이, 귀뚜라미 등이 있는데, 린나이가 작년에 좋은 평가를 받았다고 한다. 경동은 거의 항상 좋은 평가를 받지만 상대적으로 가격이 좀 더 비싸고, 귀뚜라미는 취급점이 많고 가격은 상대적으로 싸지만 경동보단 좀 못하다란 평가를 받는 듯 하다. 그런데 지진 났을 때 지진감지기는 귀뚜라미만 달렸었다고 한다(린나이는 일본회사라던데 왜?). 각 제조사 별 보증기간도 차이가 있다. 보일러도 역시 실사용자 의견이 중요한데, 난 어머님들이 제일 잘 아시고 공유도 잘된다고 본다. 각자 어머니께 여쭤보자.

보일러를 알아볼 때는 자기 집이 상향식인지, 하향식인지 알아야 한다. 대부분의 경우 바닥이 보일러보다 낮은 경우, 그래서 물이 아래로 내려가는 하향식인데, 방바닥보다 아래 보일러가 위치하는, 예를 들면, 지하실에 보일러가 있다던지 하는 경우는 상향식이라 한다. 상향식, 하향식에 따라 보일러가 다르다.

공동 주택, 즉, 아파트 같은 경우 FF방식인지, FE방식인지 알아야 한다. FF(Forced Draught Balanced Flue: 강제 급배기)방식은 급기와 배기를 강제로 하는 방식으로 연통에 급기를 위한 관과 배기를 위한 관이 함께 연결되어 있다. 연통에 스테인레스로 된 쭈글쭈글한 관이 함께 연결되어 있다면, FF 방식이다. 연소를 위한 공기를 외부에서 연통을 통해 직접 가져오므로, 공동배기구 즉, 공동 굴뚝이 아닌 개별 연통을 사용해 개별 집마다 따로 연통이 나온다. 급배기 모두 외부로 연결된 연통을 통해 하므로 밀폐식으로 되며 실내 공기의 오염이 없다. FE(Forced Exaust: 강제 배기)방식은 연소에 필요한 공기의 급기는 실내에서 그냥 하고, 배기 가스는 팬으로 불어서 배기통을 통해 실외로 배출한다. 따라서 반밀폐식이 되며, 배기관만 있고 실내에 공기 유입을 위한 급배기구(=환기구: 갤러리)를 보일러 설치 위치의 상하로 설치한다. 오래된 아파트에 공동 굴뚝이 있는 경우 이 방식이다. 당연히 공동 굴뚝일 경우 폐가스 유입이 없도록 배기구가 밀봉(실리콘 마감으로 하는 듯하다)되어야 한다. 공기 오염이 있을 수 있으므로 전용 보일러실이 있는 경우에만 설치할 수 있다. 아니면 환기가 엄청 잘되던가. 근데 보일러실이 없으면 도시가스에서 허가가 안난다. 환기가 잘 안되서 급기가 잘 안되면 효율이 안 좋아지므로 연료비가 더 많이 들게 된다. 둘 다 강제 방식인데 보일러 내부에 있는 팬을 통해 강제로 하기 때문이다. 유럽에서는 CF(Conventional Flue: 자연배기)방식으로 외부 공기로 바로 급기하고 배출하는 그래서 그냥 외부에 설치하는 보일러도 있다고 한다. 이 방식을 바꾼다면, FF방식에서 FE방식으로 바꾸는 일은 거의 없을 것이고, 거의 FE->FF로 바꾸게 될텐데, 이 경우 공동배기구를 막는 작업, 외부로 연통을 빼기 위한 구멍(코어)을 뚫는 작업, 연도 교체에 대한 비용이 나온다. 갤러리도 아마 막을 것 같은데? 난 어차피 FF라서..

가스관의 경우, 플렉서블 호스(기사들은 후렉시블이라고 부른다)가 오래된 경우 교체해야 할 수 있다. 교체 비용이 추가되는데 만원? 정도 한단다. 가스가 연결되는 관인 만큼 안전 상 매우 중요한 부품으로, 전문 업체라면 기사 역량에 교체 여부를 맡기거나, 맘 편하게 교체해달라고 하는 것도 괜찮아 보인다.

배관 청소는 보일러를 교체하는 경우 거의 배관 청소를 그냥 해준다고 하는데, 거의 대부분은 수도 연결해서 해주는 걸 말한다. 콤프레셔 같은 기계를 이용해서 배관청소만 따로 하는 업체에서 할 수도 있는데 비용이 좀 들거다. 분배기 쪽의 관들을 보면 색이 누렇거나 붉거나 갈색이라면, 녹 등으로 찌꺼기가 많은 상태이므로 배관 청소를 하는게 좋을 거 같긴 한데 난 깨끗하더라. 인터넷에 나오는 DIY 배관청소! 이런데 나오는 20mm 단니플 2개로 보일러에 연결된 난방급수와 난방환수를 빼서 수도(세탁기 호스)를 급수에, 하수구로 환수에 연결 후 분배기를 모두 잠그고 하나씩만 열면서 하는 그 방법으로 해준다.

배관 연결 시에는 신주(신쭈라고 발음하더라) 부속물을 쓰는 것이 좋다. 그러므로 신주 부속물을 쓰는 업체를 이용하자. 신주(真鍮しんちゅう.(놋쇠))는 일본어로 황동을 말하는데, 일본어 쓰임의 잔재로 보인다. 인터넷에서 싸게 하는 경우, 신주가 아닌 플라스틱 부속물을 쓰는 경우가 대부분인데, 이 경우 대부분 시간이 좀 지나면 곧 말썽이 생긴다. ‘저희는 사출 써요’라고 하면 플라스틱 쓴단 얘기다. 보일러 대리점의 경우는 거의 신주를 쓰지만, 물어보라.

도시가스 서류 접수비, 보험비도 따로 받는 경우가 있는데 비용에 포함된 것인지 문의하자. 무자격자의 경우 보증보험증권을 빌려와서 설치검사비, 서류대라는 명목으로 추가비용을 요청한다고 한다. 자격 보유 업체는 이 비용을 청구하지 않는다고 하고, 가스보일러시공확인서와 보증보험증권을 발행한다고 한다. 난 근데 보증보험증권은 못받았다. 시공확인서는 보일러에 시공확인증이라고 스티커를 붙여놓고 가기는 했는데, 보일러 업체 홈페이지에 써있는 대리점에 했는데 자기네는 보험 다 들어져 있다고 전화로 하긴 하던데..

분배기 교체가 필요한 경우, 배관구가 몇개인지에 따라 1구당 비용이 추가된다고 한다. 난 해당하지 않아 잘 모르겠다. 분배기와 부속들 값은 사실 별로 안하는데, 분배기 교체의 경우 전문가에게 맡기는 것을 추천한다고 한다. 대부분 싱크대 아래 같은 좁은데서 엑셀 파이프 자르고 부속 연결하고, 테프론 테이프 감고 하는게 매우 욕나온다고 한다. 추가로 배관청소도 다시 해야 한다.

설치 비용이 인터넷으로 하는게 더 싸다고들 하지만, 잘 알아보자. 나는 가까운 보일러집, 인터넷 업체, 보일러 업체 대리점 순으로 알아보았는데, 의외로 보일러 업체 대리점이 내가 원하는 조건으로 가장 쌌다. 인터넷 업체들은 판매업체는 달라도 설치 문의 시의 휴대폰 번호는 중복된 것이 많은 것으로 보아 설치 기사는 그냥 같을 수 있다. 보일러 업체 대리점은 사는 곳에 따라 다른 시의 대리점이 더 가까울 수 있다. 예로 동탄의 경우는 화성점보다 오산점이 오히려 더 가까울 수 있다.

[Microsoft Word] 이전 위치로 돌아가기 단축키

웹브라우저를 쓴다던가, Eclipse 같은 툴을 쓰면 이전 위치로 돌아가고자 할 때, Alt + ‘<-‘ 를 사용해서 돌아가곤 한다. 그러나 마이크로소프트 워드 문서를 볼 때는 이게 안먹어서 뭐려나 하고 찾아보니 다음과 같다.

Shift + F5: 이전 편집 위치(Editing position)

Ctrl + Alt + ‘Z’: 이전 커서 위치

긴 문서를 볼 때는 이 기능이 꼭 필요하다.

참고: https://superuser.com/questions/938328/is-there-a-keyboard-shortcut-to-return-to-previous-position

ATOM editor 사용법

생활코딩에 Atom editor 사용법(https://opentutorials.org/module/1579)이 있길래, 보면서 몇가지 적는다. 적다보니, 내가 뭘 또 이런 것까지 적고 있나 싶긴 한데… ^^;;

  • Toggle tree view:  View / Toggle Tree view (Ctrl + \)
  • Find in buffer: Ctrl + F
  • Find Next: F3, Find Previous: Shift + F3
  • Find File: Ctrl + P. 파일명 일부 혹은 패턴만 쳐도 찾아준다.
  • 아래쪽 오른쪽에 나온 Auto detect 된 File type이 나온다. 변경하고 싶다면 클릭 후 변경.
  • Toggle Developer tools: View / Developer / Toggle Developer tools (Ctrl + Shift + I)
  • Stylesheet: Atom 에디터 내의 element들의 lesscss를 수정할 수 있다. File / Stylesheet
  • Plugins:
    • emmet: HTML tag 작성 시, syntax 작성 후 Tab 혹은 Ctrl+E 하면 html로 풀어준다.
      • !: html template 입력
      • li*20: <li></li> 가 20개 입력.
      • li>a*20: <li> <a href=””></a><a href=””></a>…<a href=””></a> </li>
      • (li>a)*20: <li><a href=””></a></li> <li><a href=””></a></li>…<li><a href=””></a></li>
      • Syntax: https://docs.emmet.io/cheat-sheet/, 더 자세히는 https://docs.emmet.io/abbreviations/syntax/, CSS도 abbreviation 제공(https://docs.emmet.io/css-abbreviations/)
        • Child: >
          • div>ul>li
            <div>
                <ul>
                    <li></li>
                </ul>
            </div>
        • Sibling: +
          • div+p+bq
            <div></div>
            <p></p>
            <blockquote></blockquote>
        • Climb up: ^
          • nav>ul>li^^a
            <nav>
                <ul>
                    <li></li>
                </ul>
            </nav>
            <a href=""></a>
        • Multiplication: *
          • a*10
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
        • Grouping: ()
          • nav>ul>(li>a)*5
            <nav>
                <ul>
                    <li><a href=""></a></li>
                    <li><a href=""></a></li>
                    <li><a href=""></a></li>
                    <li><a href=""></a></li>
                    <li><a href=""></a></li>
                </ul>
            </nav>
        • Attiribute:
          • ID attribite: #
            • nav#navigation
              <nav id="navigation"></nav>
          • Class attribute: .
            • li.list
              <li class="list"></li>
          • Tag attribute: []
            • a[target=”_blank” title=”asdf”]
              <a href="" target="_blank" title="asdf"></a>
        • Value: {}
          • li>a>{table}
            <li><a href="">table</a></li>
        • Numbering: $
          • ul.li.item$*5
            <ul class="li item1"></ul>
            <ul class="li item2"></ul>
            <ul class="li item3"></ul>
            <ul class="li item4"></ul>
            <ul class="li item5"></ul>
    • script: script를 입력 후 단축키(Shift + Ctrl + B로 바로 실행 결과 확인. 실행 환경은 따로 설치해야 함.