글

git rebase --onto 문제

git rebase를 주기적으로 하다가 흥미로운 문제가 발생했습니다. ------master------branch1-----branch2 이와같은 구조에서 branch2에서 branch1을 제거해야하는 상황이 발생했습니다. 즉 다음과 같은 그림으로 만들어아하는 상황입니다. ------master------branch1              `-----branch2 git rebase -i 와 rebase master 등등 여러가지를 해보았지만 전혀 해결할 수 없었습니다. 그러다 stackoverflow 에서 검색해서 겨우 알아낸 것은 전형적인 git rebase --onto 문제라는 것입니다. 다음과 같이 실행하면 해결됩니다. # rebase --onto $ git checkout master $ git rebase --onto master branch1 branch2 # branch2를 강제로 push $ git checkout branch2 $ git push origin branch2 --force 출처 : stackoverflow This is a classic case of rebase --onto

WSL Ubuntu 재설치

이미지
WSL Ubuntu 비정상 동작 언젠가부터 다음과 같은 메시지가 뜨면서 WSL 우분투가 정상동작하지 않았습니다. WSL은 정상적으로 설치되어있고, MS Store에서 Ubuntu를 설치하면 "제품을 이미 소유하고 있습니다." 라는 메시지가 나오면서 진행할 수 없는 상황에 부딪혔습니다. WSL Ubuntu 재설치 WSL을 재설치하고 Ubuntu를 재설치해보았지만 소용이 없어서 방법을 찾던 중 다음과 같은 글을 발견하였습니다. How to Uninstall (or Reinstall) Windows 10’s Ubuntu Bash Shell 위의 글의 다음 명령을 모두 실행해보았으나 정상동작하지 않았습니다. > lxrun /uninstall /full > lxrun /uninstall 하지만 마지막으로 Install을 실행하자 몇가지 입력하고 몇분이 걸린 후 정상동작하게 되었습니다. > lxrun /install 아마도 ubuntu 환경이 손상되었었나봅니다.

git rebase 혹은 git push 중 양쪽에서 수정(혹은 추가)이 수백개 났을때...

오래된 브랜치를 살리기 위해 git rebase를 열심히 했습니다. 그리고 git push <branch> 를 했더니.... # 다른 커밋이 각각 416개와 10개 있습니다. ... # 양쪽에서 수정: Makefile # 양쪽에서 추가: init.sh ... 416개라니...으악.... 이걸 언제 다 확인하고 수정후 git add를 한답니까...  일단 리모트 저장소를 살펴보니 해당 branch가 추가 commit이 없었던걸로 보아 특별한 문제 없이 제 commit을 사용하면 될것 같아서 방법을 찾아보았습니다. resolving-a-both-added-merge-conflict-in-git git checkout --ours src/MyFile.cs git checkout --theirs src/MyFile.cs 역시 스택오버플로우 형님들입니다. 방법은 알았으니 파일명만 따다가 --ours하고 add 해버리면 끝.

Linux Bash 팁 : find로 찾은 파일들 복사하기

find로 찾은 파일들의 목록에 자동으로 명령을 내리는 방법입니다. # cp 복사 find . -name *.ko -exec cp {} ../ \; 전 verbose 로그를 남길수 있는 install -v 를 애용합니다. # install -v 복사 find . -name *.ko -exec install -vins {} ../ \; `./Drivers/i2c.ko' -> `../i2c.ko' find의 -exec 는 find에서만 사용할 수 있기때문에 범용으로 사용할 수 있는 xargs 를 사용합니다. ls와 같이 -exec 가 없는 다른 명령어를 조합할 수 있는 강력한 방법입니다. # xargs 와 install -v 복사 find . -name *.ko | xargs -i install -v {} ../ `./Drivers/i2c.ko' -> `../i2c.ko'

Codewars 문제 풀이 : Salesman's Travel

문제 Salesman's Travel 세일즈맨이 한 동네에서 할 일을 한번에 처리할 수 있도록, 주소를 재정리하는 일입니다. 즉 그 동네에 도착했을때 방문해야하는 주소를 모두 가져와서 보기 쉽게 정리하는 작업인거죠. Input 주소들과 요청받은 우편번호입니다. Output 우편번호에 해당하는 주소를 가져다 다음의 포맷으로 정리합니다. zipcode:street and town,street and town,.../house number,house number,... 해결방안 이해하고보니 단순 String 처리 문제인데, 이해가 어렵습니다. 꼼꼼히 읽어보고 나서야 이해가 되네요. 원본 주소들을 재정리해서 출력 포맷에 맞게 재정리 하면 되는겁니다. 자료구조 std::string ad = "123 Main Street St. Louisville OH 43071,432 Main Long Road St. Louisville OH 43071,786 High Street Pollocksville NY 56432,"     "54 Holy Grail Street Niagara Town ZP 32908,3200 Main Rd. Bern AE 56210,1 Gordon St. Atlanta RE 13000,"     "10 Pussy Cat Rd. Chicago EX 34342,10 Gordon St. Atlanta RE 13000,58 Gordon Road Atlanta RE 13000,"     "22 Tokyo Av. Tedmondville SW 43098,674 Paris bd. Abbeville AA 45521,10 Surta Alley Goodtown GG 30654,"     "45 Holy Grail Al. Niagara Town ZP 32908,320 Main Al. Bern AE 56210,14 Gordon Park Atlanta RE 130...

구글 타임라인(Google Timeline) 제대로 보기

이미지
개요 제주 여행 당시 보조배터리를 챙겼지만, 케이블 문제로 충전이 되질 않았습니다. 이 문제로 배터리 소모가 심한 속도계 앱을 사용할 수 없었고 포기하고 말았죠. 하지만 우리의 빅브라더(?) 구글은 정보를 수집하고 있었고 구글 타임 라인을 통해 제주 여행 기록을 확인할 수 있었습니다. 구글 타임라인 사용불가 아마도 구글이 국내에 지도 서버를 두지 않는 이유로 한국에서는 구글 타임라인을 사용할 수 없습니다. 데스크탑 구글맵 -> 좌측 메뉴 -> 내 타임라인 무시무시하네요. 물론 "위치 기록 삭제"는 누르지 마세요. 우회접속 매우 간단하게 회피할 수 있습니다. 구글도 딱히 막을 생각도 없는 듯 하네요. 접속국가를 미국(us)로 변경 :  https://www.google.com/maps/timeline?gl=us 단위 변경 빅브라더 구글의 위엄을 느끼며 내 경로를 확인하다보면 단위가 "마일"로 표시되어 불편합니다. 구글링 해보니 다음과 같습니다. #  https://productforums.google.com/forum/#!msg/maps/_1uJXfkipvw/TxdhOHZmJAAJ // 안드로이드 구글맵 -> 설정 -> 단위 에서 km로 변경 // 데스크탑 방법 없으니 국가를 변경하세요. 얘들은 대체 왜 그리 마일을 고집할까요.. 어쨌든 접속국가를 캐나다(ca)로 변경 : https://www.google.com/maps/timeline?gl=ca km로 잘 나옵니다.

Codewars 문제 풀이 : Roman Numerals Encoder

서론 C++ STD 무식쟁이 임베디드 개발자가 C++ STD 좀 해볼까 하고 codewars의 문제 풀이에 도전합니다. 문제 CodeWars: Roman Numerals Encoder 간단히 말해서 아라비아 숫자를 로마 숫자로 변경하는 문제입니다. 위키 에 다음과 같은 테이블이 있습니다. Symbol I V X L C D M Value 1 5 10 50 100 500 1,000 여기에 IV(4), IX(9), LX(40), XC(90), CD(400), CM(900) 만 추가하면 됩니다. 해결방안 보통 IV와 같은 문자를 만드는 방법을 고민하게 되는데 이런 간단한 문제에서는 그냥 배열로 나열해놓고 하나씩 대입해버리더군요. 그게 간단합니다. 자료구조 C에서는 그냥 struct 만들어서 array로 돌려버리면 끝이지만, STD 를 쓰기로 했으니 고민이 됩니다. std::map 적합해보입니다. value에 따라서 symbol을 가져오면 되니까요. 초기화도 간단해서 좋네요.     std::map<int, std::string> romanNumeric = {         { 1000, "M" },         { 900, "CM" },         { 500, "D" },         { 400, "CD" },         { 100, "C" },         { 90, "XC" },         { 50, "L" },         { 40, "XL" },         { 10, "X" },         { ...

이 블로그의 인기 게시물

구글 시트에 여러 행 한번에 추가하기

WSL2 Ubuntu 20.04 및 네트워크 설정

우분투 terminator 에서 파일 경로 클릭시 vscode 에서 열기