Git Product home page Git Product logo

Comments (94)

Mishiranu avatar Mishiranu commented on August 24, 2024

Вроде почти всё сделал, кроме двух вещей.

Во-первых, мне не очень нравится апи списка досок т. к. они не упорядочены. Правильно отдавать массив объектов с полями "board_name" и "title", например. Или на сервере в принципе не предусмотрен порядок досок, а на страницах доски вбиты вручную?

Во-вторых, поддержку "no_pomf" добавить не получится. Модули тут бессильны, новые кнопочки-галочки можно добавлять только на стороне приложения. Я бы подумал насчёт добавления в приложение, но фича уж больно уникальная и, по моему мнению, не сильно востребованная.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Массив сейчас переделаю с сортировкой и ключами board_desc/board_name. На страницах вручную забиты, руки никак не дойдут допилить динамическую подгрузку досок.

Окей, no_pomf - не критично.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Так доски по алфавиту сортируются? Просто сортировать json-объект нет никакого смысла, потому что он в принципе не может быть упорядоченным, в любом случае стоит сделать массив.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Да. Действительно, но пусть будет, ибо мне один аргумент достаточно было json энкодеру скормить.

Готово, сейчас нормально?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

У меня что-то сайт вообще отвалился.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Сейчас вроде открывается, у хостера что-то с IO, диски оче медленно работают.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Так что, думаешь объектом всё таки оставить? А то я что-то не вижу разницы по сравнению с прошлым разом, лол.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Не. Т.е. мне просто data массивом сделать?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Да, всё верно. И к каждому элементу массива добавить ещё поле кода доски.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Интернеты отвалились :\

Что-то вроде

   "data" : [
      {
         "board_desc" : "Чятик для двоих",
         "board_key" : "a",
         "board_name" : "Аниме"
      },
    ]

получилось

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Или так сделать?

   "data" : [
      "a" : {
         "board_desc" : "Чятик для двоих",
         "board_key" : "a",
         "board_name" : "Аниме"
      },
    ]

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Первый вариант лучше. Короче, как сейчас — лучше всего.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Done.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Ок, тогда я всё сделал, сейчас обновлю.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Сек

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Я думаю возврат апи удалялки тоже массивом сделать

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Да это уже необязательно.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Ну ладно, тогда как есть оставлю. Спасибо.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Просто я уже закоммитил релиз, лол. Я могу откатить, конечно, просто стоит ли?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Ну если его легче парсить будет, то думаю да. Или инкремент версии сделать до 1.4 лучше

Алсо, delete еще это выдать может,

Тред закрыт
Неправильный IP - (посты можно удалять без пароля, если айпи клиента совпадает с ip поста)
Пост протух.

Или необязательно хандлить все сообщения?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Ну, мне разницы-то нет, но если хочешь сделать чтобы типа "нормально" было — давай. Выпущу как 1.4 потом.

Обработку этих сообщений тоже добавлю.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Только лучше не так, как сейчас

{
   "error" : [
      {
         "380" : "Неверный пароль для удаления."
      }
   ],
   "error_code" : 200
}

а как-то так например:

{
   "error" : [
      {
         "post_id": "380",
         "reason": "Неверный пароль для удаления."
      }
   ],
   "error_code" : 200
}

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Кстати, вообще для апи рекомендую Content-Type отдавать application/json; charset=utf-8 вместо простого application/json.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Оке, просто переписывать историю коммитов не есть хорошо, если форки есть :D
Теперь такой вывод (наверное еще больше complicated :\ )

"error" : [
      {
         "error_msg" : "Неверный пароль для удаления.",
         "post" : "1331"
      },
   ],

Поправила Content-Type

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Теперь post_id/reason в объекте

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Алсо, клиент куки сохраняет которые с ответом сервера после постинга прилетели?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Нет. Что за куки и для чего они?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

name, если в нейме есть трип который есть в дб, то можно постить на любых досках с неймом и без капчи (что-то вроде пасскодов, лол).

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Не понял, а почему эта кука после постинга появляться должна?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Header set-cookie в ответе task=post.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Не, как куки работают я знаю. Я просто не могу понять, что она делать должна. Имя-то везде можно использовать, кроме некоторых досок, да и капчи тоже я нигде не видел.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

/api/checkconfig проверяет через нее есть ли "специальный" трипкод из дб в имени, и возвращает captcha=0 и names_allowed=1 даже если постинг с неймом в конфиге отключен.

Но наверное нет смысла ковыряться с ней, оверкилл.

Капча есть у всех кроме /RU UA BY KZ EU/

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Так погоди, эта кука же просто хранит последнее введённое имя, так? И при наличии куки просто немного меняется конфиг? То есть фактически мне не надо даже сохранять куку, а просто можно использовать введённое имя?

Про капчу я вообще забыл, что она есть, лол, а ведь она реализована в модуле.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Йеп. Хмм, можно использовать последнее введенное имя, если оно где-то сохраняется, если надо могу инпут name к checkconfig добавить вместо печеньки.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Не, не обязательно, я без проблем смогу сделать чтобы с кукой передавалось.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

А такой вопрос: например, я ввожу имя, которое есть в базе, отправляю пост, иду в d, ввожу там другое имя, снова отправляю пост. Таким образом, кука заменится, но пост отправится со вторым введённым именем?
Вообще было бы хорошо, если бы для тестирования для меня было бы заведено такое имя, хотя бы на время.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Пост отправится только если введено имя, которое в дб, иначе просто "Аноним". В функции постинга тоже проверка есть.

Оки, вот тестовый трип #TestCode

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Я просто думаю, может, в таком случае, стоит оформить это как авторизацию? Дашчан поддерживает авторизацию пользователей.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Хм, можно. Может тогда отдельную куку для этих целей прикрутить (что-то вроде auth, трипкод прошел проверку -> сохранить этот трип в auth и проверять уже по куке auth)?

Имхо так лучше будет.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Да не обязательно, можно как есть оставить. Я вот так хочу сделать:

  1. В настройках надо ввести свой трипкод. Если он проходит авторизацию — сохраняю его.
  2. При открытии окна постинга проверяется наличие сохранённого в настройках трипкода. Если он есть — разрешаю отображение поля ввода имени.
  3. При отправке поста этот трипкод автоматически склеивается с введённым именем.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Да я все равно уже re-implementing this. Добавлю в чекконфиг инпут с auth и в ответ поле вроде check_success.

Мне идея со склеиванием не оче нравится, что если я введу другой трип в поле нейма?

И 2 пункт немного переделать можно будет

  • Отправляем checkconfig с инпутом (или кукой?) auth который содержит трип из настроек при обновлении доски.
    если names_allowed отдает 1 то поле ввода же само включается?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Мне идея со склеиванием не оче нравится, что если я введу другой трип в поле нейма?

if (name.indexOf('#') == -1) name += '#' + authorizedTripcode;

То есть теперь авторизация будет возможна отдельно от трипкода? Это, конечно, лучше.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Да.

Кука auth с трипом должна будет отправляться чекконфигу и функции постинга/удаления, сможешь реализовать?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Смогу. А с удалением что? Типа пароль не нужен?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Удаление без задержки как вариант.

Может функцию авторизации отдельно добавить? пока код еще редактирую

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Готово

/api/authorize?auth=trip, только trip должен быть urlencoded, task=post с правильным трипом также авторизует (отдает куки auth)
/api/checkconfig теперь содержит поле authorized в объекте config

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Лол, заодно обнаружил баг в приложении, в определённый момент ссылка декодируется и вся часть ссылки начиная с # считается фрагментом ссылки и не отправляется на сервер. Буду использовать пост-запрос, но баг устраню в следующей версии на будущее, разумеется.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Great.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Так, к authorize нельзя пост-запросом обращаться, только гет?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Хм, вроде фильтра никакого на нем нет, так что можно.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

У меня чего-то не получается, выдаёт html страницу.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Так должно работать

<form id="postform" action="/wakaba.pl" method="post" enctype="multipart/form-data">
<input type="hidden" name="section" value="b">
<input type="hidden" name="task" value="json">
<input type="hidden" name="json" value="authorize">
<input type="text" name="auth" value="">
</forrm>

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Лол, а я шлю запрос на b/api/authorize.
Попробую тогда.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

rewrite правило /api/ не работает с POST запросами
Оки

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Well, параметр task тут не нужен.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

section, как оказывается, тоже. Ну это логично.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

section == b, если нет аргумента.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Всё, выпустил 1.4 с поддержкой авторизации.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Thanks again

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Хм, а флаги стран прикрутить можно? Поля location, location_full в объекте поста, geoip_enabled в конфиг объекте, флаги лежат в /img/flags/ (файлнеймы капсом)

И еще auth cookie добавить к /api/thread,/api/threads (клиент же оттуда берет конфиг?) и проверку c authorizedTripcode != null можно убрать тогда, если names_allowed будет отдавать 1.

И тут вроде должно быть
int attachmentCount = configObject.optInt("max_files", 4);
вместо
int attachmentCount = configObject.optInt("max_res", 4);

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Хм, а флаги стран прикрутить можно?

Готово

и проверку c authorizedTripcode != null можно убрать тогда

Я, помню, специально делал именно так, как это сделано сейчас, но это было когда ещё кука auth не поддерживалась. Сейчас, наверное, можно убрать эту проверку.

И тут вроде должно быть

Точно, невнимательно копировал же. Сделал нормально.

Всё, заливать обновление, или ещё что-то?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Спасибо, пока вроде всё, заливай.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Залил.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Оки.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Можешь допилить хандлер чтобы показывал ip/причину/срок когда истекает(0 - never)?

Новый апи для банов (return функции поста)

бан as-сети

{
   "banned" : 1,
   "bans" : [
      {
         "showmask" : 0,
         "ip" : "94.242.58.252",
         "reason" : "AS Network is banned",
         "expires" : "0"
      }
   ],
   "error" : "Бан :&lt;",
   "error_code" : 200
}

обычный ip-бан

{
   "banned" : 1,
   "bans" : [
      {
         "network" : "94.242.58.252",
         "showmask" : 0,
         "ip" : "94.242.58.252",
         "reason" : "test",
         "setbits" : 32,
         "expires" : "1468527252"
      }
   ],
   "error" : "Бан :&lt;",
   "error_code" : 200
}

бан dnsbl

{
   "banned" : 1,
   "bans" : [
      {
         "showmask" : 0,
         "ip" : "176.10.104.240",
         "reason" : "This IP was listed in tor.dnsbl.sectoor.de blacklist!",
         "expires" : 0
      }
   ],
   "error" : "Найдена прокси.",
   "error_code" : 200
}

и еще печеньку auth добавь к /api/post.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Готово. Обновлять?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Сек, еще вопрос, можно у Icon менять размер шрифта/позицию текста или это в самом клиенте захардкожено?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Не понял. У иконки поста? Что за размер шрифта и позиция текста?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

У меня на старой мобилке с низкоразрешением не влезала геоинфа в диалоге по клику на флаг (получалось что-то вроде RUSSIAN FEDERATION, SAINT PETERS), пришлось урезать строку до вида RU, Saint Petersburg.

Алсо, функция поста не всегда отдает поле banned, не будет exception из-за того что его нет, или лучше добавить его во все ошибки?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

А, да, текст должен быть коротким и влезать в 1 строку. Оно на что-то более серьёзное не было рассчитано.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Алсо, функция поста не всегда отдает поле banned, не будет exception из-за того что его нет, или лучше добавить его во все ошибки?

int banned = jsonObject.optInt("banned", 0);

Не будет. Если оно отсутствует или оно не преобразуется в число — вернёт 0.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Тогда окей.

Поиск по борде еще можно прикрутить? /api/search
Параметры

find - строка для поиска
op - искать только в оп-постах
comment - поиск по тексту в посте (должен быть 1)
subject - поиск по теме

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Тоже готово.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Thx~

Обновляй.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

#crash
В общем, если я отключаю флажки на борде, и рефрешу полностью тред (который закешировался с флажками), то клиент вылетает.

Device: Sony Ericsson hallon (MT15i)
SDK: 18 (4.3.1)
Application: 1031 (2.8.0)
----------------------------------------
java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:299)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
    at chan.content.model.Post.contentEquals(Post.java:559)
    at chan.content.model.Posts.pendingMerge(Posts.java:339)
    at com.mishiranu.dashchan.async.ReadPostsTask.doInBackground(ReadPostsTask.java:184)
    at com.mishiranu.dashchan.async.ReadPostsTask.doInBackground(ReadPostsTask.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    ... 3 more

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Да, глупая ошибка. Попробуй удали пока что тред из кэша (или вообще кэш очисти), а я сейчас исправлю.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Это ошибка не в модуле, а в клиенте, так что только с его обновлением что-то изменится.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Оки.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Done.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Эх, я только подумал, что мне будет проще локально у себя их просто убрать для теста, и удалил прошлое сообщение... Ну да ладно.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Да я уже всё проверил.
На будущее — лучше создай issue у самого проекта, если подобный вылет происходит, расширение само по себе не может приводить к вылету (нет, ну может конечно, если постараться), а если всё таки приводит — это баг клиента.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Получилось пофиксить?

Alrighty.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Да, получилось.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

API update

Новые поля в конфиге

max_comment_length //Maximum number of characters in a comment
max_field_length //Maximum number of characters in subject, name, and email
default_name //Дефолтный нейм (аноним итд)

Скорость борды (постов в час) - поле board_speed в boardinfo.

Печенька auth переименована в wakaauth

Алсо, категории борд можешь прикрутить? Только я не знаю как их лучше реализовать (чтобы динамически подгружалось), сейчас есть поле board_cat в объекте массива с досками.

Могу добавить пару строк, чтобы делать сплит по "|" в массивы

"info" : {
     "category_order" : "Обсуждения|Общее|Японская культура",
     "board_order" : "a|b|d|diy|elf|h|l|mg|mu"
}

Или добавить сортированные массивы

"info" : {
      "category_array" : [
         "Обсуждения",
         "Общее",
         "Японская культура"
      ],
      "board_array" : [
         "a",
         "b",
         "d",
         "diy",
         "elf",
         "h",
         "l",
         "mg",
         "mu"
      ],
}

UPD: Welp, думаю оставлю массивы
UPD: Алсо, добавь капкод мода

adminpost == 1 //capcode - Team
adminpost == 2 //capcode - Mod

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

max_comment_length

Точно максимальное число символов? Не байт?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Байт, но сейчас исправлю.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Печенька auth переименована в wakaauth

А b/api/authorize как работает? Его параметр тоже wakaauth называется или по прежнему auth?

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Байт, но сейчас исправлю.

Лол, я сейчас в d пытался пост отправить, мне в качестве кода ошибки возвращалась длина строки. Я так и понял, что ты длину строки тестируешь.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Лол, я сейчас в d пытался пост отправить, мне в качестве кода ошибки возвращалась длина строки. Я так и понял, что ты длину строки тестируешь.

Да, лол.

Done, теперь чекает по символам.

Параметр по прежнему auth называется.

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Готово всё. Обновлять?

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Йеп.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Можешь альт. домен обновить?

02ch.info мертв, новый - buttflaps.pp.ua

from dashchan-extensions.

Mishiranu avatar Mishiranu commented on August 24, 2024

Готово.

from dashchan-extensions.

lisanyan avatar lisanyan commented on August 24, 2024

Сменили движок на meguca (на тохочане тоже), соотвественно апи поменялся, можешь запилить?

Описание здесь
Алсо у объекта треда еще поля sticky и locked, но в доке не описаны.

from dashchan-extensions.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.