ToCode
Ir al canal en Telegram
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Mostrar mรกs1 419
Suscriptores
+124 horas
-17 dรญas
-530 dรญas
Archivo de publicaciones
1 419
ืชืจืืื SQL - ืืืืงืช ืฉืืจืืช ืืคืืืืช
ื ืชืื ื ืืืื ืขื ืคืจืืืื ืฉื ืืฆืจื ืขื ืืื ืืคืงืืื:
create table items(id integer primary key, name text);
INSERT INTO items (name) VALUES
('Item A'),
('Item B'),
('Item C'),
('Item A'),
('Item D'),
('Item E'),
('Item B'),
('Item F'),
('Item G'),
('Item A');
ืืืงื ืืช ืื ืืฉืืจืืช ืืืคืืืืช, ืืืืืจ ืืฉืืืจื ืืงืกืืืื ืฉืืจื ืืืช ืืื ืฉื ืฉื ืคืจืื.
ืคืืชืจืื
ืืชืจืืื ืืื ืืื ื ืจืื ืื ืืืฉ ืคืฉืื ืืงืจืืื ืจืืฉืื ื ืืื ืืืจื ืื ืืฉืืชืืืชื ืืืชืื ืืช ืืงืื ืื ืืกืชืื, ืื ื ืื ืืืืข ืื ืืืขืื ืืื ืื ื ืื SQL ืื ืืคืจืกื ืืื ืขื ืืคืืชืจืื ืฉืื. ืื ืืฉ ืืื ืืืืื ืื ืคืฉืืืื ืืืชืจ ืื ืชืชืืืืฉื ืืฉืชืฃ.
ืืชืืืชื ืืช ืืคืืชืจืื ืขื row_number ื partition ืืืื ืืคืฉืจ ืืจืืืช ืืงืืืช ืขืจืืื ืืคืืืื - ืืื ืฉื row_number ืืฆืืื ืืืื ื-1:
select
id,
name,
row_number() over (partition by name) as rn
from items
ืขืืฉืื ืืฉืืื ืืืฆืื ืจืง ืืช ืืืืืื ืฉื ืืฉืืจืืช ืืืคืืืืช ืฆืจืื ืืืฉืชืืฉ ื rn ืืชืื ืชื ืื where, ืืื ืืืจืฉ ืืืืจืช CTE. ืกื ืืื ืื ืื ื ืืฆืื ืืช ืืฉืืจืืช ืืืคืืืืช ืืืื (ืืืื ืืจืืฉืื ื):
with items_rn as (
select
id,
name,
row_number() over (partition by name) as rn
from items)
select id from items_rn where rn > 1
ืืืคืืื ืื ืื ืืกืืฃ ืื ืืฉืืื ืืืืืง ืืืชื ืฆืจืื ืืืฉืชืืฉ ืืื ืืืืืง ืืื ืืชืืจ sub query, ืื ืฉืืืื ืืืชื ื ื:
delete from items where id in
(with items_rn as (
select
id,
name,
row_number() over (partition by name) as rn
from items)
select id from items_rn where rn > 1);1 419
ืฉืืืฉื ืขืงืจืื ืืช ืืฉืืืื ืืืฆืืื ืืคืจืืืงืืื
ืืจืืฉืื ืืื ืืืืืืืช. ืืคืจืืืงื ืืืื ืืขืืืช, ืืืจืื ืืืจืื ืืืืืืช ืืื ืื, ืืืจืื ืื ืืขืืื ืืื ืฉืชืื ื ื, ืืคืขืืื ื ืืื ืชืื ืืื ืชื ืืขื ืฉืขืืื ื ืืขืฉืืช ืคืฉืจืืช ืืืืืืช. ืืืืืืืืช ืืื ืืืืืืช ืืจืืืช ืืช ืืชืืฆืื ืืืืืฉืื ืืืชืงืื ืืืืืื ืขื ืฉืื ืืฆืืื.
ืขืืงืจืื ืฉื ื ืืื ืืืงืฃ ืืคืจืืืงื ืืื ืืชืืืจ ืืืืืืืืช. ืืืื ืืื ืฉืืืืงืฃ ืืืื ืืืชืจ ืื ืืืจื ืืกืืืื ืืืชืืื ืขื ืืกืืฃ. ื ืืืืื ืฉืืฆืื ื ืืคืจืืืงื ืฉืืืจืื ืชืืืืืช ืืืขืจืืช ืืืืืฆืข ืืืจื ืืืืื ื ืฉืฆืจืื ืืฉืืจื ืื ืืช ืืขืจืืช ืืืคืขืื ืฉื ืืฉืจืช ืืืช ืืืจืกืช ืืกืืก ืื ืชืื ืื ืืืคื ืืฉื ืืื ื ืฉืืืื ืืจืื ืืืชืจ ืืื ืืืจืืฅ ืืช ืืคืจืืืงื ืืชืื ืงืื ืืืื ืจ ืืื ืฉืืืื ืงื ืืืชืจ ืืฉืืจื ืืื ืืืื ืืืช ืืคืขืืื ืืืืืช. ืืืืชื ืจืืข ืื ืื ื ืืืื ืจืืฆืื ืืืืจ ืืื ืืฉืืืช ืฉืืืจืื ืืชืืืืช ืืืื ืืฉืืืช ืืืขืืจ ืืงืื ืืืื ืจืื - ืืืฉ ืืื ืกืืื ืืืื, ืื ืื ื ืขืืืจ ืขืืฉืื ืืงืื ืืืื ืจืื ื ืืกืื ืขืืืืช ืฉืืืจืื ืืืืชืจืช, ืืืืื ืืืื ืืืจื ืฉื ืกืืื ืืช ืืฉืืืจืื ืืฃ ืืื ืื ืืกืืื ืืืืื ืก ืืคืจืืืงื ื ืืกืฃ ืฉื ืืขืืจ ืืงืื ืืืื ืจืื. ืืื ืคื ืืืืืง ืื ืืชืืื ืืืืงืฉ ืฉืขืืื ืืคืืฆืฅ ืื ื ืืช ืื ืืคืจืืืงื, ืื ืืขืืจ ืืงืื ืืืื ืจืื ืื ืืฉืื ืฉืื ืชืื ื ื ืืจืืฉ ืืืืื ืืื ืื ื ืืกืคืืง ืืืืืืืช ืืื ืืืชืืืื ืขื ืืขืืืื ืฉืืืืฆืจ ืืืื ืืืื ืื.
ืืืืจืื ืืื ืชืื ืื ืืจืืฉ. ืื ืื ื ืืืืข ืืื ืื ื ื ืื ืก ืื ื ืืืื ืืืืืก ืืจืืฉ ืืกืคืืง ืืืืืืืช ืืื ืืืชืืื, ืืืฉืืฉ ืื ืชืืื ืืช ืืกืืืจืช ืืื ื ืืืืข ืืืืื ืฉืื ืื ื ืืคืจืืืงื ืืจืื ืืืชืจ ืงื ืืืืฉืื ืืืืชืืื. ืืฆื ืฉื ื ืื ืืืืืชื ืืื ืืช ืคืจืืืงื ืฆื ืืจืง ืืืจื ืืฆื ืฉื ื ืฉื ืคืืชืื ืืืืืชื ืฉืืฉืืื ืฉืืืืฆืจ ืืื ืืืื ืืืืืืจ ืื ื ืฆืจืื ืืฉืื ืืืคืืื ืืืืจ ืืืืืฉ ืืืืืื, ืื ืืื ืกืืืื ืฉืื ื ืืฉืืืจ ืืช ืืคืจืืืงื ืฆื ืืื ืืืืืืจ ืืืชืจ ืืืื ืืืื ืื ืืื ืขื ืืืกืฃ. ืืืื ืืืืืื ืฉืื ื ืืืืจ ืืืืจืืืืงืืืจื ืืืืืืช ืืืชืืื ืืืืจืืช ืฉืื ืืื ืืฉืื ืฉืืืื ืงืฉื ืืชืงื ืืืจื ืฉืืคืจืืืงื ืืืื.
1 419
ืื ืืืืข ืืชืื ืช
ื ืื ืกืชื ืืืื ืงืืืื ืืชืืื ืืืจื ืืจืื ืืื ืฉืื ืืืืชื ืืืืืจ ืืืื ืืคืืกืืื ืฉืชืคืกื ืืช ืชืฉืืืช ืืื ืืื ืฉื ืืืืจ ืฉืืชื ืืื ืืืืืกืืค. ืืคืืกื ืืชืืื ืืืืืจื - ืื ื ืื ืืืืข ืืชืื ืช ืืื ืืื ืื ืจืขืืื ืืืื ืื ื ืขืืจืชื ื AI ืืื ืืื ืืช ืืื ืืืืขืืืช ืืืชื. ืืื ืืืฉ ืื ืืกืืคืืจ ืืจืืฉืื ืฉืื ื ืฉืืืข ืขื ืื ืฉืื ืฉืืืืื ืืช ืขืฆืื ืืชืื ืช ืืื ื ืคืจืืืงื ืืขื ืืฉืืขืืช ืืชืื ืืกืคืจ ืฉืืืขืืช.
ืืกืืคืืจืื ืืืื ืืืืืืื ืื ืคืขื ืืืืฉ. ืืืชืจ ืืฉืื ืืืืืื ืืืชื ื ืขื ืขืชืื ืชืคืงืืื ื ืืืชืื ืชืื (ืื ื ืืืฉื ืฉืืืื ืฉ AI ืืืชืื ืงืื ืืืขืจืืืช ืืืืชืืืช ืขืืืื ืืืื ืจืืืง), ืื ืืืืืื ืืืชื ื ืขื ืชืืืืื ืืืืื, ืืืืืืฆืื ืืฉืืืืฉ ื ืืื ืืืืื:
1. ืืขืืื ืื ืืื ืงื ืืืชืจ ืืื ืืช ืืืฆืจ ืชืืื ื ืืืคืก. ืืกืืคืืจ ืฉื ืืืคืฆื ื ืคืชืจ ืืืื ืืฉืืืื ืืจื ื ืืืืขื ืืชืคืืฆื ืจืืื, ืืื ืืืื ืขื ื AI ื ืคืชืจื ืื ืืขืืืช ืืื ืืื. ืืฉืืืื ืืื ืคืืชื ืืืช ืืขืชืื ืืืื ืืขื ืืื.
2. ืืขืืื ืื ืืื ืงื ืืืชืจ ืืืืื ืชืื ืืช. ืืืืืืช ืืืืื ืืฉืื ืชืื ืืื ืขืืืื ืขื ืคืจืืืงื ืืืืชื, ืืืงืื ืืขืจื ืฉืืขืืจ ืืืชืื ืขืืืจื ืขื ืืืจื ืคืจืื ืฉืืืืื ืืืชื ืืื ืฉืืจืช ืงืื ืืื ืืืชื ื ืชืคืกืช. ืืืืื ืชืื ืืช ืืจื AI ืื ืฉืืืช ืืืืืื ืืืืื ืืืืชืจ ืฉืจืืืชื ืขื ืื ืืืืขืชื ืืขืชืื ืืงืจืื ืืื ืชืืืืฃ ืืช ืืืืืื ืืจื ืืืืื ืฉืื ืื ืืชืจืืื ื ืืืื.
3. ืื ืืจืืจ ืืืื ืคืจืืืงืืื ืืชืื ืชืื ืืชืืืืื ืืฆืืจืื ืืืชืื ืืื ืืืืืื ืืืืืช ืืืืชืงืื ืืขืืืื. ืขื ืืคื ื ืืื ืฉื ืื ืืื ืืจืืจ ืฉืืืืืข ืืจืืืื ืขื ืคืจืืืงื ืืฉืืขืืชื ืฉืืชืืช ื ืืชื ืขืจื ืืืกืฃ ืืฉืืขืืชื ืืืืขืื ืืืืืื ืืช ืกืืืืื ืืงืืื ืืขืืืื. ืืืื ืืฉืืคืฉืจ ืืื ืืืข ืืชืื ืืช ืืื ืืช ืืืฆืจ ืื ืืืฆืื, ืืคืจืืืงื ืฉืืืชื ื'ืื ืืืจ ืืฆืืจื ืืืจืืืช ืืื ืืืืืื ืืืืืช ืขืืืื ืฆืจืื ืืืืืืจ ืืืขืกืืง ืฉืืฉ ืคื ืื ืืื ืขื ืืืข ืืื ืืกืช ืชืืื ื ืืื ืืืฉืื ืฉืืืื ืืช ืขืฆืื ืชืื ืืช ืืฉืืืขืืื. ืืืืืืช ืฉื AI ืืขืืืจ ืื ื ืืืชืื ืงืื ืืืื ืืกืืืช ืืช ืืจืืืื ืืช. ืืืขืชื ืืฉ ืกืืืื ืื ืืืืื ืฉืืงืจืื ื ืคืกืืง ืืืคืฉ ืคืจืืืงืืื ืืืืืืช ืืืืืช ืื ืืืืจ ืืืกืชืื ืขื ืืืืืื ืืช ืฆืืื ืื ืื ืืืชืืงื ืืฉืืืืช ืชืื ืืช ืขื ืืืื.
1 419
ืกืคืจืืืช ืืกืืกื ื ืชืื ืื ืืืืคืื ืืืืืืื ืืื ืืกืืกื ืื ืชืื ืื
ื Rails ืืฆืจืชื ืืืื ืืืกืืก ืื ืชืื ืื ืขื ืงืื ืฉื ืจืื ืืขืจื ืื:
create_table :users do |t|
t.string :username
t.string :email
t.timestamps
end
ืืช ืืงืื ืืื ืืคืฉืจ ืืืคืขืื ืืื ืื ืืกืืก ื ืชืื ืื ืืจืืืืก ืืืจ ืืืื ืืื ืื ืืขืฉืืช ืืืื ืืืชืืื ืืื string ื timestamps ืืกืืื ืื ืชืื ืื ืฉื ืืกืืก ืื ืชืื ืื ืืกืคืฆืืคื ืฉืืืจืชื. ืื ืกืืงืืืืืื ืฉื node ืขืืืืช ืืฆืืจื ืืืื
ื Sequelize ืืืืฉืง ืืืจืฉ ืืืชืจ ืงืื ืืื ืขืืืื ืืกืคืจืื ืืืคืืช ืืืืืืื ืืื ืืกืืกื ื ืชืื ืื:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
username: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
allowNull: false
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
ืกืคืจืืืช ืืกืืกื ื ืชืื ืื ืืืืจื ืืืช ืืืชืจ ืืืงืืืช ืืืฉื ืฉืื ื. ืื ืืืืื ืืืชืืขืื ืฉื ืืจืืื ืืืฆืืจืช ืืืื:
export const users = mysqlTable('users', {
id: bigint('id', { mode: 'number' }).primaryKey().autoincrement(),
fullName: varchar('full_name', { length: 256 }),
}, (users) => ({
nameIdx: index('name_idx').on(users.fullName),
}));
ืืื ืืืืจืฆืื ืืงืืกืื ืฉืืชืืื ืืฆืืจื ืืคืืจืฉืช ืขืืืจ Postgresql:
await db.schema
.createTable('person')
.addColumn('id', 'serial', (col) => col.primaryKey())
.addColumn('first_name', 'varchar', (col) => col.notNull())
.addColumn('last_name', 'varchar')
.addColumn('gender', 'varchar(50)', (col) => col.notNull())
.addColumn('created_at', 'timestamp', (col) =>
col.defaultTo(sql\now()\).notNull(),
)
.execute()
ืืื ืื ืขืืฉืื ืืช ืื? ืืื ืขืืืฃ?
ืืฉ ืฉื ื ืืชืจืื ืืช ืืกืคืจืื ืฉืื ืืืคืืช ืืืืืืื ืืื ืืกืืกื ื ืชืื ืื - ืืจืืฉืื ืืื ืืืื ืืกืคืจืื, ืื ืืืชืจ ื ืืื ืืงืืื ืฉืื. ืกืคืจืื ืฉืฆืจืืื ืืขืฉืืช ืคืืืช ืชืืื ืืืชืจ ืงืื ื, ืงืื ืืืชืจ ืืชืืืืงื ืืคืืชืื ืืชืืื ืืืืฅ ืคืืฆ'ืจืื ืืืฉืื ืืืจ ืืืชืจ. ืื ื ืืืื ืฉืื ืื ื ืืืืชื ืืืชื ืกืคืจืืืช ืืืฉื ืืืกืืก ื ืชืื ืื ืื ืืืืชื ืืขืืืฃ ืืืืชืจ ืขื ืืงืื ืฉืืืคื ืืืืืืื ืืื ืืกืืกื ืื ืชืื ืื ืืืืกืื ืืืื ืืื ืจืืฉ.
ืืืชืจืื ืืฉื ื ืืื ืืฉืืืื ืฉืกืคืจืื ืืืืช ืืืืื ืืืคืฉืจ ืืืชืื ืชืื - ืฉืืืื ืฉืขืืฉืื ืืืชืืื ืงืื ืกืคืฆืืคื ืืืกืืก ื ืชืื ืื ืืืืืื ืืืจืืืฉ ืืืชืจ ืื ืื ืืืฉืชืืฉ ืืืืืืช ืืชืงืืืืช ืืืชืจ ืฉื ืืกืืก ื ืชืื ืื ืกืคืฆืืคื, ืืืืืื ืื ืื ืื ื ืืืืขืื ืฉืื ืื ื ืขืืืืื ืืคืืกืืืจืก ื ืืื ืืืฉืชืืฉ ืืื ืืคืื ืงืฆืืืช ืฉื ืคืืกืืืจืก ืืขืืืื ืขื JSON-ืื.
ืืฉืืื ืืคืชืืื ืืื ืืื ืืืืื ืืืื ืื ืื ื ืฆืจืืืื ืื ืืฉืชืืฉืื ืืืืชื ืงืื ืกืคืจืื ืฉืืืคื ืืืืืืื ืืื ืืกืืกื ื ืชืื ืื, ืื ืืื ืืืื ืืคืฉืจ ืืืืืื ืืืืืืฃ ืืกืืก ื ืชืื ืื ืืฉืื ืืงืื ืคืฉืื ืืืฉืื ืืขืืื. ืืืขืชื ืืืืืืช ืืืืืืฃ ืืกืืกื ื ืชืื ืื ืืืืื ืืขืืืจ ืืชืืืืช ืืคืืชืื ืื ืื ืื ื ืขืืืื ืื ืืืืืื ืืืื ืืกืืก ื ืชืื ืื ืืืื ืืืื ืืืืชืจ ืขืืืจ ืืคืจืืืงื, ืืื ืืื ืฉืืคืืชืื ืืชืงืื ืืืจ ืืืื ืื ืื ื ืืฉืืืื ืืืืื ืืืืืืช ืกืคืฆืืคืืืช ืฉื ืืกืืก ื ืชืื ืื ืืืืืืื ืืช ืืืืืืช ืืขืืืจ. ืืฉ ืกืืืื ืืืื ื ืืื ืฉืืืฉืื ืืจืฆื ืืงืืช ืคืจืืืงื ืคืจืืืงืฉื ืืืืขืืืจ ืืืชื ืืืกืืก ื ืชืื ืื ืืกืื ืืืจ.
ืื ืื ื ืื ืืืคืชืืื ืขืืืืื ืขื ืืกืคืจ ืคืจืืืงืืื ืืคืจืืืงืืื ืฉืื ืื ืื ืขืืืืื ืขื ืืกืืกื ื ืชืื ืื ืฉืื ืื, ืืื ืืคืชืื Rails ืืืืืื ืืขืืืจ ืืื ืคืจืืืงื Rails ืฉืืชืืืจ ื MySQL ืืคืจืืืงื ืจืืืืก ืฉืืชืืืจ ืืคืืกืืืจืก ืืืืฉืชืืฉ ืืืืข ืฉืืื ืืจืืืืก ืืื ืืชืืืง ืืืคืชื ืืช ืืืขืจืืช, ืืืขื ืืื ืฉืืฆืืจืื ืืืืื ืืืจืื ืืืฉืื.
ืื ืืขืชืื? ืืฆื ืืื ืืืขืืืจ ืคืจืืืงื ืืื ืืกืืกื ื ืชืื ืื, ืื ืืขืืื ืืืืชื ืืื ืขื ืคืจืืืงืืื ืฉืืชืืืจืื ืืืกืืกื ื ืชืื ืื ืืกืืืื ืฉืื ืื? ืืื ืืฉืื ืืื ืฉืกืคืจืืืช ืืกืืกื ืื ืชืื ืื ืฉืืื ืชืขืืื ืืฆืืจื ืืื ืืื ืืกืืกื ืื ืชืื ืื ืืฉืื ืื ืืชืกืชืืจ ืืื ืืช ืืืืืืื ืืื ืืื?1 419
ืืืค Hono ืฉืืื ืื ืื ืชืืืื ืฉืื ืืกืชืืืืื ืืืืืกื
ืืช ืืงืื ืืื ืืงืืชื ืืชืื ืืชืืขืื ืฉื hono ืืื ืืืืืฉ ืงืืฆืื ืกืืืืื:
app.use('/client/*', serveStatic({ root: './'}));
ืื ื ืืืฉืื ืื ืชืื /client/foo.js ืืืืฉ ืืงืืืฅ foo.js ืืชืื ืชืืงืืืช client. ืื ื ืืืฉืื ื /client/index.html ืืืืฉ ืืงืืืฅ index.html ืืื ื ืืืฉืื ืื ืชืื /client/ ืืืืฉ ืื ืื ืืงืืืฅ index.html ืืฆืคืื.
ืืื ืื ืงืืจื ืื ื ืืืฉืื ื /client (ืืื ืืืืกื ืืกืืฃ)? ืืื ื ืื ืกื ืืืืช ืืงืจืืชื ื ืืืืืืืืืช ืืืืฉ ืฉืื ืืช ืชืืื ืืงืืืฅ index.html. ืืืขืื ืืื ืฉื URL ื ืฉืืจ ืืื ืืืืืกื, ืืืื ืื index.html ืืืื ืืคื ืื ืืงืืืฅ ืืืจ ืืืคื ืื ืชืืื ืืืกืืช ื / ืืื ืืืกืืช ื /client. ืืืืืื ื ื ืื ืฉืืชืื index.html ืืืคืืขื ืืฉืืจื:
<link rel="stylesheet" href="style.css" />
ืืืฉื ืืืชืจ ืืจื ืื ืชืื /client/ ืืืืืจื ืืช ืชืืื ืืงืืืฅ index.html. ืืืื ืฉืื ืชืื ืืกืชืืื ื / ืืืคืืคื ืื ืกื ืืงืื ืืช ืงืืืฅ ืืขืืฆืื ืืื ืชืื /client/style.css ืืืื ืขืืื. ืืขืืืช ืืืช ืืืฉื ืืืชืจ ืืจื /client ืขืืืื ืืืืืจื ืืช ืชืืื ืืงืืืฅ index.html, ืืื ืืคืขื ืืืื ืฉืืชืืงืืื ืืืืจืื ื ืื ืชืื ืืื ืืชืืงืืื ืืจืืฉืืช / ืืืคืืคื ืื ืกื ืืืขืื ืืช /style.css ืืื ืืชืืืืืช client, ืืืืฉื ืืืขืืฆืื ืื ืืืฆื.
ืคืืชืจืื ืืืืจ ืืื ืืืืกืืฃ ืืคื ืื ื /client ื /client/ ืขื ืืงืื ืืื:
app.get('/client', (c) => {
return c.redirect('/client/', 301); // Permanent redirect
});
app.use('/client/*', serveStatic({ root: './'}));
ืืื ืืชื ืืืืจืื ืคืืชืจืื ืืช ืืืจืื ืื ืชืชืืืืฉื ืืฉืชืฃ ืืชืืืืืช.1 419
ืืื ืืงืจืื Code Review ืฉื Chat GPT
ืืืขืื ืขื Chat GPT ื Code Reviews ืืื ืฉืืื ื GPT ืขืืืื ืืกืคืืง ืงืื ืืงืกื ืืฉืืื ืืืืื ืืื ืื ืืชื ืืืจืื ืืื ืฉืื ืืชื ืืืื ืืื ืืืืืฅ ืขื Best Practices ืืืืืื, ืื ืืฉืื ืื ืืืจืื, ืืื ืืืื ืืืขืืช ืืืืฉืื ืฉืื ืืฉืชืืฉืชื ื Best Practice ืืกืืื ืืคืืื ืฉืื. ืื ื ืฉืชื ืืืืืืืช ืงืื ืืช ืฉืขืืจื ืื ืืจืืืช ืื GPT ืจืืื ืืื ืืื ืืคืกืคืก.
ืฉืืคืืจ ืงืื ืจืืื
ืฉืืืชื ืื ืืืืืงื ืืช ืืคืื ืงืฆืื ืืืื ืืจืืื:
require 'set'
def count_valid_requests(uniqueCodes, requests)
uniqueCodesSet = Set.new(uniqueCodes)
return requests.count { |r| uniqueCodesSet.include?(r) }
end
ืืงืื ืขืืื ืืื ืืชืื ืจืข ืืื ืืคืืื ืืฉืชื ืฉืืจืืช ืฉื ืงืื ืืฉ ืคื ืืื ืืืจืื ืฉืืชืื ืชื ืจืืื ืื ืืืืืื ืืจืืืช - ืืกืื ืืจื ืืืื ืฉืืืช ืืืฉืชื ืื ืืจืืื ืืื ืืืฉืชืืฉ ืืงื ืชืืชื ืืืคืจืื ืืื ืืืืืื ืืื ืืืฉืชืืฉ ื return ืืฆืืจื ืืคืืจืฉืช. ChatGPT ืฉื ืื ืืฉืชื ืืืขืืืช ืืืฆืจ ืืืจืกื ืืชืืงื ืช ืฉื ืืคืื ืงืฆืื ืืื ืืขืื:
require 'set'
def count_valid_requests(unique_codes, requests)
unique_codes_set = Set.new(unique_codes)
requests.count { |request| unique_codes_set.include?(request) }
end
ืืื ืฉืืงืื ืืกืชืื ืืืืคืื ืฉื ChatGPT ืขืืืื ืืขืื ืขืจื ืืื ืืืจืฉืื ืืืชืจ ืืืืฅ ืืงืจืืื. ืื ื ืคืื ืงืฆืื ื ืืกืคืช ืฉืฉืืืชื ืื, ืืคืขื ืืคืจืืืงื ืจืืืืก:
def cancel
wi = WorkshopInstance.find(params[:id])
authorize! :attend, wi
wi.users.delete(current_user)
render json: {
attending: attending
}
end
ืืื ืืคืื ืืืจ ืืื ืืจืื ืืืชืจ ืืจืื - ื GPT ืฉื ืื ืฉืืื ืื ืงืื ืืืคืื ืืฉืืืืืช, ืฉ find ืขืืืื ืืืจืืง ืฉืืืื ืืืืืืฅ ืืืืืืฃ ืืืชื ื find_by ืืืืจืื ืงืื ืืืืืงื ืฉืืืื. ืื ื ืื ืืืื ืืช ืืืืืฆื ืืืืช ืื ืื find ืืืจ ืืืืื ืืืจืง ืฉืืืื ืื ืื ืืจืืจ ืืื ืืืืืืฃ ืืืชื ืืคืื ืงืฆืื ืฉืื ืืืจืงืช ืฉืืืื ืืื ืืืืกืืฃ ืืืืงื ืืืืจืืง ืืช ืืฉืืืื ืืฆืืจื ืืืืื.
ืืื ืื ืฉื ืื ืฉืืฉืชืืฉืชื ืืืฉืชื ื attending ืฉืื ืืืืืจ ืืคืื ืงืฆืื, ืืืืืืฅ ืืืืืืฃ ืืช delete ื delete_by ืฉืืคืืขื ืงืืจืืช ื delete_all ืืืืืจื ืืืจืื - ืฉื ื ืืืคืื ืฉืืืื ืืืืฉื.
ืงืื JavaScript
ืืืจื ืื ื ืชืชื ืื ืืงืจืื ืืช ืืงืื ืืื ื JavaScript:
const evtSource = new EventSource("/count");
const ti = document.querySelector('input');
evtSource.onmessage = (event) => {
ti.value = event.data;
};
document.querySelector('button').addEventListener('click', async () => {
await fetch('/count', {
method: "POST",
body: JSON.stringify({ value: ti.value }),
contentType: 'application/json',
});
});
ืืฉืื ืืื ืืชืืื ื ืงืืื ืื ืขื ืื ืฉืืื ืงืื ืืืคืื ืืฉืืืืืช (ืืืงืจื ืืื ืืื ืื ื ืืืฅ), ืืืขื (ืืืขืชื ืื ืืฆืืง) ืฉืืคืฉืจ ืืฉืคืจ ืืืฆืืขืื ืื ืขืืฉืื ืืช ื querySelector ืืืจืืื ืืฉืืืจืื ืืช ืืชืืฆืืืช ืืืฉืชื ืื. ืืื ืื ืืฉื ืฉืฆืจืื ืืืคืขืื parseInt ืขื value ืืืืืืง ืฉืืชืงืื ืืกืคืจ, ืืืจืืช ืฉืืื ืืื ืืืจ ืืงืื ืฉืืืืงืชื.
ืืฆื ืฉื ื ืืื ืืฆื ืืคื ืืช ืืืขืืช ืฉืื ืืืืืจืช ืืืืชืจืช contentType, ืฉืฆืจืืื ืืืืืช Content-Type.
ืกื ืืื ืืืื ื False Positives ืืื ืขืืืื ืืืื. ืืืืคื ืืืื ืืฉืืฉ ืืื ืื ื ืืืฉื ืฉืจืฆืื ืืืืืืง ืืืงืื ืืืงืื ืฉืื ื ื Chat GPT ืืื ืืงืื ืืืคืื ืืืขืืืื ืืืืืื ืืืชืจ ืขื ืืงืื, ืืื ืืงืืช ืืืฉืืื ืฉืชืฆืืจืื ืืืฉืงืืข ืืื ืืคืขื ื ืืช ืืชืฉืืื ืฉืื ืืืืคืจืื ืขืืงืจ ืืืคื.1 419
ืืื ืื ืืชืืืง ืืช ืื?
ืืื ืกืืื ืื ืืฉืืืื ืฉืืืื ืืฉืื ืื ืืืจ ืืืื ืืชืืืช ืืงืื ืฉืืืฉ ืขืื ืจืืข ืื ืืคืฉืจ ืืืื ืืชืืืง ืืืชื:
1. ืฆืจืื ืืืชืงืื ืชืืื ืืช ืืืืืืืช ืืฉืืื ืืืจืืฅ ืืช ืืคืจืืืงื, ืืืชืืื ืืช ืืืื ืืืฉืืช ืืืืืื ืื ืืฉืชื ืืช ืืขืชืื ืงืจืืืืช.
2. ืืคืจืืืงื ืืฉืชืืฉ ืืืื ืืงืช ืขืืืื ืฉืืฃ ืืื ืื ืืฉื ืขืืื ืงืืื (ืื ืืืื ื! ืืืขืชื ืฉืืืื ื ืฆืจืืืื ืืื ืืช ORM ืืขืฆืื ื).
3. ืืคืจืืืงื ืืฉืชืืฉ ืืฉืคืช ืชืื ืืช ืืืฉ ืืืืืืช ืืืืืืืจืืช, ืื ืขืืืื ืืืฉื ืืืชืขืืื ืช ืืขืชืื ืงืจืืืืช (ืื Julia ืื ื ืืกืชืื ืขืืืื).
4. ืืื ืืจื ืืืคืขืื ืืช ืืคืจืืืงื ืขื ืืืฉื ืคืืชืื, ืืื ืจืฅ ืจืง ืืขื ื. ืืจืฆื ืืงืืืืช ืืฉืชืืฉืช ืืกืืืืื.
5. ืืืืืฉืื ืืืืจืื ืื ืื ืคืขื ืฉืืื ืชืืงืื ืงืื ืืืคืชืืื ืื ืืืกืืคื ืืืืงื ืืื ืขื ืืชืืงืื ืื ืื ืืื ืืื.
6. ืงืื ืืฉืชื ื ืืื ืืชืืขืื ืฉืืืืื ืืืชื ื ืฉืืจ ืืื ืฉืื ืื.
7. ืืฃ ืืื ืื ืืืืข ืืื ืื ืืชื ืฆืจืื ืืฉืืจื ืชืืืืืช.
ืื ืืื ืกืืื ืื ืฉืืคืฉืจ ืืืืืช ืืคืืื ืืคื ื ืฉืืชืืืืื ืืขืืื ืขื ืคืจืืืงื, ืืืืืืื ืืชืช ืืื ืืื ืืืงืฆืื ืืื ืืื ืขืื ืืคืฉืจ ืืืื ืืืืกืืฃ ืงืื ืืื ืฉืืื ืืชืืืื.
1 419
ืืืืจืช ืืืื ืืคืจืืืงื ืฆื
ืืืฉืื ืฉืืชืฃ ืืฉืืืข ืืจืืื ืคืจืืืงื ืฉืืื ืืืงืฉืื ืฉืืชื ืืืื. ืืกืืืง ืืืื ืืืืื? tailwind ื next.js, ืืื ืื ืืืื ืืืืืจ ืืืืืืื ืืืขืืื ืืจืฉืช.
ืืืืชื ืฉืื ืืจืืืช ืืช ืืงืื ืืื ืืคืืื ืืื ืื ื ืืืืจ ืฉืืื ืฉื ืจืืืงื ืจืืืืจ ืืื ืื ืจืืืืงืก, ืื ืืืืงืืช ืืื ืชืืขืื. ืืฉืืืืจื ืืื ืืื ืืช ืืฉืื ืืืจ ืื ืฆืจืื ืืฉืืืจ ืืช ืืจืืฉ ืขื ืืืื ืืชืืืืืื ืืกืคืืง ืืืคืขืื IDE ืืืืชืืื ืืืชืื ืงืื.
ืื ืฆืจืื ืืฉืื ืื ืืฉืชื ืืขืืืืช ืฉืื ืฉืื ืขืืฉืื ืกืืื ืืฆืืืืช ืืืื-
1. ืืคืชืืื ืจืืื ืืืฉืืื ืฉืื ืื ืืฆืืืื ืืื ืืช ืคืจืืืงื ืฆื ืืืืจ ืืกืืืง ืืื ืืืืื "ืคืฉืื", ืื ืืืื ืืืฉืชืืฉ ืืืืชื ืกืืืง ืืื ืืืืื ืื ืืคืจืืืงืืื ืืกืืืืื.
2. ืืคืชืืื ืจืืื ืืืจืื ืืืฉืืื ืฉืืื ืืฆื ืืื ืืช ืืฉืื ืืืื ืื ืจืง ืืชืงื ืช ืืืืื ืืืืืจืืช ืืคืจืืืงื ืืืฉ ืืื ืฉืืืื ืื ืื ืืื ืฉืืฉ ืืื ืืคืจืืืงื ืืืกืืื ืืขืืืื (ืจืืืืงืก, ืืืืคืกืงืจืืคื, ืงืืืจื ืืก, ืืืืงืืช, ืชืืขืื) ืืืงื ืฉืืืข.
3. ืืคืชืืื ืจืืื ืืืจืื ืืืฉืืื ืฉืื ืืืจ ืื ืืื ืื ืคืจืืืงื ืฆื ืขืืืฃ ืืื ืืช ืืฉืื ืืกืืืง ืืื ืืืืื ืฉืื ืื ืืืืจืื, ืืฉืื ืืืืืืื ืืืื ืืฉืืืขืืช ืจืง ืขื ืืืืจืช ืืืืื.
ืืืืืฉืืช ืฉืืืคืฉืจืช ืืืชืืื ืืช ืืืื ืืคืจืืืงื, ืืืืืจ ืคืจืืืงื ืงืื ืืืืฆืืื ืืื ืืช ืืืชื ืืืื ืืื ืืจืฉืืื - ืื ืื ืืชืืฆืื ืืื ืืกื ืืื ืืฉืืง ืฉืืื ืืืงืฉืื.
1 419
ืื OpenAI ืขืืจื ืืจืืืงืก
ืืจืฉืช ืืืขืฉืช ืกืืื ืืืขืืจ ืฉื OpenAI ื next ื remix. ืืืื ืืฉืชืคืื ืืืืืืช ืืืกืืืจืื ืืื ืื ืืื ืืื ืงืฉื ืืขืืื ืขื next ืืืื ื App Router ืืืืฉ ืืกืืื ืืื. ืื ืกื ืืขืฉืืช ืงืฆืช ืกืืจ:
1. ืืคืืืงืฆืืืช ืขืืื-ืืืื (SPA) ืื ืืกืืื. ืื ืชืืื ืืื. ืกืคืจืืืช ืืคืืชืื SPA ืืื react-router ืงืืืืืช ืืืืืง ืืืื ืฉืื ืืกืืื ืืฉืืืฃ ืืื ืืื ืื ืืืคื ืืืืืฆืืช ืขื ืืคืชืืจ "ืืืืจื" ืืกืืื ืืืช ืืืคืืคื. ืื ืื ื ืืื ืื SPA ืื ืืคืขืืื ืื ื ืืชื ืืืืืช ืฉืืืืฉ ืืืื ืืืชืจ.
2. ืจืื ืืืจ ืืฆื ืฉืจืช (SSR) ืื ืืคืืื ืขืื ืืืชืจ ืืกืืื, ืื ืืฉ ืื ื ืืช ืื ืืกืืืื ืฉื SPA ืืื ืืกืฃ ืฆืจืืืื ืืืชืืืื ืขื ื ืืืื Cache ืืฆื ืฉืจืช ืืืืืื ืฉืืงืื ืฉื ืืงืืืคืื ื ืืืช ืื ืืคืขืื ืืืจืื ืฉืฆืจืืืื ืืช window ืืฉืืื ืจืฅ ืืฉืจืช. ืื ืื ื ืืจื ืืจืื ืืฆื ืฉืจืช ืื ืื ืืขื ืืืคืืฉ, ืงืืจืื ืืกื ืืขืื ืืืื ืจืืื ืืืจืื ืืืืืื ืืงืื ืืช ื HTML ืืืื ืื ืื ืื ืื ืืจืืฆืื JavaScript.
3. ืงืืืคืื ื ืืืช ืฆื ืฉืจืช (RSC) ืื ืืคืืื ืขืื ืืืชืจ ืืกืืื ืืจืื ืืืจ ืฆื ืฉืจืช. ืืจืื ืืืจ ืฆื ืฉืจืช ืจืืื ืื ืืงืื ืฉื ืืืคืืืงืฆืื ืืฉืืฉ ืืื ืืืช ื HTML ืืื ื ืฉืื ืืืคืืคื ืืื ืืืืกืืฃ ืืช ื JavaScript ืืงืื ืืืืคืื ืืืืจืืขืื. ืืืื ื ืฉื ืงืืืคืื ื ืืืช ืฆื ืฉืจืช ืฆืจืื ืืืืืจ ืืจืืฉ ืืืื ืงืืืคืื ื ืืืช ืืืืืืช ืงืื JavaScript ืฉืฆืจืื ืืจืืฅ ืืืคืืคื (ืืื ื"ืืืื" ืื ืืงืืืคืื ื ืืืช ืฆื ืืงืื) ืืืช ืืงืื ืฉืืื ืื ื ืฉืืืืื ืืืคืืคื, ืืืฉ ืงืืืคืื ื ืืืช ืืืจืืช ืฉืืื ืืื ืงืื ืืืคืื ืืืืจืืขืื ืืืื ื ืขืืืฃ ืื ืืฉืืื ืืช ืืงืื ืฉืืื ืืืคืืคื. ืืื ืืืคืืืงืฆืื ืืืืื ืืคืฉืจ ืืฉืืื ืืืคืืคื ืคืืืช ืงืื ืืืงืื ืฉืืคืืจ ืืืื ื ืืืขืื ื ืืืืืืืช ืืืฉืชืืฉ.
ืื ืืื ืฉื ืืืชืจ ืืื ืืคืชืืื ืืื ืืืืืจ ืืช ืฉืืืช ืืขืืืื ืืื ืืกืืืืช ืื ืืืื ื ืฆืืจื ืืช ืื ืืขืชืื. ืื ืื ืฉืงืจื ื OpenAI, ืฉืืื ืื ืืคืืืงืฆืืืช SPA ืืื ืืฉืชืืฉื ื next.js ืฉืืชืืื ืืงืืืคืื ื ืืืช ืฆื ืฉืจืช. ืืฉืื ืืกืืื ืื ืื ืจืื ืืืื ื ืฉืื ืืฉืืืื ืืืชืจ ืืื ืขื ืืืืืจื ืืืื ืืืืืืช ืฉืืื ืืขืืจื ืืืคืืืงืฆืืืช SPA ืจืืืื ืขื ืจืืืงืก, ืฉืืื ืืกืคืืง ืืืืจืื ื ืืืชืืื ืืืจื ืืชืื React Router.
ืื ืฉืืืคืฉ ืชืืืืฉืช ืืืืื ืืืืื ืืืืื ื ืืื next.js ื react router ืืืขืชื ืื ืืืฆื ืืืชื ืืื. ืื ืืืจ ืืฉ ืคื ืจืง ืืืืื ืฉื ืืืืื ืืื ืฉื ื ืืืืื ืืืื ื ืืืชืจ ืืืืืงืช ืฉื ืื ืืชืืื ืืื. ืืืืคื ืืืื ืืชืืื ืฉื ืฉืืืช ืืขืืืื ืืืชืืจ ืืืชื ืื ืื ื ืืชืืืืืื ืืืืืืืฆืื ืืืื ืืืืืืื ืฉื ืืืขืจืืช ืฉืื ื ืืืช ืืืจื ืืืืื ืืืืชืจ ืืืืืจ ืกืคืจืืืช ืืคืจืืืงื ืืื ืฉืื ื.
1 419
ื ืืกืื Hono - ืกืื ืืจืื ืขืจื ืืื ืืคืืคื ืื
ืืชืืืื ืฉื ืืื ื ื Web Standards ืืืืื ืืื ืฉืืืื ืงื ืืืชืื ืงืื ืืื ื ืฉืืฉืชืืฉ ื Streams ืืื ืืงืื ืืืืขืืช ืืืืืฉืื ืืืืืื ืืืชื ืืืื ืืืืืฉืื ืืืืจืื ืืืชืจ, ืืื ื SSE. ืืืื ื ืจืื ืืื ืืืืจ ืืช ืืืืืื ืืคืจืืืงื ืืื ื ื Hono.
ืื ืื ืื ื ืืื ืื
ืืืชืจ ืืืื ืชืืืช ืืงืกื ืืืคืชืืจ. ืื ืืฉ ืืกืคืจ ืืืืฉืื ืฉืืืืืจืื ืืืชืจ ืืืื ืืื ืืืืฅ ืขื ืืืคืชืืจ ืื ืืขืจื ืืชืืืช ืืืงืกื ืืืฉืื ืืื ืืืคืืคื ืื ืฉื ืืืืืฉืื ืืืืจืื ืืืขืืืื ืขื ืืืกื ืฉืืื.
ืงืื ืฆื ืฉืจืช
ืงืื ืฆื ืืฉืจืช ืืืจืื ืืฉื ื ื ืชืืืื - ืืื ืืืคื ืืขืืืืื ืืืฉื ื ืืืคื ืืจืืฉืื. ืื ืืืืฉ ืฉื ืื ืก ืืืชืจ ืคืืชื ืืืืืจ ืื ืชืื ืืจืืฉืื, ืืื ืคืขื ืฉืืืืฆืื ืขื ืืืคืชืืจ ืืืืืฉืื ืฉืืืืื ืืืืขืช POST ืื ืชืื ืืขืืืืื. ืื ื ืืชืืื ืืืืืจืช ืืขืจื ืฉื ืื ืืืืืฉืื ืฉืืจืืข ืืืืืจืื:
const clients: Array<SSEStreamingApi> = [];
ืืืืฉืง SSEStreamingApi ืืืืข ื Hono ืืืืคืฉืจ ืืฉืืื ืืืจืืขื ืฆื ืฉืจืช ืืืงืืืืช ืฉืืืชืื ืื ืืื. ื ืชืื ืืจืืฉืื ื ืจืื ืื:
app.get('/count', (c) => {
return streamSSE(c, async (stream) => {
stream.writeln("data: Start\n\n");
clients.push(stream);
const id = clients.length - 1;
stream.onAbort(() => {
clients.splice(id, 1);
console.log(\removed client ${id}\);
});
while(true) {
await stream.sleep(1000);
}
})
})
ืืงืืืืช ืฉืืชืืืจืื ืืืชืจ ืืืื ืกื ืื ืชืื ืื ืืื ืืืืจืฉื ืืงืืืช ืืืืขืืช. ืืคืื ืงืฆืื streamSSE ืืืืขื ื hono. ืืื ืืงืืืช ืืช ืืืืืงื ืืืืืืจ ืฉื hono ืขืฆืื ืืคืื ืงืฆืืืช Callback. ืื ืคืขื ืฉืืงืื ืืชืืืจ ืืืคืขืืช ืคืื ืงืฆืืืช ื Callback ืขื ืืคืจืืืจ stream ืฉืืืืฆื ืืช ืืจื ืืชืงืฉืืจืช ืืืืชื ืืืืฉ. ืืงืื ืืืืืื ืื ื ืืืืืง ืืช ืืืืืืงื ืืื ืืืขืจื ืืื ืจืืฉื ืขืืื ืคืื ืงืฆืืืช ืืืืื ืื ืฉืืฉืืืจื ืืืกืืจ ืืืืืืืืช ืืื ืืืกืจ ืืืืขืจื.
ืืคืื ืงืฆืื ืืกืชืืืืช ืืืืืื ืืื ืกืืคืืช ืฉืืืจืชื ืืฉืืืจ ืืช ืืืืืืจ ืืืืื. ืืช ืืืชืืื ืื ื ืืืฆืข ืืงืื ืืืืคืื ืื ืชืื ืืขืืืืื:
app.post('/count', async (c) => {
console.log(\POST /count\);
const { value } = await c.req.json();
console.log(\Got ${value}\);
clients.forEach(c => {
c.writeSSE({ data: value });
})
return c.json({ message: 'Value received' });
})
ืงืื ืื ื ืงืจื ืื ืคืขื ืฉื ืฉืืืช ืืงืฉืช POST ืื ืชืื ืืขืืืืื. ืืงืื ืจืฅ ืขื ืื ืืืงืืืืช ืืืขืจื ืืืืชื ืืื ืืื ืืื ืืช ืืขืจื ืฉื ืฉืื.
ืืขืืืชื ืืช ืืงืื ืืืื ืฉื main.ts ืขื ืื ื import-ืื ืืืืืืื ืืืืื ืื ืืืฆืื ืืืชื ืืืฃ ืืคืจืืืงื:
https://github.com/ynonp/hono-sync-counter-demo
ืงืื ืฆื ืืงืื
ืืฆื ืืืงืื ืื ื ืจืืฆื ืืืชืืืจ ืื ืชืื ืืจืืฉืื ืืขืืืื, ืืืืจื ืื ืืฉืืื ืืืืขืืช POST ืื ืชืื ืืขืืืื ืื ืคืขื ืฉืืืืฆืื ืขื ืืืคืชืืจ. ืื ืงืืืฅ ื JavaScript ืฉืื ื ืฉืืื ืืืงืื:
// client/sync.js
const evtSource = new EventSource("/count");
const ti = document.querySelector('input');
evtSource.onmessage = (event) => {
ti.value = event.data;
};
document.querySelector('button').addEventListener('click', async () => {
await fetch('/count', {
method: "POST",
body: JSON.stringify({ value: ti.value }),
contentType: 'application/json',
});
});
ืืขืืืื ืขื SSE ืืืคืืคื ืืืื ื ืืื ืืื ื ืืขืืืฃ ืืืชื ืขื ืคื ื Web Sockets ืขืืืจ ืขืืืืื ืื ืืกืื ืืจืื ืืื ืืฆื ืฉืจืช.
ยกYa disponible! Investigaciรณn de Telegram 2025 โ los principales insights del aรฑo 
