janlelis / wirb Goto Github PK
View Code? Open in Web Editor NEWRuby Object Inspection for IRB
License: MIT License
Ruby Object Inspection for IRB
License: MIT License
According with Readme Wirb supports the following rubies: 2.2, 2.1, 2.0, jruby, rubinius.
but gemspec only supports Ruby ~> 2.0
, see https://github.com/janlelis/wirb/blob/master/wirb.gemspec#L12
please make it >= 2.0
By ANSI code definition, code 1 means "bright or bold". It means in some implementation, it's just bold black text, which will be invisible with black background. This happens on iTerm.
Returning a large array of an expression takes several minutes to finish on my Core 2 Duo machine.
irb(main):005:0> res= Array.new(10**6,1)
If Wirb is disabled, the above expression completes almost instantly.
Creating instance of carrierwave uploader.
LogoUploader.new
NoMethodError: undefined method sub' for nil:NilClass from wirb-0.4.1/lib/wirb/tokenizer.rb:442:in
rescue in tokenize'
If I remove wirb from the Gemfile it works.
With Wirb 1.x, the following would launch IRB with the Wirb inspection mode, but it no longer does under Wirb 2.0.0:
require 'irb' require 'wirb' Wirb.start puts "IRB.conf[:INSPECT_MODE] = #{IRB.conf[:INSPECT_MODE].inspect}" puts "IRB.CurrentContext = #{IRB.CurrentContext.inspect}" IRB.start
Wirb.start seems to set IRB.conf correctly, but doesn't change CurrentContext as there isn't one.
$ be ruby test.rb IRB.conf[:INSPECT_MODE] = :wirb IRB.CurrentContext = nil 2.0.0-p353 :001 > IRB => IRB # no colours 2.0.0-p353 :002 > IRB.CurrentContext.inspect_mode => true # should be :wirb?
Only when you run Wirb.start again after starting IRB does the inspect_mode get changed, or if you set IRB.CurrentContext.inspect_mode = :wirb
.
We're using Wirb with Rails, which uses IRB.start to create a new IRB session. To activate Wirb, we add a railtie with a console callback to enable Wirb which executes before the IRB.start, e.g.
Class.new Rails::Railtie do console { Wirb.start } end
I get this:
Invalid gemspec in [/Users/humza/.rvm/gems/ruby-1.9.2-p290/specifications/wirb-0.4.1.gemspec]: invalid date format in
specification: "2011-07-08 00:00:00.000000000Z"
Invalid gemspec in [/Users/humza/.rvm/gems/ruby-1.9.2-p290/specifications/wirb-0.4.1.gemspec]: invalid date format in
specification: "2011-07-08 00:00:00.000000000Z"
I have access to Rails console (Ruby 1.9.3, Rails 3.0.20) on our staging server to do interactive searches and run scripts, but cannot modify the main project (and thus cannot edit our Gemfile).
I've managed to get things like ap and wirble working by having .irbrc run through my own gems and load them all. I can get wirb to install (as well as irbtools), but as soon as I try to do Wirb.start (or just Wirb all by itself!), I get this after the load attempt and almost everything else I try to do. Any idea how to fix this? :
Wirb
'Maybe IRB bug!
=> Wirb
Wirb.start
TypeError: can't convert nil into String
from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:60:injoin' from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:60:in
load_schema!'
from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:81:inload_schema' from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:47:in
schema'
from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:98:incolorize_result' from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb/irb.rb:8:in
output_value'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:160:inblock (2 levels) in eval_input' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:273:in
signal_status'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:156:inblock in eval_input' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in
block (2 levels) in each_top_level_statement'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:229:inloop' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in
block in each_top_level_statement'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:228:incatch' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in
each_top_level_statement'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:155:ineval_input' from /home/cnorman/gems/gems/binding.repl-1.0.4.1/lib/binding.repl/repls/irb.rb:9:in
block (2 levels) in <top (required)>'
... 14 levels...
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:273:insignal_status' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:156:in
block in eval_input'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:243:inblock (2 levels) in each_top_level_statement' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in
loop'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:229:inblock in each_top_level_statement' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in
catch'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb/ruby-lex.rb:228:ineach_top_level_statement' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:155:in
eval_input'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:70:inblock in start' from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:69:in
catch'
from /opt/ruby-1.9.3-p448/lib/ruby/1.9.1/irb.rb:69:instart' from /enphase/enlighten/releases/20140616222008/vendor/bundle/ruby/1.9.1/gems/railties-3.0.20/lib/rails/commands/console.rb:44:in
start'
from /enphase/enlighten/releases/20140616222008/vendor/bundle/ruby/1.9.1/gems/railties-3.0.20/lib/rails/commands/console.rb:8:instart' from /enphase/enlighten/releases/20140616222008/vendor/bundle/ruby/1.9.1/gems/railties-3.0.20/lib/rails/commands.rb:23:in
<top (required)>'
from script/rails:6:inrequire' from script/rails:6:in
Address
TypeError: can't convert nil into String
from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:60:injoin' from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:60:in
load_schema!'
from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:81:inload_schema' from /home/cnorman/gems/gems/wirb-1.0.3/lib/wirb.rb:47:in
schema'
etcThe LOAD_PATH hack that I use to load wirble and awesome_print is from https://gist.github.com/skojin/794915
I also tried https://github.com/keithpitt/dotfiles/blob/master/dots/irbrc with same crash results using "require" or the special "unbundled_require".
Thanks! Hoping I can finally use wirb this year!!
I'll dig into it later, but let me just report the problem.
% irb -f
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'wirb'
=> true
irb(main):003:0> require 'mathn'
=> true
irb(main):004:0> 1/3
=> 1/3
irb(main):005:0> Wirb.start
=> true
irb(main):006:0> 1/3
TypeError: can't convert nil into String
from /Users/a_matsuda/.gem/ruby/1.8/gems/wirb-0.2.0/lib/wirb/tokenizer.rb:156:in `<<'
from /Users/a_matsuda/.gem/ruby/1.8/gems/wirb-0.2.0/lib/wirb/tokenizer.rb:156:in `tokenize'
from /Users/a_matsuda/.gem/ruby/1.8/gems/wirb-0.2.0/lib/wirb.rb:30:in `each'
from /Users/a_matsuda/.gem/ruby/1.8/gems/wirb-0.2.0/lib/wirb.rb:30:in `map'
from /Users/a_matsuda/.gem/ruby/1.8/gems/wirb-0.2.0/lib/wirb.rb:30:in `colorize_result'
from /Users/a_matsuda/.gem/ruby/1.8/gems/wirb-0.2.0/lib/wirb/irb.rb:8:in `output_value'
from /opt/local/lib/ruby/1.8/irb.rb:159:in `eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:271:in `signal_status'
from /opt/local/lib/ruby/1.8/irb.rb:155:in `eval_input'
from /opt/local/lib/ruby/1.8/irb/ruby-lex.rb:244:in `each_top_level_statement'
from /opt/local/lib/ruby/1.8/irb/ruby-lex.rb:230:in `loop'
from /opt/local/lib/ruby/1.8/irb/ruby-lex.rb:230:in `each_top_level_statement'
from /opt/local/lib/ruby/1.8/irb/ruby-lex.rb:229:in `catch'
from /opt/local/lib/ruby/1.8/irb/ruby-lex.rb:229:in `each_top_level_statement'
from /opt/local/lib/ruby/1.8/irb.rb:154:in `eval_input'
from /opt/local/lib/ruby/1.8/irb.rb:71:in `start'
from /opt/local/lib/ruby/1.8/irb.rb:70:in `catch'
from /opt/local/lib/ruby/1.8/irb.rb:70:in `start'
from /opt/local/bin/irb:13Maybe IRB bug!!
irb(main):007:0> (1/3).class
=> Rational
This is something similar to #1, but another problem concerning to "(" character.
When inspecting ActiveRecord models, it fails to output the attribute names and types.
% rails new testapp
(bundle irbtools using Bundler)
% rails g model user name:string age:integer
% rake db:migrate
% rails console
irb(main):001:0> User.inspect
=> "User(id: integer, name: string, age: integer, created_at: datetime, updated_at: datetime)"
irb(main):002:0> User
=> User( , , , , )
This is because ActiveRecord::Base#inspect is implemented like this (the document comment is not correct, so I've already fixed that).
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb#L778
LoadError: Could not load colorizer Paint at wirb-0.5.0/lib/wirb/colorizer/paint: cannot load such file -- paint
Hi, can we consider add some sample code for describe following feature?
1. Syntax highlighting for inspected Ruby objects
2. Support for generic objects, especially enumerators, and nested generic objects
3. Supports common standard library objects, like Set
Anyway, after test again and again in irb + ruby 3.0.0, i found there no any special effect
for this gem, in fact, i guess no any changes happen after i add (or not) following code into .irbrc
require 'wirb'
require 'wirb/wp'
Wirb.start
Following is some sample.
3.0.0 :006 > h
=> #<Set: {"374f9740e1a2602cf4dda124d3ff002944053d6fd4c85d993984295c386640b21c7b8fc9dd6a4b6b2b52a2", "4715b82ba99d642f553f648ae514e64e6c1e9555e54d3197bd90", "3e1115260104179fc946ecfc11dfcb0936038c417536016f3072ece0302d13893d46d814a7a8b0e2f924833dbd0db7a69114fb7f6b8555fcf1e442b1e399360e08cf8c35d02beec74d2df56cd10ecac1df705eedeb7dbe85", "96b2de28e529b31273d725abfb25988b712598f1996236d8bfb9c55c72dec7f07e0145420178d83dc7633cc90e727650605cf134b8880638281c37bfab57eaeab9fb0e81b7181b9a4ab965bca73f631005cf3728eed4f35e86c721", "76dde9252e5ef398ff3506c3a73d9e6f7fb55bd25fec48e1780adb7bcc566f1892d6bdd555d973ee7d88b9af060504c43064b9063698a829c14628bed875feda5be9e0c0ba22d314be2094beeeecac8535700440de9a914f2c9db2", "f725cd6dfb9388dd8d8356122aae1079bed096c5fa7a5f66b1b9e4c6221077062469ae3547a330139447cada0abad83dcbb53f2e6ac22d", "c3ca7685417eb6e78dc53b68", "025a5c68879e33051f1439c1bfbf84281c20c457174794b29a109dd4ade5f301af8ef96f4addac3e9d49859ea10f448ee6043785dedc6232361d5115324eefcb6a87a5f9357d74e5716353218090e71d1545f8f36666def08393e378d849b0", "79757c8adddb306ad11e029a7e6de76ed8dea3ebb3d53b11a4793a1330c9aa", "a35fb7fb6b58954b62c0"}>
3.0.0 :007 > wp h
#<Set: {"374f9740e1a2602cf4dda124d3ff002944053d6fd4c85d993984295c386640b21c7b8fc9dd6a4b6b2b52a2", "4715b82ba99d642f553f648ae514e64e6c1e9555e54d3197bd90", "3e1115260104179fc946ecfc11dfcb0936038c417536016f3072ece0302d13893d46d814a7a8b0e2f924833dbd0db7a69114fb7f6b8555fcf1e442b1e399360e08cf8c35d02beec74d2df56cd10ecac1df705eedeb7dbe85", "96b2de28e529b31273d725abfb25988b712598f1996236d8bfb9c55c72dec7f07e0145420178d83dc7633cc90e727650605cf134b8880638281c37bfab57eaeab9fb0e81b7181b9a4ab965bca73f631005cf3728eed4f35e86c721", "76dde9252e5ef398ff3506c3a73d9e6f7fb55bd25fec48e1780adb7bcc566f1892d6bdd555d973ee7d88b9af060504c43064b9063698a829c14628bed875feda5be9e0c0ba22d314be2094beeeecac8535700440de9a914f2c9db2", "f725cd6dfb9388dd8d8356122aae1079bed096c5fa7a5f66b1b9e4c6221077062469ae3547a330139447cada0abad83dcbb53f2e6ac22d", "c3ca7685417eb6e78dc53b68", "025a5c68879e33051f1439c1bfbf84281c20c457174794b29a109dd4ade5f301af8ef96f4addac3e9d49859ea10f448ee6043785dedc6232361d5115324eefcb6a87a5f9357d74e5716353218090e71d1545f8f36666def08393e378d849b0", "79757c8adddb306ad11e029a7e6de76ed8dea3ebb3d53b11a4793a1330c9aa", "a35fb7fb6b58954b62c0"}>
=>
3.0.0 :008 > h1
=> {"23fbeb34-0fa5-4b99-b469-665ead649a28"=>"a37d433298912e8ee9459255026a32286154c049fd101aa5a4304fee89b5acc3ec32d4c9c1bf5bec8f5d11b78b81a2b2f241c2e142d211e40333d9e9b9777ecf0bbf23304332a007a945fffd436c25787bd459cf44bb4a85c0921631a7", "bc7c3cc7-6de2-4cee-acd2-9aff28a6db5a"=>"2338e186c07f9271a968", "a0e0c0b8-5f7c-4f1a-9329-4fd1dcc92ef2"=>"53f2a8f965306afe883046e5445b4fa601a1aaedbab51a38b1c5", "fce264e5-b1ff-4973-91f4-76a42736e0e6"=>"2225cc437076a00453ec54192135850d6698ddb95835f93bd7d7ce0b3178e05a716b3669b95d7b824035691db6648fbbc1cdccdaa3c7e1ee602d08247afb2a91362c90ff66b1", "e4c5e6c3-cad2-4b57-8b96-16455c7c4c02"=>"711c247df78a4138ed4e232f50ede1062a274c84ad40d75e52aff839933084614f2159c52e21fd8c82414c47c0968806dcc8a0529548", "2264fc3a-64b0-47b2-a558-ba35223cd0aa"=>"6e0685c51d818d994d9c94ada77bc8cee1bd8b4a1971b086353374bb2294867aff6e608a78ecf4e1f4e93a25385603454858a7e3478c0b5755b9b87c", "c8ad005b-f50c-4c2b-8392-d88a714aae66"=>"a626c45bcc57f8468b977088894a45a92b3b595b285ebe6e10b1629fdadea4e95f08ee05ca88895f7900ec396ba98995db38ffad020a703d3e25828a2246043b87562b2d5ef4b07adf9ce25e789cef3c", "ef83de73-5abc-4488-8eef-cc35b25c7f37"=>"2bdf782afc7d80023f3bc6a922ab88900a3cf2e38dc8d459961cd63809ab4e6a33cd431919850fff2388387fca3b8d2665bce6dbde03366fd4c11c2ad34ae772179e0ce0e64a2884bd7a01e86737febb4c6ab170fcf3d532a33b763f03f55768", "192781ac-9acb-4b17-b1bf-d284e77f1dda"=>"e01b44b91117249da18dd5f1215c4e5e751dc3351b17b5adcb4473f601254adca4e0bfb38a3ce1", "7130e4a3-54d7-4fb3-9085-5595738e2da5"=>"c173bd71f743bf8df912e1ea7dc44873d5a70c2af2a9b9e01a95b51fb6aab2c2ccbab24e7bc10e24f5b28143ea9ded82873f2729f2dc8e99a262f695314ebf0911c114"}
3.0.0 :009 > wp h1
{"23fbeb34-0fa5-4b99-b469-665ead649a28"=>"a37d433298912e8ee9459255026a32286154c049fd101aa5a4304fee89b5acc3ec32d4c9c1bf5bec8f5d11b78b81a2b2f241c2e142d211e40333d9e9b9777ecf0bbf23304332a007a945fffd436c25787bd459cf44bb4a85c0921631a7", "bc7c3cc7-6de2-4cee-acd2-9aff28a6db5a"=>"2338e186c07f9271a968", "a0e0c0b8-5f7c-4f1a-9329-4fd1dcc92ef2"=>"53f2a8f965306afe883046e5445b4fa601a1aaedbab51a38b1c5", "fce264e5-b1ff-4973-91f4-76a42736e0e6"=>"2225cc437076a00453ec54192135850d6698ddb95835f93bd7d7ce0b3178e05a716b3669b95d7b824035691db6648fbbc1cdccdaa3c7e1ee602d08247afb2a91362c90ff66b1", "e4c5e6c3-cad2-4b57-8b96-16455c7c4c02"=>"711c247df78a4138ed4e232f50ede1062a274c84ad40d75e52aff839933084614f2159c52e21fd8c82414c47c0968806dcc8a0529548", "2264fc3a-64b0-47b2-a558-ba35223cd0aa"=>"6e0685c51d818d994d9c94ada77bc8cee1bd8b4a1971b086353374bb2294867aff6e608a78ecf4e1f4e93a25385603454858a7e3478c0b5755b9b87c", "c8ad005b-f50c-4c2b-8392-d88a714aae66"=>"a626c45bcc57f8468b977088894a45a92b3b595b285ebe6e10b1629fdadea4e95f08ee05ca88895f7900ec396ba98995db38ffad020a703d3e25828a2246043b87562b2d5ef4b07adf9ce25e789cef3c", "ef83de73-5abc-4488-8eef-cc35b25c7f37"=>"2bdf782afc7d80023f3bc6a922ab88900a3cf2e38dc8d459961cd63809ab4e6a33cd431919850fff2388387fca3b8d2665bce6dbde03366fd4c11c2ad34ae772179e0ce0e64a2884bd7a01e86737febb4c6ab170fcf3d532a33b763f03f55768", "192781ac-9acb-4b17-b1bf-d284e77f1dda"=>"e01b44b91117249da18dd5f1215c4e5e751dc3351b17b5adcb4473f601254adca4e0bfb38a3ce1", "7130e4a3-54d7-4fb3-9085-5595738e2da5"=>"c173bd71f743bf8df912e1ea7dc44873d5a70c2af2a9b9e01a95b51fb6aab2c2ccbab24e7bc10e24f5b28143ea9ded82873f2729f2dc8e99a262f695314ebf0911c114"}
Instead, if i use amazing_print gem, it give me a very nice output.
[1] pry(main)> h
[
"d16a75c2ffd6ab7dba633241d090edaabf6020b7d07702e90d3117094b6df890697aff7794bed4979bfddd5e49c4e9e5635d0dd9676e291cd2a7b46c55ba7d3d3af7b908cee9ae06b75f15d08ab7c3d747281f0e9f45a7c71f2d55dea59ecf69262a16",
"1641dbdc746a470e024c1b11c12bad53e94338f74ebc9c8ae5323bd1fcbae44b1b18292c94029f22c07ed81e407f2f9463cfe96756e12a58b14fac1b0ba29f7402c2dd442817c1e698599924cf135b1539572d5934b0b87f31a473b153c3839ba86d",
"d4c1b7326360efa7c55838e088de7335e54c033a9cf4d295bef5ac1d067529061835633c2ea8bba705a5",
"3015834e81af7aed6e271cbab20b455f6f44ebf5aa8116bd8f443da4639678686af3827f85c9be61630521bc5ff6e47c1c8bb255932999c84331eda80ffacef757659b99c641767ef8f25b9f",
"e03b775884357e1786ebe05c3b39516d48657be30d2d216155633354206c9626c2f09bdb8b7d4dd72099da",
"f225f0cd3edd609218d8537a2b7a1b6861d26f24c9c42613f5b7b9f8c6cb5191b8b4db6968b980fe24df47e9ae2f31af63f2f4582059c08115872727655e7a6775bac00449beb444d3d459c46898159628e2bd57a3778a6e57a3765bec35fb425f",
"4474580f",
"836912ec49ef6576b56522e8945a89f86729f6d70d718e948ad1ecf647b07495495fbda0abb2ab12277b0b18ee1c04d05f3dc2d7555e01f4f0c7a8ef41f9c4b4bbc61cf056527b791da92fe2c2f4",
"7d621a82df7c518d33fa3f573c20f9e8dc1499522e3beb70c651af8ff2",
"978df6ec512c25612fbc465250daa4225c98928f171285cb9c88eae2f9099d0cc556da2341ce1fb5db0d05168a754ebc489f717bb8bc656e4735b76c6083ef046f9b20cfcd2ea02604d39f40076aa0f090975e64d320abce5e53523848f5eedecf3b"
]
[2] pry(main)> h1
{
"6b358fe3-b10f-434a-b229-4382d4712622" => "69a09c56b10c1bdbd236e892c24cce45cbaa1a",
"b53df44c-a8e4-4a5a-991e-4dd77f1c978d" => "e1a353d89e72c677681c56ef48736e5da2045e7258ab83def4e65c9831af27",
"19b21af4-918e-4b06-991f-63b42ea73f19" => "65bca8b69600f1e2d99048d1eae8655b6a8aa814ed97a67674273ab3dd27052740fc6b0ee00c588d191ac76ce610af5bca747f7ac82317017c6f6ad6692d3f060216b703bd393a5a3b3c90af322f0a92ee8188bb01b8b5c71d2edf2df60ad1d772",
"fc49bd0d-4896-4de3-a9c5-f81b31bcb8ee" => "6ccd21a7229f2ba69c78db62055745f50b",
"8a4c36ba-68f2-4079-bf1f-718bd06d2835" => "9fe8aa0287a5d15a72a4122bab6567bb764957b386df3f54779898e21f2115c33667a97275dadade70a90f284e47081f",
"738c3832-d8fb-4c93-8eaa-a1c0f6ac0765" => "6fee7efe1fd5524fccfa31e7db57179ac153748dcc19e0591a685b13e69bb6d46ebc647ef0",
"1ef2d4e7-3596-40e1-b950-58d3ef6a2273" => "ddf60442f973544c225a736c39f1f5f2930920bfd98a42ef6315404eb2adb3b56e8c88d8efa9296270",
"4eea8556-be16-437d-b6ce-df6b42d838c1" => "a78f8a22448b723b38c4728d28f5dcd835a491dc43b1ab94c3d4ac5758f96b33325ab95d22dd3be2ddb5f2d339d2ced5acf16ae9ec62",
"2ae07668-5321-4632-8124-9ac92b6d4f52" => "fce2b506faafee5b40e25812ecd75e",
"77987c1f-f3eb-4304-b0ed-5b8ddddac61c" => "4d0b8a6a3c3bb6e6138fb25a523f109ef26610b497ba19e1e38517edf62fbaee5a0a92f2919dc5563df15da8fe7be7a77a2eabc979a5603b3fcdf6ced0dbc3bef0d9bed08a4f464942c96b2487b29c9321176151317fa2092f6f1b"
}
Thank you.
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.