Discuss Scratch

Atridott
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

ローカル変数に _ をつけるのは似たような考えを見ますし、良いと思います。ステージで表示するときのような「スプライト名:変数」になるとわかりやすいかもしれませんが…
akinarin
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

先日はご迷惑をお掛けして、すみませんでした。
~~~~~~~~~~~~~~~~~~~~~~
代数的エフェクトを
継続モナドをC#で実装することで
C#でも使うことができるのではできないかと思い、やってみました。

クエリ式を使うことによってC#で継続モナドを簡単に書けるようにしています。
以下はMaybeモナドを代数的エフェクトで使ってみたものです。
最新版のC#で動作確認はしています。
(C# 9以降でないと動かないと思います)
(追記2023/1/29: プログラムを改善しました)
using System;
{
//maybeエフェクトのハンドラ
Maybe<int, string> maybe = new(){
None = new(resume => "数字に変換できない文字です")
};
Console.WriteLine(ParseAdd("34", "14", maybe).Run(x => x.ToString()));
Console.WriteLine(ParseAdd("34f", "14", maybe).Run(x => x.ToString()));
}

//文字列を数字に変える。
CC<int, T> Parse<T>(string str, Maybe<int, T> maybe) =>
int.TryParse(str, out var num) ? CC.Return<int, T>(num) : maybe.None;

//2つの文字列を数字に変えて足す
CC<int, T> ParseAdd<T>(string left, string right, Maybe<int, T> maybe) =>
from l in Parse<T>(left, maybe)
from r in Parse<T>(right, maybe)
select l + r;

public class Maybe<R, T> {
public required CC<R, T> None{ get; init; }
}

//継続モナドの実装
public record CC<R, T>(Func<Func<R, T>, T> Run) {
public CC<R2, T> Select<R2>(Func<R, R2> func) =>
new(resume => Run(x => resume(func(x))));
public CC<R2, T> SelectMany<R2>(Func<R, CC<R2, T>> func) =>
new(resume => Run(x => func(x).Run(y => resume(y))));
public CC<R3, T> SelectMany<R2, R3>(Func<R, CC<R2, T>> func,
Func<R, R2, R3> func2) =>
new(resume => Run(x => func(x).Run(y => resume(func2(x, y)))));
}

public static class CC{
public static CC<R, T> Return<R, T>(R value) => new(f => f(value));
}

Last edited by akinarin (Jan. 29, 2023 03:38:03)

kyokyoro
Scratcher
100+ posts

Scratch以外のプログラミング言語やってる人交流場

#2621
そのままページを取得してDOMからjsonを作成するしかないでしょう。
DOM解析はjsのほうがし易いので サーバーで取得→jsに渡すがベストかと。
kst_dx
Scratcher
8 posts

Scratch以外のプログラミング言語やってる人交流場

#2621:

PHPだとComposerとかのライブラリが必要になったり、環境に依存したりするので、JavaScriptのコードをおいておきます。

<script type="module">
    // 第一引数にユーザ名、第二引数に最大取得数
    const getUserActivity = async (user = 'griffpatch', max = 10000) => {
        const raw = await (
            await fetch(
                `https://scratch.mit.edu/messages/ajax/user-activity/?user=${user}&max=${max}`
            )
        ).text() // テキストデータとしてFetchで取得
        const html = new DOMParser().parseFromString(raw, 'text/html') // テキストをDOMに変換
        // li要素の中身を抽出して配列に戻す
        let result = []
        for (let item of html.querySelectorAll('li')) {
            item = item.querySelector('div')
            result.push({
                actor: item.querySelector('span.actor').textContent, // アクティビティをやった人みたいな感じでしょうか
                body: item.childNodes[2].data.trim(), // リミックスなどのアクティビティ内容
                href: item.querySelector('a').getAttribute('href'), // プロジェクトやスタジオのURL
                title: item.querySelector('a').textContent, // プロジェクトやスタジオのタイトル
                time: item.querySelector('span.time').textContent.trim() // タイムスタンプ
            })
        }
        return result // 結果を戻す
    }
    // この場合はmagicAhoさんのアクティビティを最大10000個取得するコードになります
    console.log(await getUserActivity('magicAho'))
</script>
<!-- (赤丸で囲まれているところがありますが、ScratchのフォーラムがJavaScriptのテンプレートリテラルに対応していないだけだと思うので安心して使って下さい) -->

こんな感じです。ちなみにTop-Level awaitを使ってるのでスクリプトタイプはmoduleにしています。
また、調べた感じだとfetchだと日本語、直リクエストだと英語で表示されていたりしたので挙動が不安定になる可能性が高いです。

お役に立てていたら幸いです。
suzumiyaharuhi99
Scratcher
5 posts

Scratch以外のプログラミング言語やってる人交流場

昔は垢無しでscratchしてたけどとあるscratchの本でHSPが紹介されてて面白そうだからって始めたらscratchに移植するほどハマった
akinarin
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

#2624のF#版をやってみました。
F#はコンピュテーション式があり、型推論が強くて快適ですね。
WriterモナドもどきとMaybeモナドを、代数的エフェクトもどきで使ってみました。
type Cont<'r, 't>(run: ('r -> 't) -> 't) =
member this.run = run

type ContBuilder() =
member __.Return(x) = Cont(fun resume -> resume(x))
member __.Bind<'a, 'b, 't>(m : Cont<'a, 't>, f: 'a -> Cont<'b, 't>) =
Cont(fun resume -> m.run(fun x -> f(x).run(resume)))
member __.ReturnFrom(x) = x

let cont = ContBuilder()

type Maybe<'a, 't> = {
none: Cont<'a, 't>
}

let maybeLift<'a, 't>(maybe: Maybe<'a, 't>)(op: Option<'a>) =
match op with
| Some x -> cont{ return x }
| None -> maybe.none

let safeDiv<'t> x y (maybe: Maybe<int, 't>) = cont{
if y = 0 then
return! maybe.none
else
return x / y
}

let runCont<'a> (cont: Cont<'a, 'a>) = cont.run(fun x -> x)

let rec each<'a, 't>(lst: List<'a>)(f: 'a -> Cont<unit, 'b>) =
match lst with
| x :: rem ->
cont {
do! f x
do! each rem f
}
| [] -> cont { return () }

type Writer<'t> = {
write: string -> Cont<unit, 't>
}

let earlyReturn<'a, 'b, 't>(body: ('a -> Cont<'b, 't>) -> Cont<'a, 't>) = Cont(fun resume -> body(fun x -> Cont(fun _ -> resume(x))).run(resume))

let runWriter<'a, 't>(f: Writer<'t> -> Cont<'a, 't>) =
let mutable output = ""
let writer = {write = fun x -> Cont(fun resume -> resume(output <- output + x)) }
cont{
let! v = f(writer)
return (v, output)
}

runWriter(fun writer -> earlyReturn <| fun ret -> cont{
let maybe = {
none = cont {
do! writer.write("0で除算しました");
return! ret ();
}
}
do! each([3; 2; 0; 5])(fun x -> cont{
let! a = safeDiv 10 x maybe
do! writer.write <| $"10 / {x} = {a}\n"
})
do! writer.write "success"
return ()
}).run(fun (_, s) -> printf "%s" s)
mitaku115
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

PythonをchatGPTに書かせてみたら、わかりやすいものを書いてくれた。
画像貼るのめんどいんでリンクで リンクはやらかしたので消去(すいませんでした)
参考にしたいと思ったんですが、
こういうのを間に受けるのはよくないんですかね?間違っているとかの観点で

Last edited by mitaku115 (Feb. 5, 2023 02:17:17)

inoking
Scratcher
1000+ posts

Scratch以外のプログラミング言語やってる人交流場

mitaku115 wrote:

こういうのを間に受けるのはよくないんですかね?間違っているとかの観点で
こういうニュースもありますので
ChatGPTによる回答をStack Overflowが一時的に禁止 大量のもっともらしいが不正確な回答に対処しきれず
に受けるのはよくないでしょう。
newmomizi_txt
Scratcher
1000+ posts

Scratch以外のプログラミング言語やってる人交流場

ChatGPTといえば、最近私はそれに競技プログラミングの問題を解かせる試みをしています。
試しにAtCoder Beginners ContestのB問題を適当に選んで解かせてみました。
1回目: int型の変数で計算させようとする(オーバーフローするため間違い)
2回目: int64_t型の変数で計算させようとする(やはりオーバーフローする)
3回目: GMPライブラリを使用し、巨大な数の計算を可能にすることで無理やり解く

ここで、「a ≡ p(mod n)かつb ≡ q(mod n)なら、ab ≡ pq(mod n)」ということを教える

4回目: これを使用し、模範解答に非常に近いプログラムを生成する。
ひっかけ問題には普通にひっかかりましたが、解くためのヒントさえ与えてあげれば正解までたどり着くことが出来ました。

機械翻訳についても同じことを誰かが言っていた気がしますが、
「AIにプログラミングを任せたとしても、それを正しいかどうか判断するためには人間のプログラミング能力が必要」
という結果になると思います。
akinarin
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

chatGPTのようなAIが発展していくことで、
将来的にプログラマという仕事やその一部がAIに置き換えられていくのではないかと思ったのですが、
どうだと思いますか?

複雑な論理を伴うプログラムだと、AIに書かせることは難しいかも知れませんが、
簡単なプログラムなら「AIに書かせて、それを人間が修正する」といった作業で出来てしまうような気がします。

僕は、プログラマは、殆ど自分の力でプログラムを書く必要が無くなり
少ない人員で、今よりも遥かに効率的にプログラミングが行われる世の中になると思います。
magicAho
Scratcher
1000+ posts

Scratch以外のプログラミング言語やってる人交流場

magicAho wrote:

僕は
・HTML
・JavaScript(少し)
しかできないです。
PHPもできるようになったーーーー
inoking
Scratcher
1000+ posts

Scratch以外のプログラミング言語やってる人交流場

akinarin wrote:

chatGPTのようなAIが発展していくことで、
将来的にプログラマという仕事やその一部がAIに置き換えられていくのではないかと思ったのですが、
どうだと思いますか?

複雑な論理を伴うプログラムだと、AIに書かせることは難しいかも知れませんが、
簡単なプログラムなら「AIに書かせて、それを人間が修正する」といった作業で出来てしまうような気がします。

僕は、プログラマは、殆ど自分の力でプログラムを書く必要が無くなり
少ない人員で、今よりも遥かに効率的にプログラミングが行われる世の中になると思います。
ChatGPT に限らず、ロボットが人間の仕事を奪うといったことを多くの人が危惧している訳ですが
結局その「修正」に手間暇がかかるので、なかなかその状況にはならないと私は見ています。
abee
Scratcher
1000+ posts

Scratch以外のプログラミング言語やってる人交流場

その一方、いままでAIにはできないと考えられていたことが、この数カ月で状況が大きく変わったこともあります。つまり、世の中の変化は滑らかに起こるだけではなく、何かをきっかけに急激に変わることもあるわけです。それに備えることは難しいですが、頭の隅に入れておくと良いかもしれません。
いずれにしても、ChatGPTやStable Diffusionのようなものはすでに存在しており、応用分野も広がっています。今後、AIが生成したものの検証や修正についての研究も進むでしょう。すでにプロンプトエンジニアリングという技術分野が立ち上がりつつあります。
henjii_
New Scratcher
3 posts

Scratch以外のプログラミング言語やってる人交流場

さっきこんな記事(newscratcherなのでリンク貼れませんでした)を見つけました。
「AIを使って書かれた文章か判断するAI」というのが作られていることには驚きです。

Last edited by henjii_ (Feb. 5, 2023 06:38:33)

Atridott
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

とある企画でClojureを触っているのですが、入力の仕方すらわからなくて詰みました。誰かわかりますか? clojure.java.io ( ᐛ ) ナニソレオイシーノ
Doctor_Fe
Scratcher
100+ posts

Scratch以外のプログラミング言語やってる人交流場

少し調べたら出てきました。
標準入力で受けた文字列をそのまま標準出力に送るコードを書いておきます。
(println (read-line))
kst_dx
Scratcher
8 posts

Scratch以外のプログラミング言語やってる人交流場

最近Denoでブログ等を作るのにハマっています。
開発体験もとても素晴らしいものです。

私はFreshというWebフレームワークを使っていますが、皆さんはどのようなWebフレームワークを使っておられますか?
また、自分で作った!という人はいますか?
08233280
Scratcher
19 posts

Scratch以外のプログラミング言語やってる人交流場

Github持ってる人
名前は言わんぞ?
プログラミング言語は、主に C# VBやってる。
だいたい、C#で終わらしてる。
kst_dx
Scratcher
8 posts

Scratch以外のプログラミング言語やってる人交流場

Last edited by kst_dx (Feb. 19, 2023 04:04:29)

akinarin
Scratcher
500+ posts

Scratch以外のプログラミング言語やってる人交流場

GitHubのcsharplang/meetings/working-groups/rolesにある
C#に実装されるかもしれない機能「roles」が面白かったです。

Scala3のextensionとかなり似ているような気がします。

C#の現在の拡張メソッドは、interfaceを後付けで実装することが出来ないので、
早く実装されて欲しいと思っています。

Last edited by akinarin (Feb. 19, 2023 09:27:06)

Powered by DjangoBB