Skip to content

ソフトウェアエンジニアの技術ブログ:Software engineer tech blog

随机应变 ABCD: Always Be Coding and … : хороший

ソフトウェアエンジニアの技術ブログ:Software engineer tech blog

Category: Laravel Login

Laravel Remember meの機能とは?

ログイン時のsessionの扱いについて見てみましょう。

### laravel session
login画面にアクセスすると、tokenに加え、laravel_sessionのcookieが付与されます。
– ログイン前

– ログイン後

### cookiの設定
app/config/session.php
-> デフォルトでは120分、ブラウザを閉じても保存されたまま
-> セッションが切れると、ユーザ認証は不可能になる

'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,

### Remember meにcheckを入れてログイン
– ログイン前

– ログイン後
-> remember_web_* のcookieが新たに発行されている
-> remember_web_*があれば、120分で、laravel_sessionが切れても、ログオフしない限り5年間ログインなしでアクセス可能になる。

remember meを実装するかどうかは、サービス内容やセキュリティポリシーによるので、よく考えて検討した方が良さそうです。自分以外のパソコンや端末からログインする機会は、割と溢れてますからね。

Author blogPosted on 2020年2月23日Categories Laravel Login

Laravel 6.x ログイン画面のカスタマイズ

### login.blade.php
resources/views/auth/login.blade.php
-> 一応、login_cp.blade.phpでコピーを取っておきます。
-> 日本語化しながら、何が書かれているのか確認していきます。

<form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('メールアドレス') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('パスワード') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                    <label class="form-check-label" for="remember">
                                        {{ __('ログイン状態を記憶') }}
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('ログイン') }}
                                </button>

                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('パスワードを忘れた方はこちら') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                    </form>

– FormはPostメソッドで、actionはroute(‘login’)
– メールのnameはemail
– パスワードのnameはpassword
– remember meのnameはremember
– パスワード再発行のリンク先はroute(‘password.request’)
– エラー時には、input formにis-invalidのclassを付けている

### エラーメッセージの日本語化
config/app.php

'locale' => 'ja',

resources/lang/ja/auth.php
※en/auth.phpをコピー。ログインのエラーメッセージはvalidation.phpとは異なるので注意が必要

    // 'failed' => 'These credentials do not match our records.',
    // 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
    'failed' => '認証情報が記録と一致しません。',
    'throttle' => 'ログイン試行が規定回数を超えました。:seconds秒後に再開できます。',

$ php artisan config:cache

同様に、resources/views/auth/passwordsのemail, resetと、resources/lang/ja/のpasswordsを編集していきます。
verify.blade.phpと/passwords/confirm.blade.phpは、laravel5.7系から実装された、Email Verification機能。必要に応じて実装。

Author blogPosted on 2020年2月23日Categories Laravel Login

Laravel 6.x Auth機能のregister(ユーザ登録)を無効化

### デフォルト
routes/web.php

Auth::routes();

ルーティングの設定
vendor/laravel/framework/src/Illuminate/Routing/Router.php

public function auth(array $options = [])
    {
        // Authentication Routes...
        $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
        $this->post('login', 'Auth\LoginController@login');
        $this->post('logout', 'Auth\LoginController@logout')->name('logout');

        // Registration Routes...
        if ($options['register'] ?? true) {
            $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
            $this->post('register', 'Auth\RegisterController@register');
        }

        // Password Reset Routes...
        if ($options['reset'] ?? true) {
            $this->resetPassword();
        }

        // Password Confirmation Routes...
        if ($options['confirm'] ??
            class_exists($this->prependGroupNamespace('Auth\ConfirmPasswordController'))) {
            $this->confirmPassword();
        }

        // Email Verification Routes...
        if ($options['verify'] ?? false) {
            $this->emailVerification();
        }
    }

Registrationをコメントアウト

// Registration Routes...
        // if ($options['register'] ?? true) {
        //     $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
        //     $this->post('register', 'Auth\RegisterController@register');
        // }

すると、/register のURLが無効化され、/registerを叩くと、404と表示されるようになる。

Author blogPosted on 2020年2月23日Categories Laravel Login

Laravel 6.x ログイン認証制限のカスタマイズ

### デフォルト設定
– 試行回数: 5回
– ロック時間 : 45 seconds

app/Http/Controllers/Auth/LoginController.php

protected $maxAttempts = 5;
protected $decayMinutes = 5;

▼ログイン機能の実装
/vendor/laravel/framework/src/Illuminate/Foundation/Auth/ThrottlesLogins.php

Author blogPosted on 2020年2月23日2020年2月23日Categories Laravel Login

Laravel パスワードリセットメール・文面カスタマイズ

### メール本文テンプレート作成
resources/views/mail/passwordreset.blade.php

<body>
	<h1>パスワードリセット</h1>
	<p>以下のボタンを押下し、パスワードリセットの手続きを行ってください。</p>
	<p id="button">
		<a href="{{ $reset_url }}">パスワードリセット</a>
	</p>
</body>

### 通知クラス
$ php artisan make:notification PasswordResetNotification
app/Notifications/PasswordResetNotification.php が生成される

    public $token;
    protected $title = 'パスワードリセット通知'
    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($token)
    {
        //
        $this->token = $token;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    //テンプレートとテンプレートに渡す引数
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->subject($this->title)
                    ->view(
                        'mail.passwordreset',
                        [
                            'reset_url' => url('password/reset', $this->token),
                        ]);
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }

### User.php

use App\Notifications\PasswordResetNotification;
public function sendPasswordResetNotification($token){
        $this->notify(new PasswordResetNotification($token));
    }

sendPasswordResetNotificationのオーバーライドはcontrollerではなく、Userモデルで行う。

Author blogPosted on 2020年2月23日Categories Laravel Login

Laravel 6.x ログアウトの遷移先指定

デフォルトだとログアウト処理では、’/'(ルート)に遷移する

### view

<form id="logout-form" action="{{ route('logout') }}" method="POST" name="logout">
        @csrf
   <a href="javascript:document.logout.submit()">ログアウト</a>
</form>

### LoginController.php
app/Http/Controllers/Auth/LoginController.php
->/hogeに遷移

use Illuminate\Support\Facades\Auth;
public function logout(Request $request){
        Auth::logout();

        $this->guard()->logout();

        $request->session()->invalidate();

        return $this->loggedOut($request) ?: redirect('/hoge'); 
    }
Author blogPosted on 2020年2月22日2020年2月22日Categories Laravel Login

Laravel 6.x usersテーブルに最終ログイン日時の保存

# 初期
### usersにlast loginカラムを追加
mysql> describe users;

$ php artisan make:migration add_column_last_login_at_users_table –table=users
***_add_column_last_login_at_users_table.php

public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->timestamp('last_login_at')->nullable()->after('remember_token')->comment('最終ログイン');
        });
    }

public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->dropColumn('last_login_at');
        });
    }

$ php artisan migrate
mysql> describe users;

### Logined eventとLastLoginListeners listenerを作成
app/Providers/EventServiceProvider.php

protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        // ログイン時にイベント発行
        'App\Events\Logined' => [
            // 最終ログインを記録するリスナー
            'App\Listeners\LastLoginListener',
        ],
    ];

$ php artisan event:generate

### listenerで、lastlogin日時をDBに保存する
– event側は処理なし
app/Listeners/LastLoginListener.php

use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
public function handle(Logined $event)
    {
        //
        $user = Auth::user();
        $user->last_login_at = Carbon::now();
        $user->save();
    }

### LoginControllerでeventを呼び込む
app/Http/Controllers/Auth/LoginController.php

use Illuminate\Http\Request;
use App\Events\Logined;
protected function authenticated(Request $request, $user)
    {
        event(new Logined());
    }

mysql> select * from users;
+—-+———+————–+——————+——————-+————————————————————–+————————————————————–+———————+———————+———————+
| id | role_id | name | email | email_verified_at | password | remember_token | last_login_at | created_at | updated_at |
+—-+———+————–+——————+——————-+————————————————————–+————————————————————–+———————+———————+———————+
| 1 | 1 | 田中太郎 | tanaka@***.com | NULL | **** | **** | 2020-02-21 09:50:03 | 2020-02-20 08:51:14 | 2020-02-21 09:50:03 |
| 2 | 2 | 山田一郎 | yamada@***.com | NULL | **** | **** | NULL | 2020-02-20 08:52:15 | 2020-02-20 08:52:15 |
+—-+———+————–+——————+——————-+————————————————————–+————————————————————–+———————+———————+———————+
2 rows in set (0.00 sec)
公式ドキュメント:https://readouble.com/laravel/6.x/ja/authentication.html

Author blogPosted on 2020年2月21日Categories Laravel Login, Laravel Migration

Routingでmiddlewareを制御する方法

middlewareが複数ある場合は、ブランケットで配列にして渡す

Route::group(['middleware' => ['auth','IsAdmin'] ], function(){
	Route::get('/admin/', 'AdminController@index');
});

Route::group(['middleware' => ['auth', 'IsSubscriber']], function(){
	Route::get('/', 'SubscriberController@index');
});

Route::group(['middleware' => 'auth'], function(){
	Route::get('/create', 'SubscriberController@create');
});

controllerが読み込まれる前に処理するか、controllerのconstructorで処理するかの違いだが、どちらでも動くには変わりないが、指定するmiddlewareの機能や、CPUのレジストリ処理の特性を考えると、controller側よりもルーティングで指定した方が効率が良いと考えられる。

Author blogPosted on 2020年2月21日2020年2月21日Categories Laravel Login

controllerでmiddlewareを特定メソッドから除外する

– exceptで除外するメソッドを指定する

public function __construct(){

        $this->middleware('IsSubscriber')->except('create');
    }

    public function index(Request $request)
    {
        //
       $user = Auth::user();  
        return view('subscriber.index', compact('user'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $user = Auth::user(); 
        return view('subscriber.create', compact('user'));

    }
Author blogPosted on 2020年2月21日Categories Laravel Login

controllerでのmiddleware判定処理の書き方

# 前準備
### 6系のmake:auth
$ php composer.phar require laravel/ui
$ php artisan ui vue –auth

### usersテーブルとuser_idにbelongsToのrolesテーブル
$ php artisan make:model Role -m

create_users_table
-> role_idは便宜上、nullableにしておく

Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('role_id')->nullable();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

create_roles_table

Schema::create('roles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->timestamps();
        });

$ php artisan migrate
mysql> insert into roles (name) values (‘administrator’);
mysql> insert into roles (name) values (‘subscriber’);

### font end
$ npm install
$ npm run dev

### ユーザーデータ作成
$ php artisan serve –host 192.168.33.10 –port 8000

// ユーザ作成
http://192.168.33.10:8000/register
->田中太郎(‘administrator’)
->山田一郎(‘subscriber’)

// role_idを付与
mysql> update users set role_id=1 where id=1;
mysql> update users set role_id=2 where id=2;
mysql> select * from users;

ここまでは大体、10~15分位

# auth認証
### middleware作成
$ php artisan make:middleware IsAdmin

app/Http/Kernel.php

protected $routeMiddleware = [
        //省略
        'IsAdmin'=>\App\Http\Middleware\IsAdmin::class,
    ];

### Userモデルで権限判定処理
User.php

public function IsAdmin(){
        if($this->role->name == 'administrator'){
            return true;
        }
        return false;
    }

Route

Route::get('/', function () {
    // return view('welcome');
    $user = Auth::user();
    if($user->IsAdmin()){
    	echo "this user is administartor";
    }
});

### middlewareの処理
app/Http/Middleware/IsAdmin.php
-> adminでなければtopにリダイレクト

use Illuminate\Support\Facades\Auth;
public function handle($request, Closure $next)
    {
        $user = Auth::user();
        if(!$user->isAdmin()){
            return redirect()->intended('/');
        }
        return $next($request);
    }

$ php artisan make:controller –resource AdminController
$ php artisan make:controller –resource SubscriberController

### route

Route::group(['middleware' => 'auth'], function(){
	Route::get('/admin/', 'AdminController@index');
	Route::get('/', 'SubscriberController@index');
});

### admin, subscriberのview作成
resources/views/admin/index.blade.php
resources/views/subscriber/index.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	this is {{ $user->role->name }}, {{ $user->name }}<br>
        <form id="logout-form" action="{{ route('logout') }}" method="POST" name="logout">
          @csrf
          <a href="javascript:document.logout.submit()">ログアウト</a>
        </form>
</body>
</html>

### controller
AdminController

public function __construct(){
        $this->middleware('IsAdmin');
    }

    public function index()
    {
        //
        $user = Auth::user();
        return view('admin.index', compact('user'))
    }

### ログイン後のリダイレクト先の変更
app/Http/Middleware/RedirectIfAuthenticated.php

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            // return redirect(RouteServiceProvider::HOME);
            return redirect('/admin');
        }
        return $next($request);
    }

app/Http/Controllers/Auth/LoginController.php
app/Http/Controllers/Auth/RegisterController.php
app/Http/Controllers/Auth/ResetPasswordController.php

protected $redirectTo = '/admin';

これだと、administratorは、’/admin’, ‘/’ 両方アクセスできるので、IsSubscriberのMiddlewareを作らないと駄目か。
subscriberの挙動は期待通りになる。

Author blogPosted on 2020年2月21日2020年2月21日Categories Laravel Login

Posts navigation

Previous page Page 1 Page 2 Page 3 Next page

Popular Post [Top 10🔥]

  • Pythonで今月、前月、来月、昨年、毎月あたりを取得する
  • [Laravel8.16.0] 電話と郵便番号のカスタムバリデーション作成
  • phpで予約システムを作くろう2 予約画面
  • [Laravel8.16.0] class内でメンバ変数(共通の変数)を使いたい
  • Laravel フォーム・確認画面の「戻る」ボタンの処理実装
  • Laravel5.7 403エラー forbiddenが出た時
  • Android Studioでのapkファイルの開き方
  • phpmailerで複数アドレス(配列)にBCCで送信
  • bootstrap5でPC版ヘッダーメニューを右寄せにする
  • PROPFINDメソッド

Recent Posts 🐎

  • 【Rust】フレームワーク自作: セッションが無ければリダイレクト処理
  • 【Rust】フレームワーク自作: HttpResponse, Redirectを実装する
  • サッカーゲームをRustで書く
  • サッカーゲーム
  • 【Rust】フレームワーク自作: Postメソッドを実装する

Author 🤩

hpscript
Rust, C++, C, Python Go PHP Javascript Java Swift Flutter

Contact form

スクラッチの受託開発を行なっております🖥 ヒヤリング->設計->デザイン ->実装->インフラ構築->運用まで!ブロックチェーン開発します!
・contact

Categories

  • Ada
  • Ajax
  • Algebra
  • Algorithm
  • Amazon SES
  • Android / Java / SQLite
  • Android Layout Design
  • AngularJS
  • ansible
  • apache
  • API
  • app
  • app register
  • AR
  • Arduino
  • Artificial Intelligence
  • assembler
  • audio
  • Auth
  • awk / sed
  • AWS
  • AWS ACM
  • AWS AMI
  • AWS Athena
  • AWS AutoScaling
  • AWS CLI
  • AWS CloudFormation
  • AWS CloudFront
  • AWS CloudWatch
  • AWS CodeDeploy
  • AWS Direct Connect
  • AWS EBS
  • AWS EC2
  • AWS ECS
  • AWS EFS
  • AWS ElastiCache
  • AWS ELB
  • AWS Glacier
  • AWS IAM
  • AWS Kinesis Video Streams
  • AWS lambda, Cloud Front, EFS, EBS
  • AWS RDS
  • AWS Route53
  • AWS S3
  • AWS SNS
  • AWS VPC
  • azure
  • babel
  • backbone.js
  • bash
  • basic
  • batch
  • Bitcoin
  • Blockchain
  • bootstrap
  • Business
  • C
  • C OperatingSystem
  • C#
  • C++
  • CakePHP
  • Canvas
  • Capistrano
  • Carbon
  • Character code
  • Chef
  • CircleCI
  • COBOL
  • CoffeeScript
  • Compiler
  • ComputerVision
  • ComputerVision Biometrics
  • ComputerVision CharacterRecognition
  • ComputerVision Face Detection
  • ComputerVision IR-LED
  • ComputerVision OpenCV
  • ComputerVision ProcessingEngine
  • Cookie
  • CPU
  • cryptocurrency
  • cryptography
  • CSS
  • D3.js
  • data science
  • debugging
  • deep learning
  • deploy
  • Design
  • dev.amazon
  • dev.apple
  • dev.backlog
  • dev.ebay
  • dev.finance
  • dev.google
  • dev.meta
  • dev.microsoft
  • dev.NASA
  • dev.PFN
  • dev.slack
  • dev.twitter
  • dev.watson
  • devOps
  • Devops
  • Django
  • Django Auth
  • Django Database
  • Django Form
  • Django Pagination
  • Django Validation
  • Django View
  • DNS
  • Docker / docker-compose
  • Echo
  • elasticsearch
  • Elasticsearch
  • Electron
  • Electronic Circuit
  • Electronic Circuit flip-flop
  • Embulk
  • enchant.js
  • Ethereum
  • Excel VBA
  • express
  • file
  • filmora
  • Flash
  • flask
  • FlexBox
  • Fluentd
  • Flutter
  • font-awesome
  • front-end
  • GCP
  • Git / GitHub / GitHub Enterprise
  • GitLab
  • GL
  • Go
  • GPU
  • gradle
  • GraphQL
  • grunt
  • gulp
  • Hadoop
  • Hash
  • Heroku
  • HHVM/Hack
  • HTML5
  • HTTPS/HTTP
  • illustrator
  • Image
  • iOS layout
  • ip
  • Java
  • Java servlet
  • JavaScript
  • jenkins
  • jQuery
  • jQuery mobile / jQuery UI
  • jsp
  • k-nn
  • Keras
  • Kernel
  • Kibana
  • Kotlin
  • kubernetes
  • kubernetes minikube
  • Laravel
  • Laravel Chat
  • Laravel Controller
  • Laravel Database
  • Laravel Event
  • Laravel Extra Feature
  • Laravel Forms
  • Laravel Homestead
  • Laravel Jetstream
  • Laravel Login
  • Laravel Mail
  • Laravel Middleware
  • Laravel Migration
  • Laravel Model
  • Laravel Multi-tenant
  • Laravel Package
  • Laravel Paging
  • Laravel Public
  • Laravel Route
  • Laravel Security
  • Laravel Seeding
  • Laravel Storage
  • Laravel Testing
  • Laravel Upgrade
  • Laravel Validation
  • Laravel View
  • LESS
  • Linear Regression
  • Linux
  • Localization
  • log
  • Logstash
  • lsync xinetd/rsync
  • Machine Learning
  • Mackerel
  • mail/smtp/pop/imap
  • Math
  • Memory
  • Mining
  • mobile
  • MongoDB
  • Morphological analysis
  • Motherboard
  • MySQL
  • Natural Language
  • NEM/XEM
  • Netty
  • Network
  • Neural Network
  • New Relic
  • NextJS
  • nginx
  • Node.js
  • Objectiv-C
  • Oracle
  • OS
  • other topics
  • Parallel Processing
  • Perl
  • phantomjs
  • Photography
  • Photoshop
  • PHP
  • physics
  • PostgreSQL
  • Probability
  • processing / p5.js
  • Processor
  • psql
  • pug
  • Python
  • Python library
  • quantum computer
  • R
  • RaspberryPi
  • React Native
  • React.js
  • recognition
  • redis
  • Redmine
  • Redux
  • Research & Development
  • Revel
  • Robot
  • Ruby on Rails
  • Rust
  • sales
  • sass / scss / Compass
  • Scala
  • Security
  • Selenium
  • SEO
  • sesssion
  • Setting up an environment – deploy flow
  • Setting up an environment – development process
  • Setting up an environment – Local Environment
  • shell
  • sinatra
  • sketch
  • Socket.IO
  • software design – basic design
  • software design – DFL
  • software design – entity-relationship diagram
  • software design – flowchart diagram
  • software design – infrastructure
  • software design – Internal Design
  • software design – operation flow
  • software design – screen transition diagram
  • software design – sequence diagram
  • software design – UML
  • software design – WF, screen layout
  • software topics
  • Speaker Recognition
  • Speech Recognition
  • Spring
  • SpringBoot
  • SpringBoot Controller
  • SpringBoot CRUD
  • SpringBoot SpringSecurity
  • SpringBoot Thymeleaf
  • SpringBoot Validation
  • sqlite / MySql / psql
  • ssh
  • SSL/TSL
  • stackmachine
  • statistic
  • storage
  • Stripe
  • struts
  • SVG
  • swagger
  • Swift / SwiftUI
  • swift CoreData
  • Tableau
  • Tailwind css
  • team building
  • TensorFlow
  • Terraform
  • Test
  • three.js
  • Tomcat
  • translation
  • Travis CI
  • TypeScript
  • ubuntu
  • UI/UX
  • uncategorized
  • underscore.js
  • Unit Test / Integration Test
  • unity
  • unix
  • uWSGI
  • VBA
  • Video Streaming
  • Vite
  • vm / vagrant / virtualbox
  • vps
  • VR
  • Vue.js
  • Webpack
  • WebRTC
  • Windows
  • xml
  • YAML / mustache
  • zabbix
  • Zend framework

初めてのSESフリーランス推奨エージェント😤

レバテックフリーランス

ギークスジョブ

ビッグツリーテクノロジー&コンサルティング

Archives

  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • August 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016
  • March 2016

Links

- CSDN专业开发者社区
- Google AI blog
- torvalds/linux
- Linux Kernel
- apache/httpd

Recommend Books


ソフトウェアエンジニアの技術ブログ:Software engineer tech blog Proudly powered by WordPress
Posting....