program study story

プログラムの勉強 アウトプット

モテるデートは【男性ファースト】_OUTPUT

こんばんわ。classworldです。

今回は、モテるデートは【男性ファースト】の学んだことをOUTPUTしていく。

デートするときに意識するべきポイントがわかる内容だ。

他でもない、普通の男性である私は、今までモテたことがない。しかし、コロナウイルスも落ち着いてきたこともあり、あるマッチングアプリでデートする約束が数日後にある。

2年間以上彼女なしのあげく、デートなんてしていなかったから少し知恵を入れておこうと今回この内容をインプットした。

世の中には、同じような境遇の人ももしかしたらいるかなと思い、OUTPUTした内容が意味あるものにしていただけたら嬉しいと思う。

そんな感じでスタート。

・お店の選び方に気を付けること

デートの目的は「女の子を口説くこと」

女性としては、楽しく話したり、食事するのは友達でいいが、異性とデートするってことは、「非日常な時間の提供」、「ドキドキ感の演出」を求めている。友達にはないドキドキ感が必要になる。なので、普段使っているお店や、ファーストフード店なんかはデートで使わない方がいいとされる。

もちろん、お金に余裕がないと高級料理などは難しいが、手ごろな値段で行けるところで、安めの価格帯のお店は存在する。普段使わない場所ということが肝になるようだ。

汚い麻績よりはきれいなお店をは重要そうだ。

また、女性は、自分が連れていかれるお店のグレードによって男性の本気度を判断しているので、お店のグレードは本気であれば本気であるほど重要になるようだ。

特に、カフェや、レストランでのデートは非日常の典型的な例だ。

女性の生活次第では、この理論は逆転することもあるが、

カフェや、レストランは値段が上がれば上がるほど、お店は落ち着いた雰囲気になるため、話しやすくなる。

少し高くても場所代と割り切ってレストランやカフェを選ぶことは安全なようだ。

・カフェや、レストランの多い場所でデートする

現代では、予約というシステムがあるので、あまり気にする機会はないだろうが、もしもの不測の事態に備えて、もしも当日デートすることが決まったときなんかはこの点は注意するべきだろう。

あまりに条件が悪いようであれば、

次の店、次の店と変更できるようにしておくことでスマートな行動を起こすことができる。カフェや、レストランが多い場所を選ぶことで、その選択肢を広げられるようにしておくこと。はたまた、他のお店に2,3件目星をつけておくことだ。

・女性の家からできるだけ近い場所で待ち合わせる。または、カフェ、レストランに行くこと

家から遠いと、行くのがめんどくさいなどと感じることがあるようだ。

女性は美しく見せるため、ヒールを履いたり、夏は汗をかくため、たくさん歩くことは歓迎しない。また、女性にとっては、初めて会うときなんかはそこまでデートに期待はしていない。

であるため、そのリスクを最大限なくす努力をすることでデートが中止、延期となることはなくなりやすいとのこと。

また、実際に歩く距離が遠かったお店に行く場合にはそれだけ大きな期待を抱く。

ハードルをわざわざ上げたくないのであれば、行くのがめんどくさいと思わせない近い場所を選ぶようにしよう。目安は5分~10分程度。

これは、マッチングアプリなんかで出会ったときは特に、この点は抑えるようにしたほうがよさそうだ。

・親身になるために2件目で個室のお店に行くことを考えておくこと

デートの典型的な流れは、カフェやレストラン→カラオケ・個室の店→自宅またはホテルといった流れになる。

 


1件目のカフェやレストランで「相手のことが好きなのか」、「相手が自分に気があるか」を探り、もし相手のリアクションが悪かったり、一緒にいたいと思わない場合は1件目で終わりにして帰るようにしよう。

しかし、そうではない場合に備えて、2件目の場所であるカラオケに行くことや、個室のあるお店に行くことを考えておくことで、親密になる可能性は十分に上がる。

また、女性は警戒心が高い人が多い。そのため、1件目で個室にならないようにすることで女性が安心して親密になっていける環境を整えるように心がけよう。

ここで、2件目に行くことができれば、かなり相手は気に入ってくれている可能性が高い。もし、嫌なら2件目はいろいろな理由をつけて断ってくるだろう。

もし、ここで相手が断ることがないのであれば、2件目で、口説くことを行うようにしよう。

・横並びの席を死守すること

パーソナルスペースに入るきっかけを作るためである。

パーソナルスペースは、恋人で、0㎝~45㎝、友人や知人は45㎝~1.2m、知らない人は1.2m~3.5mほどとされているようだ。

この45㎝以内に入るには、横並びの席になることで、できれば自然に!、無理なく!、拒絶されることなく!

入れるということだ。

他にもメリットがある。

対面であると、対立構造になりやすいが、横並びであれば、同じ方向を向くことで、仲間意識を感じたり、スキンシップをとることも自然にできたりできる。

もし、対面になってしました場合は、少し体を斜めにずらして座ると相手に圧迫感を与えずに済む。

・女性のいいなりにならないこと

心の持ち方にも少し手を加えることで成功率が上がるという。

ダメなパターンとしては、

女性に嫌われないようにするため、女性のいいなりになってしまうことだ。このタイプはモテない。

こういうタイプは「いい人」になる可能性が高い。

女性から見てこういうタイプは「都合のいい人」、「どうでもいい人」という認識になってしまう。

こういうタイプでも「男らしさ」このポイントを持っていれば話は変わってくる。

なんでもかんでも「イエスマン」になるのではなく、

「女性の意見を尊重した上で、決めるポイントはビシッと男らしく決めなければならない」

ホテル、自宅に誘うときなんかは特に。

・まとめ

デートは好きな女性に楽しんでもらうための「おもてなし」であるが、

デートの目的は「女の子を口説くこと」

この点を抑えて、

1件目は、相手におもてなしをして、自分は安全な人であることを理解してもらう。2件目で、男らしさを見せつつ、口説く。その後は、撃沈するのか、ホテル、自宅に行く。

この流れを基本して応用していけば、相手との関係を考えて行動していくことができるだろう。

友達なら、個室。初対面なら、カフェ、レストラン。職場なら、その職場での関係性。こんなとこだろう。

 


今度のデートが成功するように考えなくては。。

C#_ラムダ式

ラムダ式の活用のメリット:ラムダ式の活用のメリット:① 匿名メソッドを2.0の頃の記法より簡単に書ける② 上述の匿名メソッドと同じ記法で式木を作れる

①について
■ 匿名メソッドの記法の簡略化・匿名メソッドの定義から、delegateとか{return}とかの記述を省略できる・型推論機構が働く匿名メソッドをラムダ式を使って書き直す。
例:--------------------------------------------------------------------------------- 匿名メソッド構文--------------------------------------------------------------------------------- delegate(int n) {   return n > 0; }--------------------------------------------------------------------------------- 匿名メソッド構文→ラムダ式---------------------------------------------------------------------------------        delegate bool pred(int n);
        static void Main(string args)        {                        pred p=(int n) => { return n > 0; };        }        --------------------------------------------------------------------------------- ラムダ式:引数の型なし記載方法---------------------------------------------------------------------------------        delegate bool pred(int n);
static void Main(string
args)        {                        pred p= n => { return n > 0; };        }                --------------------------------------------------------------------------------- ラムダ式:引数の型なし、{},returnなし記載方法---------------------------------------------------------------------------------        delegate bool pred(int n);
static void Main(string args)        {                        pred p=n => n > 0;        }---------------------------------------------------------------------------------
②について
■ 式木とは式(数式)を木構造で表したもののこと。
ラムダ式は、Expression型の変数に代入すると、匿名デリゲートではなく、式木としてコンパイルされる。
ラムダ式をあるときには実行コードとして、またあるときはデータとして利用することができる。
デリゲートに代入するか、Expression型に代入するかによってコンパイル結果を変えることで、関数型言語と似たような動作を実現している。
■ 式木の制約:
ラムダ式を式木にできるのは、単文の({ }を使わない)ラムダ式のみ。
四則演算やメソッドコールはできるが、forやwhileなどの制御構文は、式木にできない。

■ 初期化子
C#3.0オブジェクト初期化子で指定できるのはpublicなメンバー変数またはプロパティのみ。(初期化子を書く場所によってはprotechedやinternalも可。初期化子を書いた場所からアクセスできる変数・プロパティのみ)
初期化子のメリット:・クラスのメンバー変数の初期化・式木への代入が可能になる
◇ コレクション初期化
配列と同じように初期化記法を、任意のコレクションクラスに対して行うことができる。また、リスト型のコレクションのみではなく、IDictinary<TKey,TValue>のような辞書クラスに対しても、以下のような記法で初期化できる。(引数2つのAddメソッドが呼ばれる)※コレクションクラス・・System.Collections.IEnumerableインターフェースを実装していて、Addメソッドを持つクラス
◇ インデックス初期化
C#6.0インデクサーを混ぜれるようになった。また、プロパティの代入とインデクサーへの代入を混在させることも可。
例:---------------------------------------------------------------------------------
 class Program    {        static void Main(string args)        {            // プロパティへの代入とインデクサーへの代入を混在させることができる。            var s = new Sample            {                Name = "sample",                ["X"] = 1,                ["Y"] = 2,            };        }    }
    class Sample    {        // プロパティ_定義        public string Name { get; set; } 
        // インデクサー_定義        public int this[string key]         {            get { return 0; }            set { }        }    }
---------------------------------------------------------------------------------
◇ 再帰初期化
再帰的な構造を持ったクラスの初期化もできる。
再帰的な初期化の制限:
メンバーが参照型(class)である必要がある。(値型(struct)だった場合は、コンパイルエラーになる)
(注) 記法での初期化は、インスタンスをnewしてくれたりはしない。コンストラクターもしくはメンバー初期化子での初期化 が必要。

 

1週間でC#の基礎が学べる本

1週間でC#の基礎が学べる本

  • 作者:亀田 健司
  • 発売日: 2019/09/12
  • メディア: Kindle版
 

 

デリゲートにおけるローカル変数と匿名関数

ローカル関数と匿名関数の比較

関数内に関数を書く方法として、
ローカル関数と匿名関数という2つの機能がある。

共通の性質:
・定義している関数の中でしか使えない
・周りの(定義している関数側にある)ローカル変数を取り込める。

ローカル関数

できることは多いが、書ける場所は少ない。
通常のメソッドでできることであれば概ね何でもできる。
再帰呼び出し
イテレータ
・非同期メソッド
メソッド内に限らず、関数メンバーならどれの中でも定義できます。

ローカル関数を利用する動機:
・定義した関数内からだけ使えるということ

利用例:

例1:イテレーターの引数チェック

 


匿名関数

できることに少し制限がある代わりに、どこでも書ける。

 

 

デリゲート内部で起こっていること

■ 型定義

インスタンスと関数ポインターのペア。
記述されているものと別で、2つのフィールドがあって、
1つは、マルチキャスト用、もう一つは静的メソッドのために使うフィールドが
作られる。

■ デリゲートのインスタンス生成

デリゲート型の変数に対してメソッドを直接渡すような形でデリゲートを作る。

■ 静的メソッドを渡すと遅い

デリゲートはインスタンスメソッドの時に処理が単純で高速になるように作られている。
C#ではインスタンスメソッドの方が圧倒的に利用頻度が高いので、インスタンスメソッドに
対して最適化したほうが、全体としてのパフォーマンスは上がる。

■ カリー化デリゲート

デリゲート越しの静的メソッドの呼び出しを早くする方法が1つある。
カリー化デリゲートという手段を使うと、インスタンスメソッドと同じで
静的メソッドを呼べるようになる。

拡張メソッドは、実体として、第1引数でインスタンスを受け取る構造になっていて
これがインスタンスメソッドの暗黙的なthis引数と同じ受け取り方になっている。

---------------------------------------------------------------------------------------------------

 

 


class Sample
{
public void InstanceMethod(int x)
{
// 引数が1つだけに見えて、実は暗黙的に this を受け取っている
}

続きを読む

C# 基礎_デリゲート

関数指向について

---------------------------------------------------------------
関数(function)中心の設計

メソッドをオブジェクトとして扱う → デリゲート

デリゲートが有用な場面 → イベント駆動、高階関数、非同期処理

純粋な関数(pure function)

フィールド等を参照せず、同じ入力に対して常に同じ出力を返す関数
---------------------------------------------------------------

■ デリゲート
 デリゲートとは、メソッドを参照するための型。

デ李ゲートは、述語やイベントハンドラ等に利用する。

C言語の関数ポインターとの違い

インスタンスメソッドを参照したり、複数メソッドを同時に参照することができる

delegate(委譲):

「他のメソッドに処理を丸投げするためのオブジェクト」というような意味。

イベントが起きたときのイベントハンドリングをどのメソッドに丸投げ(委託)するかを
指示するためなどに使われる。

デリゲートの定義について

delegateを使用するには、まず、

delegate 戻り値の型 デリゲート型名(引数リスト);

特徴:
・定義したデリゲート型は、ユーザ定義のクラスや構造体と同じ1つの型として扱われる。
・デリゲート型は自動的にSystem,Delegateクラスの派生クラスになる。

C#のデリゲートの利点:

インスタンスメソッドの代入が可能
◇ 複数のメソッドを代入できる
◇ 非同期呼び出し


インスタンスメソッドの代入

・クラス(static)メソッドとインスタンス(非static)メソッドの
どちらでも代入することが出来る。

◇複数のメソッドを代入する際

+=演算子を用意いることで、複数のメソッドを代入することができる。

→複数のメソッドを代入した状態で、デリゲート呼び出しを行うと、
 代入した全てのメソッドが呼び出される。


複数のメソッドを格納した状態のデリゲートのことを「マルチキャストデリゲート」
と呼ぶ。

マルチキャストデリゲートの呼び出しは、+=で代入した順に逐次実行される。

◇ 非同期呼び出し

非同期呼び出し(Asynchronous Call)とは

メソッドを呼び出した瞬間に呼び出し元に処理が戻ってくるような呼び出しのこと。

メソッドを呼び出しをすると、デリゲートを介して呼び出されるメソッドの処理と、
呼び出し元の処理が並行して行われることになる。(マルチスレッド)

 

デリゲート型を定義すると、C#コンパイラによって自動的にBeginInvokeとEndInvoke
というメソッドが生成される。

BeginInbokeを用いることで、非同期呼び出しを開始し、EndInvokeを用いることにより、
非同期処理が終了を待つことができる。

BeginInvokeの処理:流れ

デリゲート型の定義時に引数リストで指定した引数と、System.AsyncCallbackデリゲート型の
引数およびobject型の引数をとり、System.IAsyncResultインターフェース型の値を返す。

EndInvokeの処理:流れ

デリゲート型の定義時にrefまたはoutキーワードを付けた引数およびSystem.IAsyncResult
インターフェースの引数を持ち、デリゲートの戻り値と同じ型の戻り値を持つ。

■ デリゲートの用途

プログラミングの世界での述語の定義

あるオブジェクトxが「xは○○である」という条件を満たすかどうか
調べるメソッドのことをいう。

例題:

static int Select(int x)
{
int n=0;
foreach(int i in x) if(i > 10) ++n;

int y = new int[n];
n=0;
foreach(int i in x)
if(i > 10)
{
y[n] = i;
++n;
}

return y;
}

例題を述語使って実装:

delegate bool Predicate(int n);

tatic int Select(int x, Predicate pred)
{
int n=0;
foreach(int i in x)
if(pred(i)) ++n;

int y = new int[n];

n=0;
foreach(int i in x)
if(pred(i))
{
y[n] = i;
++n;
}

return y;
}

例題に述語を使って、使用する際の例:

using System;

delegate bool Predicate(int n);

class DelegateTest
{
static void Main()
{
int x = new int{1, 8, 4, 11, 8, 15, 12, 19};

// x の中から値が 10 以上のもだけ取り出す
int y = Select(x, new Predicate(IsOver10));
foreach(int i in y)
Console.Write("{0} ", i);
Console.Write("\n");

// x の中から値が (5, 15) の範囲にあるものだけ取り出す
int z = Select(x, new Predicate(Is5to15));
foreach(int i in z)
Console.Write("{0} ", i);
Console.Write("\n");
}

static bool IsOver10(int n){return n > 10;}
static bool Is5to15(int n){return (n > 5) && (n < 15);}

/// <summary>
/// x の中から条件 pred を満たすものだけを取り出す。
/// </summary>
/// <param name="x">対象となる配列</param>
/// <param name="pred">述語</param>
/// <returns>条件を満たすものだけを取り出した配列</returns>
static int Select(int x, Predicate pred)
{
int n=0;
foreach(int i in x)
if(pred(i)) ++n;

int y = new int[n];

n=0;
foreach(int i in x)
if(pred(i))
{
y[n] = i;
++n;
}

return y;
}
}

■ 匿名関数

匿名関数には、C#2.0とC#3.0で導入された2つのパターンがある。

・匿名メソッド式
ラムダ式

匿名メソッド式は概念のみ
現在使用されているのは、ラムダ式が多い。

◇匿名メソッドとは、
delegateキーワードから始まり、メソッドの中身を任意の箇所に埋め込んだ
部分のことをいう。

ラムダ式
ラムダ式とは
 関数(メソッド)を整数などの変数と全く同列に扱う手法のこと。

・匿名関数としても使えるもの、式木を作れる。

匿名メソッド式からラムダ式への移り変わり方

--------------------------------------------------------------
delegate(int n){ return n > 10; }
--------------------------------------------------------------
C#2.0バージョン(匿名メソッド式)

--------------------------------------------------------------
(int n) => { return n > 10; }
--------------------------------------------------------------
C#3.0バージョン(ラムダ式)
delegateキーワードが省略されている

--------------------------------------------------------------
Func<int,bool> f = n => { return n > 10; };
--------------------------------------------------------------
C#3.0バージョン(ラムダ式)
変数の型が左辺値や関数の引数から推論できる場合には簡素化できて、
省略ができる。
(int n)の型を省略

Func(int,bool)には、デリゲートのPredicateクラスにより、
Func(T,bool)型であるため、Func(T,bool)のTが(int x)と分かっていることから
省略が可能となっている。

--------------------------------------------------------------
Func<int,bool> f = n => n > 10;
--------------------------------------------------------------
C#3.0バージョン(ラムダ式)

ラムダ式の中身がreturn文1つだけの場合
{ }やreturnも省略できる。

省略前
--------------------------------------------------------------
Func<int,bool> f = delegate(int n){ return n > 10; };
--------------------------------------------------------------
上と下のコードは同じ意味になる。

省略後
--------------------------------------------------------------
Func<int,bool> f = n => n > 10;
--------------------------------------------------------------

使える既存デリゲートメソッド

・MehtodInvokerデリゲート(System.Windows.Forms名前空間)
・Actionデリゲート(System名前空間)
・Action<T>ジェネリック・デリゲート(System名前空間)
・Action<T1,T2>ジェネリック・デリゲート(System名前空間)
・Action<T1,T2,T3>ジェネリック・デリゲート(System名前空間)
・Action<T1,T2,T3,T4>ジェネリック・デリゲート(System名前空間)
・Predicate<T>ジェネリック・デリゲート(System名前空間)
・Func<TResult>ジェネリック・デリゲート(System名前空間)
・Func<T,TResult>ジェネリック・デリゲート(System名前空間)
・Func<T1,T2,TResult>ジェネリック・デリゲート(System名前空間)
・Func<T1,T2,T3,TResult>ジェネリック・デリゲート(System名前空間)
・Func<T1,T2,T3,T4,TResult>ジェネリック・デリゲート(System名前空間)

URL:参考
https://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_02/csharp30_02_02.html

■ covariance(共変性)と contravariance(反変性)

・covariance
基底クラスを戻り値とするデリゲートに対して、
派生クラスを戻り値とするメソッドを代入できること。

例:

class Base { }
class Derived : Base { }

delegate Base DelegateBaseReturn();

class Program
{
static void Main(string args)
{
Base xb;
xb = BaseReturn();  // 型が完全一致
xb = DerivedReturn();  // 基底クラスへのキャストは合法

DelegateBaseReturn db;
db = BaseReturn;  // 型が完全に一致
db += DerivedReturn;  // 戻り値の型が違うけど、これもok
xb = db();

}
static Base BaseReturn() { return new Base(); }
static Derived DerivedReturn() { return new Derived(); }

  }

(考察)
delegate Base DelegateBaseReturn();が入ったdbに対して、
static Derived DerivedReturn() { return new Derived(); }
が派生クラス(Derived)であるため、戻り値が違っても代入可能になっている。

・contravariance
派生クラスを引数とするデリゲートに対して、基底クラスを引数とするデリゲートを
代入できること。

例:

  class Base { }
class Derived : Base { }

delegate void DelegateDerivedParameter(Derived x);

class Program
{
static void Main(string[] args)
{
Derived xd = new Derived();
DerivedParameter(xd);  // 型が完全一致
BaseParameter(xd);  // 基底クラスへのキャストは合法

DelegateDerivedParameter dd;
dd = DerivedParameter;  // 型が完全一致
dd += BaseParameter;  // 引数の型が違うけど、これもok

}

static void BaseParameter(Base x) { }
static void DerivedParameter(Derived x) { }

}
(考察)

DelegateDerivedParameter(Derived x)とDerivedParameter(Derived x)は一緒だが、
BaseParameter(Base x)のように引数の型が違う場合でも、
派生クラスの引数に基底クラスは入れられる。

 

Visual C# 2017パーフェクトマスター (Perfect Master)

Visual C# 2017パーフェクトマスター (Perfect Master)

  • 作者:金城俊哉
  • 発売日: 2017/09/23
  • メディア: 単行本
 

 

iPhoneアプリ開発_知識

iPhoneアプリ開発で準備するもの
Mac
Xcode
AppleのDeveloper登録が必要で年間11,800円

 


Appleにアプリをリリースするには

AppStoreに公開するためには、
iTunesCoonnect,DeveloperCenterというサイトで設定をし申請を行う。

リリースの為には、AppleのDeveloper登録が必要で年間11,800円かかる。

iPhoneアプリで収益を上げるためには、
・有料ダウンロード
・広告
・アプリ内課金

有料アプリは、ゲームが多く購入される傾向に。

=ゲームアプリで多くの人に認知される必要がある。

広告は、アプリ内に広告を表示して収益を得る。
アプリ自体は無料で使い、広告を出すことで収益が上がる。

=多くの人にダウンロードしてもらう。

アプリ内課金はゲームによく使われる。

=ゲームアプリのクオリティ重視、面白いと思ってもらう人を一定数

 

Androidアプリ開発_知識

Androidアプリ開発で必要なもの
・パソコン(Mac/Windows/Linuxのいずれか)
・AndroidStuido,Eclipseという環境
java
Googleアカウントをデベロッパーとして登録する料金($25=3000円ほど)


Androidアプリを作ろうと思ったら
「企画→設計→開発」といった流れが一般的

個人で作るアプリであれば、アイデアが細かく決まっている必要はない。
作りながら、こういう機能が欲しいなどと思い浮かぶ。

・どんなアプリか
・誰がそのアプリを使うのか
・どんな機能、どんな画面が必要か
・(収益を得るならば)どこで収益を得るのか
など。


アプリをリリースしたい
Androidアプリをリリースするには、Google Playで公開することが一般的

アプリを公開するには、Google Playデベロッパーコンソールと公開用コンソールというものを
活用してリリースする。また、
それらを使用するためにGoogleアカウントをデベロッパーとして登録する必要がある。

登録料:$25(一度支払えば年数関係なく使用可能)支払う必要がある。