메일: https://mail.worksmobile.com

주소록: https://contact.worksmobile.com

 

LINE WORKS를 이용하기 위한 접속 URL이 어떻게 되나요?

LINE WORKS 브랜드사이트 우측상단의 ‘My 서비스’를 클릭하면  로그인을 거쳐 Lite 상품 이용자는 홈 서비스로, Basic 또는 Premium 상품 이용자는 메일 서비스로 접속할 수 있습니다.

그 외 이용 중인 상품에 따라 아래의 각 서비스 페이지로 로그인해서 직접 접속할 수 있습니다.

Lite 상품

Basic 또는 Premium 상품

 

help.worksmobile.com/kr/topic/common/support-environment/urls-to-access-line-works/

 

LINE WORKS를 이용하기 위한 접속 URL이 어떻게 되나요? – 주제별 질문 – LINE WORKS 헬프센터

LINE WORKS 브랜드사이트 우측상단의 ‘My 서비스’를 클릭하면  로그인을 거쳐 Lite 상품 이용자는 홈 서비스로, Basic 또는 Premium 상품 이용자는 메일 서비스로 접속할 수 있습니다. 그 외 이용 중인

help.worksmobile.com

참... 오래 간다. 이 버그 ㅠㅠ 그냥 포스팅 해 두는게 낫겠다.

'블로그 항해 일지 > Tips' 카테고리의 다른 글

어제 오늘 방문자 수  (0) 2019.02.08
powergrep exclude  (0) 2019.01.22
포스트맨 정말 좋다.  (0) 2019.01.11
github에서 repo 미리 만들고 커맨드로 머지하기  (0) 2019.01.07
파이썬 관련 주요 인물  (0) 2019.01.06



하루 신고 후기 올림

아직 길들여 지지 않아서 좀 딱딱한 느낌이 있다.

미끄러운 곳을 지나갔는데(아침 막 청소한 대리석 바닥의 상가) 느낌이 괜찮았다.

조그셔틀(레드페이스에서는 다른 이름 이던데)도 부드럽다. 내구성은 오래 사용해봐야 아는 것이겠지만

상당히 만족스럽다. 비올 때 여러 상황에서도 신어보고
댓글로 후기를 남겨두려고 초석을 심는다.

26일 KBS 로 간다. 처음 가는 거라서 가는 방법을 기록해 두려고 일단 페이지를 만들었다. 추 후 수정 예정.




그 때는 안철수를 존경했었다.


블로그의 내 정치 성향도 바뀐다.

구글에 정리가 잘 되어있다.

'블로그 항해 일지' 카테고리의 다른 글

KBS 가는 방법  (0) 2019.03.19
운영했던 사이트  (0) 2019.03.18
내 블로그 내 사람들의 최대 관심사는 현실적 이야기  (0) 2019.03.18


다들 현실적 이야기에 관심이 많구나. 역시나.

'블로그 항해 일지' 카테고리의 다른 글

KBS 가는 방법  (0) 2019.03.19
운영했던 사이트  (0) 2019.03.18
블로그 방향 정할 떄 도움되는 카테고리 목록  (0) 2019.03.18



커피 마시는데 속이 좀 이상해서 보니 바킹 부분 뚜껑이 깨져 있었다. 좋다고 2개 주문해서 쓰고 있는데...

본디 쿠팡에 후기를 남겨야 겠으나,
쿠팡 골드박스 제품 사서 라돈이 많이 나와 후기 남겼더니

업체 대표가 전화와서 이미 여기 포스팅을 했었기에 이번 경우는 그냥 블로그에만 올린다.

깨진 형태를 보면(빙 둘러서) 플라스틱 강도 문제이지 않을까?

다들 무탈하시길.


비싸도 역사 전통 있는 브랜드 써야겠다. 이제 늙어서...



미국에서 사던 하얀색 크림이 떨어져서 국내서
쉽게 구할 대체품을 찾다가 이걸 찾아서
수년간 잘 썼다.

아이에게 잘 맞는 듯

개발 하신 분들 고맙수다~

올 해 들어 아이패드 구입 3개째다.
장모님 어머니 딸아이
셋 다 너무 좋아한다. 처음엔 반대도 있었다.
무슨 그런 걸 어른 주냐고.
페이스 타임과 커다란 앨범 하나면 충분했고,
너무 좋아하시는 부모님의 얼굴을 보며
반대했던 자신이 마음이 심히 부끄러웠으리라.


마지막의 책 선물과 함께 하면,
비로소 감동 패키지가 완성된다.

'블로그 항해 일지 > !Y. 구매 제품' 카테고리의 다른 글

쿠팡에서 파는 텀블러  (0) 2019.03.08
ATOPALM MLE LOTION  (0) 2019.03.08
아이패드 박스의 비밀  (0) 2019.02.17
해피키친 타이야키 오단고  (0) 2019.02.16
burberry 버버리 스킨 달팽이 크림  (4) 2019.02.13

3M 포스트 잇의 붙는 부분은 종이의 다른 부분보다 더 얆게 만드는 것은 많은 사람이 알고 있는 사실이다.



애플 제품을 사서 처음 언박싱 할 때 느낌은
애플 제품을 산 사람은 모두 잘 알 것이다.

살짝 같이 들리면서 내려오는 뒷 박스
그 사이 느껴지는 공기 이동 질감
바닥에 완전에 붙지 않고 살짝 띄워지면서도
답답하지 않은 열림은
모서리의 이런 공간을 배치하면서
만들어지는 것이다.

nothing and everything
이며, 작은 차이로 고객에 대한 생각을 말할 수 있다.

그리고 내가 삼성전자 무선 사업부에서 옴니아부터
담당했던 엔지니어로서 패키징은 삼성이 애플을 배꼈다는 것을 말할 수 있다.

오지지널스 말처럼 처음 한 놈들보다 배껴서 잘 된 라스트 무버가 중요하지만

정말 그렇다면 위안부나 국가 유공자를 기억할 필요도 없을 것이다.

물타기를 조금 하면 애플도 삼성 많이 배꼈다. 기술 부분에서 말이다. 도찐개찐 논리를 펴고 싶진 않지만 팩트가 그렇다.



일반 스킨이 아니라 향수 수준임. 바르면 다 향수 뿌렸냐고 함. 알고 보면 향수를 바르고 있었나? ㅋㅋ

향이 너무 좋음.

그런데 얼굴 너무 땡김.

달팽이 크림 발라주면 딱 좋음.

버버리 애프터쉐이브 백화점에서 15만원 줬는데 쿠팡 보니 육만원에 배송비 15000밖에 안함 ㅠ 반값임

향수를 얼굴에 바르고 싶은 분께 추천.

<!-- 방문자수 -->

<div class="section">

<div class="tx">

<p class="today">today : </p>

<p class="yesterday">yesterday : </p>

</div>

</div>

today :

yesterday :

SRSExample-webapp (1).doc


'블로그 항해 일지 > !F. Software Engineering' 카테고리의 다른 글

Performance requirements  (0) 2019.01.27
External Interface Requirements  (0) 2019.01.27
USE CASE의 중요성  (0) 2019.01.27

IoT 디바이스를 만든다고 하면 사실 S/W 부분보다 H/W 성능이 조건이 더 중요할 것이다. 또, RESTAPI도 많이 이용되므로 서버 성능도 함께 고려해야 한다.


얼마나 많은 트렉젝션(소켓통신, 패킷단위, DB CRUD, ...)을 감당할 수 있는지 해당 부분에 대한 포괄적인 사용 기준을 정해서 일반 사용자는 이러이러한 만큼 쓸 것이다. 그런 사용자를 얼마만큼 포용할 수 있는가 등... 


성능 조건은 스스로를 옥죄는 항목이 될 수도 있기 때문에 최대한 루즈하게 적어야 한다. 그러나 사람 목숨과 관련된 부분이라면 루즈한 성능 조건 정의가 되려 설득력을 잃을 수도 있기 때문에 성능 요구사항은 정말 각 실무자들이 최대한 협업해서 적어야 하는 항목일 수 밖에 없다. 기업간의 하청에도 늘 꼬투리를 잡거나 잡힐 수 있는 부분이니 이 부분 관련해서 우선 대화를 많이 해야 한다. 술자리도 좋다.




If there are performance requirements for the product under various circumstances, state them here and explain their rationale, to help the developers understand the intent and make suitable design choices.

Specify the timing relationships for real time systems.

Make such requirements as specific as possible. You may need to state performance requirements for individual functional requirements or features here or Functional Requirements section.

 

Specify both the static and the dynamic numerical requirements placed on the software or on human interaction with the software, as a whole. 

Static numerical requirements may include:

      (a)  The number of terminals to be supported

      (b)  The number of simultaneous users to be supported

      (c)  Amount and type of information to be handled

Static numerical requirements are sometimes identified under a separate section entitled capacity.

 

Dynamic numerical requirements may include, for example, the numbers of transactions and tasks and the amount of data to be processed within certain time periods for both normal and peak workload conditions.

All of these requirements should be stated in measurable terms.

For example,

95% of the transactions shall be processed in less than 1 second

rather than,

An operator shall not have to wait for the transaction to complete.

(Note: Numerical limits applied to one specific function are normally specified as part of the processing subparagraph description of that function.)



   Throughput (작업처리량) , Concurrent Session (동시 세션), Response Time (대응시간),  Performance Dependency (성능 종속 관계), Other Performance Requirements (기타 성능 요구사항)

'블로그 항해 일지 > !F. Software Engineering' 카테고리의 다른 글

[SRS Sample] Web Publishing System  (0) 2019.01.28
External Interface Requirements  (0) 2019.01.27
USE CASE의 중요성  (0) 2019.01.27

         External Interface Requirements (외부 인터페이스 요구사항)


여기에는 System Interface, User Interface, Hardware/Software Interface, Communication Interface, 기타 인터페이스가 포함되어야 하고 시스템 자체는 그룹화해서 표현해야 한다. 이것은 회사마다 양식이 다른데 꼭 SRS 포멧에 맞출 필요가 없다. 해당 문서를 첨부하고 첨부한 문서에 번호를 붙여(SRS-시스템이름-001) 따로 문서를 만들었다고 기입하면 된다. 그것이 power pointer 일 수도 있고 word 문서일 수도 있겠다. 모바일인 경우 User Interface는 simpli나 zeplin 일수도 있다. 기업간의 경우 주소로 대체해도 되겠으나 FDA 승인의 경우 printable 한 문서 형태여야 한다는 것이 주의점이다. 이것도 시대가 바뀌면 계속 바뀌겠지. User Case로 그린 후 첨부할 때는 동그라미(사용 사례, Use Case) 들이 사각형(시스템)안에 들어가도록 배치하고 <<시스템>> 혹은 <<하위시스템>>으로 명시한 후 아래 이름을 적어주면 된다.


졸라맨, 동그라미, 사각형, 화살표만 있는데 나름 규칙이 있으니 우선 따르고 본인이 고객을 상대하면서 변화되는 것을 반영하면 되겠다. 식약처든 FDA던 결국 요구사항에 대한 acceptance test에 대한 논의는 모두 이해 관계자들이 하게 되니까 너무 형식에 구애 받을 필요는 없다. 그러나 형식이 있는 이유는 혹시라도 생각하지 못했던 것에 대한 확인이니 되도록이면 따르는게 좋다.

 



 

If the product is independent and totally self-contained, it should be so stated here.  If the SRS defines a product that is a component of a larger system, as frequently occurs, then this subsection relates the requirements of the larger system to functionality of the software and identifies interfaces between that system and the software. 

 

A block diagram showing the major components of the larger system, interconnections, and external interfaces can be helpful.  This is not a design or architecture picture.  It is more to provide context, especially if your system will interact with external actors.  The system you are building should be shown as a black box.  Let the design document present the internals.

 

This contains a detailed description of all inputs into and outputs from the software system.

 

It contains both content and format as follows:

 

·          Name of item

·          Description of purpose

·          Source of input or destination of output

·          Valid range, accuracy and/or tolerance

·          Units of measure

·          Timing

·          Relationships to other inputs/outputs

·          Screen formats/organization

·          Window formats/organization

·          Data formats

·          Command formats

·          End messages

 

If the external interfaces are complicated , you may write a separate Interface Requirement Specification document for all or any of the following interfaces.




'블로그 항해 일지 > !F. Software Engineering' 카테고리의 다른 글

[SRS Sample] Web Publishing System  (0) 2019.01.28
Performance requirements  (0) 2019.01.27
USE CASE의 중요성  (0) 2019.01.27

난 UML을 그릴 때 visio 나 visual studio 2015 enterprise 버전을 이용한다. Xcode에는 없는 기능이다.


https://channel9.msdn.com/Series/Visual-Studio-2012-Premium-and-Ultimate-Overview-KOR/Visual-Studio-Ultimate-2012-Improving-architecture-through-modeling-KOR


이런 동영상이 있긴 하지만 사실 UML은 많이 보고 또 많이 그려보는 수 밖에 답이 없다. 그리고 USE CASE의 모든 규칙을 지킬 필요도 없다.


USECASE는 requirements analysis 단계에서 작성하는 것이고 그것은 고객과의 의사 소통을 돕기 위해 만드는 것이지 내가 아는 지식을 자랑하려고 하는 것은 아니기 때문이다. 그리고 대부분의 고객은 돈이 많은 정도와 알고 있는 IT 지식이 반비례 하는 경우가 많다. 내가 하청을 받을 때는 몰랐는데 직접 고객을 만나 대응하는 경우 우 수백억의 자산가들은 IT에 대해서 전혀 모른다. 


보통은 use case를 그리지도 않고 구두로 설명하거나 해당 기술을 설명할 때 기껏 써봐야 sequence diagram, 개발자를 데리고 나온 경우 class diagram 정도였다. 그 중에서 나이 드신 분들도 좋아하는 것은 졸라맨(Actor)이 있는 use case 이다. 졸라맨과 벤다이어그램 하나면 시스템 전체를 설명할 수 있으니 정말 좋다.

그리고 같은 시스템이라도 다양한 관점에서 표현하고 구두로 설명하다보면 고객은 이해를 하고 IT 문외한인 자신도 이해하는 쉽고 자세한 설명을 할 수 있는 사람을 고수로 본다. 돈이 많은 데에는 이유가 있고, 대부분의 IT 기업 사장들이 그러하듯, 돈만 많고 IT는 전혀 몰라... 하는 식으로 접근하면 제대로 된 일을 따기란 불가능 하다고 생각하면 된다. 예전엔 먹혔지만 요즈음엔 다들 영악해서 일을 따더라도 헐값에 처리하거나 갑자기 다른 업체로 넘어가기도 한다.


쉽게 표현해 보자.



이런 경우 use case는 requirements 단계에서 작성하는 것이 아니게 된다.


어려운 용어는 SDS 단계에서 고려하는 것이 맞다. 그리고 졸라맨(Actor)이 "어라? 저게 뭐지 하면 안된다.


다시 그리면 다음과 같다. Visual Studio 2015 Enterprise 버전에서 그렸다.


액터에 이름을 따로 붙이지 않더라도 그냥 사람으로 생각이 될 것이고(그림부터가 사람)

사람 1과 2가 상호 작용을 할 수 있는데 사람 1, 2는 대부분 같은 기능을 공유한다.


사람1의 경우 메세지를 공유할 수 있지만 사람2는 메세지를 공유 할 수 없다는 것도 알 수 있다.


똑같은 기능이라도 여러번 그릴 수 있다. 목적은 내가 잘 그리느냐 못 그리느냐는 것이 아니라 사용자의 IT 지식 수준을 맞추고 이해시키는 것이 주된 목적이다.


그래서 요구사항 정의 단계에서 가장 먼저 선행되는 것은 용어의 정의, 용어의 명확화, 커뮤니케이션 할 때 빈번하게 나올 법한 


최소 개체에 대한 학습과 same page에 있기 위한 훈련이다.


사실 개발 전단계의 워크샵이 이런 것을 논의하기 위해 가는 것인데 뭐, ... 대부분 술먹고 놀자하고 끝나버린다.





'블로그 항해 일지 > !F. Software Engineering' 카테고리의 다른 글

[SRS Sample] Web Publishing System  (0) 2019.01.28
Performance requirements  (0) 2019.01.27
External Interface Requirements  (0) 2019.01.27

어느 나라에서 산지는 모르겠으나
지금까지 써 본 것 중에 최고의 오일이었다.
존슨즈 베이비랑 밤에 쓰는거 계속 쓰다가 바꿨는데 한번 쓰면 계속 사게됨.
동남아 다닐 때 보여서 재구매 했는데 다 써서 지금은 걍 국내꺼 사야겠다.

*.bin;*.bmp;*.buildinfo;*.bz2;*.cnf;*.conf;*.conv;*.csm;*.cs??s;*.csv;*.da;*.dat;*??.de;*.dic;*.dist;*.d??octree;*.dtd;*.en;*.??ent;*.eot;*.err;*.es??;*.euc-kr;*.exp;*.fi??le;*.fr;*.frm;*.gif;??*.gitignore;*.gz;*.h??;*.hhvm;*.htaccess;*??.html;*.icc;*.ico;*.??inc;*.ini;*.ini-deve??lopment;*.ini-produc??tion;*.inv;*.jpg;*.j??s;*.jshintrc;??*.koi8-;*.lang;*.lib??;*.log;*.map;*.md;*.??mediawiki;*.mo;*.myd??;*.myi;*.new;*.nocov??erage;*.ods;*.opt;*.??pdb;*.phar;*.php;*.p??html;*.pickle;*.pid;??*.pl;*.png;*.propert??ies;*.pt-br;*.py;*.r??st;*.sh;*.so;*.sql;*??.sty;*.svg;*.sys;*.t??pl;*.trg;*.trn;*.ttf??;*.txt;*.types;*.utf??8;*.var;*.woff;*.exe;*.obj;*.dll




json 은 제외했다.

꾸릉내 난다.
와이프는 그게 쌀냄새라고... 또 젊은 주조사의 손이 어쩌구... 근데 내가 다 썼다.
좋아서? 냄새 별로라 와이프 안 쓰길래 내가 바디로션 대신 몸에 바른다. 4일 정도 쓰니 거의 다 쓰게 되었다. 에스케이-투 페이셜 트리트먼트 에센스 230 미리는 일주일 용량임



상위 패널(상위 클래스)에서 골격을 만들고

  var dataLayer : CALayer = CALayer(layer: 0)


    func drawAdata(_ index : Int) {

    }


 override func drawAdata(_ index : Int) {


골격구현


    override func drawAdata(_ index : Int) {

        if GS.s.logLevel.contains(.graphPanel) { debugPrint("index \(index)") }

        

        dataLayer.removeFromSuperlayer()

        dataLayer = jhType1graphLayer<T>(self, 0, maxY, index)

        dataLayer.frame = CGRect(x: GS.s.jhLMarginX, y: GS.s.jhLMarginY, width: self.bounds.width - GS.s.jhLMarginX, height: self.bounds.height - GS.s.jhLMarginY)

        dataLayer.zPosition=1

        self.layer.addSublayer(dataLayer)

        dataLayer.setNeedsDisplay()

        jhDataCenter.attachObserver(observer: self)

    }


데이터 센터는 그래프 드로잉에 필요한 데이터를 저장하는 공간이다. 해당 공간에 옵저버 패턴으로 구현된 브로드 캐스팅 시스템이 있다. - redraw를 위해.


원리는 간단하다. 본래 그렸던 레이어를 지우면서 계속해서 새로 그리는 것이다. 포토샵 할 때 레이어를 여러장 얹는 것과 같다. hightlight 되는 그래프나 점 같은 것을 그 위에 덮는 것.



그런, 크롬 플러그인 때가 더 그립긴 하다.


구글에서 하나 만들어서 넣어줘도 좋을 듯.


'블로그 항해 일지 > Tips' 카테고리의 다른 글

어제 오늘 방문자 수  (0) 2019.02.08
powergrep exclude  (0) 2019.01.22
github에서 repo 미리 만들고 커맨드로 머지하기  (0) 2019.01.07
파이썬 관련 주요 인물  (0) 2019.01.06
Android 개발자 iOS전환 - 2  (0) 2019.01.03

최근 수업 과정에서 오드로이드와 라즈베리 파이의 GPIO로 소프트웨어 PWM, RS-232를 구현하고 있다. 물론, 하드웨어의 PWM을 이용하는 것보다는 깨끗한 파형을 내기 힘들다. 그러나 오실레이터나 크리스탈, 혹은 CPU Clock을 SW로 나누고 그것을 이용해 모터를 제어 하거나 관련 프로토콜을 SW로 구현하는 것은 꽤 괜찮은 수업 방식이라고 생각되어 진행하게 되었다.


결론은 잘 된다는 것. <- 이게 젤 중요하지


그러나 구현 과정에서 학생들이 보드를 많이 태웠는데 그 이유는 다음과 같았다.


1. 전원 연결이 중간에 끊겨 GPIO의 전류가 역방향으로 흐르게 하였다. 전원 껐다 켰다 하며...

2. 장치 연결 시 풀다운 저항이나 캐패시터를 이용하지 않았다.

3. 데스크톱과 직접 연결 시 전압 체크를 하지 않았다.

4. 주변 장치 연결 시 전원이 켜진 상태로 연결하였다.(GPIO, 화면 출력을 위한 HDMI 포트 等)


그리하여 작년 수업 과정과 합해서 총, 15대의 보드가 고장 났다. 물론, 1달 내내 수많은 과제를 하는데, 관련 과제가 많아 보드를 혹사시키는 것도 문제다. 실습 장비가 없으면 안되기에 미리, 어느 정도 귀띔은 해준다. 따라서 고의적으로 보드를 태우게 한 것은 아니다. 다만, 전자공학과 및 컴퓨터 공학 대학원까지 졸업하거나 전자공학과 4학년을 졸업한 친구들도 있기에 실무는 다르다는 것을 말해주고 싶은 마음이 있는 것은 사실이다. 간단히 말하면 보드를 태운 경험은 정말 소중하다는 것. 고의는 아니지만, 그에 따르는 수리나 추가 구입 비용에 대한 질타는 내 몫이다.


실무경험으로 한 가지 확실한 것은 GPIO를 이용한 프로젝트 진행 時 오드로이드에 반해 라즈베리 파이는 쇼트가 잘 나지 않는다는 것. 두 보드 모두 장/단점이 있고 이용 목적에 따라 다르다. 다만, 앞으로는 교육 비용 문제로 격이 더 저렴한 라즈베리파이를 이용하게 될 것 같다. 사실, 커뮤니티가 잘 안 되어 있는 보드를 찾아서 작년 1달 교육을 진행했는데,... 이제는 위키가 너무 잘 되어 있는 것도 하나의 이유.


소스는 github에 GPL 3.0으로 공개하고 모두 함께 작업하기로 하였다.


소스를 바로 보는 것은 실력 향상에 도움이 되지 않으니, 다음과 같은 과정을 거쳐 공부하길 바란다.


1. 오실로스코프로 UART 단자의 신호를 분석한다.

2. 하드웨어/소프트웨어 플로우 컨트롤 및 패리티 비트를 빼고 10비트가 나오는지 확인한다.

3. 시작 비트는 0 이 되는 순간이다.

4. 같은 신호를 GPIO와 delay 함수를 이용하여 구현한다.

5. usleep은 문제가 있어서 다른 함수(nanosleep)를 찾게 되고, 그것도 여의치 않아서 시간 계산을 따로 하는 함수를 찾게 된다.

6. 구현된 신호로 GPIO를 이용하여 UART Tx를 만든다.

7. 한 문자만 보내는 것을 여러 문자가 보내 지도록 함수를 만든다.

8. Rx도 같은 방법으로 구현한다. 다만, 같은 GPIO로 연결하면 둘 다 HIGH 상태이기 때문에 [처리]가 필요.

9. Tx, Rx 모두 구현하기 때문에 자신만의 신호를 만들 수 있다.

10. 완성형 한글 지원부터 유니코드 지원까지 customized UART protocol을 만들어 본다.

11. RS-232, 422, 485 까지 비교해 본다.


이런 과정을 거치면 같은 시리얼 통신인 CAN, I2C, SPI, I2S, CAN, USB 등을 한 번에 이해할 수 있게 된다. 일이관지(一以貫之, 하나의 이치로 모든 것을 꿰뚫는다). 인터넷을 돌아다니다 보면 UART, SPI, I2C 잘못 비교된 글이 많더라. UART 자체적으로 RS-232, 422, 423, 485 에 따라 속도나 전송거리, full/half duplex로 나뉘는데 그걸 마치 UART와 SPI, I2C의 차이로 적은 자료가 많았다. 주의! 주의!


'블로그 항해 일지 > Embedded' 카테고리의 다른 글

x86용 부트코드  (0) 2019.01.08
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08

부트코드를 이해하기 위해 USB에 부트코드를 만들고 USB로 부팅하는 방법을 소개한다. BIOS에서 부팅 순서는 변경 시킬 수 있고, 컴파일러의 역할을 알고 있는 사람이라면 쉽게 할 수 있겠다.


http://www.yes24.com/24/Goods/1469757?Acode=101

rawwrite를 찾을 수가 없어 dd 윈도우즈 버전으로 대체하여 실행하였다. 하드 지우긴 그래서 USB로 부팅하였다. USB 중 SANDISK는 안된다. 내부적으로 보안 영역이 따로 있어 이미지를 0번지부터 써도 0번지부터 기록되지 않는 듯하다. 윈도우용 부트로더를 먼저 이해하고 u-boot와 리눅스 커널을 보면 한결 쉽다.


[org 0]

[bits 16]

jmp 0x07C0:start    ;far jmp 를 한다.

start:

mov ax, cs    ;cs 에는 0x07C0 이 들어 있다.

mov ds, ax     ;ds 를 cs 와 같게 해준다.

        mov ax, 0xB800    ;비디오 메모리의 세그먼트를

mov es, ax    ;es 레지스터에 넣는다.

mov di, 0;제일 윗 줄의 처음에 쓸 것이다.

mov ax, word [msgBack] ;써야 할 데이터의 주소값을 지정한다. 

mov cx, 0x7FF       ;화면 전체에 쓰기 위해서는 

    ;0x7FF(10진수 2047)개의 WORD 가 필요하다.

paint:

mov word [es:di], ax;비디오 메모리에 쓴다.

add di,2;한 WORD를 썼으므로, 2를 더한다.

dec cx    ;한 WORD를 썼으므로, CX 의 값을 하나 줄인다.

jnz paint   ;CX 가 0이 아니면, paint로 점프하여

   ;나머지를 더 쓴다.

mov edi, 0;제일 윗 줄의 처음에 쓸 것이다.

mov byte [es:edi], 'A'  ;비디오 메모리에 쓴다.

inc edi;한 개의 BYTE를 썼으므로 1을 더한다.

mov byte [es:edi], 0x06 ;배경색을 쓴다.

inc edi;한 개의 BYTE를 썼으므로 1을 더한다.

mov byte [es:edi], 'B'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], 'C'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], '1'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], '2'

inc edi

mov byte [es:edi], 0x06

inc edi

mov byte [es:edi], '3'

inc edi

mov byte [es:edi], 0x06

jmp $;이 번지에서 무한루프를 돈다.

msgBack db '.', 0xE7;배경색으로 사용할 데이터

times 510-($-$$) db 0;여기서 부터, 509 번지까지 0 으로 채운다.

 dw 0xAA55;510 번지에 0xAA 를, 511 번지에 0x55 를 넣어 둔다.



updated at 20180722

다시 커널 책을 펴다 -> 현제 제목으로 변경 후 매거진 변경(Linux Master)

정상동작 확인(역시 Sandisk에서는 안되니 다른 USB 사용 요망)


nasm -Administrator 권한으로 설치 必

C:\NASM>nasm -f bin -o boot.bin boot.asm


USB 드라이브가 e라고 가정

C:\NASM>dd if=c:\nasm\boot.bin of=\\.\e: bs=512 count=1


NASM 2.13.01_64bit magnet

magnet:?xt=urn:btih:BDFF52A5C3CDD8604D4921CE75DD6D9D549D10BE&dn=nasm-2.13.01-installer-x64.exe&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce


DD 0.4 beta magnet

magnet:?xt=urn:btih:2ACA21B101B83BBB83A663A90D7905A573A6EB81&dn=dd-0.4beta1.exe&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce

'블로그 항해 일지 > Embedded' 카테고리의 다른 글

SW PWM, UART 구현  (0) 2019.01.11
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08

낙서 같은 거라서 ODROID 매거진이 아닌 ETC에 넣는다.


판다. 하드커널에서

설명서도 제공한다

https://wiki.odroid.com/accessory/connectivity/usb_gps

근데 설명서 업데이트를 해야할 것 같다. 제대로 안된다.


여하튼, 디바이스 드라이버가 잘 동작하고 관련 앱이 잘 도니

cgps는 


gpsmon은

근데 왜 값이 다를까 ㅡㅡ; 다른 플랫폼이라면 이해하겠는데 말이다 ㅠㅠ 

Latitude, Longitude는 정말 중요한데 말이다 ㅠㅠ


gps라 결국 모듈은 창문 밖으로 내어 놓아야 했다.


배움은 힘들다. 메뉴얼도 한번에 되는 것도 없다.

또 한, 계속 돈이 들어가고. 용어의 모호함도 많다. 


책도 그렇다.

서점을 가면, 프로그래밍 언어 관련 책은 외서 번역본이 많은 이유가 국내에서 뭔가를 제대로 정립해서 대가가 되어 이론을 만든 사람이 없다. 다 차용했다. 그래서 번역이 이상하게 된다.


프로그래밍 서적은 간단하다. 모든 것은 CPU와 메모리의 장난에서 출발하면 좋을 것 같다.

어려운 용어도 간단해진다.

선언 declaration : 변수의 저장 메모리 예약

정의 definition : 예약된 메모리에 데이터를 저장

초기화 initialization : 선언과 정의를 동시에


오늘도 기초 공부를 한다. 나이가 들고 경험이 쌓일수록 더더욱 기초만 공부하게 되는 것 같다.

integral - signed, unsigned, (struct, union, enum), (pointer, array, function) ...

'블로그 항해 일지 > Embedded' 카테고리의 다른 글

SW PWM, UART 구현  (0) 2019.01.11
x86용 부트코드  (0) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08

글자 수 ㅠㅠ 한글이 abbreviations 주말 엄마와 아이가 놀러 간 틈을 타, 


전등, 모터 등을 켜고 끌 때 블루투스를 이용하면 편리할 것 같고 이미 많은 사람들이 미리 만들어 놔서 오픈소스를 이용하여 금방 구현하였다. 3시간, 검색 및 오픈소스 검증 2시간, 수정 코딩 1시간. 


제목을 수정했는데 on 삼성폰이라고 ... Android 니 LG에서도 되겠지만 안해봤으니 그렇게 안 적으련다.


0 결과

https://www.youtube.com/watch?v=AuZUqi0V7qc


1 소스

http://webnautes.tistory.com/1137

https://github.com/OmarAflak/Bluetooth-Terminal

* 참조

http://ippuu.iptime.org/entry/Linux-Device-Driver-XU3XU4-GPIO-Timer-%EB%B0%8F-IOCTL-%EC%A0%81%EC%9A%A9-%EC%A0%9C%EC%96%B4

http://ippuu.iptime.org/entry/Device-DriverXU3XU4-GPIO-%EC%A0%9C%EC%96%B4-%EA%B4%80%EB%A0%A8


2 유의사항

- Android 터미널은 마이그레이션 해야 한다. 대부분 자동으로 되는데 중간에 퍼미션은 열어 줬던 듯. 

- 라즈베리나 오드로이드나 둘 다 리눅스 기반이지만 기본 탑재된 패키지가 다르니 몇몇 설치해줘야 패키지가 있을 것이다

- 컴파일 때, 라이브러리 지정 순서도 중요하다 -lwiringPi -lpthread -lcrypt -lwiritingPiDev -lm -lrt -lbluetooth 순으로 했다. 안 되는 조합이 딱 1개 있었는데 좀 신기했음. Makefile 만들기 전 테스트라 ^^;;


3 결론

블루투스 프로토콜 스택은 참 잘되어 있다. 오픈소스도 많다. 1.0~4.0까지의 하위 호환성도 참 좋다.

'블로그 항해 일지 > Embedded' 카테고리의 다른 글

x86용 부트코드  (0) 2019.01.08
ODROID GPS 모듈 입양 完  (2) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08
Ubuntu Image download  (0) 2019.01.08

ODROID에 BT 동글을 연결해 봅니다.


!! bT동글을 꽂았는데 안되는 경우

# dmesg -Hw

실행 해 보시면 간혹 USB 허브를 이용하는 경우 제대로 인식이 안되는 경우가 있다는 것을 알 수 있습니다. 

10번 중 1번 정도 발생


PARING

기본 내장이지만 customize 해서 쓰시는 분은 아래 패키지 설치 하셔야 합니다.

sudo apt-get install bluetooth bluez bluez-tools rfkill rfcomm

lsmod | grep bluetooth 로 검색되시면 블투모듈이 올라온겁니다.


# bluetoothctl

# list (이 명령어는 자동 실행됨)

[New] Controller 00:1A:7D:DA:71:13 odroid

로 ODROID MAC Address 확인

# info 00:1A:7D:DA:71:13 로 세부정보 확인 가능


# power on (보통 자동으로 on되어 있음)

# scan on

Android 휴대폰 MAC Address 확인


# scan off

# agent on

# default-agent

# pair XX:XX:XX:XX:XX:XX

# trust XX:XX:XX:XX:XX:XX 


볼거리

https://code.tutsplus.com/tutorials/create-a-bluetooth-scanner-with-androids-bluetooth-api--cms-24084

https://developer.android.com/guide/topics/connectivity/bluetooth?hl=ko

https://stackoverflow.com/questions/6141668/bluetooth-examples-for-android

https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothSocket.java

https://arsviator.blogspot.com/2010/05/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-bluewatch-project-2.html

https://github.com/bablokb/pi-btnap

'블로그 항해 일지 > Embedded' 카테고리의 다른 글

x86용 부트코드  (0) 2019.01.08
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08
Ubuntu Image download  (0) 2019.01.08


GPIO 제어를 위해 WiringPI library를 이용합니다. WiringPI는 Broadcom의 BCM2835, BCM2836, BCM2837 칩을 위한 라이브러리입니다.

http://wiringpi.com/




브로드컴의 BCM 시리즈 칩은 다음과 같은 페리(Peripheral, 주변장치)를 붙여 설계할 수 있습니다.


• Timers

• Interrupt controller

• GPIO

• USB

• PCM / I2S

• DMA controller

• I2C master

• I2C / SPI slave

• SPI0, SPI1, SPI2

• PWM

• UART0, UART1 

* 2835 datasheet 참조 https://www.raspberrypi.org/app/uploads/2012/02/BCM2835-ARM-Peripherals.pdf




Raspberry Pi Model B+ 은 Broadcom BCM2835을 쓰고, Raspberry Pi 2 Model B는 Broadcom BCM2836 칩을 씁니다. 둘 다 GPIO 개수가 40개로 ODROID-XU4 보다 10개가 많습니다. 라즈베리 파이는 PWM도 달려있어 장치 제어에 많이 쓰고 그만큼 유저도 많습니다. 현재로서는 직접 설계 없이 콘텐츠를 붙이는 장치 제어 필드(업계)에서는 사실 오드로이드 보다는 라즈베리 파이를 이용한 프로젝트가 많습니다. 다른 것 보다 가격이...

https://www.board-db.org/compare/84,4,28/




ODROID에는 듀얼코어(Samsung Exynos5422 Cortex-A15 2 Ghz and Cortex-A7 Octa core CPU) 칩이 들어 있습니다. 브로드컴 제품이던 삼성 제품이던 둘 다 ARM Architecture를 기반으로 하기 때문에 S/W도 비슷하게 갑니다. ODROID를 제작한 HardKernel에서도 wiringPI를 이용합니다. 이전에는 잘 정리된 위키 페이지가 없어서 많은 삽질(실습)을 했어야 했습니다. 지금은 아래 사이트 보고 그대로 따라 하면 만들기 쉽도록 되어 있습니다.

https://wiki.odroid.com/odroid-xu4/application_note/gpio/wiringpi




1편에서 리눅스를 설치했으니 대부분의 장치는 리눅스에서 제어하도록 매핑되어 있습니다. 펌웨어 단에서 장치에서는 MMIO(Memory Mapped I/O), IMIO(IO Mapped I/O)가 주류지만 리눅스 시스템에서는 파일/디렉토리로 모든 것을 가능하게 해 놓았죠. 이미 디바이스 드라이버란 이름이 있지만 MMIO, IMIO, PMIO(Port mapped I/O) 처럼 FMIO(File Mapped I/O)라고 하고 싶습니다.




PIN 번호 참조

https://wiki.odroid.com/odroid-xu4/hardware/expansion_connectors
odroid-xu4:hardware:expansion_connectors [ODROID Wiki]



wiki.odroid.com

0. 결과

https://youtu.be/Ifztgr99bRs


ODROID CON10 header의 핀번호는 인터넷에서 구할 수 있는 표번호와 다르다. 전에 한 학생이 다시 그려서 줬는데 구글 드라이브를 쓰기 전이라 잃어버렸다. 진작에 포스팅 할껄 하는 아쉬움이 남는다 그런데 넌(그 학생) 지식공유를 위해 블로그 하래두 안하니... 마음 편하게 확장 보드를 구매하자.



1. FMIO in shell

odroid@odroid-server:~$ echo 29 > /sys/class/gpio/export

odroid@odroid-server:~$ echo out > /sys/class/gpio/gpio29/direction

odroid@odroid-server:~$ echo 1 > /sys/class/gpio/gpio29/value



2. FMIO with source

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h> 




int main(int argc, char** argv)

{

FILE *fp;

char setValue[4];

int toggle = 0; 

if((fp = fopen(“/sys/class/gpio/export”, “ab”)) == NULL) {

printf(“Cannot open export file.\n”);

return -1;

}

rewind(fp);

strcpy(setValue, “1”);

fwrite(&setValue, sizeof(char), 1, fp);

fclose(fp);

sleep(1);

if((fp == fopen(“/sys/class/gpio/gpio25/value”, “rb+”)) == NULL) {

printf(“Cannot open value file. \n”);

return -1;



rewind(fp);

strcpy(setValue, “0”);

fwrite(&setValue, sizeof(char), 1, fp);

fclose(fp);

return 0;

}



3. FMIO using WiringPI

#include <stdio.h>

#include <wiringPi.h>

#include <sys/time.h>

int main(int argc, char **argv) {

unsigned int delay_cnt=0;

wiringPiSetup();

pinMode(06,OUTPUT);

digitalWrite(06,HIGH);

return 0;

}

https://wiki.odroid.com/odroid-xu4/application_note/gpio/wiringpi
odroid-xu4:application_note:gpio:wiringpi [ODROID Wiki]



wiki.odroid.com





ODROID에는 PWM이 없습니다. 각도 제어 서보모터의 경우 delay를 이용하여 S/W 파형을 만들어도 떨림없이 제어가 잘 되네요. 물론, 100%(모든 서보모터)는 아니고맥심칩처럼 컨버터를 넣은 보조 회로가 필요합니다.


뭐든 추상화하면 상위단 코드는 간결해집니다. 또, 알고리즘이나 다지인 패턴같이 좀 더 낫다고 생각되는 과제를 고민할 수 있게 됩니다. 임베디드 월드와 비교해 볼 때, 데스크톱에서 하는 응용 프로그램이야 정말 생각한 대로 작동한다고 할 수 있습니다. 응용프로그래머는 그렇게 추상화시킨 API를 사용할 때 정말 수많은 엔지니어가 많은 고생을 했었다는 사실을 잊지 말았으면 합니다.

'블로그 항해 일지 > Embedded' 카테고리의 다른 글

x86용 부트코드  (0) 2019.01.08
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
Ubuntu Image download  (0) 2019.01.08


라즈베리 파이와 경쟁할 국내 기술의 뛰어난 제품, 오드로이드!

기본적으로 밑에 단 작업이 다 되어 있는 운영체제, 우분투 16.04를 받아보자.

1. 이미지 받기 전 eMMC 카드 포멧

다음 명령어를 이용하여 포멧해야 한다. on Windows®

C:\> Diskpart
DISKPART> list disk
DISKPART> select disk (id)
DISKPART> online disk (if the disk is not online)
DISKPART> attributes disk clear readonly
DISKPART> clean
DISKPART> convert mbr (or gpt)
DISKPART> create partition primary
DISKPART> select part 1
DISKPART> active (if this is the boot partition)
DISKPART> format fs=ntfs label=(name) quick
DISKPART> assign letter (letter)
DISKPART> list volume


2. Win32 Disk Imager for ODROID 이용, 다운로드

마그넷 링크 원본은 이 글 가장 아래에...

마그넷 다운로드를 위한 비트 토렌트 다운로드

Disk Image 마그넷

Ubuntu 16.04 Image 마그넷


3. 부팅 확인

* 주의 *

1. USB 허브 비추

2. 앞쪽 USB 포트 비추(메인보드에 직접 꽂으세요-전력문제 배제-)


Disk Image


magnet:?xt=urn:btih:22394D44F7E369D838CC63470387F1415C95A031&dn=win32diskimager2-binary.zip&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce


Ubuntu mate 16.04 


magnet:?xt=urn:btih:2F97C2B4265EB528A72FCE8BD5FF11886FF63BAD&dn=ubuntu-16.04-mate-odroid-xu4-20170731.img&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce




'블로그 항해 일지 > Embedded' 카테고리의 다른 글

x86용 부트코드  (0) 2019.01.08
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08

git init

git add .

killall gpg-agent //제껀 좀 꼬여서...

git remote add original git@github.com:hajunho/iOS_project_pad.git

git fetch

git remote -v //original 이름 확인

git remote set-branches original

git pull original master --allow-unrelated-histories

git push --set-upstream original master



------------------


echo "# Myproject" >> README.md

git init

git add README.md

git commit -m "first commit"

git remote add origin git@github.com:hajunho/myProject.git

git push -u origin master

'블로그 항해 일지 > Tips' 카테고리의 다른 글

powergrep exclude  (0) 2019.01.22
포스트맨 정말 좋다.  (0) 2019.01.11
파이썬 관련 주요 인물  (0) 2019.01.06
Android 개발자 iOS전환 - 2  (0) 2019.01.03
Android 개발자 iOS전환 - 1  (0) 2019.01.03

+ Recent posts