「String」を含む日記 RSS

はてなキーワード: Stringとは

2021-07-15

オリパラ音楽担当になった小山田圭吾の悪評をreddit投稿しようと考えてる。

このグーグル翻訳を駆使した英文大丈夫か教えてほしい。

増田仕様のせいで空行が入らないので読みにくいかも)

追記:ブコメですでに記事があるという指摘があったので、いまさら投稿しなくてもいいか

なにかに流用したい人がいるかわからんが好きに使ってくれていい。

A creative member of the Tokyo Olympics opening ceremony music was found to have been a fierce bullying assailant in the past.

Keigo Oyamada (born 1969) became a creative member of the Tokyo Olympics opening ceremony music.

In an interview with a music magazine in the 1990s, He talked about being a perpetrator of bullying as if it were a funny thing.

Interview in the January 1994 issue of the music magazine "Rockin' On Japan 20,000-word interview with Keigo Oyamada"

"Also, the bullying was really bad at my school."

 But you said you were the bully.

"Yeah. I bullied him. When I think about it now, it was really awful. I'd like to take this opportunity to apologize (laughs) because I've been bullying him pretty hard."

 Did you do something that bad?

"Yes. Yes, it's against the rules of humanity. I would strip them completely naked, wrap a string around them, and make them masturbate. They feed you shit. And backdropping him after he ate shit."

The school he attended was a combination of primary, secondary, high school and university.

The school offers "joint education" where normal children and disabled children are placed in the same class.

A writer who read this interview planned a dialogue between the "bully" and the "bullied", but it did not happen.

It became a personal interview with Keigo Oyamada.

There was a guy named Sawada. He was a very epoch-making guy, and he came to the school when I was in the second grade. It was a shock to the whole school (laughs). When he moved to a new school and introduced himself, he would suddenly say (in a tone that sounded like he had a speech impediment), "I'm Sawada. It's like, "Wow, that's great! Then, on the first day at the new school, I took a dump. It's a felony for elementary school students to take a dump at school, isn't it?

There was a cardboard box or something like that, and I put Sawada in it, tied it all up with duct tape, made air holes in it (laughs), and said, "Hey, Sawada, are you okay? (laughs) Then, with a chalkboard eraser or something, I slapped it around and said, "Poison gas attack! (laughs) Then, I took a blackboard eraser and said, "Poison gas attack! ...? He said something really interesting. I don't know what it was, but he said something like "Mommy" or something like that (laughs), and everyone burst out laughing.

When it comes to his jersey, everyone takes it off, but it's nothing for him to take his dick out, so he just walks around with it out. But he's got a big dick, and it's been that way since elementary school, but in high school it got even bigger (laughs). (laughs) The girls would react to it, so we would take it off on purpose and have him walk down the hallway.

2021-07-11

昨日からjava勉強し始めたんだけど

ラッツ予想の計算過程を出力するプログラム書いたんだけどもっと簡単に簡略して書く方法おしえてけろ

public class Calc{
	public static void main(String[] args) {
		for(int i=2; i>0; i++) {
			int a = i;
			System.out.println("-----"+ a +"の場合-----");
			while(a != 1) {
			if(a % 2 == 0) {
					System.out.println(a +" ÷ 2 = "+(a = a / 2));
				}else{
					System.out.println(a +" × 3 + 1 = "+(a = 3* a +1));
				}
			}
		}
		}
}

2021-07-02

初心者から中級者になるためのプログラミングのコツ

変数や構文などのプログラミングの基礎は覚えた人向けに、ソースコードを書くときのコツを紹介していきます。どれも今日から実践できるものばかりです。他のプログラマと差をつけることができる技術ですので、ぜひ意識するようにして下さい。良い子はまねしないで下さい。

変数名は短く

プログラムで使う変数名は可能な限り短くしましょう。

理想は、aやxなどの一文字です。ただし、これだけだと26文字しか使えないので、a1, a2, ...のように連番でグルーピングすると良いです。

また、変数宣言使用箇所が離れた場合に、変数の型がすぐに分かるように、たとえばint型であればi1, i2, ...、string型であればs1, s2, ...のように命名すると、読む人に親切で自分ミスしにくくなります

変数名を長くするのは、以下のデメリットがあるため、絶対にやめましょう。


なるべく関数を作らない

多くのプログラミング言語には、クラス関数といった機能がありますが、これらは基本的ライブラリ提供者などが使う想定の機能であり、一般プログラマが使うのは好ましくありません。したがって、クラス関数はなるべく使わないようにして下さい。

関数を作ると、以下のデメリットがあります

不要関数を作らないためのテクニックには、以下のようなものがあります

まず、関数引数に「フラグ」を渡し、関数内部で処理を切り替えれば、1つの関数複数の処理をすることができます

function f(i) {
  switch(i) {
    case 1:
      // i = 1のときの処理
      break;
    case 2:
      // i = 2のときの処理
      break;
    case 3:
      // i = 3のときの処理
      break;
    // ...
  }
}

この方法は、以下に述べる「変数寿命を伸ばす」効果もあります。つまり、この関数内で宣言された変数は、すべての処理で共通して使用することができます

クラス不要関数を作らないようにするには、「継承」を用います複数クラスで用いる関数定義したクラスを1つ作っておき、そのクラス継承すれば、新しいクラス関数定義する必要はありません。

理想的には、プログラム内のすべての関数を同一のクラス定義し、それを継承するべきです。そのようなクラスは俗に「神」と呼ばれ、その利便性からプログラマからはこの上なく尊ばれています

class God {
  f1() {
    // 関数1
  }
  
  f2() {
    // 関数2
  }
  // ...
}

class C1 extends God {
  // 何も書かなくても上の関数が使える!
}

class C2 extends God {
  // 何も書かなくても上の関数が使える!
}
// ...

変数寿命を長くする

変数宣言する場所によって、ソースコードのどの範囲から参照できるかが決まっています。この範囲が広いことを、「変数寿命が長い」と言います

たとえば、以下のコードのaは、関数定義の外側からは参照することができません。

function f() {
  var a = 1;
  return a;
}

一方、以下のコードのaは関数の内外どちらからでも参照することができます

var a = 1;

function f() {
  a = 2;
  return a;
}

変数寿命を長くするのは、プログラマの腕の見せ所です。

せっかく作った変数がすぐに死んでしまうのは、非常にもったいないです。ソースコードの表面には現れませんが、変数を作ったり捨てたりするのには、計算コストがかかります。したがって、寿命の短い変数を作りすぎてしまうと、プログラムが遅くなってしまます

また、変数寿命が長いということは、変数をたくさん作らなくても、1つの変数を色々なところで利用できるということであり、とても便利です。たとえば、上記の前者のコードでは、関数の外部からaの値を参照したくなっても、参照することができません。後者のように書いておけば、プログラムのどの箇所からでも、aの値を参照したり、更新することができます。したがって、変数寿命を長くするとプログラムを変更しやすくなります。つまり保守性が上がります

例外を潰す

例外とは、プログラムが予期しない処理をしようとした場合に、プログラムの実行を停止し、呼び出し元にエラーを通知する機能です。たとえば、「test.txt」というファイルを開こうとしても、そのファイル存在しない場合は、例外となります

例外が発生すると、プログラムが停止してしまうため、非常に困ります。したがって、プログラマ例外をきちんと処理しなければなりません。

ほとんどのプログラミング言語には、例外処理のための機構があります。たとえば、以下のような構文です。

try {
  // 例外が発生し得る処理
  // ex. ファイルを開く
}
catch (e) {
  // 例外が発生したときに、実行する処理
}

例外への対処は実はとても簡単です。是非ここで覚えて下さい。上記のような機構のある言語であれば、catch節の中身を何も書かなければ、例外が発生しても、何事もなくプログラム動作を続けます

try {
  // 例外が発生し得る処理
}
catch () {}

全ての例外を潰せば、決して不慮の動作で停止することのないプログラムを作ることができます。ですから例外が発生し得るコードは、積極的上記try-catch構文を用いて、例外を潰すようにしましょう。

2021-06-29

経験から1ヶ月でWeb企業就職するための勉強法

プログラマーに憧れる皆さん!こんばんは。

自分文系から」「未経験から」と諦めていませんか?大丈夫です!プログラミングセンス不要です。正しい手順で学べば、文系や未経験でも、誰でも一流のプログラマとして活躍することができます

今日は、未経験から最短でWeb企業就職するための勉強法をご紹介します!

オススメ方法

もっとオススメ方法は、顕正会セミナーに参加することです。

顕正会は、日本で最大のエンジニアコミュニティであり、非常に良質なテキストを用いて、プログラミング初心者向けのセミナーをしていることで有名です。顕正会に入ることで、未経験からでも一流エンジニアノウハウを学ぶことができます

また、意外と知られていませんが、日本エンジニアの8割は顕正会出身です。実はあのひろゆきビル・ゲイツ顕正会出身です。ですので、顕正会ネットワークを介して就職先を斡旋してくれたりしますし、自分顕正会員だと、面接時にも非常に有利になります

顕正会セミナーは、インターネットからも応募することができますし、秋葉原などで声をかけられることもありますので、誰でも簡単に参加できます。会員もフレンドリーな方ばかりですので、是非、お気軽に応募してみて下さい!無料体験もできますよ。

準備

プログラミング勉強を始める前に、まず、必要ものを準備しましょう。必ず必要ものと、できればあると良いものは以下の通りです。

必ず必要もの

まず、プログラムを書いて実行するためにパソコン必須です。

可能な限りスペックの高いものを買いましょう。2021年現在であれば、CPUは18コア、36スレッドRAMは128GBくらいはあると良いでしょう。ストレージSSDであれば1TBもあれば十分です。

OSは、Windowsで開発するならWindowsが、Macで開発するならMac必要です。よく分からなければMacを買っておく方が良いでしょう。基本的MacにできてWindowsにできないことはありません。

インターネットは、この記事を見ている人は既に持っているでしょう。ただし、モバイル回線で見ている人は、自宅に有線のインターネット環境を用意した方が良いです。

顕正会に入会すれば、上記スペックPC無料で貸し出ししてくれます。また、法人向けの専用線無料で取付工事を行ってくれる上に、通信費を全て負担してくれます

できればあると良いもの

まず、他の会員と連絡を取るために、SNSアカウントを持っていると良いでしょう。

最近は完全にPC上での学習もできますが、やはり、勉強の基本は紙のノートに直接書くことです。医学的にも、手指の動きと脳の記憶回路が関連していることは証明されており、手を動かすことで効率的ものを覚えることができます

Kindleなどの電子書籍リーダーは持っておいた方が良いです。紙の本は時代遅れです。いやしくもITプロを目指そうという人間が、このような最先端デバイスを使っていないのは恥だと思うべきです。紙の本を買わないことは、環境を守ることにも繋がります現金も持つのはやめましょう。

自宅での学習

せっかくセミナーに参加しても、受身聴くだけでは、プログラミング習得することは難しいです。ここでは、自宅でどのような勉強をすればよいのか、ご紹介します。

教科書写経する

まずは、教科書参考書写経することから始めましょう。教科書参考書の本文を一字一句正確に書き写すのです。

よく、「写経理屈を学べないからだめだ」と批判されますが、まずは正しい「型」を体に覚え込ませるのが先です。野球水泳などでも、細かい理屈よりも先にフォームを固めるのと同じです。書き写している内に理屈自然と身に付きます

また、写経メリットは「飛ばし読み」を防げるところです。一字一句正確に写経をすれば、細かい部分を「分かったつもり」になって飛ばししまうことを防げます。たとえば、比較演算子の等号は=ではなくて、==です。プログラミングはこういうところに注意して学ばなければいけません。

ソースコードフローチャートUML)に変換する

教科書サンプルコードノートに書き写したら、それを今度は自力フローチャートUML)に変換してみましょう。そうすることで、自分が本当にそのコード理解しているのか、確かめることができます

フローチャートUMLが素早く正確に描けることは、プログラマーとして働く上で非常に重要スキルです。それらはソフトウェア設計の基礎となりますし、ソースコードを読めない営業顧客にとっては貴重な資料となるからです。プロエンジニアは、COBOLソースコード10万行を1週間でフローチャートにして、Excel転載することができます

ここで一つ注意すべきことがありますフローチャートを描くときは、必ず専用の定規を用いて描いて下さい。フリーハンドで描いたもの業務ではフローチャートとは認められません。これはまともな企業就職すれば研修などで必ず習うことですから、今の内に覚えておきましょう。

Excel勉強する

エンジニアを目指すのであれば、プログラミングだけではなく、Excelの使い方も学びましょう。Excelエンジニアにとっての万能プラットフォームです。エンジニアはあらゆる作業Excelで行いますセル結合や罫線を用いて、見栄えの良い資料を作る技術は、エンジニアにとって必須です。

プログラミング学習中であれば、たとえば以下のような題材の資料を作ってみると良いでしょう。

尤も、以上の資料は、ツールを使うことで自動作成することもできます。たとえば、ソースコード更新履歴Gitなどのバージョン管理システムを使うことでも管理できますしかし、それらの資料としてのクオリティは非常に低いため、アマチュアしか使うことはありません。プロを目指す皆さんは、必ずExcelを使いこなせるようになりましょう!VBA習得必須です。

プログラミングのコツ

以上、プログラミング勉強法について解説しました。ここからは、実際にソースコードを書くときのコツを紹介していきます。他のプログラマと差をつけることができる技術ですので、意識するようにして下さい。

変数名は短く

プログラムで使う変数名は可能な限り短くしましょう。

理想は、aやxなどの一文字です。ただし、これだけだと26文字しか使えないので、a1, a2, ...のように連番でグルーピングすると良いです。

また、変数宣言使用箇所が離れた場合に、変数の型がすぐに分かるように、たとえばint型であればi1, i2, ...、string型であればs1, s2, ...のように命名すると、読む人に親切で自分ミスしにくくなります

変数名を長くするのは、以下のデメリットがあるため、絶対にやめましょう。


なるべく関数を作らない

多くのプログラミング言語には、クラス関数といった機能がありますが、これらは基本的ライブラリ提供者などが使う想定の機能であり、一般プログラマが使うのは好ましくありません。したがって、クラス関数はなるべく使わないようにして下さい。

関数を作ると、以下のデメリットがあります

不要関数を作らないためのテクニックには、以下のようなものがあります

まず、関数引数に「フラグ」を渡し、関数内部で処理を切り替えれば、1つの関数複数の処理をすることができます

function f(i) {
  switch(i) {
    case 1:
      // i = 1のときの処理
      break;
    case 2:
      // i = 2のときの処理
      break;
    case 3:
      // i = 3のときの処理
      break;
    // ...
  }
}

この方法は、以下に述べる「変数寿命を伸ばす」効果もあります。つまり、この関数内で宣言された変数は、すべての処理で共通して使用することができます

クラス不要関数を作らないようにするには、「継承」を用います複数クラスで用いる関数定義したクラスを1つ作っておき、そのクラス継承すれば、新しいクラス関数定義する必要はありません。

理想的には、プログラム内のすべての関数を同一のクラス定義し、それを継承するべきです。そのようなクラスは俗に「神」と呼ばれ、プログラマからはこの上なく尊ばれています

class God {
  f1() {
    // 関数1
  }
  
  f2() {
    // 関数2
  }
  // ...
}

class C1 extends God {
  // 何も書かなくても上の関数が使える!
}

class C2 extends God {
  // 何も書かなくても上の関数が使える!
}
// ...

変数寿命を長くする

変数宣言する場所によって、ソースコードのどの範囲から参照できるかが決まっています。この範囲が広いことを、「変数寿命が長い」と言います

たとえば、以下のコードのaは、関数定義の外側からは参照することができません。

function f() {
  var a = 1;
  return a;
}

一方、以下のコードのaは関数の内外どちらからでも参照することができます

var a = 1;

function f() {
  a = 2;
  return a;
}

変数寿命を長くするのは、プログラマの腕の見せ所です。

せっかく作った変数がすぐに死んでしまうのは、非常にもったいないです。ソースコードの表面には現れませんが、変数を作ったり捨てたりするのには、計算コストがかかります。したがって、寿命の短い変数を作りすぎてしまうと、プログラムが遅くなってしまます

また、変数寿命が長いということは、変数をたくさん作らなくても、1つの変数を色々なところで利用できるということであり、とても便利です。たとえば、上記の前者のコードでは、関数の外部からaの値を参照したくなっても、参照することができません。後者のように書いておけば、プログラムのどの箇所からでも、aの値を参照したり、更新することができます。したがって、変数寿命を長くするとプログラムを変更しやすくなります。つまり保守性が上がります

例外を潰す

例外とは、プログラムが予期しない処理をしようとした場合に、プログラムの実行を停止し、呼び出し元にエラーを通知する機能です。たとえば、「test.txt」というファイルを開こうとしても、そのファイル存在しない場合は、例外となります

例外が発生すると、プログラムが停止してしまうため、非常に困ります。したがって、プログラマ例外をきちんと処理しなければなりません。

ほとんどのプログラミング言語には、例外処理のための機構があります。たとえば、以下のような構文です。

try {
  // 例外が発生し得る処理
  // ex. ファイルを開く
}
catch (e) {
  // 例外が発生したときに、実行する処理
}

例外への対処は実はとても簡単です。是非ここで覚えて下さい。上記のような機構のある言語であれば、catch節の中身を何も書かなければ、例外が発生しても、何事もなくプログラム動作を続けます

try {
  // 例外が発生し得る処理
}
catch () {}

全ての例外を潰せば、決して不慮の動作で停止することのないプログラムを作ることができます。ですから例外が発生し得るコードは、積極的上記try-catch構文を用いて、例外を潰すようにしましょう。

おわりに

全体的に専門用語盛りだくさんの記事になってしまいましたが、

部分的にでも理解すればプログラミングを見る目が変わるはずです。

うさんくさい記事インターネットには多いですが、

そういう情報に惑わされずに本物の技術を身につけてもらえればと思います

2021-05-31

https://github.com/kokorohamoe/OpenProfile/blob/master/700_sample/Java/Jurina/reader.cpp

とてもシンプルコード

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

int v;

char buffer[1024];

while(1){

printf("input\n");

scanf("%s%d",buffer,&v);

if(strcmp(buffer,"print")==0)

fprintf(stderr, "public class base{\n"

"public static void main(String[] args){\n"

"int i = %d;\n"

"System.out.println(i);}}\n",v);

}

return 0;

}

jurina

cat filename.jurina

print "Hello world";

という命令ファイルから受け取ったら

public class filename{

public static void main(String[] args){

System.out.println("Hello world");

}

}

と出力するプログラムをjurinaと名付けるとする

cat filename.jurina

int i=1;

print i;

public class filename{

public static void main(String[] args){

int i=1;

System.out.println(i);

}

}

ものすごく単純なPythonっぽい独自言語

Javaに置き換えて出力するだけのJava プリプロセッサである

さて、このJurina言語JAVA VMで動くと思うか?

   

言いたいことVMを解析して、OPコードを吐くコンパイラを作ろうとしていたが

そもそもコンパイラが作れるならJavaソースコードを吐いてしまえば良いことに気がついた

2021-05-18

javaString a = new java.util.Scanner(System.in).nextLine();」

pytnon「a =input()」

java冗長すぎかよ糞言語だな

2021-05-04

anond:20210426025101

public class Main {

public static void main(String args[]) {

System.out.println("ア゙ァーッ ォギョヴァアア!!");

}

}

2021-04-23

anond:20210423131826

愚直にやるとしたらstring化して"."でsplitしてint arrayを作って

ループindex小さい方から比較する方法かなあ

JavaScript簡単な例を書いてみた

(ちょっと直した)

https://jsfiddle.net/gea5nm2f/

https://jsfiddle.net/1y5ewcu7/

実際にはバージョンクラスとか比較用のヘルパーみたいなのは

言語で利用しやす状態になってることは少なくないかな~

2021-03-28

[]2021年3月27日土曜日増田

時間記事文字数文字数平均文字数中央値
009610833112.841.5
01717854110.647
02456951154.567
03263787145.770.5
04143140224.352
05171924113.278
0619152180.154
07444749107.943
08477325155.946
09758094107.943
1088863498.141.5
11528150156.753
128110264126.741
1380706388.338
1489803590.342
15717499105.637
1611613466116.155.5
171871707491.343
1810513272126.465
1965584589.941
201331233192.740
2114615193104.143.5
2214016781119.942
2313719912145.353
1日1944219697113.046

本日の急増単語 ()内の数字単語が含まれ記事

池内(7), afa(3), リアルフォース(3), 赤潮(3), ディスクシステム(3), String(3), 5d2(3), c65(3), 古谷(3), c73(3), 398円(3), 聖火(3), ひろゆき(13), ぶつかり(10), 五輪(17), ぶつかっ(12), 美し(7), ファミマ(5), 意図的(6), ウマ(5), 飲める(5), シン(7), 女性差別(11), 明治(7), 転換(6), お菓子(10), 本屋(6), キーボード(7), 明るい(6), irasutoya(8), 思いつく(5), 素人(20), 英語(28), yahoo(13), c(11), 現象(12), 乗る(10), 狙っ(9), 集まる(9), 潰し(9), オリンピック(12)

頻出トラックバック先 ()内の数字は被トラックバック件数

最近ネット見ていると「素人時代」が終わったんだなと悲しい /20210326175758(35), ■全然使われないダースかい単位 /20210327082442(14), ■英語を喋るしか能がない人 /20210327201219(12), ■名前みたいな姓ってどんなのがある? /20210326143830(12), ■癌で死ぬ男と分子標的薬(抗がん剤) /20210326173438(11), ■初代ゼルダの伝説は最高のゲームである。 /20210327082514(11), ■日に日にサウナ雰囲気が悪くなっている /20210326160158(10), ■ブクマカは自らが4610であることを自覚せよ /20210326185842(9), ■いいねRTを欲しがる創作界隈の人に思うこと /20210327160215(8), ■東京はなにもかにもが高い /20210327090622(7), ■はてな冷笑系クラスタたち一覧 /20210327175320(7), ■ジェンダーフリーの50年後 /20210327111830(7), ■ガチ人生変えたい どうしたらいいの? /20210327001758(7), ■女性にわざとぶつかりにくる男について /20210327210556(6), ■#werise という反コロナイベントが行われる /20210326191647(6), ■金玉吸って!!😠 /20210327071218(6), ■東山動物園でも行くか /20210327123938(6), ■ /20210327173520(6), ■本末転倒感のする行動 /20210327102411(5), ■アンチフェミとは何か /20210327000305(5), ■昔大好きだったダイの大冒険リメイクアニメについて思うこと。 /20210327202353(5), ■オリンピックパートナー≒不買推奨企業リスト になったよね /20210327124416(5), ■フェミニズムってそもそも弱者男性を想定してるのかしら? /20210327000111(5), ■多様性大事っていう人は差別主義者だよね /20210327170749(5), ■凡人がはてな匿名ダイアリーという村を見つけました。 /20210325224726(5), ■全員Amazonハチャメチャ配達員みたいになればいいのに /20210326182722(5), ■彼女がいないと言い張る男 /20210326130831(5), ■キモいオタクツイッターアカウント絶対書いてること /20210327024609(5), ■小汚い爺が歩きタバコしてた /20210327093929(5)

2021-03-27

anond:20210327213156

きょうのC#勉強LINQのSortBy()で止まった

参考書かにアルファベット順って呑気に書いてあるけどこれいわゆるASCII順だよねと思って

(彼らが揃いも揃ってアルファベットだけで構成された単語比較例だけしか出さず、数字開始あり・空白ありの文字列比較をさせないのは怠慢だと思う)

比較に使ってるメソッドなんだろうと思って、String.CompareToからString.Compareに行ってCompareOptionsを見て、

.NET での文字列の比較に関するベスト プラクティス | Microsoft Docs

うわー、うん、なんか見なかったことにしておく

もし俺が参考書書くときアルファベットだけで構成された単語比較例だけ出すことにしようと思う

anond:20210327222756

まぁstringはSystem.Stringエイリアスからstringのほうがいい。

intはSystem.Int32のエイリアスなんだけど、ふつーintを使って、Int32なんて使わないでしょ。

boolとSystem.Booleanも同じかな。

https://stackoverflow.com/questions/7074/what-is-the-difference-between-string-and-string-in-c

エイリアスなんで、パフォーマンスには全く関係いから、ぶっちゃけなんだっていいと思う。

anond:20210327213156

ずっと思ってるんだけど、List<string> って List<String> じゃ駄目なの?

2021-03-20

anond:20210320174526

7と8。

技術的なところが気になる人はこれだけ読んでくれたらいい

7. アプリケーションコード自体はRocketChatのものとほぼ同じ

最後技術的な観点からエアレペルソナが純国産ではないということを指摘する。

結論から先に述べると、このアプリは純国産ではない。

RocketChatという海外で開発されたOSSチャットアプリフォーク、改変したもののよう。

ttps://github.com/RocketChat/Rocket.Chat.ReactNative

ttps://rocket.chat

フォーク元はバリバリ多国籍外資である。(RocketChat自体問題のないアプリであり、このエアレペルソナとはフォーク関係を超える関係はないと思われる)

冒頭のこの部分に関してである

ttps://play.google.com/store/apps/details?id=chat.airlex.reactnative

Google Playで公開されているエアレペルソナAndroidアプリリバースエンジニアリングして調べてみた。

ちなみに、エアレペルソナには利用規約のようなものは見当たらず、リバースエンジニアリング禁止条項も無いようだった。

ttps://apps.evozi.com/apk-downloader/

ttps://github.com/pxb1988/dex2jar

この辺を使ってapkダウンロードし、apk解凍し、chat.airlex.reactnative/classes.dexjar fileに変換した。

classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダパッケージが見つかる。

このパッケージ内のファイル(.classクラス)がエアレペルソナの処理を行うもののようである

特徴的なクラスにEjsonという名前のものがある。

このクラスJadを使い、デコンパイルしてみた。その結果が以下である

ttp://www.javadecompilers.com

ちなみにここからapkアップロードするとdex2jarをしなくてもJavaソースコードにまでデコンパイルしてくれた。便利。

package chat.airlex.reactnative;

import android.content.Context;
import com.ammarahmed.mmkv.SecureKeystore;
import com.facebook.react.bridge.ReactApplicationContext;
import com.tencent.mmkv.MMKV;

public class Ejson {
    private String TOKEN_KEY = "reactnativemeteor_usertoken-";
    String cardId;
    String host;
    String messageId;
    String messageType;
    /* access modifiers changed from: private */
    public MMKV mmkv;
    String msg;
    String notificationType;
    String rid;
    Sender sender;
    String senderName;
    String type;

    public Ejson() {
        ReactApplicationContext reactApplicationContext = CustomPushNotification.reactApplicationContext;
        if (reactApplicationContext != null) {
            MMKV.initialize((Context) reactApplicationContext);
            new SecureKeystore(reactApplicationContext).getSecureKey(C0617Utils.toHex("com.MMKV.default"), new RNCallback() {
                public void invoke(Object... objArr) {
                    if (objArr[0] == null) {
                        MMKV unused = Ejson.this.mmkv = MMKV.mmkvWithID("default", 1, objArr[1]);
                    }
                }
            });
        }
    }

    public String getAvatarUri() {
        if (this.type == null) {
            return null;
        }
        return serverURL() + "/avatar/" + this.sender._id + "?rc_token=" + token() + "&amp;amp;rc_uid=" + userId();
    }

    public String token() {
        String userId = userId();
        MMKV mmkv2 = this.mmkv;
        return (mmkv2 == null || userId == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(userId));
    }

    public String userId() {
        String serverURL = serverURL();
        MMKV mmkv2 = this.mmkv;
        return (mmkv2 == null || serverURL == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(serverURL));
    }

    public String privateKey() {
        String serverURL = serverURL();
        MMKV mmkv2 = this.mmkv;
        if (mmkv2 == null || serverURL == null) {
            return null;
        }
        return mmkv2.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY"));
    }

    public String serverURL() {
        String str = this.host;
        return (str == null || !str.endsWith("/")) ? str : str.substring(0, str.length() - 1);
    }

    public class Sender {
        String _id;
        String username;

        public Sender() {
        }
    }
}

フィールド名を見てみると、cardId, host, messageId, messageType, mmkv, msg, notificationType, rid, sender, senderName, typeが存在する。

メソッドには、getAvaterUri、token、userId、privateKey、severURLが存在する。

ところで、RocketChatというOSSチャットアプリ存在する。

ttps://rocket.chat

そのRoketChatのAndroid実装の中に同名のEjsonというクラス存在する。

ttps://github.com/RocketChat/Rocket.Chat.ReactNative

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/android/app/src/play/java/chat/rocket/reactnative/Ejson.java

見比べてみると、フィールドにcardIdが追加されている以外はフィールドメソッド名、そしてその処理の内容まで一致している。

他にもReplyBroadcastなど、同様のクラスがエアレペルソナに見つかる。

以上のことからエアレペルソナはRocketChatをフォークして、パッケージ名を変えて作られたチャットアプリであり、開発の大部分はRocketChat社の努力と多数のOSSコントリビュータによってなされたものであると思われる。

これを純国産日本製と呼ぶには大分無理がある気がする。

そもそもこのOSS時代に純だの何だの言っている時点で怪しい。

8. OSSライセンスに関して

さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである

RocketChatのOSSライセンスMITライセンスである

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE

MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。

現状エアレペルソナログインできておらず(2要素認証コード送信されないといった問題が起きている模様)、使用している各OSSライセンス表示が適切に行われているかまでは調べられていない。

2021-03-04

javascriptに詳しい人、教えてくれぇええ~~

ツクールゲーム作ってみたくてプラグイン見てるんだが

DWindow.jsっていうののプログラムの流れが分からんのだ。

部分的抜粋しているが、

        if (arguments.length &lt; 2) min = -Infinity;
        if (arguments.length &lt; 3) max = Infinity;
        return (parseInt(value, 10) || 0).clamp(min, max);

これがさっっっぱり分からん。Infinityは何処から出てきた?

10か0かっていうのも、窓の数は最大10って書いてあったが、それが問題なのか?

min,maxはどこから来たんだ…。

やりたいのが、これと同じように「変数」の値を設定するとして、

その変数には配列を入れたいと思っているんだ。

配列ループして色々確認したいのだが、そもそも配列はどうやってやるん?となってる。

getParamNumber配列はできるのか…?

Numberだけでなく、String配列も使う予定だ。うーーーーーーーーーーーん。

javascript勉強サイト確認したら分かるものなのか?

もっとソース貼ろうとしたら、匿名ダイアリーに怒られたので載せられん…。

すまんが、詳しい人教えてくれ。

2021-01-20

anond:20210120180109

山括弧stringスラッシュ山括弧閉じでもいいしstyleでfont-weight: boldでもいい

2021-01-15

anond:20210115195322

やーい、お前んち、String

(この構文一度使ってみたかった)

2020-12-23

anond:20201223100242

createPassword = (n) => n==0 ? "" : String.fromCharCode(33+Math.floor(Math.random()*93)) + createPassword(n-1);
console.log( createPassword(8) );

2020-12-09

配列操作するメソッドの書き方の正解がわからない

例えば、引数配列を受け取って要素を足すメソッドとき

以下のパターンがある

どれが正解かわからない

引数配列をそのまま操作して戻り値を返さなパターン

private void addValueToArray(String[] array) {

 array.add("foo");

}

// 呼び出し

addValueToArray(array);

// この後そのままarrayを使う

String bar = array[0];

引数配列をそのまま操作して戻り値を返すパターン

private String[ ] addValueToArray(String[] array) {

 array.add("foo");

 return array;

}

// 呼び出し

String[] newArray = addValueToArray(array);

// この後はnewArrayを使う

String bar = newArray[0];

新しい配列を作って返すパターン

private String[ ] addValueToArray(String[] array) {

 String[] resultArray = array;

 resultArray.add("foo");

 return resultArray;

}

// 呼び出し

String[] newArray = addValueToArray(array);

// この後はnewArrayを使う

String bar = newArray[0];

2020-11-15

anond:20201115004233

名前付き引数という仕組みはこの問題をかなり筋良く解決しているように思う。

例えばSwift

func set(hoge: Int)

を呼び出す時は

obj.set(hoge: 42)

と書く。

メソッドオーバーロード名前単位可能なので、func set(fuga: Int)も定義できる。

Swiftアクセサメソッドなんて書くことはないというのはともかく。(例なので)

名前付き引数があるとかなり関数命名が変わり、hogeFromFuga(int fuga)やfooWithBar(string bar)が単にhoge(piyo: Int)やfoo(bar: String)になる。

2020-11-02

anond:20201030201448

最近ブチ切れたコードの一部

public virtual class DataInfo {
    public Integer p;
    public Integer c;
    public Integer r;
    public Integer v;
    public String name;
    public DateTime time;
    // ...
}

public class CellInfo extends DataInfo {
    public String stl;
    public Integer cntl;
    public String[] lines;
    // ...
}

public class FormInfo extends CellInfo {
    public Integer err;
    public String org;
    public String mod;
    public String type;
    public Integer size;
    public Integer step;
    // ....
}

2020-09-27

anond:20200927035510

言語によると思う

javaなら普通にオブジェクトEnum継承したインスタンスになるからその分メモリ使うし、enum内部で結局String持ってる(コンパイラStringEnumの子クラスコンストラクタに渡す)からStringの方がリソース無駄にならない

インスタンス単一にする意味はあるから結局enumの方が好ましいだろうけど)

Cとかは実質intだからStringにするのは無駄だろうな

anond:20200927003907

enumをただの単一インスタンス確約されたキーオジェクトしか使ってないの見ると悲しくなるよね

そんな用途しか使わないならstaticで宣言したStringでいいじゃねぇかってなる

ストラテジーパターン的にinterface貼って使うならenumも便利だなと思うけど

2020-09-01

仮面ライダークウガ最終回名言最初セリフだけエンジニア

「QAに聞いたんですけど、あのバグ、やっぱまだ直ってませんでした。だから、狙う時は“ここ”をお願いします」

五代……」

「いやもちろん、万が一、俺が“究極の闇をもたらす存在”になっちゃったらですけどね」

「……。こんな寄り道はさせたくなかった」

「え?」

「君には……冒険だけしていて欲しかった」

「……」

「ここまで君を付き合わせてしまって……」

ありがとうございました」

「……?」

「俺、よかったと思ってますだって一条さんと会えたから」

五代……」

「じゃあ、見てて下さい。俺の――変身」

>> java.lang.NoSuchMethodException: com.laurens.Main.main([Ljava.lang.String;)

    at java.lang.Class.getMethod(Class.java:1786)

    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)


台詞引用元

https://w.atwiki.jp/aniwotawiki/pages/9479.html

ログイン ユーザー登録
ようこそ ゲスト さん