728x90

sort, resort 는 배열안에 있는 값을 정렬하는 함수다.
sort : 오름차순 정렬,
rsort : 내림차순 정렬

 

ksort, krsort key로 배열을 정렬한다.
ksort : 오름차순 정렬
krsort : 내림차순 정렬

 

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
krsort($age); // key로 배열을 정렬 ,내림차순 정렬

foreach($age as $key=>$value){
   echo "Key=" . $key . ", Value=" . $value;
   echo "<br>";
}

 

arsort : 배열을 값으로 내림차순 정렬하고 인덱스의 상관관계를 유지
asort : 배열을 값으로 오름차순 정렬하고 인덱스의 상관관계를 유지

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
print_r($fruits);
echo '<br />';
arsort($fruits); // 배열을 값으로 내림차순 정렬하고 인덱스의 상관관계 유지
print_r($fruits);
?>

 

======================================================

$a=array("a"=>1, "ce"=>2, "ec"=>3, "br"=>4, "df"=>5, "f"=>-5);
1. 연관배열의 value값들을 합하라.

    array_sum 은 배열 안의 모든 값을 더하여 그 결과를 리턴하는 함수다.

    echo array_sum($a);

 

    array_sum 이 foreach 문으로 결과보다 훨씬 빠르다고 되어 있다. 이유는 fast C로 구현되어 있다고 한다.

 

2. 연관배열의 인덱스값에 의한 내림차순 정렬을 하고 그 값을 list와 each를 사용하여 출력하라. (krsort 이용할 것)

    krsort($a); // key로 배열을 내림차순 정렬
    for($i=0, $c=count($a); $i<$c; $i++) {
        list($key, $value) = each($a);
        echo $key, ' = ', $value, '<br />';
    }

3. 다음 배열을 오름차순으로 정렬하고 50 보다 큰 값을 지닌 요소들의 개수를 출력하라.
$a=array(34, 7, 5, -54, 64, 59, 100, 59, 27);

 

array_filter()함수는 배열의 각 요소 중에서 지정한 함수의 조건에 일치하는 요소만 새로운 배열에 다시 되돌려주는 함수다.

$arr = array_filter($R, '콜백함수명'); // $R : array

 

아래 코드를 실행해보면 필터링한 결과를 알 수 있다.

test_filter는 콜백함수명이다.

<?php
function test_filter($var){ // 배열 요소의 값을 인수로 받는다.

    if(! is_int($val)) { // 전달된 값이 정수가 아니면 false를 반환한다.

       return false;

    }

    return($var > 50); // 조건에 맞으면 true, 조건에 맞지 않으면 false를 반환한다.
}

print_r(array_filter($a,'test_filter')); // pinrt_r 함수는 배열을 출력한다.

echo '<br />';
echo count(array_filter($a,'test_filter'));

?>

 

문제의 답

sort($a); // 오름차순 정렬, rsort() 내림차순 정렬
echo count(array_filter($a, function($val){
    return $val > 50;
}));

 

 

4. 다음 배열에서 2의 배수들을 삭제하고 배열 전체를 출력하라.
$a=array(2,4,7,9,13,34,56);
(2,4,34,56을 삭제하고 배열a를 출력)

<?php
$a=array(2,4,7,9,13,34,56);
print_r(array_filter($a,function($n){
    return $n%2 !=0;
}));
?>

 

5. 다음 배열에서 소수점 10자리수가 5인(xx.5xx) 값들을 출력하라.
$a=array(34.12, 7.0, 5.9, -54.512, 64.52, 59.5, 100.1, 59.23, 27.54);

 

문자열에 특정 문자열이 포함되어 있는지 확인하려고 할때 strpos()함수를 사용한다.
strpos(string,find,start)

 

<?php
$find_letters = array('a', 'c', 'd');
$string = 'abcdefg';
if(strpos($string, $find_letters) !== false)
{
    echo 'All the letters are found in the string!';
}
?>

 

문제의 답

<?php
$a=array(34.12, 7.0, 5.9, -54.512, 64.52, 59.5, 100.1, 59.23, 27.54);
print_r(array_filter($a,function($n){
    return strpos($n, '.5') !== false;
}));
?>

또는

<?php
$a=array(34.12, 7.0, 5.9, -54.512, 64.52, 59.5, 100.1, 59.23, 27.54);
print_r(array_filter($a,function($n){
    return preg_match('/\.5/',$n);
}));
?>

 

블로그 이미지

Link2Me

,
728x90

중앙전파관리소는 2.4㎓대역을 동일하게 사용하는 무선랜, 무선전화기, 블루투스, RFID, 전자렌지에 대하여 인접거리에서 사용할 경우의 상호 간섭영향을 측정하고 분석하였다.
이번 측정결과, 무선랜은 전자렌지, RFID, 블루투스와 인접하여 사용하면 이들로부터 전파간섭을 받아 전송속도가 감소하는 것으로 조사되었다. 무선랜의 전송속도는 전자렌지에 의해 40~60%, RFID는 약 23%, 블루투스는 약 13%가 감소하는 것으로 나타났다.
동일 장소에서 2대의 무선랜(AP)이 동일채널 또는 인접한 채널을 사용하는 경우에는 상호 전파간섭이 발생하여 전송속도가 6~95%까지 감소되는 것으로 나타났다.

블루투스 4.0 에서는 2.4GHz 대역폭을 사용하는 다른 무선 기술과 간섭을 최소화 하고, 신호간섭 발생 시 복구를 빠르게 하는 기술이 추가되었다.

블루투스의 주파수 범위는 2400–2480 MHz 입니다.
– 2.4GHz 영역의 ISM band / GFSK 사용
– 2MHz 간격으로 40개의 채널 사용
– 3개의(37, 38, 39) Advertising 채널 / 나머지 37개의 Data 채널
– 주변 채널 간섭을 피하기 위해 Hopping기술 적용

Hopping : data 통신 시 혼잡이 심한 채널은 건너뛰어 다른 채널에서 통신

채널과 상관 없이 회사 공유기의 2.4GHz 대역의 channel width를 auto나 40MHz가 아닌 20MHz로 설정하면 블루투스와 충돌이 일어나지 않는다.


'정보통신 > IT 소식' 카테고리의 다른 글

음악 스트리밍 서비스와 저작권  (0) 2013.06.13
스마트 시대와 스마트 기기  (0) 2013.06.13
블로그 이미지

Link2Me

,
728x90

1 ~ 45 사이의 숫자를 랜덤하게 6개를 추출하는 코드다.

검색해서 찾아보니 PHP School 에 올라온 코드를 수정해서 bootstrap 기반으로 작성했다.

mt_rand(1, 45); // 지정된 범위에서 랜덤한 숫자 반환하는데 번호 중복 발생한다.

이걸 이용해서 하는 방법도 좀 더 고민해보면 좋을거 같다.


<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container col-md-6">
    <table class="table table-bordered table-hover table-responsive">
        <thead>
            <tr>
                <th align="center" colspan="7">로또번호 자동 생성기</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <?php
                $lotto = lotto(5);
                //$lotto = getLotto(5);
                for ($i = 0; $i < sizeof($lotto); $i++) {
                    $cnt = $i + 1;
                    echo '<td align="center" bgcolor=eeeeee>' . $cnt . 'th' . '</td>';
                    for ($j = 0; $j < 6; $j++) {
                        echo '<td align="center">' . $lotto[$i][$j] . '</td>';
                    }
                    echo "</tr>";
                }
            ?>
        </tbody>
    </table>
</div>
</body>
</html>

<?php
function lotto($num) {
    for ($i = 0; $i < $num; $i++) {
        $lott_num = range(1, 45); // range함수를 통해 1~45까지의 수를 배열로 생성
        shuffle($lott_num);  //배열 변수를 랜덤하게 뒤섞는다
        for ($j = 0; $j < 6; $j++) {
            $lotto[$i][$j] = $lott_num[$j];
        }
        /* 오름차순 정렬 sort 함수*/
        sort($lotto[$i]);
    }
    return $lotto;
}

?>



블로그 이미지

Link2Me

,
728x90
View

View Attribute

  • Add TextField
    • android:id
      • view를 구분하는 유일한 값의 id
    • @
      • xml에서 제공받은 Resource라는 표시.
    • +
      • resource의 type을 선언하기전에 사용하는 사용
    • android:layout_width, android:layout_height
      • view의 size를 나타낸다.
      • wrap_content
        • 실제 사용되는 size
      • match_parent
        • 부모의 사이즈.
    • android:hint
      • text 의 값이 아무값도 없을 때 표시해주는 Default 값을 말한다.

출처 : https://blog.naver.com/wmi1258/220172002074


위 블로그는 간단한 개념 설명이 비교적 잘 되어 있어서 다시 찾아보면 좋을 거 같다.

블로그 이미지

Link2Me

,
728x90

Error generating final archive: Debug certificate expired on 3/20/10 2:35 PM!


debug.keystore 를 찾아서 debug certificate를 지우고 다시 빌드하면 해결된다.


디버그 인증서 만료기한은 1년이다.






블로그 이미지

Link2Me

,
728x90

Web 로그인 화면을 띄우고 ID 와 PW를 입력하고 클릭하면 로그인된 화면이 보일 것이다.

이 기능을 C#에서 처리하는 방법이다.

아주 간단하게 기능만 테스트 해 본 거라 username 과 password 를 직접 입력하는 방식으로 구현해봤지만 자동로그인하면서 저장한 값을 불러다가 처리하는 것이 좋을 듯하다.


webBrowser1.Document.GetElementById("username").InnerText = "xxxxx";

대신에

webBrowser1.Document.GetElementById("username").SetAttribute("value", "xxxxx") ;

를 해도 결과는 동일하다.


InvokeMember("click") : 스크립트 언어로 현재 HTML 페이지에 정의된 함수를 실행한다.

WebBrowser 로딩이 끝났을 때 실행해야 한다.


webBrowser1_DocumentCompleted 메소드는 브라우져에 웹페이지가 모두 Load 되었을 때 발생하는 이벤트다.

이것과 동일하게 처리하는 것이

while (webBrowser1.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
    Application.DoEvents();
}


Web 화면을 읽어오고 나서 Loading 이 완전히 끝나지 않은 상태에서 값을 전달하면 null 에러가 발생한다.



private void Form1_Load(object sender, EventArgs e)
{
   // From Web
    var url = "http://aaa.com/?r=home&system=iframe.login&iframe=Y&referer=%2F%3F";
    webBrowser1.Navigate(url);
    webBrowser1.ScriptErrorsSuppressed = true;
    while (webBrowser1.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }


    HtmlDocument doc = webBrowser1.Document;

    doc.GetElementById("username").InnerText = "xxxxx";
    doc.GetElementById("password").InnerText = "yyyyy";
    // 특정 엘리먼트를 호출하여 이벤트 처리
    webBrowser1.Document.GetElementById("login_btn").InvokeMember("click");

}

private void SuppressScriptErrorsOnly(WebBrowser browser)
{
    // Ensure that ScriptErrorsSuppressed is set to false.
    browser.ScriptErrorsSuppressed = false;

    // Handle DocumentCompleted to gain access to the Document object.
    browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
            webBrowser1_DocumentCompleted);
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    ((WebBrowser)sender).Document.Window.Error +=  new HtmlElementErrorEventHandler(Window_Error);          
}

private void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
    // Ignore the error and suppress the error dialog box.
    e.Handled = true;
}


참고하면 도움될 사이트

https://stackoverflow.com/questions/32904235/c-sharp-get-element-by-name


https://stackoverflow.com/questions/16787495/click-on-html-element-by-class-using-webbrowser-c-sharp


https://ddingjo.blogspot.kr/2017/04/c-html.html

'C# > 통신' 카테고리의 다른 글

C# 과 Web  (0) 2018.03.10
C# Web 접속 로그인함수 만들기(HttpClient 방식)  (0) 2016.11.14
C# webFile 다운로드 함수  (0) 2016.11.12
C# GetAsyncDataFromWeb  (0) 2016.08.21
C# GetDataFromWeb 사용자 함수  (0) 2016.08.20
블로그 이미지

Link2Me

,

C# 과 Web

C#/통신 2018. 3. 10. 15:11
728x90

C# 에서 Web 페이지를 보여주는 코드다.

일부 jQuery 로 된 것을 읽어오지 못하는 것이 있기는 하지만 로그인처리라든가 이런것은 전부 잘 된다.


도구상자 => 공용콘트롤 => Webbrowser 를 선택하여 Form 에 Drop & Drop 한다.



private void Form1_Load(object sender, EventArgs e)
{

   // 폼 크기를 풀스크린으로
   FormBorderStyle = FormBorderStyle.Sizable;
   WindowState = FormWindowState.Maximized;

   // From Web
    var url = "http://aaa.com/";
    webBrowser1.Navigate(url);
    webBrowser1.ScriptErrorsSuppressed = true;
}

private void SuppressScriptErrorsOnly(WebBrowser browser)
{
    // Ensure that ScriptErrorsSuppressed is set to false.
    browser.ScriptErrorsSuppressed = false;

    // Handle DocumentCompleted to gain access to the Document object.
    browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
            webBrowser1_DocumentCompleted);
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    ((WebBrowser)sender).Document.Window.Error +=  new HtmlElementErrorEventHandler(Window_Error);
}

private void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
    // Ignore the error and suppress the error dialog box.
    e.Handled = true;
}

'C# > 통신' 카테고리의 다른 글

C# Web 자동로그인 처리  (1) 2018.03.15
C# Web 접속 로그인함수 만들기(HttpClient 방식)  (0) 2016.11.14
C# webFile 다운로드 함수  (0) 2016.11.12
C# GetAsyncDataFromWeb  (0) 2016.08.21
C# GetDataFromWeb 사용자 함수  (0) 2016.08.20
블로그 이미지

Link2Me

,
728x90

LinearLayout의 자식 View에는 가중치를 부여할 수 있다.

가중치는 layout_weight 로 표현되며 가중치는 정수로 표현되며 자식뷰의 중요도를 나타낸다.

LinearLayout 의 자식 View들의 가중치가 각각 1, 2, 3 이면 남아있는 공간의 1/6, 2/6, 3/6을 각각 할당한다.

자식 View의 가중치를 지정하지 않으면 android:layout_weight="0" 으로 간주하고 확장하지 않는다.

 

layout_gravity : 부모 컨테이너의 여유 공간에 View가 모두 채워지지 않아 여유 공간 안에서 View를 정렬할 때

gravity : View 에서 화면에 표시하는 내용물을 정렬할 때

 

 

weight는 비율을 주는 속성인데 width나 height중 비율을 주고싶은 속성에 0dp를 줘야한다.
여기선 한줄을 똑같이 나눠가지길 원하니까 width의 값에 0dp를 주어야한다.
또 항목들을 감싸고 있는 레이아웃에 weigthSum값을 지정해 주어야 하는데 이것은 선택사항이다.
weight는 비율 값이라 0.00~1.00까지의 값을 가진다.

weighSum은 하위 각각 레이아웃 weight의 값의 합이 되어야 하며 값을 초과하게될 경우 레이아웃이 View에서 벗어나게 된다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="5">

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="3" />

</LinearLayout>

 

 

실전 예제

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal"
        android:background="@drawable/bg_border">
 
        <TextView
            android:id="@+id/line_rank"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1.5"
            android:layout_gravity="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            android:textColor="?android:attr/textColorSecondary"
            android:gravity="center"
            android:textStyle="bold"
            tools:text="1" />
 
        <View
            android:layout_width="0.5dp"
            android:layout_height="match_parent"
            android:background="@color/colorDivider"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="15dp"
            android:layout_marginStart="10dp"/>
 
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_weight="5"
            android:orientation="vertical">
 
            <TextView
                android:id="@+id/line_name"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:gravity="left|center_vertical"
                android:ellipsize="end"
                android:maxLines="1"
                android:singleLine="true"
                android:text="가든파이브"
                android:textColor="@color/colorDarkGray"
                android:textAppearance="?textAppearanceSubtitle1"
                android:textSize="14dp" />
 
            <TextView
                android:id="@+id/line_address"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:gravity="left|center_vertical"
                android:ellipsize="end"
                android:singleLine="true"
                android:maxLines="1"
                android:textColor="#999"
                android:textSize="11dp"
                android:textAppearance="?textAppearanceSubtitle1"
                tools:text="서울시 송파구 문정동 충민로 66" />
 
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:orientation="vertical">
            <TextView
                style="?attr/textAppearanceSubtitle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="부동산"/>
 
            <TextView
                android:id="@+id/estate"
                style="?attr/textAppearanceSubtitle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:textColor="@color/blue_700"
                android:maxLines="1"
                android:text="50"/>
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:orientation="vertical">
            <TextView
                style="?attr/textAppearanceSubtitle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="계약자"/>
 
            <TextView
                android:id="@+id/contractor"
                style="?attr/textAppearanceSubtitle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:textColor="@color/blue_700"
                android:maxLines="1"
                android:text="50"/>
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:orientation="vertical">
            <TextView
                style="?attr/textAppearanceSubtitle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="예약자"/>
 
            <TextView
                android:id="@+id/reservation"
                style="?attr/textAppearanceSubtitle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:textColor="@color/blue_700"
                android:maxLines="1"
                android:text="50"/>
        </LinearLayout>
 
    </LinearLayout>
</LinearLayout>

 

https://link2me.tistory.com/2039 에 Android Material Design 적용한 칼라 색상 정리해 놓은 자료가 있다.

'안드로이드 > Layout' 카테고리의 다른 글

Android Fragment 기본 예제  (0) 2018.09.11
FloatingActionButton(FAB)  (0) 2018.08.15
Android ViewFlipper(뷰플리퍼)  (0) 2017.05.02
Fragment 화면 이동  (0) 2017.03.26
안드로이드 Layout  (0) 2016.07.23
블로그 이미지

Link2Me

,

NSLog

iOS/Objective-C 2018. 3. 1. 14:51
728x90

NSLog(@"The value of integer num is %i", num);   //integer %i 사용
NSLog(@"The value of Long number is %i", mlong);   //long %i 사용
NSLog(@"The value of float num is %.2f", _num);
//float에는 %f를 사용하고 소수점 이하 두자리만 출력하기 위해 %.2f 로 해줌
NSLog(@"The value of double num is %f", number);
//double에도 %f를 사용하며 (%g ,%G, %e ,%E(%e의 지수함수 형식) 로 표현할 수도 있음


NSDate *today= [NSDate date];
NSLog(@"the current date is %@",today);

return (0); // 0 값은 프로그램이 성공적으로 끝났다는 것을 나타내는 반환값

'iOS > Objective-C' 카테고리의 다른 글

objective-c UIView 기초  (0) 2018.12.17
objective-c 객체 Type  (0) 2018.12.15
objective-c 함수  (0) 2018.12.12
objective C 변수 타입  (0) 2018.12.09
모바일 Web을 위한 아이콘 변환 사이트  (0) 2017.05.24
블로그 이미지

Link2Me

,