class MySingleton constructor(context: Context) {
companion object {
@Volatile
private var INSTANCE: MySingleton? = null
fun getInstance(context: Context) =
INSTANCE ?: synchronized(this) {
INSTANCE ?: MySingleton(context).also {
INSTANCE = it
}
}
}
val requestQueue: RequestQueue by lazy {
// applicationContext is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
Volley.newRequestQueue(context.applicationContext)
}
fun <T> addToRequestQueue(req: Request<T>) {
requestQueue.add(req)
}
}
4. 사용하기
val url = "http://www.example.com"
// Formulate the request and handle the response.
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String> { response ->
// Do something with the response
},
Response.ErrorListener { error ->
// Handle error
})
val queue = MySingleton.getInstance(this.applicationContext).requestQueue
queue.add(stringRequest)
starts the placeholder. If you want to insert a literal%character, then you must insert two of them :%%.
Index ':'
takes theIndex-th element in the argument array as the element to insert. Ifindexis omitted, then the zeroth argument is taken.
'-'
tellsFormatto left-align the inserted text. The default behaviour is to right-align inserted text. This can only take effect if theWidthelement is also specified.
Width
the inserted string must have at leastWidthcharacters. If not, the inserted string will be padded with spaces. By default, the string is left-padded, resulting in a right-aligned string. This behaviour can be changed by the usage of the'-'character.
'.' Precision
Indicates the precision to be used when converting the argument. The exact meaning of this parameter depends onArgType.
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.
본 "개인정보 처리 방침"은 "KeySergioBetzMan"가 배포하는 "안드로이드 어플리케이션"(이하 "앱") 사용을 위하여 요청하는 "민감한 권한" 및 "사용자 정보"에 대한 관리 및 운영에 관한 내용입니다.
1. 사용하는 "민감한 권한" 및 "사용자 정보"와 이의 이용 목적 1) android.permission.CAMERA 손전등 등의 "앱"에서 카메라 플래시의 사용 등의 기능을 수행하기 위하여 사용. 2)android.permission.INTERNET 손전등 등의 "앱"에서 광고 API 동작 등의 기능을 수행하기 위하여 사용.
2. "민감한 권한" 및 "사용자 정보"에 대한 수집 "KeySergioBetzMan"에서는 사용자가 "앱"을 사용함에 있어 서비스의 이용 내역을 포함한 어떠한 개인 정보도 "KeySergioBetzMan"이 운영/관리하는 서버로의 수집/전송/저장 하지 않습니다.
3. "민감한 권한" 및 "사용자 정보"에 대한 제3자 제공 및 위탁 "KeySergioBetzMan"에서는 정보 이용 목적의 범위를 넘어 사용하거나 제3자에게 제공 또는 위탁하지 않습니다.
4. "개인정보 처리 방침"의 적용 제외 "KeySergioBetzMan"은 무료 배포되는 "앱"에서 수익의 창출을 위하여 광고를 게제할 수 있습니다. 이 경우 "KeySergioBetzMan"은 광고 대행사의 광고 API와 광고를 통하여 링크된 다른 회사의 웹사이트, 어플리케이션 및 자료에 대하여 통제권이 없을 뿐만 아니라 이들이 개인정보를 수집하는 행위에 대하여 "KeySergioBetzMan"의 "개인정보처리방침"이 적용되지 않습니다. 따라서, "KeySergioBetzMan"이 배포한 "앱" 포함하고 있는 광고를 클릭하여 광고를 통하여 링크된 다른 회사의 웹사이트, 어플리케이션 및 자료 페이지로 이동한 경우에는 새로 방문한 사이트 또는 광고에 포함된 개인정보 처리 방침을 반드시 확인하시기 바랍니다.
네트워크를 관리하기 위해서는 어떤 방법이 필요할까요? 우선 해당 네트워크의 장비가 살아 있는지 판단해야 합니다. 장비가 살아 있는지 여부를 판단 할 수 있는 것이 Ping(ICMP)라는 프로토콜이 있습니다. 단순히 장비가 살아있다는 정보 뿐만아니라 장비의 정보을 알고 싶을 땐 어떤 방법을 사용할까요? 방법이라 여러가지 있겠지만 여기서는 그 방법 중 하나로 SNMP라는 프로토콜에 대해서 알아보려고 합니다. SNMP를 이용하여 장비 정보 수집 뿐만 아니라 설정도 가능합니다. 자세한 내용 보다는 간단한 사용법을 알아보려고 합니다. 기본적으로 제가 알고 있거나 검색한 내용을 기반으로 참고 작성하는 것이기 때문에 잘 못된 부분이 있더라도 양해 부탁 드립니다.
SNMP 버전은 SNMPv1, SNMPv2c, SNMPv3가 있습니다. SNMP 통신을 하기위해서는 기본적으로 Community String이 일치해야 합니다. 기본적으로 Public으로 되어 있으나 보안상 다른 이름을 사용하는 것이 적절하다고 합니다. SNMP로 장비에 데이터를 요청하기 위해서는 OID(Object ID)를 알고 있어야 합니다. OID는 MIB(Management Information Base)파일에 정의 되어 있습니다. 여기에는 OID와 그 OID값의 의미가 정의되어 있습니다.
기본 OID 정보
OID
OID Name
설명
1.3.6.1.2.1.1.1
sysDescr
A textual description of the entity.
1.3.6.1.2.1.1.2
sysObjectID
The vendor's authoritative identification of the network management subsystem contained in the entity.
1.3.6.1.2.1.1.3
sysUpTime
The time (in hundredths of a second) since the network management portion of the system was last re-initialized.
1.3.6.1.2.1.1.4
sysContact
The textual identification of the contact person for this managed node, together with information on how to contact this person.
1.3.6.1.2.1.1.5
sysName
An administratively-assigned name for this managed node. By convention, this is the node's fully-qualified domain name.
1.3.6.1.2.1.1.6
sysLocation
The physical location of this node (e.g., 'telephone closet, 3rd floor').
1.3.6.1.2.1.1.7
sysServices
A value which indicates the set of services that this entity primarily offers.
기본적으로 SNMP 시스템 OID만 적어봤는데요. MIB 파일을 보면 더 많은 내용이 있습니다. 위의 OID를 가지고 각 장비에 SNMP값을 요청하면해당 정보를 가져옵니다. 혹시 OID정보를 가져오지 못한다면 OID뒤에 ".0"를 더 붙여서 날려보세요. 참고로 OID는 하나의 값을 가진 경우도 있지만 하나의 OID에 ".0", ".1", ".2"처럼 붙여진 경우도 있는데요. 정적 OID, 동적 OID라는 구분이 있는데요 자세한 내용은 MIB 파일에 정의되어 있습니다.
SNMP는 데이터를 요청해서 정보를 수집하는데요. 요청하지 않아도 수집되는 정보가 있습니다. 트랩이라는 것인데요. 트랩은 SNMP 이벤트입니다. 장비에 설정된 이벤트 정보가 날라오는데요. 이것도 역시 OID를 가지고 있고 MIB에 정의가 되어 있습니다. SNMP는 기본적으로 UDP를 사용하며 161, 162포트를 사용합니다. 161번은 기본 SNMP 통신 포트, 162번은 SNMP 트랩 포트 입니다.
구글에서 개발관련 검색을 하면 소스코드를 볼 수 있는데요. 그 중에서 소스코드가 가독성이 높게 표시되는 경우를 확인 할 수 있습니다. 저도 어떻게 하면 저렇게 보일까 검색을 해보니 syntaxhighlighter라는 플러그인이었습니다. 그래서 저도 한번 적용해 보기로 했습니다. 여러 블로그에 링크된 다운로드 페이지의 경우 개발자 홈페이지에 있는 다운로드 링크가 걸려 있는데요. 링크가 연결이 안되더라구요. 개발자 홈페이지에서는 새로운 다운로드 페이지로 연결해 줍니다. 여기에서 다운로드 받을 수 있는 것이 syntaxhighlighter v4 입니다. 근데 여러 블로그에 올려진 내용은 syntaxhighlighter v3 기준이라서요. 잘모르겠지만 syntaxhighlighter v4은 내부 파일들도 다른뿐만 아니라 사용법도 달라진거 같아요. 저도 다른 블로그처럼 syntaxhighlighter v3 버전으로 해볼려고 합니다. 먼저 다운로드 받을 파일은 여기 있습니다.
제 블로그에 방문해주셔서 감사합니다. 이 블로그는 2017년 05월 14일에 시작했습니다. 그 시작을 기념하여 이 글을 쓰게 되었습니다.
처음 블로그를 시작하고자 생각하게 되었을 때 티스토리에 블로그를 시작해 보기로마음먹었습니다.흔한 사이트들처럼 단순하게 회원가입을 하여 블로그를 시작하면 되겠지 생각했습니다. 막상 티스토리에 가입하려고 하니 가입을 위해서는 초대장이 필요했습니다. 이것은 게임 퀘스트를 받는 느낌을 받았습니다. 초대장 받기 퀘스트는 Lv.1에게 Lv.99 보스를 잡으라는 것 같았습니다. 그만큼 너무 어려웠어요. 이렇게까지 해야하나하는 생각도 들었습니다. 며칠동안 초대장 신청을 하고 초대장을 받지 못해서 낙심했으나 마음을 비우고 시간 날때마다 접속해서 초대장을 구걸(?)했습니다. 일주일 정도지나서 결국에는 hi.anna님이 초대장을 주셔서 블로그를 시작하게 되었습니다.
(hi.anna님 잘쓸게요. 감사합니다.)
이렇게 어렵게 시작한 블로그지만, 무엇부터 해야할지 모르겠네요. 우선, 제 블로그에서는 소프트웨어 관련해서 블로그를 쓸려고 합니다. 아직 전문적인 주제는 없지만 여러가지 소프트웨어에 대한 정보를 블로그에 올릴려고 합니다.