How Google makes improvements to its search algorithm
여러분의 뇌는 알고리즘을 풀 수 있습니다 - 데이비드 J. 말란 (David J. Malan)
Energy Hackathon 2016 서울
Welcome Energy Hackathon 2016 (서울대학교 38동 글로벌공학교육센터 다목적홀, 사진 출처 : http://blog.naver.com/revivallabs/220667638701) 에너지 해커톤 일정 (서울 기준 서울대학교 38동 글로벌공학교육센터 다목적홀, 3.25일 - 3.26일)이 무사히 끝났다. 무박으로 진행하였고, 많은 훌륭한 참가자들과 함께해서 너무나 좋은 시간이었다. 해커톤은 요 번년도 들어 두번 참가했다. 대회와는 다른 개념 이라서 더 흥미롭게 다가온거같다. 준호랑 술마시면 우스겟소리로 나중에 한번 참여하자 기약했는데, 이번에 에너지해커톤이라는 좋은 일정이있어서 팀으로 신청하게되었다. 처음에는 기존 팀원들과 조율해서 참여하려했는데, 다들 일정이 맞지 않아서 준호랑 둘이 참가신청을했다. 우리둘의 포지션은 모두 개발이었기때문에 기획자와 디자이너가 필요했다. 그래서 주최측에 추가빌딩을 요청했고 조금은 복잡한 형태로 팀원들이 충원되었다. 일정을 진행하면서 느낀점은 주최측에서 참가자들을 위해 세심히 배려해준거같아 감사했다. 일정이 종료되고 정신이 없어서 감사하다는 말씀 못드렸는데.. 정말 감사드립니다. 새벽까지 참가자들과 함께 해주셨고, 끝나는 마지막 순간까지 배려해주는 모습 좋았습니다. 준호와 만나서 팀원들오기전까지 이것저것 얘기하고, API 관련 설명을 들었다. 이 후 둘이 진행해야 할지도모른다는 생각에 마음을 정리하고 기획을 정리하던중, 2시간이 넘어서 한명이 도착했고, 점심밥 먹고나니깐 또 한명이 도착했다. 해커톤 일정은 아래와 같이 진행됬다....
Google DeepMind's Deep Q-learning playing Atari Breakout
소프트웨어 vs 건축 설계사
By 포프
IoT
IoT 통신 (짧은거리) Z-Wave / Zigbee / Wi-Fi / 블루투스 IoT 통신 (중간 거리) Zigbee /LPWAN / PLC IoT 통신 (긴거리) LTE / 3G / Ethernet IoT 프로토콜 LMQTT , MQTT-SN, M3DA, STOMP, AMQP, CoAP, WebSockets, WebRTC, XMPP IoT, future HTML 2.0 IoT 데이터 포맷 BSON, JSON,XML IoT 데이터 모델 oBIX, OpenADR, ESTI M2M, IPSO Smart Object , SEP2.0
성공과 실패를 결정하는 1%의 네트워크 원리
Chapter 01. 웹 브라우저가 메시지를 만든다 - 웹 브라우저의 내부 탐험 Story 01. HTTP 리퀘스트 메시지를 작성한다 1. 탐험 여행은 URL 입력부터 시작한다 2. 브라우저는 먼저 URL을 해독한다 3. 파일명을 생략한 경우 4. HTTP의 기본 개념 5. HTTP 리퀘스트 메시지를 만든다 6. 리퀘스트 메시지를 보내면 응답이 되돌아온다 Story 02. 웹 서버의 IP 주소를 DNS 서버에 조회한다 1. IP 주소의 기본 2. 도메인명과 IP 주소를 구분하여 사용하는 이유 3. Socket 라이브러리가 IP 주소를 찾는 기능을 제공한다 4. 리졸버를 이용하여 DNS 서버를 조회한다 5. 리졸버 내부의 작동 Story 03. 전 세계의 DNS 서버가 연대한다 1. DNS 서버의 기본 동작 2. 도메인의 계층 3. 담당 DNS 서버를 찾아 IP 주소를 가져온다 4. DNS 서버는 캐시 기능으로 빠르게 회답할 수 있다 Story 04. 프로토콜 스택에 메시지 송신을 의뢰한다 1. 데이터 송ㆍ수신 동작의 개요 2. 소켓의 작성 단계 3. 파이프를 연결하는 접속 단계 4. 메시지를 주고받는 송ㆍ수신 단계 5. 연결 끊기 단계에서 송ㆍ수신이 종료된다 확인퀴즈...
[번역] 더 나은 개발자가 되는 8 가지 방법
이 글은 NewRelic 블로그의 “8 Ways to Become a Better Coder” 라는 글의 한글 번역입니다. 오역이 있을 수 있습니다. 당신의 프로그래밍 스킬을 향상시키는 방법에 대해 진지하게 얘기해 봅시다. 시작! “쩌는 프로그래머 되기”는 커리어 향상 목표로 삼기에 좋아 보이지만 사실 간단한 일은 아닙니다. 예를 들어 “더 잘하고 싶다” 는 말에는 “더 잘”하는게 어떤 건지 알고 있어야 한다는 가정이 필요하죠. 사실 많은 사람들이 더 나아지기를 원하지만 어떻게 해야하는지에 대해서는 전혀 모르는 경우가 많습니다. 그래서 제가 프로그래밍 스킬을 향상시킬 수 있는 8가지 실행 가능한 가이드라인을 알려드릴게요. 순서대로 따라하시면 됩니다. 이 지혜의 조각들은 컴퓨터 산업의 지난 35년 간 축적되었고 이를 밝히고 기록한 사람들은 이를 발에 있는 메뚜기로 사용해 왔습니다. 1. 배울 것이 얼마나 많은지 상기하세요. 무언가를 배우는 첫 걸음은 그것을 모른다는 것을 깨닫는 것입니다. 어찌보면 당연한 얘기지만, 경험 많은 프로그래머들은 스스로 알고 있다는 착각을 극복하는데 얼마나 많은 시간이 필요했는지 알고 있습니다. 많은 전산과 학생들이 “나는 존잘” 이라는 허세, 모든 것을 알고 있다는 강한 확신과...
linux 시스템의 하드웨어 사양 확인
Windows에서는 하드웨어 사양을 확인하는데 CPU-Z라는 프로그램만(심지어 무료) 있으면 CPU부터 시작하여 마더보드와 그래픽카드까지 모두 확인할 수 있다. 하지만, linux에서는 CPU-Z와 같은 프로그램이 없기 때문에 하드웨어 사양을 확인할 수 있는 방안을 소개한다. lshw, lspci lshw 명령어를 통해서 하드웨어 정보를 알 수 있다. 아래는 가상화 환경에서 실행한 하드웨어 정보이다. CPU, 메모리,메인보드와 그래픽카드까지 현재 시스템의 하드웨어 정보를 확인할 수 있다. ‘lspci’ 명령으로 linux에서 인식된 하드웨어 정보와 타입을 간단히 체크도 가능하다.
Webhacking.kr 18번 문제
18 번 문제는 SQL INJECTION 문제다. 이전 인젝션 문제보다 난이도가 낮아서 쉽게 클리어할수있을거다. 13 - 20 번까지 오늘 몰아서 쓸 예정이니, 다소 문제 풀이 내용이 부실할수있다. 몇개의 문제에서는 정답까지 공개하고 몇개의 문제에서는 공개하지않았다. 쉬운문제들은 본인이 좀 더 생각해서 풀길바란다. 나도 이전 기억을 좀 더듬어서 푼 것 들도많다. 삽질의 기억이랄까. 13번 문제에 들어가면 index.phps 라는 링크 태그가 보일거다. 클릭하면 해당 로직을 볼 수있다. 소스는 아래와 같다. if($_GET[no]) { if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack"); $q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); if($q[0]=="guest") echo ("hi guest"); if($q[0]=="admin") { @solve(); echo ("hi admin!"); } }   코드에서 보듯이 no 라는 파라메터의 값은 필터링된다. 따라서 저 필터링 조건을 우회해야한다. no 파라메터의 0또는 1의값을 대입하여 요청했다. 0일 때는 아무것도 리턴하지않으며 1일때는 “하이 게스트” 문자를 출력한다. 이번에 몇개의 연산자를 대입해서 테스트했고, or 연산자는 사용가능한 것 을알았다. 따라서 위의 결과를 토대로 쿼리문을 짜서 요청했다. 라인피드는 URL 인코드를 치환한 값인 %0A을 사용했다. 0%0Aor%0A1 !?/
Webhacking.kr 17번 문제
13번 이후로 그냥 오늘 20번까지 할까요. 문제 난이도들이 급 쉬워져서 포스팅도 짧아지게되었네요. unlock=100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10-100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+9999999999; function sub(){ if(login.pw.value==unlock){ alert(“Password is “+unlock/10); }else { alert(“Wrong”); }} 정말 간단합니다. sub function 내 조건은 건너뛰고, 패스워드는 “unlock/10” 이라고합니다. unlock 의 값은 9997809307 이고 이 값을 9997809307/10하면 999780930.7입니다. 해당 값으로 flag 하면 클리어.
Webhacking.kr 16번 문제
16 번 100점 짜리 문제입니다. 13번 이후 빠르게 풀고있습니다.. 그냥 언제 또 포스팅할지 몰라서 TT 바쁘다는게 핑계. 들어가니깐 왠 별이 보이네요. 새로고침할때만 알록달록 바뀌네요. 소스를 볼까요? document.body.innerHTML+=”<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>”; function mv(cd) { kk(star.style.posLeft-50,star.style.posTop-50); if(cd==100) star.style.posLeft=star.style.posLeft+50; if(cd==97) star.style.posLeft=star.style.posLeft-50; if(cd==119) star.style.posTop=star.style.posTop-50; if(cd==115) star.style.posTop=star.style.posTop+50; if(cd==124) location.href=String.fromCharCode(cd); } function kk(x,y) { rndc=Math.floor(Math.random()*9000000); document.body.innerHTML+=”<font color=#”+rndc+” id=aa style=position:relative;left:”+x+”;top:”+y+” onmouseover=this.innerHTML=’’>*</font>”; } Body 태그에 onkeypress 일때 mv function 을 호출한다. 첫 번째 인자값으로 event.keyCode 값을 전달합니다. event.keyCode 값이 100,97,119,115,124 때의 각기 다른 조건문이 구성되어있다. 이 중 우리가 참고하면 되는 건 124일때 조건이다. 아스키코드를 참고하자, 124 는 “|”는 값 이다. 콘솔창에 “location.href=String.fromCharCode(124);” 해당 조건의 참부분을 참고하여 입력한다. 그럼 패스워드가 나온다. 그 값으로 flag 하면 클리어
Webhacking.kr 15번 문제
50점 짜리 문제입니다. 간단해서 짧게 말씀드릴게요. 해당 경로로 이동하면 스크립트 로드될때 alert 창과 함께 뒤로가기 됩니다. 문제를 클리어하기 위해서 클라이언트에 자바스크립트 실행 비활성화하거나 해당 경로 소스보기를 해서 패스워드값만 알아낸 후 auth 카테고리해서 flag하면됩니다.
Webhacking.kr 14번 문제
13번 이후에 급격하게 쉬워진 문제들로 다소 당황스러울수있습니다. 풀이라고 하기도 쑥스러운… 소스를 보면 체크 시, ck function을 호출합니다. ul 이라는 변수 document.URL(‘Get the full URL of the current’) 현재 주소를 담고, indexOf를 통해서 해당 문자열의 찾을 인덱스를 리턴받아 다시 대입한다. 대입한 값을 30을 곱한다. 해당 값이 인풋박스 밸류와 같이 값다면 해당값*인풋박스 밸류값을 연산한값을 메세지박스로 보여준다. 위의 스크린샷 처럼 간단하게 아웃풋을 구할수있다. 얻은값을 auth 카테고리를 통해서 flag 한다. function ck(){ var ul=document.URL; ul=ul.indexOf(".kr"); ul=ul*30; if(ul==pw.input_pwd.value) { alert("Password is "+ul*pw.input_pwd.value); } else { alert("Wrong"); } }
Webhacking.kr 13번 문제
주말이네요. 오늘 13번 문제 풀이를 하려고합니다. 13번 문제는 1000점 짜리 문제입니다. 2번하고 13번이 다소 어렵게 느껴질수있습니다. 그럴때는 문제를 차례대로 풀려하지말고 쉬운문제부터 푸시는 것을 추천드립니다. 해당 문제를 클리어하면, Rank급 상승합니다. 13번 문제를 보면, SQL INJECTION 이라 적혀있습니다. 네, 이번에도 인젝션이네요. 13번 문제는 다른 인젝션 문제와 달리 필터링 수준이 높습니다. 따라서 공격자는 이 점을 유의해야합니다. 해당 인풋에 0,1,* 를 입력했을때 0은 아무 값도 리턴하지않고 1은 1을 리턴하고 0과 1이 아닌 다른 값들은 0을 리턴한다. 띄어쓰기 부분을 %0a로 우회하여 값을 참으로 만들어 요청하니 1을 리턴받았다. 따라서 row count를 리턴하는것으로 유추해볼수있다. 문제에서 친절하게 힌트도 제공해주고있습니다. HINT : select flag from prob13password 반가운 쿼리문이보이네요. 이를 통해서 테이블명과 컬럼명을 얻었습니다. 위의 결과를 통래서 Flag 컬럼에 있는 값을 알아내면 될 거 같다. 쿼리문 잘 아는 사람에게 꽤 유리한 문제다. 난 별로 잘 알지못해서 삽질했다. 파이썬으로 간단하게 짜서 클리어했다.