csznet / tgstate Goto Github PK
View Code? Open in Web Editor NEW使用Telegram作为存储的文件外链系统,不限制文件大小和格式。
Home Page: https://www.csz.net
License: MIT License
使用Telegram作为存储的文件外链系统,不限制文件大小和格式。
Home Page: https://www.csz.net
License: MIT License
请问一下如何在非Vercel下,搭建旧版本?
我喜欢旧版本的上传完文件以后在该页面即可点击复制markdown代码。
另外在获取FileIDhttps://github.com/csznet/tgState#%E8%8E%B7%E5%8F%96fileid,我用的docker方式安装的网盘模式,那要怎样获取+/d/+FileID的地址?因为我使用的频道,当我回复刚上传的图片get并没有任何反应。。
flag provided but not defined
rt
我在vps使用二进制运行,从群组转发了一个50M的视频,生成连接后显示Failed to fetch content
填写你的bot token,这个怎么获取?
RT,需要一个反代配置规则
如题,一部分直链正常,一部分mp3和mp4格式的直链在浏览器访问时出现直接下载的问题。
直接在tg上发送的图片文件无法获取链接。
比如 51MB的文件 上传成功后
下载时 下载到 50MB 就失败了.
而且没有下载进度 ????
套cf之后页面内容直接成乱码了怎么回事,直接显示源码,标签都没事,文字直接锟斤拷了,就下面这样,cdn一关就好了
`
<title>Telegram鍥惧簥</title>
<style>
#uploadButton,
#uploadFileLabel {
display: block;
max-width: 200px; /* 鍥哄畾瀹藉害 /
margin: 0 auto; / 灞呬腑 /
margin-bottom: 10px; / 娣诲姞搴曢儴闂磋窛 */
}
body {
font-family: Arial, sans-serif;
text-align: center;
}
h1 {
color: #333;
}
.custom-file-input {
display: none;
}
.custom-file-label {
background-color: #007BFF;
color: #fff;
padding: 10px 20px;
cursor: pointer;
}
.custom-file-label:hover {
background-color: #0056b3;
}
#uploadButton {
background-color: #007BFF;
color: #fff;
padding: 10px 20px;
border: none;
cursor: pointer;
}
#uploadButton[disabled] {
background-color: #ccc;
cursor: not-allowed;
}
#uploadButton:hover {
background-color: #0056b3;
}
#response {
margin-top: 20px;
padding: 10px;
}
.response-item {
margin-bottom: 10px;
padding: 10px;
border-radius: 5px;
}
.response-success {
background-color: #d4edda;
border-color: #c3e6cb;
color: #155724;
}
.response-error {
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
}
#loading {
display: none;
}
.copy-code{
margin: 5px;
}
.copy-links{
margin-top: 5px;
}
#uploadButton[disabled]:hover {
background-color: #ccc;
cursor: not-allowed;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>涓婁紶鍥剧墖鍒� Telegram</h1>
<label for="uploadFile" id="uploadFileLabel" class="custom-file-label">閫夋嫨鏂囦欢</label>
<input type="file" name="image" id="uploadFile" accept=".jpg, .jpeg, .png" class="custom-file-input">
<button id="uploadButton">涓婁紶</button>
<div id="loading">涓婁紶涓�...</div>
<div id="response" class="ui-widget">
</div>
<script>
// 鐩戝惉绮樿创浜嬩欢
document.addEventListener('paste', function (e) {
var items = e.clipboardData.items;
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.type.indexOf('image') !== -1) {
// 鑾峰彇绮樿创鐨勫浘鐗囨枃浠�
var file = item.getAsFile();
// 璋冪敤涓婁紶鍑芥暟锛屽皢file浼犻€掔粰涓婁紶閫昏緫
$('#uploadFileLabel').text("宸查€夋嫨鍓创鏉挎枃浠�").css('background-color', '#0056b3');
uploadImg(file);
}
}
});
$(document).ready(function () {
$('#uploadFile').change(function () {
var fileName = $(this).val().split('\\').pop();
if (fileName) {
$('#uploadFileLabel').text('宸查€夋嫨鏂囦欢: ' + fileName).css('background-color', '#0056b3');
} else {
$('#uploadFileLabel').text('閫夋嫨鏂囦欢').css('background-color', '#007BFF');
}
});
$('#uploadButton').click(function () {
var fileInput = document.getElementById('uploadFile');
var file = fileInput.files[0];
if(file){
uploadImg(file)
}else{
alert('璇烽€夋嫨涓€涓浘鐗囨枃浠�');
}
});
});
function uploadImg(file){
var formData = new FormData();
formData.append('image', file);
// 绂佺敤涓婁紶鎸夐挳骞舵樉绀簂oading
$('#uploadButton').prop('disabled', true);
$('#uploadButton').text('涓婁紶涓�');
$('#loading').show();
var baseUrl = window.location.protocol + "//" + window.location.hostname;
if(window.location.port !== "80" && window.location.port.length>0){
baseUrl = baseUrl + ":" + window.location.port;
}
$.ajax({
type: 'POST',
url: baseUrl+'/api',
data: formData,
contentType: false,
processData: false,
success: function (response) {
if (response.code === 1) {
var imgUrl = baseUrl + response.message;
var newItem = $('<div class="response-item response-success">涓婁紶鎴愬姛锛屽浘鐗囧閾撅細<a target="_blank" href="' + imgUrl + '">' + imgUrl + '</a>' +
'<div class="copy-links">' +
'<span class="copy-code" data-clipboard-text="<img src="' + imgUrl + '" alt="Your Alt Text">">HTML</span>' +
'<span class="copy-code" data-clipboard-text="![Alt Text](' + imgUrl + ')">Markdown</span>' +
'<span class="copy-code" data-clipboard-text="[img]' + imgUrl + '[/img]">BBCode</span>' +
'</div></div>');
$('#response').prepend(newItem); // 灏嗘柊鏁版嵁鏀惧湪鏈€鍓嶉潰
// 娓呴櫎鏂囦欢杈撳叆妗嗙殑鍊�
$('#uploadFile').val('');
$('#uploadFileLabel').text('閫夋嫨鏂囦欢').css('background-color', '#007BFF');
// 娣诲姞澶嶅埗鍔熻兘
$('.copy-code').click(function () {
var textToCopy = $(this).data('clipboard-text');
var tempInput = $('<input>');
$('body').append(tempInput);
tempInput.val(textToCopy).select();
document.execCommand('copy');
tempInput.remove();
// 鏄剧ず澶嶅埗鎴愬姛鏂囨湰
var copyText = $(this);
var originalText = copyText.text();
copyText.text('澶嶅埗鎴愬姛');
setTimeout(function () {
copyText.text(originalText);
}, 1000);
});
} else {
var newItem = $('<div class="response-item response-error">涓婁紶澶辫触,閿欒淇℃伅锛�' + response.message + '</div>');
$('#response').prepend(newItem); // 灏嗘柊鏁版嵁鏀惧湪鏈€鍓嶉潰
}
},
error: function () {
var newItem = $('<div class="response-item response-error">涓婁紶澶辫触</div>');
$('#response').prepend(newItem); // 灏嗘柊鏁版嵁鏀惧湪鏈€鍓嶉潰
},
complete: function () {
// 鍚敤涓婁紶鎸夐挳骞堕殣钘弆oading
$('#uploadButton').prop('disabled', false);
$('#uploadButton').text('涓婁紶');
$('#loading').hide();
}
});
}
</script>
<a href="https://www.csz.net/"><img src="https://www.csz.net/csznet.png"></a>
</body>
</html>
`
版本:1.2.6
通过在网页粘贴的形式上传图片发现无法获取外链地址
docker run -d -p 8088:8088 --name tgstate -e TOKEN=1241176317:xxxxxx -e CHANNEL=@https://t.me/xxxxx csznet/tgstate:latest这个配置哪里有问题嘛
root@C20230721219872:~# ./tgState -token ****** -channel @****** -port ****** -mode pan
启动Web服务器,监听端口 ******
2023/10/23 14:09:56 Authorized on account ******
2023/10/23 14:09:56 Endpoint: getUpdates, params: map[allowed_updates:null timeout:60]
2023/10/23 14:09:57 Endpoint: getUpdates, response: ***********************
2023/10/23 14:09:57 Endpoint: getUpdates, params: map[allowed_updates:null offset:747271532 timeout:60]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0xe8 pc=0x70375f]
goroutine 18 [running]:
csz.net/tgstate/utils.BotDo()
/home/runner/work/tgState/tgState/utils/utils.go:90 +0x27f
created by main.main
/home/runner/work/tgState/tgState/main.go:24 +0x85
请问这是出现了什么问题呢?
func BotDo() {
bot, err := tgbotapi.NewBotAPI(conf.BotToken)
if err != nil {
log.Println(err)
return
}
bot.Debug = true
log.Printf("Authorized on account %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updatesChan := bot.GetUpdatesChan(u)
for update := range updatesChan {
// 私聊机器人
if update.Message != nil {
// 处理get
if update.Message.Text == "get" {
if update.Message.ReplyToMessage != nil {
// video
if update.Message.ReplyToMessage.Video != nil {
if update.Message.ReplyToMessage.Video.FileID != "" {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.ReplyToMessage.Video.FileID)
_, err := bot.Send(msg)
if err != nil {
log.Println(err)
}
}
}
// 其他文件
if update.Message.ReplyToMessage.Document != nil {
if update.Message.ReplyToMessage.Document.FileID != "" {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.ReplyToMessage.Document.FileID)
msg.ReplyToMessageID = update.Message.MessageID
_, err := bot.Send(msg)
if err != nil {
log.Println(err)
}
}
}
}
}
}
// 频道
if update.ChannelPost != nil {
// 处理get
if update.ChannelPost.Text == "get" {
if update.ChannelPost.ReplyToMessage != nil {
// video
if update.ChannelPost.ReplyToMessage.Video != nil {
if update.ChannelPost.ReplyToMessage.Video.FileID != "" {
msg := tgbotapi.NewMessage(update.ChannelPost.Chat.ID, update.ChannelPost.ReplyToMessage.Video.FileID)
_, err := bot.Send(msg)
if err != nil {
log.Println(err)
}
}
}
// 其他文件
if update.ChannelPost.ReplyToMessage.Document != nil {
if update.ChannelPost.ReplyToMessage.Document.FileID != "" {
msg := tgbotapi.NewMessage(update.ChannelPost.Chat.ID, update.ChannelPost.ReplyToMessage.Document.FileID)
_, err := bot.Send(msg)
if err != nil {
log.Println(err)
}
}
}
}
}
}
}
}
./tgState -token ccc -target=@ccc mode=p
这样对吗?再加别的参数怎么添加?
超过10MB文件,上传成功后,传输回来得到的文件不是完整的,尾部的一些数据丢失.
服务器docker部署的.链路: vps <-> CDN <-> CF <-> 浏览器
上传失败
无论是官方自带的 *.vercel.app域名,还是用自己的域名(解析到cname.vercel-dns.com),还是套了CF cdn的域名,都不行
上传图片可以,但上传视频(1M多点)不行,上传apk文件 3M多点可以,60多M不行
我是上传到公开群组
上传失败的视频我看了下,在tg群组中能看到
上传失败的apk文件没有在tg中看到
用vercel部署的,上传失败
上传后图片大小变小了
v部署好了后,我在设置密码的时候填写的none,结果访问时候还需要密码,修改密码也登陆不了,到底是什么问题,是不是有默认密码。
可以了,是我梯子的问题。但是上传了视频。外链地址不能正常播放啊
环境: Debian + Docker
问题描述: 程序运行成功,可以通过 ip:8088
访问,但通过反向代理的域名访问,页面空白
配置文件
Nginx
server
{
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
listen [::]:80;
server_name domain.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/domain.com;
#SSL-START
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/web_conf/ssl/domain.com/fullchain.pem;
ssl_certificate_key /www/server/web_conf/ssl/domain.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
#SSL-END
#301-START
#PROXY-START
include /www/server/web_conf/nginx/proxy/domain.com/*.conf;
#PROXY-END
#ERROR-PAGE-START
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START
include /www/server/web_conf/php/conf/enable-php-00.conf;
#PHP-INFO-END
#REWRITE-START
include /www/server/web_conf/nginx/rewrite/domain.com.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
access_log /www/wwwlogs/domain.com.log main;
error_log /www/wwwlogs/domain.com.error.log;
}
错误日志
2023/11/19 10:07:39 [error] 1928573#0: *89077 open() "/www/wwwroot/domain.com/password/resource.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /password/resource.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:39 [error] 1928573#0: *89078 open() "/www/wwwroot/domain.com/password/resource.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /password/resource.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:39 [error] 1928573#0: *89078 open() "/www/wwwroot/domain.com/pl/alior/alior-logo.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/alior/alior-logo.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:40 [error] 1928573#0: *89079 open() "/www/wwwroot/domain.com/pl/alior/alior-logo.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/alior/alior-logo.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:40 [error] 1928573#0: *89079 open() "/www/wwwroot/domain.com/bpegstar/pge/logo.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /bpegstar/pge/logo.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:40 [error] 1928573#0: *89080 open() "/www/wwwroot/domain.com/bpegstar/pge/logo.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /bpegstar/pge/logo.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:42 [error] 1928573#0: *89082 open() "/www/wwwroot/domain.com/pl/banks-logo/visa-master.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/banks-logo/visa-master.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:42 [error] 1928573#0: *89083 open() "/www/wwwroot/domain.com/pl/banks-logo/visa-master.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/banks-logo/visa-master.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:43 [error] 1928573#0: *89084 open() "/www/wwwroot/domain.com/pl/przelewy24/trnRequest/DB3D9963A9/data.php" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/przelewy24/trnRequest/DB3D9963A9/data.php HTTP/1.1", host: "domain.com"
2023/11/19 10:07:43 [error] 1928573#0: *89085 open() "/www/wwwroot/domain.com/pl/przelewy24/trnRequest/DB3D9963A9/data.php" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/przelewy24/trnRequest/DB3D9963A9/data.php HTTP/1.1", host: "domain.com"
2023/11/19 10:07:44 [error] 1928573#0: *89085 open() "/www/wwwroot/domain.com/meta/mm-logo.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /meta/mm-logo.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:44 [error] 1928573#0: *89086 open() "/www/wwwroot/domain.com/meta/mm-logo.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /meta/mm-logo.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:44 [error] 1928573#0: *89086 open() "/www/wwwroot/domain.com/files/eye.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /files/eye.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:45 [error] 1928573#0: *89087 open() "/www/wwwroot/domain.com/files/eye.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /files/eye.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:45 [error] 1928573#0: *89087 open() "/www/wwwroot/domain.com/pre-land/eye.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pre-land/eye.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:45 [error] 1928573#0: *89088 open() "/www/wwwroot/domain.com/pre-land/eye.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pre-land/eye.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:45 [error] 1928573#0: *89088 open() "/www/wwwroot/domain.com/front_end/front_end_files/logo-white.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /front_end/front_end_files/logo-white.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:46 [error] 1928573#0: *89089 open() "/www/wwwroot/domain.com/front_end/front_end_files/logo-white.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /front_end/front_end_files/logo-white.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:47 [error] 1928573#0: *89091 open() "/www/wwwroot/domain.com/shippinginfo.html" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /shippinginfo.html HTTP/1.1", host: "domain.com"
2023/11/19 10:07:48 [error] 1928573#0: *89092 open() "/www/wwwroot/domain.com/shippinginfo.html" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /shippinginfo.html HTTP/1.1", host: "domain.com"
2023/11/19 10:07:48 [error] 1928573#0: *89093 open() "/www/wwwroot/domain.com/.DS_Store" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /.DS_Store HTTP/1.1", host: "domain.com"
2023/11/19 10:07:49 [error] 1928573#0: *89094 open() "/www/wwwroot/domain.com/.DS_Store" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /.DS_Store HTTP/1.1", host: "domain.com"
2023/11/19 10:07:49 [error] 1928573#0: *89094 open() "/www/wwwroot/domain.com/202" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /202 HTTP/1.1", host: "domain.com"
2023/11/19 10:07:49 [error] 1928573#0: *89095 open() "/www/wwwroot/domain.com/202" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /202 HTTP/1.1", host: "domain.com"
2023/11/19 10:07:50 [error] 1928573#0: *89095 open() "/www/wwwroot/domain.com/image/loading/loading-spin.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /image/loading/loading-spin.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:50 [error] 1928573#0: *89096 open() "/www/wwwroot/domain.com/image/loading/loading-spin.svg" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /image/loading/loading-spin.svg HTTP/1.1", host: "domain.com"
2023/11/19 10:07:50 [error] 1928573#0: *89096 open() "/www/wwwroot/domain.com/app/Panel/botActBan/ip_ban.txt" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /app/Panel/botActBan/ip_ban.txt HTTP/1.1", host: "domain.com"
2023/11/19 10:07:51 [error] 1928573#0: *89097 open() "/www/wwwroot/domain.com/app/Panel/botActBan/ip_ban.txt" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /app/Panel/botActBan/ip_ban.txt HTTP/1.1", host: "domain.com"
2023/11/19 10:07:51 [error] 1928573#0: *89097 open() "/www/wwwroot/domain.com/pl/zabka/p32k2l13/start-transaction/index.php" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/zabka/p32k2l13/start-transaction/index.php HTTP/1.1", host: "domain.com"
2023/11/19 10:07:51 [error] 1928573#0: *89098 open() "/www/wwwroot/domain.com/pl/zabka/p32k2l13/start-transaction/index.php" failed (2: No such file or directory), client: 79.137.68.184, server: domain.com, request: "GET /pl/zabka/p32k2l13/start-transaction/index.php HTTP/1.1", host: "domain.com"
2023/11/19 10:14:19 [error] 1928761#0: *7 open() "/www/wwwroot/domain.com/favicon.ico" failed (2: No such file or directory), client: 36.61.198.26, server: domain.com, request: "GET /favicon.ico HTTP/2.0", host: "domain.com", referrer: "https://domain.com/"
2023/11/19 10:14:22 [error] 1928761#0: *7 open() "/www/wwwroot/domain.com/favicon.ico" failed (2: No such file or directory), client: 36.61.198.26, server: domain.com, request: "GET /favicon.ico HTTP/2.0", host: "domain.com", referrer: "https://domain.com/"
2023/11/19 10:20:07 [error] 1928761#0: *9 open() "/www/wwwroot/domain.com/app" failed (2: No such file or directory), client: 172.233.85.127, server: domain.com, request: "GET /app HTTP/2.0", host: "domain.com"
2023/11/19 10:22:48 [error] 1928761#0: *10 open() "/www/wwwroot/domain.com/favicon.ico" failed (2: No such file or directory), client: 5.164.29.116, server: domain.com, request: "GET /favicon.ico HTTP/1.1", host: "domain.com"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.