반응형

요점정리
외관은 그럴싸 하나 시설이 좀 낡았다.
유료조식은 한번 먹을만하다. (두번 이상은 비추)
뷰는 밭뷰라지만 괜찮았다.
주차장 주차라인이 너무 좁다. 화장실도 너무 좁다.

제 점수는요
10점 만점에 7.5점
별점은 ★★★☆

제주도 신화월드를 가고자 하였으나 패밀리룸이 만실이라 신화월드 지근거리에 위치한 제주항공우주호텔을 아고다를 통해 비교적 저렴하게 예약하였다.
1박당 8만원대였고 기준 숙박인원은 3인이었으나 추가 침구류를 1회 납부하는 조건으로 성인3인에 초등학생1명 이렇게 총 4명이서 묵을 수 있었다.
내부 시설은 딱히 다양할게 없이 CU편의점과 로비에 차를 마시거나 음식 취식이 가능한 꽤 많은 수의 식탁과 의자
그리고 조식이 나오는 식당 정도였다.
CU편의점은 밤 10시 이후엔 무인으로 운영되는것 같았다.(무인 판매시간대엔 술 판매 X)

제주 항공 우주 호텔의 장점
객실이 넓어서 답답하지 않다.
신화월드에 비해서 1.7배? 주관적 평가라 확실하지 않지만 매우 넓어 좋다.
인근 관광지에서 매우 가깝다.
녹차밭과 녹차로 유명한 카페인 오설록을 걸어서 갈 수 있고
이름처럼 항공우주박물관은 기어서 갈 수 있고
제주 신화월드까진 차로 5~10분이면 쌉가능하다.
그리고 한적하이 뭐 나름 운치있고 괜찮다.
아래 사진은 객실에서 바라본 숲뷰인데 저 멀리 삼방산도 구름에 가려진채로 예술적으로 보이길래 담아봤다.

요건 호텔 로비에서 바깥을 바라보며 찍은 사진인데 뭐 괜츈하다.

여느 호텔처럼 곡선처리된 입구와 비를 피할 수 있는 공간도 뭐 괜츈괜츈

로비에서 객실로 이동할 때 DP되어 있는 미술작품과 의자들도 나름 신경 써놨다.

로비 우측에 위치한 CU편의점과 아까 말한 취식이 가능해 보이는 공간이 1시 방향이 있어 편리하다.

그리고 인당 1병씩 생수와 각종 차와 커피 그리고 치약과 칫솔이 매일 제공되는점은 매우 바람직하다.
신화월드는 칫솔 안 준다.


여기까진 꽤 양호하고 긍정적인 평가라면 아래부턴 점수 깎아 먹는 단점이다.
일단 객실이 너무 어둡다.
사진을 그냥 찍어보면 이보다 훨씬 밝게 나와서 인위적으로 좀 어둡게 촬영을 했다.
직접 객실에서 불 켜놓으면 저 조명이 어찌나 어둡던지 좀 암울한 기운이 느껴진다.
그리고 화장실이 너무 좁다.
변기에 앉을 때 조금 과장하면 곡예하며 앉아야 한다.
반면 샤워실은 화장실과 분리되어 있는데 이건 또 샤워기가 2개나 설치되어 있어 불필요하게 넓다고 해야 할지

그리고 주차장 주차라인이 좀 좁다.
쉬러와서 스트레스 받는다.


조식이 1만원대 중반인데 좀 빈약하다.
첫날 조식은 그래도 소세지도 나오고 만두도 나와서 좀 먹을만 했는데 둘쨋날은 기억에 남을만한 음식이 없었다.
조식은 2F로비에서 직원에게 호수를 말하고 티켓을 구매 후 1F 식당으로 가서 티켓 제출하고 먹으면 된다.
조식 개장시간은 아침 7시부터라 부지런하게 움직일 때 이용하기 권장된다.

끝으로 유아나 초딩 동반해서 침대에서 잘 땐 로비에 침대 가드 부탁하면 갖다 준다.
로비 직원들 친절하다.
이상 내돈내산 제주항공 우주 호텔 리뷰 끝

반응형
Posted by Hippalus
,

반응형

코로나로 인해 제주도가 관광지로 각광을 받은지도 2~3년이 지났고 하늘길도 열려 이젠 다들 일본과 동남아를 많이들 간다한다.
나역시 제주도를 코로나 기간 동안 3회 방문한듯 싶다.

이번에 방문한 신화월드는 중공인을 대상으로 만들어진 대규모 리조트인데 코로나와 사스의 여파로 중공인들보단 한국인들이 많이 찾고 있는듯 하다.

일단 신화월드의 워터파크를 이용하려면 투숙객은 일부 상급 투숙객에게 무료로 이용 가능하지만 투숙하지 않는 일반 관광객들은 네이버나 지마켓에서 티켓을 할인받아 가는게 그나마 저렴하다.
이번 2023년 여름엔 지마켓에서 여행 행사를 진행하여 비교적 저렴한 가격인 인당 35,000원에 다녀왔다.

워터파크 운영시간은 10시부터 저녁 8시까지 총 10시간이다.
개장시간에 맞춰 방문하였는데 사진 촬영 시간이 9시 45분경이었는데 비교적 한산한편이었다.

신화 월드 워터파크는 입장시 소지품 검사를 한다.
김밥이나 다른 외부 음식이 들어오는걸 막기 위함인데 건물 밖에서 일단 줄을 서서 입장하면 이렇게 내부에서 또 짐검사로 시간을 소비해야 한다.

참고로 내부에서 파는 음식 가격은 터무니없이 비싸다.
미역국이 15,000원인가 했던것 같고 오뎅 몇개 들은게 7,000원 떡볶이가 7,000원 이런식이다.
떡볶이는 그래도 맛은 있었다.
떡볶이를 별로 좋아하지 않는 나이기에 내가 맛있다면 맛있는거다. ㅎ

썬베드가 35,000원이고 저런 고급진 베드는 더 비싸다.
방갈로 같은건 몇십만원이나 한다.
유료에 가격도 비싸서 그런지 썬베드는 많이 여유가 있어보였다.
케리비안베이처럼 경쟁하지 않아도 충분히 이용 가능한 수량과 이용률을 보였다.

아래 사진에서 보이는 노란 시설은 초등학생이나 그 이하 어린이들을 위한 시설인데 방방처럼 물과 함께 뛰어 노는 시설이다.

이밖에 건물 내부와 외부에 각각 유수풀, 워터슬라이드, 놀이터, 온수풀 등 다양한 시설이 있다.
하지만 신화월드워터파크에서 가장 마음에 든 시설은 샤워시설이었다.
캐리비안베이와 비교해봐도 다른 워터파크랑 비교해봐도 이상하게 편하다.
리조트 시설이라 그런가

끝으로 팔찌형태의 코인충전을 할 수 있는데 그냥 신용카드 들고 들어가는게 최고다.
괜히 코인충전해서 귀찮게 이용하지 말자

반응형
Posted by Hippalus
,

반응형

//먼저 이런 파일명이 존재한다 치자 일부러 .을 파일명에도 넣었다.
var strData = "동해물과. 백두산이.txt"

// 파일명과 확장자를 .으로 분리한다.
if let lastDotIndex = strData.lastIndex(of: ".") {
    let fileNameWithoutExtension = String(strData[strData.startIndex..<lastDotIndex])
    print(fileNameWithoutExtension) // 출력: "동해물과. 백두산이"
} else {
    print("확장자가 없는 파일명입니다.")
}

// 다음은 원하는 자릿수부터 자릿수까지 추출한다.
// 1번째 글자부터 (0이면 처음임) 8번째 자리까지 추출한다.
let startIndex = strData.index(strData.startIndex, offsetBy: 1)
let endIndex = strData.index(strData.startIndex, offsetBy: 3)

let extractedSubstring = strData[startIndex..<endIndex]

print(extractedSubstring) // 해물

반응형
Posted by Hippalus
,

반응형

간단히 사람배열과 그 사람의 보유금액배열을 스위프트로 생성해 보겠다.
사람배열은 문자열형, 보유금액배열은 Int형이다.

var arrPerson:[String] = []
var arrMoney:[Int] = []

// 한명씩 append시키고
arrPerson.append("홍길동")
arrPerson.append("고길동")
arrPerson.append("둘리")

//순서대로 보유금액을 append시킨다.
arrMoney.append(10000000)
arrMoney.append(30000000)
arrMoney.append(0)

//이제 dictionary를 선언한다. key, value는 String,Int형이다. key에는 이름이 value에는 금액이 들어갈 것이다.
var dicData = [String:Int]()

//사람과 보유금액의 배열은 1:1이므로 사람이든 금액이든 아무 배열이나 잡고 돌리면 되지만 난 사람 배열로 돌린다.
for i in 0..<arrPerson.count {
    //dictionary의 key에 사람배열의 값, value에 보유금액의 값을 저장한다.
    dicData[arrPerson[i]] = arrMoney[i]
}

// 출력해보면 순서대로 홍길동 10000000, 고길동 30000000, 둘리 0이 찍히는것을 확인할 수 있다.
for (key, value) in dicData {
    print("\(key) : \(value)")
}

print("정렬 후 결과")

// 이제 정렬을 해보자
// 오름차순정렬이고 만약 내림차순이 하고싶다면 $0.1 < $1.1 대신 $0.1 > $1.1바꿔주면 된다.
// 참고로 0.1, 1.1은 첫번째 인자의 value 두번째 인자의 value를 뜻한다.
// 결과는 튜플로 반환가능하다.
var tupSortResult = dicData.sorted {$0.1 < $1.1}

//print해보면 정렬된 상태로 확인된다.
//[(key: "둘리", value: 0), (key: "홍길동", value: 10000000), (key: "고길동", value: 30000000)]
print("\(tupSortResult)")

//for문을 통해 돌려가며 찍어보면 아래처럼 보여진다.
// 둘리 0
// 홍길동 10000000
// 고길동 30000000
for i in 0..<tupSortResult.count {
    print("\(tupSortResult[i].key) \(tupSortResult[i])")
}

반응형
Posted by Hippalus
,

반응형

visual studio code를 설치하고 나면 기본 언어 설정이 auto인지라 메뉴명이나 결과안내 메세지들이 영어로 나온다.
영어가 익숙한 자들이야 그냥 쓰면 되겠지만 세종대왕의 얼을 지키려드는 자는 한글로 바꿔주면 되겠다.

방법은 쉽다.

참고로 난 chatGPT에 물어보니 한 세번 엉뚱한 답을 줬지만 결국 바른 답을 내주었다.

먼저 좌측 하단의 톱니바퀴 아이콘을 클릭 후 팝업컨텍스트 메뉴에서 설정메뉴를 누르거나 단축키로 ctrl + , 키를 누른다.

그럼 설정 메뉴가 호출되는데

여기 상단의 설정 검색이란 텍스트 박스에 아래와 같이 입력한다.
locale

그럼 맨 위에 TypeScript:Locale이 보이는데 
콤보박스에서 ko를 선택하고 vscode를 종료 후 다시 실행한다.

그럼 이처럼 영어 메뉴나 메세지들이 한글로 보이기 시작한다.

반응형
Posted by Hippalus
,

클로저 기초 2

swift 2023. 7. 11. 05:48

반응형

본 포스팅은 남 포스팅을 공부하며 정리한 내용이다.
원본 강좌 포스팅은 아래를 참고
(https://www.boostcourse.org/mo122/lecture/11297?isDesc=false)

클로저를 포함해 요즘것들은 뭐가 그리 잘났다고 줄여대는지 도덕책 근본이 없다.
개발은 평생 지 혼자 싸들고 하나
남 생각도 할 줄 알아야 그기 사람 아이가 그기 마!

클로저는 다양하게 표시할 수 있는데 일단 클로저를 받아줄 함수를 선언하자
Int형의 인자 a, b 2개를 받고 클로저를 받을 method마찬가지로 Int형 2개와 리턴형은 당연히 Int다
콩에는 콩 팥에는 팥이다.

func calc(a:Int, b:Int, method:(Int, Int)-> Int) -> Int{
    return method(a, b)
}

후행클로저
위 calc라는 함수의 마지막 파라메터가 클로저가 함수의 마지막 인자일 때 가능하며, 마지막 파라메터의 이름을 생략할 수 있다.
이렇게
result = calc(a:10, b:10) {(left:Int, right:Int) -> Int in
    return left + right
}

반환타입 생략
상식적으로다가 파라메터가 Int가 넘어왔으면 Int를 리턴해준다라는것 정도는 컴파일러가 알기 때문에 리턴 타입인 -> Int는 생략해도 되겠다.
다만 in은 삭제 불가

이렇게 호출해야 하는걸
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
    return left + right
})

method를 날려줄 수 있고
result = calculate(a: 10, b: 10), method: { (left: Int, right: Int) -> Int in
    return left + right
}

-> Int도 날려줄 수 있다.
result = calc(a:10, b:10) {(left:Int, right:Int) -> Int in
    return left + right
}

최종 결과물은 이러하다.
retult = calc(a:10, b:10) {(left:Int, right:Int) in   
    return left + right
}

위에 단축한 결과와
아래 원래 
result = calc(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
    return left + right
})

단축 인자 이름
result = calc(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
    return left + right
})

result = calc(a: 10, b: 10) {
    return $0 + $1
}

암시적 반환
한줄로도 표현이 가능한데...
클로저가 반환값이 있다면 클로저의 마지막 줄 결과값을 암시적으로 반환값으로 치부하여 return 없이도 return
뭔 홍길동 호부호형도 아니고 리턴을 왜 리턴이라 하지 못하는지.
깔끔은 하지만 좀 그렇다.
result = calc(a: 10, b: 10) { $0 + $1 }

반응형

'swift' 카테고리의 다른 글

클로저 기초 1  (0) 2023.07.10
swift int 변수를 string형으로 변환 그리고 비교  (0) 2018.11.21
Posted by Hippalus
,

클로저 기초 1

swift 2023. 7. 10. 23:14

반응형

클로저 공부 중 정리와 암기를 위한 타이핑용 포스팅이며 원본은 야곰이란 분의 포스팅을 보는걸 추천함
(https://www.boostcourse.org/mo122/lecture/11296)
컴파일러 없이 웹상에서 간단하게 playground 환경으로 테스트 하기 위한 경우 아래 링크에서 swift 문법 테스트가 가능함
https://www.onlinegdb.com/online_swift_compiler

클로저란?
실행가능한 코드 블럭
일급객체로 변수, 상수, 전달인자 등에 저장은 물론 전달이 가능
클로저는 이름이 있는 클로저와 이름이 없는 클로저로 존재
함수도 클로저의 일종으로 이름이 클로저임
함수와 다르게 이름 정의는 필요하지 않고, 매개변수 전달과 반환 값이 존재 할 수 있다란 점은 동일함

클로저 기본 문법
{(매개변수 목록) -> 반환타입 in
    실행코드
}

클로저 기본 사용 방법
var든 let이든 상관없이 선언 후 선언된 변수나 상수에 클로저를 할당하면 됨
var printName:(String, String)->String = {(firstName:String, lastName:String) in
    return firstName + lastName
}
1. var printName printName이란 변수를 선언
2. (String, String)->String String형태로 인자 2개를 받고 이를 String형태로 리턴해준다란 의미
3. firstName:String, lastName:String 인자 이름은 첫번째가 firstName, 두번째가 lastName
4. 실행코드의 구분은 in 전후로 나뉘고 실행코드는 return firstName + lastName 이므로
    넘겨받은 첫번째, 마지막 이름을 연결해서 리턴해줌

함수의 전달인자인 클로저
클로저는 주로 함수의 전달인자로 많이 사용된다 함.
함수 내부에서 코드블럭을 실행 할 수도 있다 함.
그런데 뭔말인지 모르겠음. 쉽게 생각해보면 작고 귀엽고 간단한 클로저를 하나 먼저 만들고
이 귀염뽀찍 클로저를 다른 함수에 전달해서 함수에서 호출하고 지지고 볶는 그런 느낌인가 봄
먼저 4칙연산 중 덧셈 클로저를 만들어보겠음
let add: (int, int) -> int
뭔가 이상하지 않음?
int의 i가 대문자여야 함 다시 작성하겠음(이러면서 문법과 친해지는거임)
let add: (Int, Int) -> Int
add = { (a: Int, b: Int) in
    return a + b
}

위처럼 작성해도 되고 아래처럼 작성해도 됨

let add2: (Int, Int) -> Int = {(a: Int, b: Int) in
    return a + b
}

아직까진 swift가 지멋대로 축약질에 변동성이 너무 강해 짜증이 남.
요즘 언어들은 싸가지들이 없음.
근본이 없음. 지들만 잘난냥 떠들어재끼는 MZ들처럼

함수를 만들어줌
a,b를 인자로 Int형을 받고 아까 말했듯이 클로저를 함수에 전달할 수 있으니 이부분을 method라는 이름으로 구현해줌
func calc(a:Int, b:Int, method:(Int, Int)->Int)->Int {
    return method(a, b)
}
조금 분해해서 살펴보면
함수니까 func라고 쓰고 함수이름 아무거나정해서 calc라고 적었음
함수니까 괄호열어주고 (
전달받는 인자는 2개 그다음이 클로저인데 앞서 add클로저를 보면 let add: (Int, Int) -> Int 임
여기에서 let add: (Int, Int) -> Int 앞에 let add어쩌구는 제끼고 그 뒤엣것만 가지고 온거임
함수니까 괄호닫아주고 )
그리고 리턴형이 Int니까 -> Int 써준게 전부
그 다음은 함수 실행부이니 전달받은 클로저를 전달한 인자 a,b로 그냥 실행 method(a, b)

함수까지 만들었으니 이제 실행하면 됨.
먼저 Int형 변수 하나 선언해주고
var nCalcResult:Int

이 변수에 아까 만든 calc라는 함수를 불러와 넣어줌
이때 method는 클로저인 add 클로저를 호출하면 됨
nCalcResult = calc(a:1, b:1, method:add)

그럼 결과는 
print(nCalcResult) 
2

당연하겠지만 아까 조금 다르게 만든 클로저인 add2를 호출해도 결과는 동일하게 2로 잘 나옴
nCalcResult = calc(a:1, b:1, method:add2)
print(nCalcResult)

덧셈을 해봤으니 이제 뺄셈 나눗셈 곱셈 등을 동일한 방식으로 구현해보면 됨
let substract:(Int, Int) -> Int = {(a:Int, b:Int) in 
    return a - b
}
이렇게 하면 되고
처음에서처럼 아래처럼 하면 됨
let substract:(Int, Int) -> Int
substract = {(a:Int, b:Int) in
    return a - b
}

여전히 익숙하지 않은자를 위해 클로저 문법 안 까먹고 익히는 비법 공유함.
똑같이 반복해서 구간 구간을 점차 완성시키는 방식으로 스스로 타이핑 해보길 강권함.
let 
let substract
let substract:() -> 
let substract:(Int, Int) -> Int
여기까지가 1절 완성임

substract = {
}
substract = {()
}
substract = {(a:Int, b:Int)
}
substract = {(a:Int, b:Int) in
    return a - b
}

최종
let substract:(Int, Int)->Int
substract = {(a:Int, b:Int) in
    return a - b
}

이거 따라했으면 절대 안 까먹음
응용 복습하는 생각으로 나눗셈 만들기 스타또
let divide:(Int, Int) -> Int
divide = {(a:Int, b:Int) in
    return a / b
}

정말 마지막으로 곱셈
let multiple:(Int, Int) -> Int
multiple = {(a:Int, b:Int) in
    return a * b
}

이쯤되면 아까 함수 만드는거 까먹었을 거
func calc(a:Int, b:Int, method:(Int, Int) -> Int) -> Int {
    return method(a, b)
}

var nCalcResult: Int
nCalcResult = calc(a:10, b:2, method:divide)
print(nCalcResult)

곁다리로
클로저 표현을 let add:(Int, Int) -> Int = {(Int:a, Int:b) in 대신에 Int를 빼고 이렇게도 가능함
let add:(Int, Int) -> Int = {(a, b) in
    return a + b
}

반응형

'swift' 카테고리의 다른 글

클로저 기초 2  (0) 2023.07.11
swift int 변수를 string형으로 변환 그리고 비교  (0) 2018.11.21
Posted by Hippalus
,

반응형

본격적인 여름 시즌
서울시 강북구 번동에 위치한 북서울꿈의숲에 물놀이 장소가 두 곳 존재한다.
서문쪽에 위치한 바닥 분수대 시설과 북서울 꿈의숲 중간에 위치한 상상톡톡미술관 앞에 개울처럼 흐르는 인공 물놀이 시설
서문쪽 분수대와 중앙쪽 상상톡톡미술관 앞 개울은 걸어서 5분 정도 거리이다.
참고로 북서울 꿈의숲은 언덕위에 위치한 서문이 정문이고 평지인 동문은 후문이다.
동문은 현재 경전철 공사가 진행중인 곳이고 입구가 매우 넓다.(평지인 장위동 쪽)
정문인 서문은 높은 타워(이병헌 주연 아이리스 드라마 촬영지로 소개되었던 경사 엘리베이터)가 있는 곳 이다.

서문쪽 분수대

장점
1. 분수시설이 여러곳이다.
2. 당근 바닥 분수대는 아이들이 좋아한다.
3. 편의점이 바로 옆에 있다.
4. 서문 주차장에서 가깝다.

단점
1. 12시부터 분수가 솟아오른다.
    부지런한 인간들이 10시 부터 건물 그늘 명당에 자리잡고 있는다. (한 30%이상 차 있던데 2시간동안 뭐하려고 저러는지들)
2. 바닥 분수만 존재한다. 위에서 무언가 쏟아지는게 없다.
3. 인근 쓰레기 시설이 있어 3곳 분수시설 중 한곳에선 냄새가 날 수 있다.
    쓰레기 냄새는 딱 그 선까지만 날 뿐 인근 아파트 단지인 동문 아파트에선 나지 않는다. 신기하다.
4. 서문 주차장은 동문 주차장에 비해 협소하다.



상상톡톡미술관 개울

장점
1. 개울이라 어린 아이들이 놀기 좋다. 분수대쪽은 아이들이 뛰어다니고 정신 없을 수 있다.
2. 상류지에 수원지처럼 조형물이 있어 올라가서 놀기도 좋다.
3. 하류지에 캐리비안베이처럼 폭포가 쏟아진다.
4. 상상톡톡미술관 바깥에 화장실이 있다. (분수대쪽은 건물로 들어가서 안쪽으로 더 들어가야 있는데 거기서 거기긴하다.)
5. 일찍와도 이용이 가능하다.(다만 폭포는 12시 부터인가 쏟아진다.)

단점
1. 분수처럼 활동성을 기대하기 힘들다.
2. 돗자리 펼 곳이 분수대만큼 많지 않다.(한 60% 수준)


북서울 꿈의 숲 상상톡톡미술관 개울 명당 자리 잡는 꿀팁
먼저 일찍일어나는 새가 벌레를 잡는 법. 일찍오면 된다.
10시에 도착해서 자리를 잡아야 하는데 무조건 일찍 와서 좋아보이는 자리 덥썩 잡으면 바보다.
아래 사진처럼 가장 좋은 자리는 개울 바로 앞이지만 12시가 지나면 슬슬 해가 들이치기 시작한다.

반면 그 바로 뒤 자리는 해가 뜨든 말든 노상관
따라서 괜히 애들 노는거 잘 보겠다고 개울 앞 자리가 명당인줄 알고 착각하고 돗자리 펴다 봉변당하지 말자.
아래 사진처럼 이 중앙 자리가 개명당이다.
이 자리가 없으면 이 자리 뒷편에도 펼 수 있다.
상상미술관 중앙에 흰색으로 보행자들이 드나들 수 있는 공간만큼만 침범하지 않으면 된다.

정리하자면 총 3구역에 돗자리를 펼 수 있는데 맨 앞열은 12시 이전에 집으로 돌아갈 사람들에게 양보해주고
그 뒷자리가 1순위 뒷뒷 라인자리가 2순위다.
2순위도 1순위와 거의 동급이라 보면 된다.
개울 앞 자리만 피하면 된다.(뭣 모르면 사람들은 앞자리부터 럭키 외치며 잡아주니 땡큐다)
전체적으로 15팀 ~ 20팀 정도 자리를 펼 수 있다.

개울 앞에는 안전요원과 탈의실이 존재한다.
이는 서문쪽에도 마찬가지로 존재한다.

주차팁은 서문의 경우 공원내 레스토랑이나 중식당에서 식사를 하면 2시간인가 1시간인가 주차권을 발급해주니 이를 활용함이 좋다.
중식당은 그렇게 비싸진 않고 맛도 그럭저럭 공원 시설내에 있는것이라 보기엔 훌륭한 맛이 보장된다.
중식당명은 하오런이고 올라가는 길은 경사 엘리베이터가 있지만 5~6명 타면 정원초과되니 스트레스 받지 말고 그냥 에스컬레이터와 도보로 올라가는걸 추천한다.

끝으로 상상톡톡 미술관 아래쪽으론 요런 기와집과 대나무 숲 그리고 분수대, 호수, 사슴쉑히 등등을 볼 수 있으니 물놀이만 즐기지 말고 카페와 다른 시설들도 이용해보길 권장한다.

정말 끝으로 동문쪽엔 춘천골 닭갈비란 조그마한 식당이 있는데 이 집 닭갈비 맛있다.(주차는 못한다 보면 된다.)
일단 기본 안주로 오뎅 나오고 특이한건 광어회로 만든 스시까지 판다. -_-
스시는 비추한다.
YES KIDS 존인 맥도날드도 있다.
또 인근 맛집으로는 뭐 신축 아파트 단지 앞에 빽다방도 있고 길 건너에 역전앞 할맥도 있다.

정말 정말 끝으로 인근에 불법 주차 하는 인간들 있던데 여기 구청에서 종종 단속 한다.
자전거전용도로에 뙇!~
그냥 일찍와서 맘 편하게 공영주차장에 대는게 여러모로 개이득이다.
즐겁게 놀고 과태료 맞으면 마음 아프잖아?

반응형
Posted by Hippalus
,

반응형

보통 서버에 오만 잡다한 파일들이 존재하기 마련이다.
xlsx, csv, gif, jpeg, png 등등
간단한 구조라 psd 폴더에만 사용자 업로드 파일들이 존재한다면야 상관없겠지만 새로 이직한 회사에서 소스 분석은 해야겠는데 방대한 크기에 전체 파일과 디렉토리를 다운 받을 엄두가 안 난다면 아래 방법대로 검색하여 원하는 파일과 디렉토리를 통채로 받아올 수 있다.

먼저 파일질라를 실행 후 FPT에 접속한채로 상단 메뉴에서 서버(S)를 선택한다. 단축키는 F3

우측 상단 탐색기에서 최상위 폴더에서 검색을 하고 싶다면 최상위 폴더를 선택, 특정 폴더의 하위에서 검색을 하고 싶다면 해당 폴더를 선택한다.

난 adminarea를 기준으로 검색을 하기 위해 루트가 아닌 adminarea를 선택했다.
검색유형, 검색디렉터리, 검색조건 아래에 보면 파일명 또는 크기, 날짜 등 검색 필터를 선택하는 메뉴가 보인다.
여기에서 파일명과 다음으로 종료 콤보박스를 선택한 후 원하는 파일확장자를 .과 함께 입력해준다.
난 asp만 다운받을 예정이므로 .asp 를 입력하였다.

그리고 검색을 누르면 아래와 같이 현 상태의 디렉터리를 기준으로 그 하위 디렉터리에서 모든 ASP파일을 검색해 낸다.

이제 결과에서 ctrl + a를 눌러 모든 파일을 선택한 후 마우스 오른쪽 버튼을 눌러 팝업윈도우가 나오면 다운로드를 선택한다.

다운로드가 되길 원하는 위치를 선택하고 확인을 누르면 원하는대로 asp확장자의 파일만 다운받을 수 있다.

이것 말고도 ctrl + I를 눌러 디렉터리 목록 조회 필터 기능이 있다는데 잘 안되길래 그냥 포기하고 이 방법으로 진행했다.

반응형
Posted by Hippalus
,

반응형

sleep 함수가 여러개 존재하지만 잘 동작 안하는 소스들이 있는데 아래 소스는 잘 동작함

    <% 
        function Sleep(seconds)
            set oShell = CreateObject("Wscript.Shell")
            cmd = "%COMSPEC% /c timeout " & seconds & " /nobreak"
            oShell.Run cmd,0,1
        End function

        Sleep(5)

        response.write("End") 
    %>

https://stackoverflow.com/questions/2237393/how-to-delay-a-response-in-classic-asp

반응형
Posted by Hippalus
,