🏠️Top Page

🖊️おもしろき こともなき世をおもしろく 住みなすものは 心なりけり.

⏩️人って変なもので何もしないのも辛いだと思うですよ.

おはようございます.「人って変なもので何もしないのも辛いだと思うですよ」、ぷーになって一ヶ月まだ2週間とちょっとだけど、お金にもならないのに何かコードを書いたりしている.これをせずに何もしない状態になると漠然とした将来への不安に頭の中がいっぱいになるのではないかと.

メンタルが弱い強い関係なく何もしないは、結構辛いことだと思います.一週間ぐらいなら全然良いかと思うけど、何もしないでお金もなければ多分メンタル的に不安になるものだと思います.

因みにお金は無いことはないだけども、現金保有比率が限りなく低いです、でも投資しているものを現金化するのは違うかなと思っています.限界まで投資を現金化しないでいたい.

そういう訳で今回は早急に転職したいのだけど昨今のAIの進化によって自分の仕事がこれからもあるのだろうかという不安があります.米国ではAIによって仕事に就けない人が増えているそうです.今の所、AIで作ったものはプロトタイプぐらいのものしか出来ないけど、これが徐々に良いものがAIで作れるようになれば人材は要らなくなるじゃないかと.

先日、この業界で働きたいと書いたけども実際将来の不安はあります.それは技術的なことではなくAIの脅威に他ならないですねー.

皆さんはAIの脅威感じていますか?(皆さんのご意見を匿名一言コメントから宜しくです)

明日へ続く

⏩️コードを貼るだけで予約機能が追加するやつを提供?.

おはようございます.コードを貼るだけでサイトに予約機能が追加するやつを提供するか検討している、機能は全て出来上がった感じなのだけど、さてこれどうやって収益化するかという問題があるのだけど、その答えがまだ出ていない.

元々は広告を貼れると考えてたのだけど、今の仕様だと広告が表示されるのかが微妙.

予約フォームに遷移するときに、ドメインチェックをしていて参照元からちゃんと来たのかを確認しているので普通に訪問しても表示されない仕組みになっている、なので広告掲載が難しいのではないかと思っています.

広告掲載のコードがどういう動きをするのか、分からないけど微妙だなと...

なので、リリースするかを今悩んでいます、もともと予約サービスって競合他社なので自分がリリースしても、それほど使われないだろうなと言う印象です.

使用されると後戻り出来ないだよねー.いきなり停止は出来ないので....ね.

明日へ続く

⏩️制限付きのクロンを無限寿限無にする方法改正版

おはようございます.以前作ったコードを改修して、いまの自分が書いたらどうなるのだろうかと思って書いたコードをQiitaGithubにアップしました.書いてみて思ったのは、やはりコードは書けば書くほど進化していくのだなという事.

そして思うのはAIにはこのコードは今の所書けないような気がしています.典型的なコードでもなく洗練すぎたコードでもないので、書けそうにない.見る人がみるとこれは人が書いたコードだと分かるかなと思います.

そういうのがコレからは人が書いたコードというお墨付きを貰えるのではないかと思います.なので、ちょっと完璧なコードではないコードを書いて行こうと思います.仕事ではAIを使用することが今後多くなると思うけど、まだ次の職に付いていないので毎日コードを精進のために書いていきます.

過去記事はこちら

https://zip358.com/2022/10/12/%e5%88%b6%e9%99%90%e4%bb%98%e3%81%8d%e3%81%ae%e3%82%af%e3%83%ad%e3%83%b3%e3%82%92%e7%84%a1%e9%99%90%e5%af%bf%e9%99%90%e7%84%a1%e3%81%ab%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%e3%80%82-php-%e7%84%a1.html

で、今回書いたソースコードはこちらになります.

<?php
class CronExpansion
{
    private $filepath = 'crontab.json';
    private $cronTabs = null;

    public function __construct()
    {
        $fileData = file_get_contents($this->filepath);
        $cronTabData = json_decode($fileData);
        $this->cronTabs =  !json_last_error() ? (object)$cronTabData : (object)[];
        return $this;
    }

    public function run(): object
    {
        $datetime = new DateTime();
        $dateData = explode(',', $datetime->format('m,d,H,i,w'));
        foreach ($this->cronTabs as $cronTab) {
            $i = 0;
            $flg = true;
            $command = null;
            $cronTabDatas = get_object_vars($cronTab);
            if (count($cronTabDatas) === 6) {
                foreach ($cronTabDatas as $key => $val) {
                    if ($flg) {
                        switch ($key) {
                            case 'command':
                                $command =  $val;
                                break;
                            case 'w':
                                if (!(int)$val[(int)$dateData[$i]]) {
                                    $flg = false;
                                    continue;
                                }
                                break;
                            default:
                                if (preg_match('/^\*\/[0-9]{1,2}$/u', $val)) {
                                    if (((int)$dateData[$i] % ((int)str_replace('*/', '', $val))) > 0) {
                                        $flg = false;
                                        continue;
                                    }
                                } elseif (preg_match('/^\*$/u', $val)) {
                                } elseif ((int)$dateData[$i] !== (int)$val) {
                                    $flg = false;
                                    continue;
                                }
                                break;
                        }
                    }
                    $i++;
                }
                if ($flg) {
                    //echo $command;
                    exec($command . " > /dev/null &");
                }
            }
        }
        return $this;
    }
}
(new CronExpansion)->run();

明日へ続く

⏩️日本の市場だけで勝負しなくても海外に向けて発信?...構想

おはようございます.日本の市場だけで勝負しなくても海外に向けて発信することも良いじゃないかと思えてきたので、このブログも海外からの訪問者は英語で表示するように対応しようかなと思っています.

今までの記事を人工知能を使用して英語に書き換えてもらう感じにできるじゃないかなと思っています.英語用の記事にはリンクや埋め込みを排除した形にすればそれほど難しくないように思う.

一つ問題はコンテキスト.コンテキストが大き過ぎると翻訳がイマイチになりそうな予感がしています.それ以外はちょっととろいローカルAIですが、何とかなりそうな予感が!!

原理はこんな感じサーバー側のAPIに記事の問い合わせを行い、タイトルと本文をレスポンスしてもらう.その後、ローカルで英語に変換したものをAPIサーバーにポストする.あとはワードプレスのFunction.phpで海外訪問者だけ英語で表示する処理を埋め込めばOKではという感じかな.

ローカルサーバーのとろい人工知能では、15分に1記事を英語記事に翻訳するのが精一杯なので、全記事を翻訳するには数ヶ月掛かりそうな予感するけど、やってみる価値はあるかもと思っています.

本当は人工知能がサクサク動くサーバー構築して、公開するのが良い方法なんだろうけどそうすると電源を入れっぱなしにしなくてはならないのでちょっと今は困るかな.試してみたいけどね.

追伸:まだ、翻訳できるか試していません😔

明日へ続く

⏩️相手が自分のことを知っていて自分は知らない事が多いパターン

おはようございます.面識がないけど自分の場合はブログやXで発信しているので、タイトルの状況が出来やすいそしてイメージが出会う前から作られていたりしてたりという場面がある、これは良いこともあれば悪いこともある.

自分の文章には、あまり感情が乗らない気がしていて、どちらかと言えば冷徹になりやすいじゃないか思っている、定性的な文章を書ける人もいるけど自分の文章はどちらかと言えば機械的なそんなイメージになっているのかと自分は思っています.

自分は喋るより文章を書くほうが人に物事を伝えやすい、それぐらい話すとまとまりがない話になります、また緊張スイッチがはいると増々話がまとまりがなくなるので、この頃は”だんまりを決め込む”でいる人になっています.

ただ、同一の知識持っている人や考えを持っている人とは話すのは好きなんですけど話すと止まらなくなるので、あまり喋らないように気をつけています.

そんな訳でネットで発信していると会うまえに自分というイメージが出来上がっている人も中にはいるという話でした.

明日へ続く

⏩️勇猛精進(ゆうもうしょうじん)マシマシですね.

おはようございます.テック業界から引退しようかなとか思っていたけど「Bars of My Life」を聞いて踏ん張ってみようと思いました.Dさんみたいに学歴が良い(早稲田大学)訳では無いけど、そこじゃないかなと.

ここからが勝負と考えて挑戦してみようと考え直しました.

毎日、何かしらコードを書いている大体のことは表面上は理解していると思います.技術は知っているけど言葉(IT用語)をあまり知っていないので面接時に言葉が出てこない問題がある.そこを埋めて話せば何とかなるような気がしています.

ともあれ、テック業界にしがみついてでも現役であと10年ぐらい働いていこうと思っています.ひとつのリリック(詩)で考え直したりする訳ですから音楽や映画には力があると思います.

という事で転職活動頑張ります!

明日へ続く

⏩️React Native + SupabaseでTodoアプリ開発コピペ🙅

おはようございます.React Native + SupabaseでTodoアプリ開発を彼のソース・コードを参考にしてコードを書きました.コードの修正版をUPします.コード量がブログに記載するには多いので今回はコードだけをUPしますのでライブラリのインストールなどはご自身でインストールしてください.

import React, { useState } from 'react';
import { Alert, StyleSheet, View, TextInput, Button } from 'react-native';
import { supabase } from '../lib/supabase';

export default function Auth() {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [loading, setLoading] = useState(false);

  async function signInWithEmail() {
    setLoading(true);
    const { error } = await supabase.auth.signInWithPassword({ email, password });
    if (error) Alert.alert(error.message);
    setLoading(false);
  }

  async function signUpWithEmail() {
    setLoading(true);
    const { error } = await supabase.auth.signUp({ email, password });
    if (error) Alert.alert(error.message);
    setLoading(false);
  }

  return (
    <View style={styles.container}>
      <TextInput style={styles.inputContainer} onChangeText={setEmail} value={email} placeholder="email@address.com" autoCapitalize="none" placeholderTextColor="#8B949E" />
      <TextInput style={styles.inputContainer} onChangeText={setPassword} value={password} secureTextEntry={true} placeholder="Password" placeholderTextColor="#8B949E" autoCapitalize="none" />
      <Button title="Sign in" disabled={loading} onPress={signInWithEmail} />
      <View style={{ marginTop: 10 }}>
        <Button title="Sign up" disabled={loading} onPress={signUpWithEmail} />
      </View>
    </View>
  );
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#7a7c80',
    padding: 20,
    paddingTop: 60,
  },
  inputContainer: {
    flexDirection: 'row',
    marginBottom: 20,
    backgroundColor: '#7a7c80',
    borderRadius: 12,
    paddingHorizontal: 10,
    paddingVertical: 8,
    alignItems: 'center',
    shadowColor: '#000',
    shadowOpacity: 0.2,
    shadowRadius: 6,
    elevation: 5,
    color:'#fff',
  },
});
import React, { useState, useEffect, createContext, useContext, PropsWithChildren } from 'react';
import { Session } from '@supabase/supabase-js';
import { supabase } from '../lib/supabase';

type AuthContextType = { session: Session | null; };

const AuthContext = createContext<AuthContextType>({ session: null });

export const AuthProvider = ({ children }: PropsWithChildren) => {
  const [session, setSession] = useState<Session | null>(null);

  useEffect(() => {
    supabase.auth.getSession().then(({ data: { session } }) => {
      setSession(session);
    });

    const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => {
      setSession(session);
    });

    return () => subscription.unsubscribe();
  }, []);

  return <AuthContext.Provider value={{ session }}>{children}</AuthContext.Provider>;
};

export const useAuth = () => useContext(AuthContext);
import React, { useState, useEffect } from 'react';
import { View, TextInput, Button, FlatList, Text, TouchableOpacity, StyleSheet } from 'react-native';
import { supabase } from '../lib/supabase';
import { useAuth } from './AuthProvider';

type Todo = { id: number; task: string; is_complete: boolean; };

export default function TodoList() {
  const { session } = useAuth();
  const [todos, setTodos] = useState<Todo[]>([]);
  const [newTask, setNewTask] = useState('');

  useEffect(() => {
    fetchTodos();
  }, []);

  const fetchTodos = async () => {
    const { data, error } = await supabase.from('todos').select('*').order('id');
    if (error) console.log('error', error);
    else setTodos(data as Todo[]);
  };

  const addTodo = async () => {
    if (!newTask.trim()) return;
    const { data, error } = await supabase.from('todos').insert({ task: newTask, user_id: session!.user.id }).select();
    if (error) console.log('error', error);
    else setTodos([...todos, data[0]]);
    setNewTask('');
  };

  const toggleComplete = async (id: number, is_complete: boolean) => {
    const { error } = await supabase.from('todos').update({ is_complete: !is_complete }).match({ id });
    if (error) console.log('error', error);
    else setTodos(todos.map(todo => todo.id === id ? { ...todo, is_complete: !is_complete } : todo));
  };

  const deleteTodo = async (id: number) => {
    const { error } = await supabase.from('todos').delete().match({ id });
    if (error) console.log('error', error);
    else setTodos(todos.filter(todo => todo.id !== id));
  };

  return (
    <View style={styles.container}>
      <View style={styles.inputContainer}>
        <TextInput style={styles.input} onChangeText={setNewTask} value={newTask} placeholder="Add a new task" placeholderTextColor="#8B949E" />
        <Button title="Add" onPress={addTodo} />
      </View>
      <FlatList
        data={todos}
        keyExtractor={(item) => item.id.toString()}
        renderItem={({ item }) => (
          <View style={styles.todoItem}>
            <TouchableOpacity onPress={() => toggleComplete(item.id, item.is_complete)}>
              <Text style={item.is_complete ? styles.completed : {color:'#fff'}}>{item.task}</Text>
            </TouchableOpacity>
            <Button title="Delete" onPress={() => deleteTodo(item.id)} color="red" />
          </View>
        )}
      />
      <Button title="Sign Out" onPress={() => supabase.auth.signOut()} />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#7a7c80', 
    padding: 20,
    paddingTop: 60,
  },
  inputContainer: {
    flexDirection: 'row',
    marginBottom: 20,
    backgroundColor: '#7a7c80',
    borderRadius: 12,
    paddingHorizontal: 10,
    paddingVertical: 8,
    alignItems: 'center',
    shadowColor: '#000',
    shadowOpacity: 0.2,
    shadowRadius: 6,
    elevation: 5,
    color:'#fff',
  },
  input: {
    flex: 1,
    color: '#fff',
    fontSize: 16,
    marginRight: 8,
  },
  todoItem: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    backgroundColor: '#7a7c80',
    padding: 14,
    borderRadius: 10,
    marginBottom: 10,
    shadowColor: '#000',
    shadowOpacity: 0.15,
    shadowOffset: { width: 0, height: 2 },
    shadowRadius: 4,
    elevation: 3,
  },
  completed: {
    textDecorationLine: 'line-through',
    color: '#58A6FF',
    opacity: 0.6,
  },
});
import 'react-native-url-polyfill/auto';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { createClient } from '@supabase/supabase-js';
import { SUPABASE_URL, SUPABASE_ANON_KEY } from '@env';

const supabaseUrl = SUPABASE_URL;
const supabaseAnonKey = SUPABASE_ANON_KEY;

export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    storage: AsyncStorage,
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  },
});
declare module '@env' {
  export const SUPABASE_URL: string;
  export const SUPABASE_ANON_KEY: string;
}
module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: [
      [
        'module:react-native-dotenv',
        {
          moduleName: '@env',
          path: '.env',
          safe: false,
          allowUndefined: true,
        },
      ],
    ],
  };
};
SUPABASE_URL=先ほど控えたURL
SUPABASE_ANON_KEY=先ほど控えたanonキー

明日へ続く

⏩️IQが中央値以下は身近にいるだよね...知らんけんど.

おはようございます.無作為に人を100人集めたら50%のひとがIQが中央値以下になるだよ、知らんけんどという事で学校などはそういう環境にあります、特に義務教育期間中の公立はそんな感じになりますよね.

社会に出るとそうならなくなるので、交わる機会も少しずつ少しずつ減っていくと思いますがそういう事らしいです.これはちょっと衝撃的な話だと思うかと意味わかんない人もいるかもですが...

そういう事で情報商材には気をつけて下さいませ、なぜ情報商材を買う人なんてと思う方はきっと賢いでしょうけど買う人いるですよ.世の中にはそういう事になっているらしいので....

中央値と平均は違います.そこら辺は高校時代か中学生に習うだと思うので割愛しますね.わからない人の為にスクリーンショットを取りました.

AIのIQは年々上がっていますが人のIQはそこまで上がっていないらしいです.識字率とIQは関係しているという事を聞いたことはありますが、本当かどうか分かりません.恐らく質問が読めるかどうかという事が関係してくるだと思うけど...

ともあれ、中央値以下のIQの人も50%いるという事も念頭に置き日々行動したほうが良いかもです.難しい言葉で表現しないことも大事かもですね.

追伸:ちょっち乱暴な話でした.そして頭じゃないだよということも言いたい.

明日へ続く

⏩️観ずになりそうな映画、その壱その弐

おはようございます.先日は久しぶりに温かな陽気でしたね、今日(2025-11-07)もそんな陽気になりそうです.さて、これを書いているのは金曜日です、いつもなら映画を午前中に観に行っているものですけど、映画を観ずにウォーキングする感じです.

尚、本日観ようと思っていた映画「プレデター:バットランド」は見送りました、おそらく観に行かないでネトフリか何かで観れるようになれば観ようかなぐらいの感じです.

今年観る映画はあと二本ぐらいか三本ぐらいだと思います、「果てしなきスカーレット」、「アバター」ぐらいだと思います、もしかしたら追加で一本観るかもですが、そんな感じの予定になっています.そして今まで金曜日に観ていたのですが、経費削減のため、火曜日に観に行くことになります.

鑑賞ポイントが一応6ポイント貯まっているので、今年か来年の2月までに使わないと何だかポイントが失効するらしいので、必ず観に行くつもりではいますが、今のところ何を観るかは決めていない状態です.尚、TOHOシネマズのポイント制度が廃止されるようで6本観たら1本タダというのが無くなるそうです.

結構残念な感じがします.これからはどれぐらい映画を観ているかで割引されるそうです.

明日へ続く

⏩️求職者マイページホーム(ハローワーク)のバーコードは何の種類を使用しているの?

おはようございます.求職者マイページホーム(ハローワーク)のバーコードは何の種類を使用しているの?とAIに投げかけてもぜんぜん違うものをあたかもそうであるように回答してくれるので、AIにお願いしてまずはPython言語を使用してバーコードの種類を把握してみました.

下記のコードを実行することでバーコードの種類が把握可能です、次に種類がcodabar(NW-7)だと分かったので本題のバーコードを出力するコードをReactとリアクトのライブラリを使用して作りました.

import pyzxing

reader = pyzxing.BarCodeReader()
result = reader.decode("image.png")

if result:
    for item in result:
        print("フォーマット:", item.get("format"))
        print("内容:", item.get("raw"))
else:
    print("バーコードが検出されませんでした。")

因みに何故こんな事をしたのかと言うと田舎のハローワークでは求職者マイページに記載されている個人を識別するQRコードを読み取る機械がないので、自ずとハローワークカード(バーコードが印字されているカード)が必要になるのだけど、この頃はハローワークカードは貰えない.その代わりにA4のペラガミにバーコードや個人名が印字されたものを支給される.

これはとても不便、特に持ち運びに不便で尚且つ、A4サイズなので財布などに入れる場合は折りたたまないといけない、よってバーコードを読み取ってもらうには折りたたんだ紙を開いた状態にしないといけない、まさに面倒.

要するに自分がハローワークの窓口でまごまごしないために作ったサービスです.そのうち求職者マイページもスマホ対応になると思うけど、なかなか今頃ハローワークで就職活動する人も減ってきているみたいで、ハローワークの中の開発者もやる気がなさそうです・・・.その現れがPDFに現れています(笑).

https://taoka-toshiaki.com/hellowork {こちらサービスリンクです、PDFの個人識別番号だけを記入下さい(ハイフンはいらないです)}

明日へ続く