[뽐뿌 지름후기] Inland Professional 480GB 3D TLC NAND SATA III 6Gb/s 2.5" SSD 아마존 직구

분류없음|2018.07.19 23:37


요즘 뽐뿌에 자주 등장하는 SSD..


그 중 적당한 시점에 적당한 가격으로 구매한 SSD !!


Inland Professional 480GB 3D TLC NAND SATA III 6Gb/s 2.5" SSD


아마존 직구..내용 약 78달러..배송은 약 1주일





대세인 3D NAND 와 D램 캐시가 있는 제품.


잘은 모르지만 일단 D램 캐시가 있는 제품이 여러모로 속도와 안정성이 좋다고 함.


전문 지식이 없기 때문에 커뮤니티 귀동냥..ㅎㅎ


딱 설치 후 바로 직행한 속도 테스트.


꽤나 양호한 속도가 나와 주었습니다.


환경에 따라 속도 차이는 나는듯한데 어떤 후기에서는 


+50 ~ 100 MB/s 정도의 높은 수치를 보이는 경우도 있었습니다.


스펙상으로는 그게 정상인것같지만 충분히 만족스럽네요.







이렇게 오래된 pc에 새생명을 불어넣어주었습니다.

태그 : Amazon, ssd, 뽐뿌

댓글(0)

[윈도우 10 / Windows 10] 응용 프로그램 항상 관리자 권한으로 실행하는 방법

OS/Microsoft|2018.07.10 10:06


프로그램

항상 관리자 권한으로 실행하는 방법


일부 윈도우 응용프로그램의 경우 관리자 권한으로 실행해야하는 경우가 있는데


이러한 응용 프로그램의 경우 보통은 더블클릭만으로 실행하기 때문에 


자주 사용해야한다면 꽤나 불편한데요.



▼ 보통은 아래와 같이 실행합니다..




▼ 실행 파일의 속성 > 호환성 > 설정 > 관리자 권한으로 이 프로그램 실행 체크




해주면 다음부터는 더블클릭만으로 관리자 권한으로 실행됩니다.


이상 10원짜리 팁이었습니다.

댓글(0)

[Google Map] Places search box 구글 자동완성을 이용한 위경도 값 가져오기

Open API/Google|2018.07.04 15:28

구글맵 위치정보를 활용한 

자동완성 기능을 적용시키는 샘플



구글의 정보는 정말 말로 할수없을 만큼 방대합니다.


그 중에서 맵데이터는 정말 놀라운데요.


기존에 장소(정확히는 도시별)별 위경도 값을 직접 데이터관리하던 부분을


구글 장소 검색 ( Places Search Box ) 기능으로 대체하게 되었습니다.


잘 구축된 API를 잘 가져다 쓰면 되기 때문에 참 편하죠.


자동완성의 반응속도도 빠르고 나름 직접 관리하는 것보다 정확하기 때문에 


여러모로 유용할것같습니다.


실제로 구현 하는 경우에는 가장 하단에 Js 참조할때 key 값을 입력해야합니다.


https://maps.googleapis.com/maps/api/js?key=여기에키값입력&libraries=places&callback=initAutocomplete

가져온 데이터에서 위경도 값을 읽어오는 부분은 
 

// place 에서 위경도 값을 읽어올 수 있음. 


▲  이라고 주석이 달린 부분을 참고하시면 될것같습니다.








◎ 실제로 구글 API의 Response값을 체크해서 데이터를 확인해보겠습니다. ( 크롬기준 )




1. 샘플 페이지를 열어서 F12를 눌러 개발자 도구를 실행하고 Network 탭으로 이동

그리고 키워드 검색을 통해 자동완성목록이 보여지는것을 확인.

그와 동시에 AutocompletionService.GetQueryPredictions 페이지를 호출하여 값을 가져옴.


(아래 이미지는 클릭하면 커집니다)




2. 목록 중 하나를 선택 했을 때 PlaceService.GetPlaceDetails 페이지를 호출하여 상세 정보를 가져옴.


(아래 이미지는 클릭하면 커집니다)



3. 해당 호출에 대한 Request


(아래 이미지는 클릭하면 커집니다)



4. 해당 호출에 대한 Response 데이터 , 이렇게 확인이 가능합니다.

실제로 Respons되는 데이터의 항목이 다양한데 이 또한 필요에 따라 활용이 가능할것같습니다.


(아래 이미지는 클릭하면 커집니다)





아래 코드의 99%는 


https://developers.google.com/maps/documentation/javascript/examples/places-searchbox


에서도 확인 하실 수 있습니다.



<!DOCTYPE html>
<html>

<head>
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
	<meta charset="utf-8">
	<title>Places Searchbox</title>
	<style>
		/* Always set the map height explicitly to define the size of the div
       * element that contains the map. */

		#map {
			height: 100%;
		}

		/* Optional: Makes the sample page fill the window. */

		html,
		body {
			height: 100%;
			margin: 0;
			padding: 0;
		}

		#description {
			font-family: Roboto;
			font-size: 15px;
			font-weight: 300;
		}

		#infowindow-content .title {
			font-weight: bold;
		}

		#infowindow-content {
			display: none;
		}

		#map #infowindow-content {
			display: inline;
		}

		.pac-card {
			margin: 10px 10px 0 0;
			border-radius: 2px 0 0 2px;
			box-sizing: border-box;
			-moz-box-sizing: border-box;
			outline: none;
			box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
			background-color: #fff;
			font-family: Roboto;
		}

		#pac-container {
			padding-bottom: 12px;
			margin-right: 12px;
		}

		.pac-controls {
			display: inline-block;
			padding: 5px 11px;
		}

		.pac-controls label {
			font-family: Roboto;
			font-size: 13px;
			font-weight: 300;
		}

		#pac-input {
			background-color: #fff;
			font-family: Roboto;
			font-size: 15px;
			font-weight: 300;
			margin-left: 12px;
			padding: 0 11px 0 13px;
			text-overflow: ellipsis;
			width: 400px;
		}

		#pac-input:focus {
			border-color: #4d90fe;
		}

		#title {
			color: #fff;
			background-color: #4d90fe;
			font-size: 25px;
			font-weight: 500;
			padding: 6px 12px;
		}

		#target {
			width: 345px;
		}
	</style>
</head>

<body> <input id="pac-input" class="controls" type="text" placeholder="Search Box">
	<div id="map"></div>
	<script>
		// This example adds a search box to a map, using the Google Place Autocomplete
		// feature. People can enter geographical searches. The search box will return a
		// pick list containing a mix of places and predicted search terms.
		// This example requires the Places library. Include the libraries=places
		// parameter when you first load the API. For example:
		// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">
		function initAutocomplete() {
			var map = new google.maps.Map(document.getElementById('map'), {
				center: {
					lat: -33.8688,
					lng: 151.2195
				},
				zoom: 13,
				mapTypeId: 'roadmap'
			});
			// Create the search box and link it to the UI element.
			var input = document.getElementById('pac-input');
			var searchBox = new google.maps.places.SearchBox(input);
			map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
			// Bias the SearchBox results towards current map's viewport.
			map.addListener('bounds_changed', function() {
				searchBox.setBounds(map.getBounds());
			});
			var markers = [];
			// Listen for the event fired when the user selects a prediction and retrieve
			// more details for that place.
			searchBox.addListener('places_changed', function() {
				var places = searchBox.getPlaces();
				if (places.length == 0) {
					return;
				}
				// Clear out the old markers.
				markers.forEach(function(marker) {
					marker.setMap(null);
				});
				markers = [];
				// For each place, get the icon, name and location.
				var bounds = new google.maps.LatLngBounds();
				places.forEach(function(place) {
					if (!place.geometry) {
						console.log("Returned place contains no geometry");
						return;
					}

                                        // place 에서 위경도 값을 읽어올 수 있음. 
					console.log(place.geometry.location.lat());
					console.log(place.geometry.location.lng());

					var icon = {
						url: place.icon,
						size: new google.maps.Size(71, 71),
						origin: new google.maps.Point(0, 0),
						anchor: new google.maps.Point(17, 34),
						scaledSize: new google.maps.Size(25, 25)
					};
					// Create a marker for each place.
					markers.push(new google.maps.Marker({
						map: map,
						icon: icon,
						title: place.name,
						position: place.geometry.location
					}));
					if (place.geometry.viewport) {
						// Only geocodes have viewport.
						bounds.union(place.geometry.viewport);
					} else {
						bounds.extend(place.geometry.location);
					}
				});
				map.fitBounds(bounds);
			});
		}
	</script>
	<script src="https://maps.googleapis.com/maps/api/js?key=&libraries=places&callback=initAutocomplete" async defer></script>
</body>

</html>


댓글(0)

[vb.net] 정해진 시간에 지정 URL로 브라우저 실행하는 프로그램

Progmming/.Net|2018.06.19 16:38

얼마전부터 새로이.. 어플리케이션 공부를 시작했습니다.


어딘가 특별나게 써먹을 목적으로 하는건 아니고 


그때 그때 필요한게 있으면 만들어서 써볼까하는 마음으로요.




10원짜리 툴 첫번째.




개발 배경 


지정 시간에 오픈하는 핫딜의 경우 까먹기 쉬워서


알람도 맞추고 했으나 결국은 로그인하다가 시간 까먹고 끝..


그래서 지정된 시간에 브라우저 열어주면 좋겠다 싶어서 만들었습니다.


한때는 https://time.navyism.com/ 네이비즘 사이트도 애용했으나 


그 기능을 합쳐서 도전.







사용법 


1. 핫딜 오픈 시간 입력.


2. 몇분전에 알림 받을 지 선택 ( 기본 3분전 )


3. 핫딜 URL 입력 길어도 됩니다. 그냥 몽땅 때려넣음.


4. 시작



시작되면 몇초가 남았는지..나오고 0초가 되면 브라우저가 실행됩니다.



64Bit OS가 기본이라 생각(?)하고 브라우저는 


C:\Program Files (x86)\Google\Chrome\Application\chrome.exe 


C:\Program Files\Internet Explorer\iexplore.exe


위 2개의 경로를 확인하여 실행합니다.


윈도우 기본 브라우저 경로를 어떻게 가져와야 하는지 모르겠네요..


-_-ㅎ.. 아시는분 팁좀 부탁드립니다.





각각의 실행 파일과 소스 파일를 첨부합니다.


HDA.exe


HDA.zip




ps. 개인적인 스터디와 재미 , 흥미로 인한 코딩이므로 무의미한 디스는 거부하겠습니다. 

반사!



적절한 조언은 감사히 받겠습니다 :)

댓글(2)
  1. 스파본능 2018.06.26 13:23 신고 댓글주소  수정/삭제  댓글쓰기

    vb.net 으로 크롬드라이버를 지정된시간에 열어주면되겠네요

[ VB.net ] 특정 웹서버 시간 읽어오기

Progmming/.Net|2018.06.04 14:14

핫딜 주소와 시간을 셋팅해서 


구매시에 도움을 주는 CS프로그램을 하나 만들어보려고 하는 중에 정리.


1분 1초가 중요한 거라 해당 웹 서버의 시간을 읽어와서 처리하는 샘플 코드.


요점은 WebResponse의 해더에서 Date를 읽어와서 이용하는 것. 


아래는 인터파크의 웹서버 시간을 읽어오기 위한 코드.


   

Imports System.Net

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create("http://www.interpark.com"), HttpWebRequest)
        Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse)

        Dim i As Integer
        While i < myHttpWebResponse.Headers.Count
            Console.WriteLine(ControlChars.Cr + "Header Name:{0}, Value :{1}", myHttpWebResponse.Headers.Keys(i), myHttpWebResponse.Headers(i))
            i = i + 1
        End While


        myHttpWebResponse.Close()

        myHttpWebRequest = Nothing
        myHttpWebResponse = Nothing

    End Sub
End Class



출력 결과 형태는 굵게 표시한 Date 를 이용하면 된다.


Header Name:Age, Value :182


Header Name:Vary, Value :Accept-Encoding, User-Agent


Header Name:Content-Length, Value :2935


Header Name:Content-Type, Value :text/html


Header Name:Date, Value :Mon, 04 Jun 2018 05:15:04 GMT


Header Name:Last-Modified, Value :Wed, 28 Feb 2018 05:30:03 GMT


Header Name:P3P, Value :CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"


댓글(0)

PHP + Google Translate API 연동하기

Progmming/PHP|2018.05.04 13:19

PHP + Google Translate API 연동하기



Google translate document site

https://cloud.google.com/translate/docs/?hl=ko



Google 에서 제공되는 샘플 소스

https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/translate


 

하지만 그냥 최소한의 코딩으로 처리를 하고자 했기 때문에..


php 함수를하나 만듬.


function translate($content) { $handle = curl_init(); curl_setopt($handle, CURLOPT_URL,'https://www.googleapis.com/language/translate/v2'); curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); $data = array('key' => "API Key", 'q' => $content, 'source' => "ko", 'target' => "en"); curl_setopt($handle, CURLOPT_POSTFIELDS, preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', http_build_query($data))); curl_setopt($handle,CURLOPT_HTTPHEADER,array('X-HTTP-Method-Override: GET')); $response = curl_exec($handle); $responseDecoded = json_decode($response, true); $responseCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); curl_close($handle); return $responseDecoded['data']['translations'][0]['translatedText']; }


사용을 위해 신용카드 등록이 필요하지만 처음 등록 할 경우 300달러가 제공되니 참고해주세요.

댓글(0)

php 쿼리결과에 대한 결과 행이 있는지 여부, sqlsrv_has_rows / sqlsrv_num_rows

Progmming/PHP|2018.04.26 11:02

mysql 을 오랜만에 사용할 기회가 있어서 처리중에...


데이터 갯수를 체크해야 했는데 mssql 에서 하던대로 count 해서 데이터 갯수를 체크하려고 했으나


sqlsrv_num_rows 함수를 이용하니 결과 값이 빈값이 찍히는 상황.


확인해보니 sqlsrv_num_rows 결과 값을 리턴 받기 위해서는 커서 타입을 지정해야함.


단순 쿼리 결과 값이 있는지 여부를 체크하는 함수가 있더라는..



sqlsrv_has_rows 


- 쿼리결과에 대한 결과 행이 있는지 여부 .  return : bool


php manual : http://php.net/manual/en/function.sqlsrv-has-rows.php


<?php


    $server 
"serverName\sqlexpress";
    $connectionInfo = array( "Database"=>"dbName""UID"=>"username""PWD"=>"password" )
    $conn sqlsrv_connect$server$connectionInfo );

    $stmt sqlsrv_query$conn"SELECT * FROM Table_1");

    if (
$stmt) {
       
$rows sqlsrv_has_rows$stmt );
       if (
$rows === true)
          echo 
"There are rows. <br />";
       else 
          echo 
"There are no rows. <br />";
    }
?>




sqlsrv_num_rows

- 쿼리 결과에 대한 행의 갯수 .  
커서 타입을 SQLSRV_CURSOR_KEYSET 또는  SQLSRV_CURSOR_STATIC 으로  
지정해주어야 결과 값을 가져올 수 있음.


<?php
    $server 
"serverName\sqlexpress";
    $connectionInfo = array( "Database"=>"dbName""UID"=>"username""PWD"=>"password" );
    $conn sqlsrv_connect$server$connectionInfo );

    $sql "SELECT * FROM Table_1";
    $params = array();
    $options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    $stmt sqlsrv_query$conn$sql $params$options );

    $row_count sqlsrv_num_rows$stmt );
   
    if (
$row_count === false)
       echo 
"Error in retrieveing row count.";
    else
       echo 
$row_count;
?>

댓글(0)

MS-SQL Linked Server 사용자 매핑 설정하는 방법 ( 접속자별 권한 설정 )

DataBase/MS-SQL|2018.04.24 11:05

MS-SQL Linked Server  사용자 매핑 설정하는 방법 ( 접속자별 권한 설정 )



개요 


사용자 매핑을 사용하지 않고 단순 원격서버에 대한 로그인정보로 Linked Server를 연결하여 보안 셋팅 없이 경우 모든 사용자가 Linked Server에 대한 권한을 동일하게 갖게 되므로 보안 이슈가 발생할 수 있다.



▼ 흔히 인터넷상에서 알려주는 Linked Server 연결 방법.




문제점 확인 및 문제 발생 상황


위와 같은 방법으로 Linked Server를 설정 할 경우 모든 사용자가 같은 계정으로 원격 서버에 접속하기 때문에 여러 권한 관련 보안 이슈가 발생할 수 있게 된다.


DBA가 없는 규모가 작거나 사수가 없는 경우 혹은 별도 교육을 통하지 않는 경우 사실상 세부 옵션을 알아서 사용하기가 어렵기 때문에 위의 방법으로 연결해서 사용하던 때가 있었으나 외부에 뷰테이블 형태로 제공되는 서비스가 생기면서 해당 이슈가 발생되었다.



Linked Server 권한 문제 해결방법


해결방법은 이미 위에 옵션 화면에 노출되어있는데 

로컬 서버 로그인과 원격 서버 로그인 매핑 옵션을 이용해야한다.




이말은 SQL Server에 로그인된 사용자 별로 Linked Server 연결 아이디를 다르게 하고 매핑에 등록되지 않은 사용자의 경우 아래에 옵션에 해당하는 연결을 한다는 의미이다.

  • 연결안함.
  • 보안컨텍스트 없이 연결
  • 로그인의 현재 보안 컨텍스트를 사용하여 연결
  • 다음 보안 컨텍스트를 사용하여 연결




로컬 로그인 사용자를 선택하고 원격 사용자와 암호를 입력한다.

로컬 로그인의 경우 등록된 계정을 사용하기 때문에 콤보박스에서 선택하면 됨.




입력된 결과이며 여러개 중복 등록이 가능하므로 사용자 별로 Linked Server 의 접속 계정을 설정하여 권한 및 보안 설정이 가능하다.

그리고 그외의 접속에 대해서는 연결을 하지 않거나 하는 등의 설정이 아래 옵션에서 처리가 가능하니 참고.





상세한 내용은 아래 링크를..


https://docs.microsoft.com/ko-kr/previous-versions/sql/sql-server-2008-r2/ms188477(v%3dsql.105)

댓글(0)

waiting for available sockets / 사용 가능한 소켓 대기 중 , 에러(?) 원인과 해결

에러노트|2018.03.30 14:17



인터넷 브라우저 사용 중 볼 수 있는 오류 메시지

 

"사용 가능한 소켓 대기 중"


내용을 알고보면 이것을 에러라고해야할지..대기중인것으로 봐야할지..모호합니다.


  • waiting for available sockets 

  • 사용 가능한 소켓 대기 중



알려진 원인


  • 기본적으로 오버로드 이미지 및 크롬에 저장된 데이터로 인해 발생합니다. 
  • 크롬에 저장된 쿠키와 이미지가 커지면서 발생합니다.
  • 사이트를 열 때마다 브라우저에 임시로 쿠키 및 이미지가 저장 될때 과부하에 걸리면 소켓 오류가 발생합니다.
  • 열린 소켓갯수가 제한된 숫자보다 많은 경우 대기합니다.

해결 방법

  1. 크롬에서 chrome://net-internals/#sockets 설정 페이지로 이동 한 후 Close idle sockets , Flush socket pools 버튼으로 열려있는 소켓을 닫아주거나 소켓을 초기화 해주는 방법.




    ▼ 현재 연결된 소켓에 대한 목록이 보입니다. transfer , ssl 두가지 타입으로 나뉘어 보입니다.



  2. 쿠키 및 캐시를 삭제
  3. 크롬 확장 기능 및 도구 모음을 지우거나 비활성화.

댓글(2)
  1. 김선우 2018.07.09 15:07 신고 댓글주소  수정/삭제  댓글쓰기

    감사합니다
    이거 떄문에 컴퓨터가 먹통되었는데 해결됬어요!

    그럼 크롬은 동시 연결하는게 6개 뿐이 안되나요? 소켓스풀인가요?
    더 못늘리나요

Javascript , Data URL을 이용한 엑셀 파일 생성하기

Open API/그 외|2018.02.21 17:12





javascript 에서 테이블 구조의 html을 전달 받아 Excel 파일을 생성하는 함수 입니다.


기본적으로 서버에서 만들어진 내용을 다운받도록 하지만 

클라이언트 쪽에서 바로 xls 파일을 생성 할 수 있도록 하는 방법입니다.

기본문법 : data:[<mediatype>][;base64],<data>



    
function fnExcelReport(cont, fileName)
{
	var ua = window.navigator.userAgent;
         
	if ( (navigator.appName == 'Netscape' && ua.search('Trident') != -1) || (ua.indexOf("msie") != -1) )       // IE
	{
		newWin = window.open();
		newWin.document.open("txt/html","replace");
		newWin.document.write(cont);
		newWin.document.close();
		newWin.focus();
		newWin.document.execCommand("SaveAs", true, fileName + ".xls");
		newWin.close();
	}
	else   //other browser
	{
		var a = document.createElement('a');
		var data_type = 'data:application/vnd.ms-excel';
		a.href = data_type + ', ' + encodeURIComponent(cont);
		a.download = fileName+'.xls';
		a.click();
		e.preventDefault();
	}
}


상세 내용은 MDN 웹 Document 를 참조하세요.


링크 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

댓글(0)