기본 콘텐츠로 건너뛰기

2017의 게시물 표시

윈도우 부팅이 안될 때-부팅 레코드 복구 법

가끔 컴퓨터를 켰을 때 윈도우의 부팅중 부팅 레코드가 손상되었다는 에러 메시지와 함께 부팅이 안될 때가 있다. 이럴 때 윈도우 복구모드로 들어가 cmd를 열고 다음 명령어들을 입력 실행 시킨다. bootrec /fixboot bootrec /fixmbr bootrec /rebuildbcd 그리고 다시 재부팅 해보자. 설치 복구 창이 안뜬다면, 윈도우 설치 디스크 또는 설치 USB 로 부팅하고 "설치"말고 "컴퓨터 복구"옵션을 선택하면 된다.

텍스트속 반복되는 문장 교체 툴(C)

C언어로 대충 작성한 간단한 문장 교체 툴 - HTML 테그 바꿀때 좋음 #include #include int main(){ char wordBefore[100]; char wordAfter[100]; FILE *file; file = fopen("result.txt","w"); printf("바꿀 절을 입력해 주세요\n"); gets(wordBefore); printf("새롭게 입력될 절을 입력해 주세요\n"); gets(wordAfter); printf("바꿀 텍스트를 입력해 주세요\n"); char ch; int index = 0; int i; while(scanf("%c",&ch)!=EOF){ if(ch==wordBefore[index]){ index++; if(wordBefore[index]==NULL){ fprintf(file,"%s",wordAfter); index = 0; } }else{ if(index>0){ for(i=0;i<index;i++){ fprintf(file,"%c",wordBefore[i]); } index = 0; } fprintf(file,"%c",ch); } } fclose(file); printf(&q

AWS 요금정책과 프리티어 정리(DynamoDB, Cognito, API gateway, S3, Lambda)

아마존 워크샵을 통해 AWS를 실습해보려는데 프리티어로 실습이 가능한지 조사해보고 정리함. 해당 실습링크 https://aws.amazon.com/ko/serverless-workshops/ AWS DynamoDB 과금 형태 프로비저닝된 처리량 쓰기 용량 유닛(WCU) : 1개의 WCU는 최대 1KB 항목을 초당 1건의 쓰기 작업. ex) 항목 크기가 1KB보다 작다면 1 읽기 용량 유닛은 1 strongly consistent read/초의 속도가 되고 1 쓰기 용량 유닛은 1 쓰기/초의 속도가 됩니다. 예를 들어, 항목이 512바이트이고 초당 100개 항목의 읽기를 원한다면 100유닛의 읽기 용량을 프로비저닝해야 합니다. 읽기 용량 유닛(RCU) : 1개의 RCU는 최대 4KB 초당 1건의 읽기. ex) 항목 크기가 4KB보다 크다면 필요한 읽기 용량 및 쓰기 용량의 유닛 수를 계산해야 합니다. 예를 들어, 항목이 4.5KB이고 100 strongly consistent read/초를 원한다면 100(읽기/초) * 2(4.5KB 저장에 필요한 4KB 블록 수) = 200 읽기 용량 유닛을 프로비저닝해야 합니다. 월별 쓰기 & 읽기 용량 유닛량에 따라 과금(리전별로 다름). 인덱싱된 데이터 스토리지 25GB 인덱싱된 데이터 스토리지 : DynamoDB 테이블에서 사용한 디스크 공간(GB). DynamoDB는 테이블에서 사용한 디스크 공간(GB)당 시간당 요금을 부과(리전별로 다름). 데이터 전송 AWS 서비스간 데이터 송수신은 무료. 서로다른 리전간 데이터 송수신은 과금(리전별로 다름) 프리티어 매달 25개의 쓰기 용량 유닛- 25개의 읽기 용량 유닛(무기한) -테이블의 읽기/ 쓰기용량 유닛을 25이하로 프로비저닝 한다. 인덱싱된 데이터 스토리지 25GB(무기한) -테이블의 크기를 25GB이하로 제한

Database 설계(2) - 1. 요구사항 수집 및 분석

요구사항 수집 및 분석 요구 사항 수집 조사할 때 고려사항 -조사 목적 -조사 범위 -개발비용 과 일정 -조사 결과 조사 방법 -기초 조사 : 만들고자 하는 기관의 배경조사 (레거시, 연혁) -자료 조사 : 회사나 기관의 템플렛 업무지침서 등등 관련 자료 수집 -사용자 면담 : 기획자나 담당 사용자와 직접 면담해서 세부 기능과 제약사항 파악 -설문지 조사 -현장 조사 조사결과의 문서화 요구사항 분석 포함할 내용 -시스템 목적 -제약조건 설정 -기존시스템에 대한 이해 - 요구사항 명세서  : 이 단계의 궁극적 결과물이다.

Database 설계(1)-Database 설계 순서

Database 설계 순서 요구사항 수집 및 분석 - 요구사항 명세서를 작성 개념적 설계 - ER 다이얼그램 완성 논리적 설계 - ER 다이얼그램을 관계형스키마(선택적)로 맵핑 물리적 설계 -데이터베이스 파일의 내부저장 구조, 인덱스, 접근경로 명시 -트렌젝션 고려(인덱스 & 역정규화)

Collection의 생성자로 Collection을 넣으면 어떻게 될까?

package testSet; import java.util.HashSet; import java.util.Hashtable; import java.util.Set; public class SetTester { public static void main(String[] args) { // TODO Auto-generated method stub Hashtable<String,String> hashtable = new Hashtable<String, String>(); hashtable.put("key1","value1"); hashtable.put("key2", "value2"); hashtable.put("key3", "value3"); System.out.println("key1 = "+hashtable.get("key1")); System.out.println("key2 = "+hashtable.get("key2")); System.out.println("key3 = "+hashtable.get("key3")); Hashtable<String,String> hashtable2 = new Hashtable<String,String>(hashtable); Set hashSet1 = hashtable2.keySet(); Object[] array = hashSet1.toArray(); HashSet hashSet = new HashSet(hashSet1); System.out.println(hashSet.toString()); hashSet.remove("key3"); Sys

윈도우 10 부팅시 자꾸 start process as current user get session user token failed 뜨는 현상 해결법

start process as current user get session user token failed 가 뜨는 경우는 분명 여러가지가 있으므로 이 해결책은 극히 일부의 문제에만 해당하는 해결법임을 명시합니다. 얼마전 컴퓨터를 부팅하는데 start process as current user get session user token failed 메시지가 뜨면서 부팅을 방해받았던적이있다. 물론 내 컴퓨터는 아니었지만, 딱히 그럴만한 이유가 떠오르지 않았다. 바이러스에 노출될 환경이 아니었기 때문이다.  그렇다면 문제가 무었일까? 나는 구글에서 검색을 해보았고 해당 문제를 겪고있는 많은 사람들을 볼 수 있었다. 특이한점은 내가 본사람들은 전부 한국 사람이었고 전부 11월 1일 이후로 이 문제를 겪고 있었다는 것이었다. 그리고 나는 이문제의 해결법을 찾았다. 다름아닌 vpwalletservice.exe 가 문제였다. 작업관리자에서 VPwalletservice 또는 그와 관련된 VP.inc에서 배포한 프로그램을 모두 종료하고 msconfig를 실행해 서비스 목록에서 vpwalletservice 와 관련 프로그램을 제외시켜야 한다. 이렇게 해결을 보고 지금은 문제없이 잘 사용중이다.

윈도우 10 마우스(커서) 옆에 자꾸 Progress bar(진행중 아이콘)가 나타난다면

이 글은 윈도우10 사용자 중 자꾸만 마우스 커서 옆에 뭔가가 실행중이라고 진행 아이콘이 뜨는 사람에게 조그마한 희망을 주는 글 입니다. 또한 백그라운드에서 프로그램이 실행되는 경우는 아주 다양하니 이 글에서 제시하는 방법은 수많은 문제 중 한가지 문제의 해결책일 뿐임을 미리 알려드립니다. 본인은 원래 해당컴퓨터에서 바이러스에 걸릴만한 행위를 일체 하지않았다. 토렌트나 웹하드는 전혀 사용하지 않고 인터넷에서 파일도 대기업의 공인된 파일만 다운받아서 썼었다. 그러나 어느 날 부턴가 다음과 같은 현상이 발생하였다. 아무런 프로그램도 실행중이지 않지만 자꾸 마우스 아이콘에 실행중이라고 뜨는 문제였다. 이해를 돕기위한 삽화 나는 실행한 프로그램이 없지만 뭔가가 실행중이라는 것은 백그라운드 서비스가 원인이라는 것이다. 그렇다면 어떤 서비스가 다음과같은 현상을 야기했을까? 나는 작업관리자에서 의심가는 백그라운드 프로세스를 종료해보았다. 바로 vpwalletservice VP.Inc에서 배포한 프로그램이었다. 아니나 다를까 해당 프로세스를 삭제하자마자 현상은 사라졌다. 백그라운드 서비스인만큼 msconfig의 서비스 목록에서도 제거하였고 이제 확실히 이런 현상은 발생하지 않을 것이다. 해당 프로그램은 현재 여러 문제를 야기시키는 것으로 인터넷에서 유명하다. 얼마전에는 해당프로그램이 윈도우 부팅시에 start process as current user get session user token failed 메시지를 띄우게 만들어 부팅을 방해했던 문제도 직접 경험해 본적이있다. 이 경우에도 해결방법은 같다.

Fragment의 inInLayout()에 대하여

activity의 onConfigurationChanged() 콜벡 발생시 (orientation변경시) 이전 상태의 fragment instance를 케싱한 것을 알아내는 법을 구글 개발자 문서를 통해서 알아내었다. 바로 fragment의 isInLayout()메소드를 사용하는 것이다. isInLayout()메소드에 대한 설명은 다음과 같다. When a configuration change causes the activity hosting these fragments to restart, its new instance may use a different layout that doesn't include the same fragments as the previous layout. In this case all of the previous fragments will still be instantiated and running in the new instance. However, any that are no longer associated with a <fragment> tag in the view hierarchy will not have their content view created and will return false from  isInLayout() 이러한 메소드의 기능은, activity의 orientation이 변경되어 재생성되고난 후에 새롭게 생선된 acticvity의 레이아웃이 더이상 <fragment>태그로 가지지 않는 fragment를 FragmentManager로 fragment를 참조하려 할때, 해당 참조가 back stack에 있는 fragment의 참조가 리턴된 경우를 처리해 줄때 유용하다. back stack의 참조라면 현재 레이아웃에서는 존재하지 않아서 isInLayout()이 false를 반환한다. 따라서 이런 경우를 조건문으로 걸러주어 현재 layout에 fragment가 존재하지 않는

Android : WifiManager 의 getScanResults()의 반환값이 계속 비어서 반환될때

요즘 Wifi 접속을 간편하게 할 수 있는 Util 을 구상중인데 예상치못한 부분에서 문제가 생겨 한동안 삽질 했다. 계속해서 getScanResults()의 반환값이 empty list가 되는 문제였는데permission에 문제도 없는 코드에서 왜 자꾸 empty list가 반환되는지 오랫동안 구글링 해본 결과 그 이유를 알아내었다. 안드로이드 API 23 (6.0.1) 또는 android.M 부터는 run-time에 permission을 require한다고 한다. 그래서 이 API 버전부터는 permission이 앱을 설치할 때 부여되는 것이 아니라 runtime에 부여가 되며 코딩도 그러한 방식으로 해야한다. 그러나 여기서 많은 제약이 생겨버린다. runtime으로 권한을 요청받으려면 내가 만들려던 WifiUtil을 Fragment나 Activity로 선언해야한다는 것이다. 이는 Util을 쓰나마나한 복잡한 사태를 만들어 버려서 runtime 으로 권한을 요청하는 것을 포기하였다. 그래서 이러한 방법을 사용하였다. 구글 개발자 문서에 따르면 Target SDK 버전이 23보다 낮으면 디바이스의 플랫폼 버전이 23이상이어도 앱 설치시에 권한을 부여한다는 것이다. 그러나 여전히 android 6.0이상의 디바이스에서 설치 후에 앱권한을 취소하고도 실행할 수 있으니 주의해야 한다. 해당 구글 개발자 문서 링크 : https://developer.android.com/training/permissions/requesting.html?hl=ko

feof()함수를 이용한 EOF(end of file) 까지 읽기(C,C++)

int feof(FILE *f)함수는 <stdio.h>의 함수로 파일스트림이 EOF에 도달하였가에 대한 여부를 반환한다. 파일스트림이 EOF에 도달하지 않았으면 0을 EOF이면 0이아닌 정수를 반환한다. 따라서, 다음과 같은 방법으로 파일스트림을 EOF까지 읽을 수있다. <string.h> /*생략*/ FILE *fp; char c; /*생략*/ c = fgetc(fp); while(!feof(fp)){ printf("%c",c); c = fgetc(fp); } /*생략*/ 여기서 주의해야할 점이 있다. feof()는 ^z를 읽어들이고 나서야 EOF를 알아차리고 0이 아닌값을 반환한다. 따라서 위의 예문처럼 꼭 파일스트림에서 먼저 문자를 읽어들인 후 feof()을 통해 EOF를 검사해야한다. 만약 그런 조건이 지켜지지 않는다면, fgets나 scanf("%s")와 같이 문자열 단위로 파일스트림을 읽을때 마지막에 ^z가 포함된 문자열을 그대로 사용하게 된다. 이렇게 나온 문자열은 다음 NULL이 나올때까지의 모든 쓰래기값을 포함하고있다. 특히!! dev C++에서는 컴파일시에 쓰래기값이 모두 0으로 초기화되기 때문에 실행 시 별다른 문제점을 인식할 수 없어서 더욱 조심하여야 한다.