쉘스크립트 for문

프로그래밍/BASH SHELL|2020. 4. 23. 09:00
반응형

[소스]


for i in `seq 1 10`; do

    echo $i

done




[결과]


1

2

3

4

5

6

7

8

9

10



반응형

댓글()

iframe 부모 url 을 PHP 변수에 넣고 출력하기

반응형

아래 소스가 담긴 파일을 생성 후

별도의 url 에서 iframe 으로 가져오면 부모의 url 이 출력됩니다.


function parent_url() {

    echo "<script>

        var res = document.referrer;

        document.writeln(res);

    </script>";

}


ob_start();

parent_url();

$output = ob_get_clean();

echo $output; 



반응형

댓글()

input 클릭시 기본 텍스트 사라지게 하기

반응형

* 참고 : placeholder를 사용하지 마세요. (https://ibrahimovic.tistory.com/30)



위 참고 URL 을 보니 단점이 많은 placeholder 로 인해 다른 대체 방법을 찾아 보았습니다.

header 부분에 아래와 같은 코드를 입력하여 둡니다.


<script>
    function clearText(thefield) {
        if (thefield.defaultValue == thefield.value)
            thefield.value = ""
    }
</script>



그리고 form 부분의 input 에 아래와 같은 코드를 입력합니다.


<input type="text" name="domain" value="도메인 입력" onFocus="clearText(this)">



반응형

댓글()

소켓 생성하여 서버로 데이터 전송 및 받아오기

프로그래밍/C, C++|2020. 2. 27. 10:04
반응형

# vi server.c


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <fcntl.h>

#include <unistd.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <arpa/inet.h>

 

#define BUF_SIZE 1024 

#define BUF_LEN 128

int main(int argc,char *argv[])

{

    char buffer[BUF_LEN];

    struct sockaddr_in server_addr, client_addr;

    char temp[20];

    int server_fd, client_fd;

    int len, msg_size;

    char buff_rcv[BUF_SIZE+5];


    if(argc !=2)

    {

        printf("Usege ./filename [PORT] \n");

        exit(0);

    }

 

    if((server_fd = socket(AF_INET,SOCK_STREAM,0)) == -1)

    {

        printf("\nServer: can not Open Socket\n");

        exit(0);

    }

    

    memset(&server_addr,0x00,sizeof(server_addr));

    

    server_addr.sin_family = AF_INET;

    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    server_addr.sin_port = htons(atoi(argv[1]));

    

    if(bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr))< 0)

    {

        printf("\nServer: cat not bind local addrss\n");

        exit(0);

        

    }

    

    if(listen(server_fd,5) < 0)

    {

        printf("\nServer: cat not listen connnect.\n");

        exit(0);

    }

    

    memset(buffer,0x00,sizeof(buffer));

    len = sizeof(client_addr);

    printf("===== [PORT] : %d =====\n",atoi(argv[1]));

    printf("\nServer : wating connection request.\n");

 

    while(1)

    {

        client_fd = accept(server_fd,(struct sockaddr *)&client_addr,(socklen_t *)&len);

        

        if(client_fd < 0)

        {

            printf("\nServer: accept failed\n");

            exit(0);

        }

        inet_ntop(AF_INET,&client_addr.sin_addr.s_addr,temp,sizeof(temp));


        // client 접속 메세지

printf("\nServer: %s client connect.\n",temp);


        // client 에서 받은 데이터 출력

recv (client_fd, buff_rcv, BUF_SIZE, 0);

        printf("receive : %s\n", buff_rcv);


       close(client_fd);


// client 접속 종료 메세지

        printf("Server: %s client closed.\n",temp);

        

    }

    

    close(server_fd);

    

    return 0;



# vi client.c


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <sys/socket.h>

#include <sys/types.h>

 

#define BUF_LEN 128

#define PORT 1234

#define IPADDR "192.168.2.10"


int main(int argc,char *argv[])

{

    char buffer[BUF_LEN];

    int client_fd,len;

    int msg_size;

    struct sockaddr_in client_addr;

    

    client_fd = socket(PF_INET,SOCK_STREAM,0);

    

    client_addr.sin_addr.s_addr = inet_addr(IPADDR);

    client_addr.sin_family = AF_INET;

    client_addr.sin_port = htons(PORT);

    

    if(connect(client_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))== -1)

    {

        printf("Can't connect\n");

        close(client_fd);

        return -1; 

    }


    // 서버로 데이터 전송

    send(client_fd, argv[1], strlen(argv[1])+1, 0);


    close(client_fd);

 

    return 0;


구동 파일 생성 하기


# gcc -o server server.c


# gcc -o client client.c



server 에서 구동 (netstat 로 확인 가능)

# ./server 1234 &


client 에서 구동 예

# ./client "This is test message."



server 에서 client 로 데이터 받아오는 방법은 예제와 유사합니다.

아래 원본 포스팅에서 참고하도록 합니다.



[출처] https://y0ubat.tistory.com/76






반응형

댓글()

SQLite 에서 중복값 있으면 insert 건너뛰기

프로그래밍/Android (Java)|2020. 1. 31. 16:25
반응형

방법1

INSERT OR IGNORE INTO favorite (no) VALUES 'str';



방법2

INSERT INTO favorite (no) SELECT 'str' WHERE NOT EXISTS (SELECT 1 FROM favorite WHERE no='str');



* str 은 데이터 입니다.




반응형

댓글()

그라데이션 테두리 있는 버튼 만들기

프로그래밍/Android (Java)|2020. 1. 28. 12:14
반응형

drawable/bg.xml


<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >


    <item>

        <shape android:shape="rectangle" >

            <gradient

                android:angle="45"

                android:centerColor="@android:color/holo_blue_bright"

                android:endColor="@android:color/holo_red_light"

                android:startColor="@android:color/holo_green_light" />

            <corners android:radius="7dp" />

        </shape>

    </item>


    <item

        android:bottom="5dp"

        android:left="5dp"

        android:right="5dp"

        android:top="5dp">

        <shape android:shape="rectangle" >

            <solid android:color="#ffffff" />

            <corners android:radius="7dp" />

        </shape>

    </item>


</layer-list> 



[출처] https://stackoverflow.com/questions/20870853/android-shape-border-with-gradient

반응형

댓글()

플로팅 액션 버튼 (Floating Action Button)

프로그래밍/Android (Java)|2020. 1. 22. 11:33
반응형

In previous post, I had talked about some popular designs of Floating Action Button (FAB) - a component of Design Support Library. Beside that, there is a design from Inbox application (developed by Google) which containing some FABs are combined into a group and they will be shown after the "representative button" clicked. This design called Floating Action Menu:

    Up to now, there is no official component from Google which allows us making this design so we must use third-party library to building a Floating Action Menu (FAM). Fortunately, libraries to resolve this problem is not unpopular!
    In this post, I will use a third-party developed by Dmytro Tarianyk Clans. It's very simple to implement and solving this problem quickly!
    DEMO VIDEO:

 

 

Import the library

    Adding this dependency to your application level build.gradle:
dependencies { compile 'com.github.clans:fab:1.6.4' }     Now, we have two objects called FloatingActionMenu and FloatingActionButton to build this layout.

Some important features

   FloatingActionMenu has some attributes in xml that we have to pay attention:

  • fab:menu_fab_label: Label for Menu button
  • fab_colorNormal, fab_colorPressed, fab_colorRipple: Change button color based on it's status.
  • fab_showAnimation, fab_hideAnimation: Animation when menu expand/collapse.
  • menu_labels_position: Position of buttons label (left/right).
  • menu_openDirection: Open menu up or down.

Usages in activity

Declaring a layout for our activity like this:

activity_main.xml

 

    <com.github.clans.fab.FloatingActionMenu
        android:id="@+id/fab_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:paddingBottom="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        fab:menu_backgroundColor="#ccffffff"
        fab:menu_fab_label="Choose an action"
        fab:fab_colorNormal="#DA4336"
        fab:fab_colorPressed="#E75043"
        fab:fab_colorRipple="#99FFFFFF"
        fab:fab_showShadow="true"
        fab:menu_labels_colorNormal="#333333"
        fab:menu_labels_colorPressed="#444444"
        fab:menu_labels_colorRipple="#66FFFFFF"
        fab:menu_labels_showShadow="true"
        fab:menu_labels_maxLines="-1"
        fab:menu_labels_position="left"
        fab:menu_openDirection="up"
        fab:fab_shadowColor="#66000000"
        fab:menu_labels_ellipsize="end"
        fab:menu_labels_singleLine="true">

        <com.github.clans.fab.FloatingActionButton
            android:id="@+id/fab1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_edit"
            fab:fab_label="Edit an item"
            fab:fab_size="mini" />

        <com.github.clans.fab.FloatingActionButton
            android:id="@+id/fab2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_add"
            fab:fab_label="Menu item 2"
            fab:fab_size="mini" />

        <com.github.clans.fab.FloatingActionButton
            android:id="@+id/fab3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_delete"
            fab:fab_label="@string/lorem_ipsum"
            fab:fab_size="mini" />

    </com.github.clans.fab.FloatingActionMenu>

 


MainActivity.java

 

package info.devexchanges.floatingactionmenu;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;

public class MainActivity extends AppCompatActivity {

    private FloatingActionMenu fam;
    private FloatingActionButton fabEdit, fabDelete, fabAdd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fabAdd = (FloatingActionButton) findViewById(R.id.fab2);
        fabDelete = (FloatingActionButton) findViewById(R.id.fab3);
        fabEdit = (FloatingActionButton) findViewById(R.id.fab1);
        fam = (FloatingActionMenu) findViewById(R.id.fab_menu);

        //handling menu status (open or close)
        fam.setOnMenuToggleListener(new FloatingActionMenu.OnMenuToggleListener() {
            @Override
            public void onMenuToggle(boolean opened) {
                if (opened) {
                    showToast("Menu is opened");
                } else {
                    showToast("Menu is closed");
                }
            }
        });

        //handling each floating action button clicked
        fabDelete.setOnClickListener(onButtonClick());
        fabEdit.setOnClickListener(onButtonClick());
        fabAdd.setOnClickListener(onButtonClick());

        fam.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (fam.isOpened()) {
                    fam.close(true);
                }
            }
        });
    }

    private View.OnClickListener onButtonClick() {
        return new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (view == fabAdd) {
                    showToast("Button Add clicked");
                } else if (view == fabDelete) {
                    showToast("Button Delete clicked");
                } else {
                    showToast("Button Edit clicked");
                }
                fam.close(true);
            }
        };
    }

    private void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }
}

 

 

    Running application, we'll have this output:

    Click the "representative button" to open Menu:

    After click the "delete button" in Menu:

    Animation for expanding/collapsing process:

 

Conclusions

    As you can see, with a small third-party library, we can build a FAM easily. By searching on Internet, you can find out another similar libraries:

    You should try to use them and choose the best one!
    Reference to the libary Github page: https://github.com/Clans/FloatingActionButton

 View project on Github

 

 

[출처] http://www.devexchanges.info/2016/07/floating-action-menu-in-android.html

반응형

댓글()

sed 로 문자열 개행 제거

프로그래밍/BASH SHELL|2020. 1. 17. 10:50
반응형

N 옵션이 첫번째 줄의 개행을 제거하여 두번째줄과 붙여준다고 합니다. (개행을 콤마로 변경)

뒤에 g 옵션을 붙여도 결과는 마찬가지 입니다.

 

sed -e '{N;s/\n/,/}'

 

여러줄의 개행을 제거하고 싶을때 아래와 같은 옵션을 사용해보세요.

 

sed -e ':a;N;$!ba;s/\n/,/g'

 

 

반응형

댓글()

Telegram Bot 을 사용하여 메세지 전송하기

프로그래밍/BASH SHELL|2020. 1. 15. 15:19
반응형



■ 텔레그램 봇을 사용하여 메세지 전송하기




#01. BotFather를 통한 메세지 봇 생성하기



텔레그램의 봇은 @BotFather를 통해 관리된다.


텔레그램 응용프로그램을 실행한뒤 아래 이미지와 같은 순서대로 작업을 진행한다.



01. 메시지 봇 생성하기




 ① 텔레그램 검색창에 BotFather 라고 입력한다.

 ② 검색결과에서 BotFather를 선택하고 대화를 시작한다.

 ③ /start라고 입력한다.

 ④ /newbot이라고 입력하여 새로운 봇을 생성할 준비를 한다.

 ⑤ 자신이 사용할 봇의 아이디를 입력한다.(예 : wicked_test)

 ⑥ 생성한 봇 아이디에 _bot 이라고 추가적으로 입력해 준다.(예 : wicked_test_bot)
 ⑦ 텔레그램의 답변문구의 토큰 API키 값을 확인한다.




02. 정상적으로 메시지 봇이  생성되었다면 텔레그램 API에 getUpdate 값을 웹 브라우저로 전달하여 생성이 잘 되었는지를 확인해보자.


# 예시

 https://api.telegram.org/bot + 토큰 API 키값 + /getUpdates


# 출력결과

 https://api.telegram.org/bot682811095:AAEfPFpuEOrq5uCk7KK6aP8BLlX-fpHov8k/getUpdates











#02. Chart ID 확인하기


01. 먼저 메시지를 전달받을 텔레그램 계정으로 로그인한 텔레그램 채팅창에서 위에서 제작한 봇을 검색한다.

 ① 검색창에서 제작한 텔레그램 봇의 아이디 값을 입력한다.(예 : wicked_test)

 ② 검색결과에 제작한 봇 아이디가 나온다면 선택해준다.

 ③ 대화를 시작한다.






02. 대화가 시작되면 위와같이 /start 라고 자동으로 입력되는것을 확인 할 수 있다.






03. 이제 다시 위에서 실행한 웹 브라우저를 새로고침 하여 다시 getUpdates 를 전달해보면 입력한 값이 잘 출력되는 것을 확인 할 수 있다.











#03. 사용자에게 메세지 전송하기



01. 웹 브라우저를 실행해서 아래와 같이 코드를 작성하 메시지를 보내보도록 하자.


# 예시

 https://api.telegram.org/bot + 토큰 API 키값 + /sendmessage?chat_id= + 사용자차트ID + &text= + 전송할 메세


# 출력결과

 https://api.telegram.org/bot682811095:AAEfPFpuEOrq5uCk7KK6aP8BLlX-fpHov8k/sendmessage?chat_id=39538219&text=Message





02. 실제 텔레그램 상에서도 작성한 메세지 내용이 정상적으로 출력되는 것을 확인 할 수 있다.




[출처] http://magic.wickedmiso.com/66

반응형

댓글()

c언어로 파일 생성 (내용 입력)

프로그래밍/C, C++|2020. 1. 10. 13:48
반응형

[코드]

char *text = 'aaaaa';

FILE* fp = fopen("/tmp/test.txt", "a");

fprintf(fp, "%s", text);

fclose(fp);



[결과]

aaaaa 라는 내용의 파일 /tmp/test.txt 가 생성됩니다.

파일 내용을 덮어 씌우기 할 경우 "a" 가 아닌 "w" 로 사용하면 됩니다.


반응형

댓글()

C 언어로 리눅스 명령어 실행하기

프로그래밍/C, C++|2020. 1. 8. 15:16
반응형

C 프로그래밍을 할 때, 리눅스 시스템의 명령을 사용해야 하는 경우가 있습니다.

아래 소스와 같이 사용이 가능합니다.


# vi sysdocu.c


#include <stdio.h>


int main()

{

    printf("\n아래는 현재 디렉토리의 파일 리스트 입니다.\n\n");

    system("ls -al");


    return 0;

} 



실행 가능한 바이너리 파일로 변환합니다.


# cc -o sysdocu sysdocu.c


변환된 파일을 실행합니다.


# ./sysdocu



반응형

댓글()