728x90
반응형

가만히 있어도 돈을 벌수 있는 프로젝트를

나만의 인생 프로젝트로 시행중인데

아직 갈길이 멀다

어떻게 하면 수익을 더 극대화 할수 있을지 고민해봐야겠다

게임앱, 생활앱, AR앱 등을 생각중이고 기존 앱들을 더 신경써서 관리해야겠다.

이번달 50~60만원이고 아래 3가지 항목이다.

1. 모바일 광고 AdMob

2. 블로그 광고 AdSense

3. 보드판프로

추가로 해야할것들

1. 아들 유투브 활성화하여 광고 수익 - 물티슈TV

2. 게임앱 만들어 광고 수익

3. 생활앱 만들어 광고 수익

4. 소스 판매 - Xamarin , WinForm, WPF 등등..

반응형

'Life' 카테고리의 다른 글

가만히 있어도 돈 버는 프로젝트  (0) 2022.04.05
쿠팡플레이 PC 버전 주소  (0) 2022.03.26
[Life] U+ TV 멈춤 증상 IPTIME 문제  (0) 2022.02.28
2022 목표  (0) 2022.02.03
아마존 추천 코드 RTF8935  (0) 2021.08.31
코로나 검사 후기  (0) 2021.01.05
728x90
반응형

https://www.microsoft.com/ko-kr/p/windows-performance-analyzer/9n0w1b2bxgnz#activetab=pivot:overviewtab

 

Windows Performance Analyzer 구매 - Microsoft Store ko-KR

Microsoft Store에서 이 Windows 10용 앱을 다운로드하세요. 스크린샷을 보고, 최신 고객 리뷰를 읽고, Windows Performance Analyzer에 대한 평점을 비교하세요.

www.microsoft.com

성능 모니터링 하는 프로그램

반응형
728x90
반응형
using System;
using System.IO;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            // Binary Data 쓰기
            BinaryWriter binaryWriter = new BinaryWriter(new FileStream("BinaryData.dat", FileMode.Create));

            binaryWriter.Write(5);
            binaryWriter.Write("String");
            binaryWriter.Write(1.78f);
            binaryWriter.Write("String2");
            binaryWriter.Write(0.025d);

            binaryWriter.Close();

            // Binary Data 읽기
            BinaryReader binaryReader = new BinaryReader(new FileStream("BinaryData.dat", FileMode.Open));

            Console.WriteLine("File Size: {0} bytes", binaryReader.BaseStream.Length);
            Console.WriteLine("{0}", binaryReader.ReadInt32());
            Console.WriteLine("{0}", binaryReader.ReadString());
            Console.WriteLine("{0}", binaryReader.ReadSingle());
            Console.WriteLine("{0}", binaryReader.ReadString());
            Console.WriteLine("{0}", binaryReader.ReadDouble());

            binaryReader.Close();
        }
    }
}

 

결과

반응형
728x90
반응형
        #region AsyncAction
        /// <summary>
        /// Action 수행 및 CompleteAction 을 통해 완료시 Action 도 수행가능
        /// </summary>
        /// <param name="action"></param>
        /// <param name="completeAction"></param>
        public static void AsyncAction(Action action, Action completeAction = null)
        {
            System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Run(() =>
            {
                System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, (Action)(() =>
                {
                    action.Invoke();
                }));
            });

            task.GetAwaiter().OnCompleted(() =>
            {
                if (task.Exception != null)
                {
                    throw task.Exception;
                }
                else
                {
                    completeAction?.Invoke();
                }
            });
        }
        #endregion

EventAggerator 에서 Publish 하게 될때 UI 가 갱신되기전에 Publish 가 수행되지 않게 되는데 이때 위 방법을 사용하게되면 Publish 가 바로 전달되어 실행되게 된다.

반응형
728x90
반응형
    public static class ProjectExtension
    {
        /// <summary>
        /// Properties 의 동일여부
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="self"></param>
        /// <param name="to"></param>
        /// <param name="ignore"></param>
        /// <returns></returns>
        public static bool PropertiesEqual<T>(this T self, T to, params string[] ignore) where T : class
        {
            if (self != null && to != null)
            {
                var type = typeof(T);
                var ignoreList = new List<string>(ignore);
                var unequalProperties =
                    from pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                    where !ignoreList.Contains(pi.Name) && pi.GetUnderlyingType().IsSimpleType() && pi.GetIndexParameters().Length == 0
                    let selfValue = type.GetProperty(pi.Name).GetValue(self, null)
                    let toValue = type.GetProperty(pi.Name).GetValue(to, null)
                    where selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue))
                    select selfValue;
                return !unequalProperties.Any();
            }
            return self == to;
        }

        /// <summary>
        /// Type 을 단순하게 변경합니다.
        /// </summary>
        private static bool IsSimpleType(this Type type)
        {
            return
               type.IsValueType ||
               type.IsPrimitive ||
               new[] {typeof(String),typeof(Decimal),typeof(DateTime),typeof(DateTimeOffset),typeof(TimeSpan),typeof(Guid)}.Contains(type) ||
               (Convert.GetTypeCode(type) != TypeCode.Object);
        }

        /// <summary>
        /// MemberType 에 따라 Type 을 반환합니다.
        /// </summary>
        /// <param name="member"></param>
        /// <returns></returns>
        private static Type GetUnderlyingType(this MemberInfo member)
        {
            switch (member.MemberType)
            {
                case MemberTypes.Event:
                    return ((EventInfo)member).EventHandlerType;
                case MemberTypes.Field:
                    return ((FieldInfo)member).FieldType;
                case MemberTypes.Method:
                    return ((MethodInfo)member).ReturnType;
                case MemberTypes.Property:
                    return ((PropertyInfo)member).PropertyType;
                default:
                    throw new ArgumentException
                    (
                       "Input MemberInfo must be if type EventInfo, FieldInfo, MethodInfo, or PropertyInfo"
                    );
            }
        }
    }

 

사용은 T class 가 있을때 AT, BT 를 비교한다고 할때

bool isEqual = AT.PropertiesEqual<T>(BT);

반응형
728x90
반응형

Access DB 파일은 저장을 할수록 점점 사이즈가 커진다. 
Access 에서 아래 버튼을 누르면 로그등의 내용이 제거되면서 CompactDatabase 가 수행되는데

이때 사이즈가 원래 사이즈로 돌아간다.

이를 C# 코드로 처리하는 방법을 알아보자
먼저 아래처럼 참조 추가를 눌러
'Microsoft Office 16.0 Access Database Engine Object Library' 항목을 추가한다.

그리고 아래와 같이 코드해서 처리하면 끝.

using System.IO;
using Microsoft.Office.Interop.Access.Dao;

		#region CompactAccessDB
        /// <summary>
        /// CompactDatabase 를 수행합니다.
        /// </summary>
        public static void CompactAccessDB(string dbFilePath)
        {
            try
            {
                if (!File.Exists(dbFilePath))
                {
                    return;
                }
                
                DBEngine dbEngine = new DBEngine();

                string directroy = Path.GetDirectoryName(dbFilePath);
                string filename = Path.GetFileNameWithoutExtension(dbFilePath);
                string extension = Path.GetExtension(dbFilePath);

                string compactFilePath = Path.Combine(directroy, filename + "_temp" + extension);
                string password = "1234";

                // 오류로 인해 temp 파일이 제거 되지 않은 경우 대비
                if (File.Exists(compactFilePath))
                {
                    File.Delete(compactFilePath);
                }

                dbEngine.CompactDatabase(dbFilePath, compactFilePath, false, false, "MS Access;PWD=" + password);

                File.Delete(dbFilePath);
                File.Move(compactFilePath, dbFilePath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

 

위 메서드를 거치면 CompactDatabase 가 수행된다.

반응형
728x90
반응형

4kvideodownloader_4.20.1_x64_online.exe
0.84MB

하루에 30 개 제한이 있긴한데 다운로드 잘되는것 확인!

비공개 영상도 권한이 있다면 다운로드 가능하다

라이센스를 활성화하면 더많은 기능이 있다.

https://www.4kdownload.com/ko/

 

반응형
728x90
반응형

syncfusion 의 SfBadgeView 컨트롤은 버튼이나 이미지에 벳지 숫자를 표현하고 싶을 때 사용한다.
먼저 MauiProgram.cs 에 아래처럼 builder.ConfigureSyncfusionCore(); 를추가해 준다.

var builder = MauiApp.CreateBuilder();
builder
	.UseMauiApp<App>()
	.ConfigureFonts(fonts =>
	{
		fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
		fonts.AddFont("NotoSans-Regular.ttf", "NotoSansRegular");
		fonts.AddFont("NanumBrush.ttf", "NanumBrush");
	});

builder.ConfigureSyncfusionListView();

// SfBadgeView, SfEffectsView
builder.ConfigureSyncfusionCore();

xaml 단에서 
xmlns:syncfusionCore="clr-namespace:Syncfusion.Maui.Core;assembly=Syncfusion.Maui.Core"
를 정의하고 사용하면 된다.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="MauiApp1.SfTestView"
             xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:sys="clr-namespace:System;assembly=netstandard"
             xmlns:local="clr-namespace:MauiApp1.Defines"
             xmlns:syncfusionCore="clr-namespace:Syncfusion.Maui.Core;assembly=Syncfusion.Maui.Core"
             Title="SfTestView"
             BackgroundColor="White">

    <StackLayout Margin="10">
        <Label Text ="SfBadgeView" VerticalTextAlignment="Center" FontSize="15" FontAttributes="Bold"/>
        <syncfusionCore:SfBadgeView HorizontalOptions="Center" VerticalOptions="Center" BadgeText="20" Margin="5">
            <syncfusionCore:SfBadgeView.Content>
                <Button Text="Badge" WidthRequest="200"  HeightRequest="60" HorizontalOptions="Center"/>
            </syncfusionCore:SfBadgeView.Content>
            <syncfusionCore:SfBadgeView.BadgeSettings>
                <syncfusionCore:BadgeSettings 
                    FontSize="15" 
                    FontAttributes="Bold" 
                    FontFamily="serif" 
                    Stroke="Blue" 
                    BorderWidth="2" 
                    Type="Info" 
                    CornerRadius="5,5,5,5" 
                    Position="BottomRight">
                </syncfusionCore:BadgeSettings>
            </syncfusionCore:SfBadgeView.BadgeSettings>
        </syncfusionCore:SfBadgeView>
    </StackLayout>
</ContentPage>


BadgeSettings 에서 Badge 의 폰트 및 외곽선, 코너반지름등을 설정할수 있으며
Position 을 통해 Badge의 위치를 지정할 수 있다. 또한 Type 를 통해서 지정된 Badge 색을 불러와 사용할수 있다.
참고 : https://help.syncfusion.com/maui/badge-view/getting-started

그런데 실제 기기에 배포하면 희한하게도 아래처럼 표시된다 ㅜㅠ 원래 딱 달라붙어야하는데;;

Preview 니까 봐주자..

syncfusion 의 SfEffectsView 컨트롤은 항목에 효과를 주고 싶을 때 사용하는 컨트롤이다.
이 컨트롤 또한 사용하려면 MauiProgram.cs 에 builder.ConfigureSyncfusionCore(); 를 추가해 준다.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="MauiApp1.SfTestView"
             xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:sys="clr-namespace:System;assembly=netstandard"
             xmlns:local="clr-namespace:MauiApp1.Defines"
             xmlns:syncfusionCore="clr-namespace:Syncfusion.Maui.Core;assembly=Syncfusion.Maui.Core"
             Title="SfTestView"
             BackgroundColor="White">

    <StackLayout Margin="10">
        <Label Text ="SfBadgeView" VerticalTextAlignment="Center" FontSize="15" FontAttributes="Bold"/>
        <syncfusionCore:SfBadgeView HorizontalOptions="Center" VerticalOptions="Center" BadgeText="20" Margin="5">
            <syncfusionCore:SfBadgeView.Content>
                <Button Text="Badge" WidthRequest="200"  HeightRequest="60" HorizontalOptions="Center"/>
            </syncfusionCore:SfBadgeView.Content>
            <syncfusionCore:SfBadgeView.BadgeSettings>
                <syncfusionCore:BadgeSettings 
                    FontSize="15" 
                    FontAttributes="Bold" 
                    FontFamily="serif" 
                    Stroke="Blue" 
                    BorderWidth="2" 
                    Type="Info" 
                    CornerRadius="5,5,5,5" 
                    Position="BottomRight">
                </syncfusionCore:BadgeSettings>
            </syncfusionCore:SfBadgeView.BadgeSettings>
        </syncfusionCore:SfBadgeView>
        
        <Label Text ="SfEffectsView" VerticalTextAlignment="Center" FontSize="15" FontAttributes="Bold"/>
        <syncfusionCore:SfEffectsView 
            Margin="5"
            TouchDownEffects="Ripple">
            <Label Text ="Ripple" HeightRequest="60" VerticalTextAlignment="Center"></Label>
        </syncfusionCore:SfEffectsView>

        <syncfusionCore:SfEffectsView 
            Margin="5"
            TouchDownEffects="Rotation"
            Angle="180">
            <Label Text ="Rotation" HeightRequest="60" VerticalTextAlignment="Center"></Label>
        </syncfusionCore:SfEffectsView>
        
        <syncfusionCore:SfEffectsView 
            Margin="5"
            LongPressEffects="Selection"
            SelectionBackground="skyblue">
            <Label Text ="LongPress Selection" HeightRequest="60" VerticalTextAlignment="Center"></Label>
        </syncfusionCore:SfEffectsView>

        <syncfusionCore:SfEffectsView 
            Margin="5"
            TouchDownEffects="Ripple,Rotation"
            Angle="180">
            <Label Text ="Ripple,Rotation" HeightRequest="60" VerticalTextAlignment="Center"></Label>
        </syncfusionCore:SfEffectsView>
    </StackLayout>
</ContentPage>

아래 이미지를 보면 알겠지만 Label 이지만 선택시 효과를 주어 Ripple 로하면 선택시 둥그렇게 커지는 효과가 부여된다.
Rotation 은 말그대로 회전되는 것으로 Angle 값에 따라 회전이 된다.
Selection 은 길게 누른 경우 선택되는 효과를 줄수 있다.
TouchDownEffects 에는 여러 효과를 동시에 설정하여 사용할수 있다.

 

소스
https://github.com/kei-soft/MauiApp

반응형
  1. 이판사판 2022.04.22 10:55

    관리자의 승인을 기다리고 있는 댓글입니다

728x90
반응형

젤다 이후로 재미있는 오픈 월드 게임, 소울류는 처음이라 게임이 어렵긴하다 ㅜㅠ

앤딩보면 다크소울3도..

https://mapgenie.io/elden-ring/maps/the-lands-between

 

Elden Ring Map | Map Genie

Elden Ring Interactive Map - Find all Bosses, Tears, Quests, Keys, Map Fragments & more! Use the progress tracker to keep track of your collectibles and get 100%!

mapgenie.io

 

반응형
728x90
반응형

https://www.coupangplay.com/

 

쿠팡플레이 - 와우 회원은 쿠플 시리즈, TV 프로그램, 영화, 스포츠 생중계 등 다양한 콘텐츠가 무

지원되지 않는 브라우저입니다 엣지, 크롬, 파이어폭스 또는 사파리에서 다시 시도해주세요.

www.coupangplay.com

이건 왜 검색하면 안나오고 찾게 만들었는지;;

반응형

'Life' 카테고리의 다른 글

가만히 있어도 돈 버는 프로젝트  (0) 2022.04.05
쿠팡플레이 PC 버전 주소  (0) 2022.03.26
[Life] U+ TV 멈춤 증상 IPTIME 문제  (0) 2022.02.28
2022 목표  (0) 2022.02.03
아마존 추천 코드 RTF8935  (0) 2021.08.31
코로나 검사 후기  (0) 2021.01.05

+ Recent posts