'분류 전체보기'에 해당되는 글 714건

  1. 2025.03.17 터치 스크롤 뷰어 List
  2. 2025.01.07 listbox에서 터치스크롤시 화면 전체가 움직일떄
  3. 2024.02.23 같은 파일 창 2개 만들고 열어서 분할
  4. 2023.06.09 [WPF] 체크박스 xName을 이용하여 반복작업 하지 않고 간결하게
  5. 2023.06.08 MEF란?
  6. 2023.06.07 [WPF] gRPC Client 빌드 안될때 대처법
  7. 2022.12.05 dynamic property 에서 Set을 할떄
  8. 2022.10.26 public (string name, int age) GetUser()
  9. 2022.08.31 PeriodicTimer
  10. 2022.01.04 [asp.net core Blazor ver 6] MariaDB 연결하기
  11. 2022.01.04 ASP.NET Core Blazor Ver.6 시놀리지에서 돌려보기
  12. 2021.11.18 2개의 LIST 비교 하는것
  13. 2021.09.10 닷넷 디컴파일러
  14. 2021.08.24 싱글톤 쓰기
  15. 2021.05.06 Combox 에 Enum 바인딩
  16. 2020.09.22 테슬라 자동화 프로그램 7
  17. 2020.04.28 WPF에서 기본적으로 제공해주는 BoolToVisConverter 컨버터
  18. 2020.04.02 LIST 형식 디버깅할떄 편한 DebuggerDisplay
  19. 2020.03.06 WPF TabControl에서 SelectionChanged가 계속 호출되는 문제
  20. 2020.01.03 사용하지 않을 메소드앞에 [Obsolete] 어트리뷰트 사용
  21. 2019.09.02 시놀리지에서 php 파일생성 권한 주기
  22. 2019.08.02 list 삭제
  23. 2019.07.05 파이썬으로 내가 만든 프로그램들
  24. 2019.05.28 beautifulsoup에서 링크만 빼는법
  25. 2019.05.28 시놀리지에서 vpn client 사용하는 방법
  26. 2019.05.21 python 글로벌 변수 메소드에서 사용방법
  27. 2019.05.21 파이썬에서 텔레그램 메세지 에코
  28. 2019.05.17 파이썬 simple json 파싱
  29. 2019.05.17 파이썬 web request
  30. 2019.04.24 이벤트 중복 호출 되지 않게 하는법
wpf2025. 3. 17. 16:49

ListView안의 List에서는 터치가 안먹는다. 이떄는 

<ListView ItemsSource="{Binding ElementName=xMainPage , Path=DataContext.AllMenuFlipData}">
    <ListView.Template>
        <ControlTemplate>
            <StackPanel IsItemsHost="True" />
        </ControlTemplate>
    </ListView.Template>

 

이런식으로 Template안의 Panel에서 IsItemHost 를 True로 바꿔주면 된다.

 

GPT에선

IsItemsHost 속성은 주로 **Panel**에서 사용되며, 이 속성이 **true**로 설정된 경우 해당 패널이 항목을 호스트하는 역할을 한다는 것을 의미합니다.

 

이렇게 할경우 list에서 스크롤할떄 전체로 스크롤 된다.

 

키오스크 개발할떄 필수인거 같다.!! 

 

Posted by 동동(이재동)
wpf2025. 1. 7. 11:35

listbox에 ManipulationBoundaryFeedback 이벤트를 설정하여

 

behind에서

e.Handled = true;

를 한다.

Posted by 동동(이재동)
VisualStudio2024. 2. 23. 16:31

1. Shift + Alt + W, N

: 동일한 파일의 창을 하나 더 연다

 

2. Shift + Alt + W, V

: 연 창을 오른쪽에 배치시킨다.

Posted by 동동(이재동)
wpf2023. 6. 9. 18:37

 private void MessageCheck_Checked(object sender, RoutedEventArgs e)
        {
            if (IsLoaded == false)
                return;

            var name = (sender as ToggleButton).Name;

            var ctl = xGroups.FindName(name) as ToggleButton;

            DataManager.LocalData.MessageSelect.GetType().GetProperty(name.Remove(0, 1)).SetValue(DataManager.LocalData.MessageSelect, ctl.IsChecked);

            DataManager.Instance.SaveData();
        }

        private void TelegramMessageSelectPage_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if ((e.NewValue) as bool? == false)
                return;

            foreach (var item in DataManager.LocalData.MessageSelect.GetType().GetProperties())
            {
                var ctl = xGroups.FindName($"x{item.Name}") as ToggleButton;

                if (ctl != null)
                    ctl.IsChecked = (bool)item.GetValue(DataManager.LocalData.MessageSelect);
            }
        }

 

 public class MessageSelectModel
    {
        public bool IsDeepSleep { get; set; }

        public bool IsStartEndMap { get; set; }

        public bool IsDriveEnd { get; set; }
    }

 

 

 

그냥 바인딩하는게 최고지만 피지 못할경우에는 

 xIsAutoAfterBlowBtn.IsChecked = DataManager.LocalData.IsAutoAfterBlow; <-이런식으로 노가다 작업하지말고

 

xName이랑 프로퍼티랑 이름을 같게해서 반복작업을 줄여보자

'wpf' 카테고리의 다른 글

터치 스크롤 뷰어 List  (0) 2025.03.17
listbox에서 터치스크롤시 화면 전체가 움직일떄  (0) 2025.01.07
MEF란?  (0) 2023.06.08
[WPF] gRPC Client 빌드 안될때 대처법  (0) 2023.06.07
dynamic property 에서 Set을 할떄  (0) 2022.12.05
Posted by 동동(이재동)
wpf2023. 6. 8. 14:50

https://blog.powerumc.kr/189

 

[MEF] 1. Managed Extensibility Framework 이란?

MEF (Managed Extensibility Framework) 란? Menaged Extension Framewkr(이하 MEF) 란? 가장 쉽게 얘기하자면, 어플리케이션과 컴포넌트의 재사용성을 높일 수 있는 프레임워크입니다. 기존의 어플리케이션은 하나

blog.powerumc.kr

 

여기에 잘정리 되어 있으니 보자..

 

Menaged Extension Framewkr(이하 MEF) 란? 가장 쉽게 얘기하자면, 어플리케이션과 컴포넌트의 재사용성을 높일 수 있는 프레임워크입니다. 기존의 어플리케이션은 하나의 목적을 하나의 어플리케이션으로 구현한 정적인(Statically) 어플리케이션이라면, MEF 는 보다 동적인(Dynamically) 어플리케이션을 구축할 수 있는 새로운 라이브러리를 제공합니다.

Posted by 동동(이재동)
wpf2023. 6. 7. 15:25

서버야 프로젝트 템플릿이 있어서 그냥 자동으로 만들어지지만

WPF client에서 Protos에 greet.proto를 복사하고 따라했지만 빌드에러가 났다..

 

구글 검색후 해결했다

 

https://stackoverflow.com/questions/60810497/grpc-erros-in-wpf-net-core

 

gRPC erros in WPF .NET Core

I want to create a simple WPF Core, gRPC project. This "code" works perfectly in my .NET Core Console app, however WPF seems to be something special. Proto File syntax = "proto3"...

stackoverflow.com

 

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
    <CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Google.Protobuf" Version="3.23.2" />
    <PackageReference Include="Grpc.Net.Client" Version="2.53.0" />
    <PackageReference Include="Grpc.Tools" Version="2.54.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    
  </ItemGroup>

</Project>

 

프로젝트 편집에서

 

<CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>

이걸 추가함으로써 빌드가 되었다.

 

 

'wpf' 카테고리의 다른 글

[WPF] 체크박스 xName을 이용하여 반복작업 하지 않고 간결하게  (0) 2023.06.09
MEF란?  (0) 2023.06.08
dynamic property 에서 Set을 할떄  (0) 2022.12.05
public (string name, int age) GetUser()  (0) 2022.10.26
PeriodicTimer  (0) 2022.08.31
Posted by 동동(이재동)
wpf2022. 12. 5. 11:44

await SendConfirmMsg(msgSplit, DataManager.LocalData.LongTrendBuy, "QuitRange");

 

 

 

private static async Task SendConfirmMsg(string[] msgSplit, dynamic data, string prop)
        {
            double numValue;
            bool isNum = double.TryParse(msgSplit[2], out numValue);

            data.GetType().GetProperty(prop).SetValue(data, numValue, null);           

            DataManager.Instance.SaveData();
            await TelegramPushService.SendMessage($"{msgSplit[0]} {msgSplit[1]} {numValue}");
        }

 

 

이런식으로 반복되는 구문을 dynamic을 이용해서 짧게 만들수 있다.

 

중요

 

data.GetType().GetProperty(prop).SetValue(data, numValue, null);   

 

참고

https://stackoverflow.com/questions/12970353/c-sharp-dynamically-set-property

'wpf' 카테고리의 다른 글

MEF란?  (0) 2023.06.08
[WPF] gRPC Client 빌드 안될때 대처법  (0) 2023.06.07
public (string name, int age) GetUser()  (0) 2022.10.26
PeriodicTimer  (0) 2022.08.31
2개의 LIST 비교 하는것  (0) 2021.11.18
Posted by 동동(이재동)
wpf2022. 10. 26. 15:34

Tuple 대신에 이렇게 사용할수도 있다 엄청 편리할듯

 

public (string name, int age) GetUser()
        {
            return ("이름", 30);
        }

'wpf' 카테고리의 다른 글

[WPF] gRPC Client 빌드 안될때 대처법  (0) 2023.06.07
dynamic property 에서 Set을 할떄  (0) 2022.12.05
PeriodicTimer  (0) 2022.08.31
2개의 LIST 비교 하는것  (0) 2021.11.18
싱글톤 쓰기  (0) 2021.08.24
Posted by 동동(이재동)
wpf2022. 8. 31. 16:03

PeriodicTimer는 비동기 방식으로 타이머 틱을 처리하는 최신 타이머 API 입니다. 다음처럼 사용할 수 있고요,

var timer = new PeriodicTimer(TimeSpan.FromSeconds(1));

while (await timer.WaitForNextTickAsync())
{
    Console.WriteLine(DateTime.Now);
}

1초 간격으로 실행되는 결과를 확인할 수 있습니다.

| 실행 결과

2021-11-18 오후 11:14:17
2021-11-18 오후 11:14:18
2021-11-18 오후 11:14:19
2021-11-18 오후 11:14:20
2021-11-18 오후 11:14:21

얼핏 보면 Task.Delay()의 기능과 별반 차이가 없어 보이죠? 차이가 있습니다. 다음의 코드를 보시죠.

var timer = new PeriodicTimer(TimeSpan.FromSeconds(2));

while (await timer.WaitForNextTickAsync())
{
    Console.WriteLine($"Wake Up!: {DateTime.Now}");

    // 1500 ms 소요되는 처리가 발생했다고 가정
    Thread.Sleep(1500);
}

| 실행 결과

Wake Up!: 2021-11-18 오후 11:18:56
Wake Up!: 2021-11-18 오후 11:18:58
Wake Up!: 2021-11-18 오후 11:19:00
Wake Up!: 2021-11-18 오후 11:19:02
Wake Up!: 2021-11-18 오후 11:19:04

강제로 1500 ms 만큼의 딜레이를 줬음에도 불구하고 지정한 period 만큼의 타이머 틱을 제공합니다.

타이머 동작 중 취소하는 기능이 있을까요? WaitForNextTickAsync(cancellationToken)를 통해 취소도 가능합니다. 하지만 좀 더 쉽게 취소하는 방법은 timer를 Dispose하는 것입니다.

'wpf' 카테고리의 다른 글

dynamic property 에서 Set을 할떄  (0) 2022.12.05
public (string name, int age) GetUser()  (0) 2022.10.26
2개의 LIST 비교 하는것  (0) 2021.11.18
싱글톤 쓰기  (0) 2021.08.24
Combox 에 Enum 바인딩  (0) 2021.05.06
Posted by 동동(이재동)
2022. 1. 4. 16:46

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2022. 1. 4. 16:38

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

wpf2021. 11. 18. 18:01

private bool IsDiffList<T>(List<T> list1, List<T> list2)
        {
            var diff1 = list1.Except(list2);
            var diff2 = list2.Except(list1);

            var resultDiff = diff1.Concat(diff2).ToList();

            if (resultDiff.Count > 0)
                return true;
            else
                return false;
        }

 

if (IsDiffList<OrderInfo>((xProfitOrderListbox.ItemsSource as List<OrderInfo>).ToList(), _service.OrderInfoList))
                {
                    xProfitOrderListbox.ItemsSource = _service.OrderInfoList;
                    xProfitOrderListbox.Items.Refresh();
                }

 

이런식으로 반복적으로 item을 넣어야 하는곳에 넣어준다. timer를 이용하면 객체를 계속 생성하기때문에

 

무조건 넣어주면 메모리 Leak 이 걸린다. 그렇기 떄문에 변경될때만 적용되게 해야한다.

'wpf' 카테고리의 다른 글

public (string name, int age) GetUser()  (0) 2022.10.26
PeriodicTimer  (0) 2022.08.31
싱글톤 쓰기  (0) 2021.08.24
Combox 에 Enum 바인딩  (0) 2021.05.06
WPF에서 기본적으로 제공해주는 BoolToVisConverter 컨버터  (0) 2020.04.28
Posted by 동동(이재동)
c#2021. 9. 10. 15:46

https://www.jetbrains.com/ko-kr/decompiler/

Posted by 동동(이재동)
wpf2021. 8. 24. 12:13

 public abstract class Singleton<T> where T : class
    {
        private static readonly Lazy<T> LazyInstance =
            new Lazy<T>(CreateInstanceOfT, LazyThreadSafetyMode.ExecutionAndPublication);

        public static T Instance
        {
            get
            {
                return Singleton<T>.LazyInstance.Value;
            }
        }

        private static T CreateInstanceOfT()
        {
            return Activator.CreateInstance(typeof(T), true) as T;
        }
    }

 

출처 : http://egloos.zum.com/sweeper/v/3157853

Posted by 동동(이재동)
wpf2021. 5. 6. 18:31

 

출처 stackoverflow.com/questions/58743/databinding-an-enum-property-to-a-combobox-in-wpf

Posted by 동동(이재동)
카테고리 없음2020. 9. 22. 14:49

 

 

 

 

 

 

 

 

이 프로그램을 만든이유

 

전 이렇게 4가지가 불편하더라구요

 

1. 앱 켜기도 귀찮다.

-그냥 내리면 알아서 애프터 블로우 해주고

-그냥 내리면 오늘 주행거리가 얼마이며 베터리는 어느정도 썻는지 기록 통계

 

2. 앱키면 자꾸 시작중이 떠서 시간이 오래 걸림

-딥슬립상태라서 시작중이 끝나야 에어컨을 키든 제어를 할수 있어서 그냥 바로 되게 했습니다.

 

3.예약이 안된다.

-저같은경우는 센트리모드 베터리를 아낄려고 새벽 2-6시에는 감시를 안하게 했습니다.

-그래서 2시에 자동으로 꺼지고 6시에 자동으로 켜지게 해서 베터리를 조금 절약했습니다.

 

4.애프터 블로우 오작동이 없다.

-가끔 앱을 이용하면 안꺼져서 다음날 아침 베터리 20% 남았던 기억이 있는데 이건 계속 체크해서 그런일이 없네요 ㅎㅎ

 

선천적으로 워낙 게을러서 애프터 블로우도 까먹고 그래서 그냥 혼자서 쓸려고 간단히 만들어봤습니다~

 

모든게 귀찮습니다 알아서 다 되었으면 좋겠어요ㅎㅎ

 

Posted by 동동(이재동)
wpf2020. 4. 28. 12:39

Converter={StaticResource BoolToVisConverter}

 

 

단 App.xaml에

<BooleanToVisibilityConverter x:Key="BoolToVisConverter" />

를 추가해야한다.

 

구지 안만들어도 된다 ㅋ

Posted by 동동(이재동)
c#2020. 4. 2. 11:58

[DebuggerDisplay("{sItem,RecommandMatchingItemNumberList}")]
    public class OrderedMenuItem : MenuKey, INotifyPropertyChanged
    {

public int nChargeHot { get; set; }

}

 

 

이런식으로 Model 위에 쓰면 된다.

 

'c#' 카테고리의 다른 글

닷넷 디컴파일러  (0) 2021.09.10
사용하지 않을 메소드앞에 [Obsolete] 어트리뷰트 사용  (0) 2020.01.03
list 삭제  (0) 2019.08.02
Page 기능을 구현할때는 Linq Skip을 활용하자.  (0) 2016.07.06
URI Parameter 붙이기  (0) 2016.06.20
Posted by 동동(이재동)
wpf2020. 3. 6. 17:53

WPF에서 텝이 변결될 때 발생하는 이벤트 키워드인 SelectionChanged를 TabControl에 사용해서 탭을 가져오는 형태로 코드구성을 진행하는 중 이상한 점이 발견됬다.

내가 만드는 프로그램에서는 2번째 탭을 클릭하면 SelectionChanged가 호출 되고 2번째 탭 내의 ListBox 컨텐츠가 업데이트 되는 형식으로 코드가 진행될 것으로 예상하고 디버그를 하였으나, 실제로는 2번째 탭을 클릭하면 SelectionChanged가 재귀적으로 무한호출 되버리는 문제가 발생되었다.

문제는 TabControl 내부에 컨텐츠가 업데이트 되거나 무슨 변화가 존재할 경우에도 해당 이벤트가 호출된다는 점이다. 이럴 대는 Source 값이 TabControl인지 비교하는 항목이 추가되야 하며 아래와 같은 코드구성이 가능하다.

private void MainTabChanged(object sender, SelectionChangedEventArgs e)
{
int tabItem = ((sender as TabControl)).SelectedIndex;
if (e.Source is TabControl) // This is a soultion of those problem.
{
switch (tabItem)
{
case 0: // Chatting
Debug.WriteLine("Tab: Chatting");
if (MainChatList.Items.Count > 0)
{
MainChatList.SelectedIndex = MainChatList.Items.Count - 1;
MainChatList.ScrollIntoView(MainChatList.Items[MainChatList.Items.Count - 1]);
}
break;
case 1: // Users
Debug.WriteLine("Tab: Users");
break;
case 2: // Friends
Debug.WriteLine("Tab: Friends");
this.OnFriendTabActive();
break;
default:
Debug.WriteLine("Tab: " + tabItem);
break;
}
}
}

 

소스의 4번째 줄을 확인하면 TabControl의 문제점을 개선하는 코드를 확인 할 수 있다.

 

 

if (e.Source is TabControl)<--로 확인가능

Posted by 동동(이재동)
c#2020. 1. 3. 14:39

프로그래밍을 할 때 있어서 모든 일이 처음 설계한대로 흘러간다면 얼마나 좋을까? 하지만 Hello World를 출럭하는 프로그램이 아닌 이상에야 그런 일은 있을 수 없다.

 

확장성을 위해, 재사용성을 위해, 더 나은 구조를 위해 코드와 설계는 변하기 마련이다. 그 와중에 많은 함수나 변수, 클래스가 추가되고 삭제된다. 물론 혼자서만 하는 작업이라면 코드를 바꾸고 바꾼 코드를 바로 적용하면 되지만, 코드 베이스를 만드는 사람과 그 베이스를 이용해서 작업하는 사람이 따로 있는 상황이라면 이야기가 조금 달라진다.

 

만약 베이스를 작업하는 사람이 몇몇의 함수를 삭제하고 다른 이름의 함수로 대체했다면 그 베이스를 응용하는 사람 역시 그에 대한 사실을 알아야 한다. 물론 일반적인 상식으로 베이스 작업자가 베이스를 변경했다면 다른 작업자에게 바로 알려주고 다른 작업자는 바로 변경하는게 맞는 이야기지만, 사람과 사람 사이의 의사소통이라는게 말처럼 쉽기만 하던가. 베이스 작업자가 변경사항을 몇 개는 빠뜨리고 알려줄 수도 있고, 다른 작업자는 이야기를 들었지만 까먹을 수도 있는 일이다. 여튼 의사소통 과정에서 문제가 발생했다면 다른 작업자는 뜬금없이 바뀐 베이스 코드에 당황을 금치 못할 것이다.

 

그런 상황을 맞이한 다른 작업자는 당연히 문제를 해결하기 위해서 베이스 작업자에게 어떻게 변경된 것인지 물어보던지, 코드를 뒤져서 바뀐 함수를 적용하던지 하는 노력을 하겠지만 아무래도 이런 방식은 해결 속도도 느릴 뿐더러 효율적이지 못하다.

 

그렇기 때문에 나온 해결책이 바로 [Obsolete] 라는 어트리뷰트이다.

 

class TestClass
{
    [Obsolete]
    public void Function1()
    {
    }
}

 

더 이상 사용하지 않거나 그럴 예정인 클래스나 함수, 변수의 앞에 [Obsolete] 어트리뷰트를 붙여주면 된다. 그렇게 하면 해당 함수를 호출할 때 초록색 밑줄과 함께 더 이상 사용하지 않는 함수라는 경고가 뜬다.

 

 

그리고 툴팁에서는 함수 앞에 [deprecated]가 붙게 된다.

 

이 [Obsolete]는 세 가지 방식의 오버로딩을 지원한다.

 

class TestClass
{

    [Obsolete]
    public void Function1()
    {

    }

    [Obsolete("Not use anymore.")]
    public void Function2()
    {

    }

    [Obsolete("Not use anymore.", true)]
    public void Function3()
    {

    }
}

 

[Obsolete] :: 더 이상 사용하지 않는 코드라는 경고만 출력한다.

 

[Obsolete(string message)] :: 더 이상 사용하지 않는다는 경고에 추가적인 메시지를 남길 수 있다. 이 메시지를 통해 더 이상 사용하지 않는 코드 대신에 사용할 코드를 사용자에게 알릴 수 있다.

 

[Obsolete(string message, bool error)] :: 추가적인 로그와 함께 이 코드를 사용할 경우에 컴파일 에러를 띄울지를 결정한다. true를 넣어주면 컴파일 에러를 띄워서 이 코드를 사용하면 컴파일을 할 수 없게 된다.

 

 

이런 식으로 [Obsolete]를 적절하게 사용하면 베이스 작업자는 코드 작업만으로 다른 작업자에게 코드가 변경되었음을 알림과 동시에 그에 대한 해결책도 전해줄 수 있다. 베이스 작업자가 코드를 변경하고 다른 작업자에게 변경사항을 일일이 알리는 것보다 훨씬 빠르고 효율적인 해결책이다.




'c#' 카테고리의 다른 글

닷넷 디컴파일러  (0) 2021.09.10
LIST 형식 디버깅할떄 편한 DebuggerDisplay  (0) 2020.04.02
list 삭제  (0) 2019.08.02
Page 기능을 구현할때는 Linq Skip을 활용하자.  (0) 2016.07.06
URI Parameter 붙이기  (0) 2016.06.20
Posted by 동동(이재동)
NAS(시놀리지)2019. 9. 2. 12:38
  1. Open the Synology Diskstation Control Panel
  2. Click on "Shared Folder"
  3. Click on the shared folder that contains the file your PHP is trying to open for writing.
  4. Click "Edit"
  5. Go to permissions
  6. Choose "Local Groups"
  7. Give the group "http" Read/Write access
  8. Click OK
Posted by 동동(이재동)
c#2019. 8. 2. 15:39

var item = resultList.Single(x => x.Id == 2);

resultList.Remove(item);

Posted by 동동(이재동)
Phython2019. 7. 5. 10:59

DownloadManager.py 

텔레그램에서 "찾기 '드라마'"  하면 리스트가 나오고 받을 번호를 선택하면 시놀로지에 자동으로 다운되고 다운이 완료 되면 시드는 삭제 된다.

 

AutoDownload.py

지정된 드라마를 3시간 간격으로 검색해서 매일 다운로드

 

Mediamon.py

다운받는 즉시 DLNA를 이용해서 TV에서 볼수 있게 MOVIE폴더에 파일이 감지되면 색인서비스를 자동 실행하게 해준다.

 

BitAlert.py

텔레그램봇이 비트코인 가격을 알려주고 "범위 100" 이렇게 하면 가격변동이 100이상시에 알림을 준다.

 

ScrectDown.py

vpn을 수동으로 on, off 하여 차단사이트를 무시하고 웹크롤링을 하여 다운로드 한후 텔레그램으로 알려준다.

 

AlertWeb

뽐뿌 웹크롤링을 해서 해피머니나 컬쳐랜드가 나오면 텔레그램으로 알려준다.

 

 

 

Python.zip
1.67MB

Posted by 동동(이재동)
Phython2019. 5. 28. 17:03

for a in soup.find_all('h6', {'class' : 'ellipsis'}):

    print(a.find('a').attrs['href'])

Posted by 동동(이재동)
Phython2019. 5. 28. 15:54

정부에서 차단된 사이트를 웹크롤링 하기 위해서 사용했다..

 

일단 공개된 vpn을 이용

 

https://www.vpngate.net/en/

 

VPN Gate - Public Free VPN Cloud by Univ of Tsukuba, Japan

Follow @vpngate Free Access to World Knowledge Beyond Government's Firewall. Your IP: 27.0.238.117Your country: Korea Republic ofLet's change your IP address by using VPN Gate! Today: 3,263,597 connections, Cumulative: 5,606,897,919 connections, Traffic: 1

www.vpngate.net

 

openVpn을 이용해서 ovpn 파일을 얻는다.

 

그리고 공개된 아이디와 패스워드 vpn/vpn으로 시놀리지 

 

제어판 - 네트워크 - 일반- 고급설정에서 다중게이트 활성화를 하고

 

네트워크 인터페이스로 이동하여 vpn 프로 파일 생성후 아이디 패스워드를 입력하고 vpn 끊어지면 다시 접속을 체크 한다.

 

그리고 생성되면 오른쪽 버튼을 눌러서 연결되면 이제부터 차단된사이트를 이용할수 있다.

Posted by 동동(이재동)
Phython2019. 5. 21. 12:34

 

글로벌 변수를 사용할려면  global을 메소드안에서 선언해 줘야 한다.

x = 10

 

def foo():

 global x

 x += 1

 print x

 

foo()

https://eli.thegreenplace.net/2011/05/15/understanding-unboundlocalerror-in-python

'Phython' 카테고리의 다른 글

beautifulsoup에서 링크만 빼는법  (0) 2019.05.28
시놀리지에서 vpn client 사용하는 방법  (0) 2019.05.28
파이썬에서 텔레그램 메세지 에코  (0) 2019.05.21
파이썬 simple json 파싱  (0) 2019.05.17
파이썬 web request  (0) 2019.05.17
Posted by 동동(이재동)
Phython2019. 5. 21. 12:01

from telegram.ext import Updater

from telegram.ext import CommandHandler

from telegram.ext import MessageHandler, Filters

 

 

def start(bot, update):

# Your bot will send this message when users first talk to it, or when they use the /start command

bot.sendMessage(chat_id=update.message.chat_id,

text="Hi. Send me any English text and I'll summarize it for you.")

 

def summarize(bot, update):

try:

# Get the text the user sent

text = update.message.text

bot.sendMessage(chat_id=update.message.chat_id,

text=text)

#print(text)

# Run it through the summarizer

except UnicodeEncodeError:

bot.sendMessage(chat_id=update.message.chat_id,

text="Sorry, but I can't summarise your text.")

 

updater = Updater(token=my_token)

dp = updater.dispatcher

 

summarize_handler = MessageHandler(Filters.text, summarize)

start_handler = CommandHandler('start', start)

 

dp.add_handler(summarize_handler)

dp.add_handler(start_handler)

 

dp.bot.sendMessage('사람 id',text="himan")

 

updater.start_polling(timeout=3,clean=True)

updater.idle()

 

Commandhander를 앞에 /나 @에 반응한다.

 

참고 :  https://blog.psangwoo.com/coding/2018/01/09/python-telegram-bot-3.html

 

Posted by 동동(이재동)
Phython2019. 5. 17. 14:27

import json

 

x = json.loads("json string", object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))

print(x.last_price)

Posted by 동동(이재동)
Phython2019. 5. 17. 14:26

import requests

 

url = 'https://api.bitfinex.com/v1/pubticker/btcusd'

response = requests.get(url)

response.status_code

response.text

 

print(response.text)

 

 

Posted by 동동(이재동)
wpf2019. 4. 24. 12:33


        public static event EventHandler MainPageMessageEvent
        {
            add
            {
                if (_mainPageMessageEvent == null || _mainPageMessageEvent.GetInvocationList().Count() == 0)
                    _mainPageMessageEvent += value;
            }

            remove
            {
                _mainPageMessageEvent -= value;
            }
        }

 

 

 

Posted by 동동(이재동)