projectspan / android-manet-manager Goto Github PK
View Code? Open in Web Editor NEWSPAN - Android Manet Manager
SPAN - Android Manet Manager
I found this repository:
https://github.com/monk-dot/SPAN/tree/master/kernels
that seems to have the kernel necessary to run ad-hoc mode on a Nexus 7. However, on the main page (https://github.com/monk-dot/SPAN) it says the code is moved to here (https://github.com/ProjectSPAN), but I don't see any kernels here? Am I still supposed to use the one in the monk-dot/SPAN repository?
Thanks,
David
I am trying to modify the OLSR protocol in MANET Manager to be used for resource discovery similar to the approach described in the paper titled "Service Discovery using OLSR and Bloom Filters".
The OLSR implementation in MANET Manager is a binary, /res/raw/olsrd, so I downloaded olsrd-0.6.6 from here:
http://www.olsr.org/?q=download
compiled it and replaced the binary on MANET Manager to see if it was replaceable. On an Android device the MANET Manager starts up, but when the startAdhocBtn is pressed and ad-hoc mode is started two buttons are displayed on the main screen, one showing it started and the other showing it stopped as shown in the first screenshot. When I click the Route Info menu option, MANET Manager crashes as shown in the second screenshot.
Am I using an incorrect version of olsrd? If so, what version should I use? Or, have you modified the default olsrd for MANET Manager? If so, how can I get access to the modified source code?
Thanks,
Tamim
Hi. I know you've probably had a fair bit of questions along these lines, but I'm going to ask anyways. I'm using a Samsung Tab 2 7.0 (GT-P3113). I've used Odin to enable root/SuperUser with CF-Root. I know SuperUser is working because the Manet Manager will prompt it for root permissions. However when I start Ad-Hoc mode, I see the starting... spinner and then a toast with "Ad-hoc mode is not running". The Show logs are empty, and I don't see a setting that might help. I did notice that with Wifi enabled, when Manet Manager is started and fails, Wifi is disabled. (like it tried to stop, do something then failed before it could start wifi again)
I captured debug logs from when I fired up MM until it failed to start in ad-hoc. However I think this is the most interesting part. The enqueueToast is probably the "Ad-hoc mode is not running" toast. And I don't know if "Cannot open /data/.cid.info: No such file or directory" is actually a show stopper or something that can be ignored.
If you have any suggestions on what the issue could be, please let me know! Thank you.
02-12 12:43:44.183: D/Tethering(192): sendTetherStateChangedBroadcast 0, 0, 0
02-12 12:43:44.183: D/com.android.internal.telephony.gsm.FastDormancyStateHelper(369): onReceive() action=android.net.conn.TETHER_STATE_CHANGED
02-12 12:43:44.183: E/MTPJNIInterface(1559): tethering status = false
02-12 12:43:44.191: W/NetworkStats(192): dropping UID delta from unknown iface: iface=wlan0 uid=0 set=DEFAULT tag=0x0 rxBytes=0 rxPackets=0 txBytes=308 txPackets=5 operations=0
...
02-12 12:43:44.480: I/WifiHW(192): ##################### set firmware type 0 #####################
02-12 12:43:44.558: W/Netd(92): No subsystem found in netlink event
02-12 12:43:44.558: D/Tethering(192): interfaceRemoved wlan0
02-12 12:43:44.558: E/Tethering(192): attempting to remove unknown iface (wlan0), ignoring
02-12 12:43:44.558: D/NetlinkEvent(92): Unexpected netlink message. type=0x11
02-12 12:43:45.324: D/STATUSBAR-NetworkController(273): onReceive() - RSSI_CHANGED_ACTION, WIFI_STATE, NETWORK_STATE
02-12 12:43:45.332: D/systemui/quicksetting/QuickSettingButton(273): Wifi state = 1
02-12 12:43:45.332: D/systemui/quicksetting/QuickSettingButton(273): setActivateStatus(2) - 1:on, 2:off, 3:dim
02-12 12:43:45.542: E/lights(192): write_int failed to open /sys/class/sec/sec_touchkey/brightness
02-12 12:43:45.542: W/PowerManagerService(192): Timer 0x7->0x3|0x0
02-12 12:43:45.542: I/PowerManagerService(192): Ulight 7->3|0
02-12 12:43:45.542: D/PowerManagerService(192): setLightBrightness : mButtonLight : 0
02-12 12:43:49.175: D/CoreTask(3165): Root command ==> /data/data/org.span/bin/adhoc start 1
02-12 12:43:49.308: E/WifiHW(4931): Cannot open "/data/.cid.info": No such file or directory
02-12 12:43:49.308: I/WifiHW(4931): ==========[WIFI] Station firmware load ===========
02-12 12:43:49.378: D/AndroidRuntime(4929): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
02-12 12:43:49.378: D/AndroidRuntime(4929): CheckJNI is OFF
02-12 12:43:49.378: D/AndroidRuntime(4929): setted country_code = USA
02-12 12:43:49.378: D/AndroidRuntime(4929): setted countryiso_code = US
02-12 12:43:49.386: D/AndroidRuntime(4929): setted sales_code = XAR
02-12 12:43:49.386: D/AndroidRuntime(4929): readGMSProperty: start
02-12 12:43:49.386: D/AndroidRuntime(4929): readGMSProperty: already setted!!
02-12 12:43:49.386: D/AndroidRuntime(4929): readGMSProperty: end
02-12 12:43:49.566: D/LibQmg_native(4929): register_android_app_LibQmg
02-12 12:43:49.589: D/AndroidRuntime(4929): Calling main entry com.android.commands.am.Am
02-12 12:43:49.613: D/AndroidRuntime(4929): Shutting down VM
02-12 12:43:49.613: D/STATUSBAR-NotificationService(192): enqueueToast()
Please allow to use longer ssids than 15 characters
We are 3 students doing a project which involves implementing middleware that should use olsr to find and establish neighbors. Our middleware uses multicast packets to find one hop neighbors and establish connections between them. We are using 3 rooted nexus 7's with a custom kernel installed. Should we be importing any classes from the manet manager or just using sockets is fine? We wrote a basic chat application on top of the middleware. So far we have been trouble with multicast packets. Does OLSR support multicast?
Hi.
I was testing using Bluetooth tethering between two devices (Samsung S4s) and noticed that when one of them was sharing its Wifi through the tether, OLSR link quality dropped horribly from a steady 1.000 to 0.400. My understanding is that OLSR generates that link quality from packets dropped.not received, basically a measure of communication errors.
Wifi range doesn't seem to be an issue. I had 2 devices in a MANET across a building, then Bluetooth tethered one of them, the link quality dropped. When I untethered, link quality slowly went up.
I know that ManetManager has some Bluetooth support, so I thought you would be a good person to ask about what Bluetooth headaches you might have run into that could help with trying to figure out what the problem is.
P.S. I'll check in support for the S4 this weekend. I promise.
Hi.
I'm testing MANET stuff out on a set of Lenovo A1s. The basic GingerBread version they shipped with has been working fine with MANET Manager. The route info shows all devices, and they can send messages back and forth.
However, with one of them I was forced to upgrade to the newer Ice Cream Sandwich firmware and although the routing tables seem to be setup correct, I noticed that sending messages from the ICS A1 pops a toast up as "Null". I can broadcast a message and receive fine from GB -> ICS, but not from ICS -> GB.
Here's the LogCat dump from right after I touch send:
03-15 00:08:07.421: E/audio_hw_default(1145): ICS-SASKEN:0
03-15 00:08:07.421: E/audio_hw_default(1145): ICS-SASKEN:2
03-15 00:08:07.492: W/InputManagerService(1246): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@413e1548
03-15 00:08:08.281: E/audio_hw_default(1145): ICS-SASKEN:0
03-15 00:08:08.281: E/audio_hw_default(1145): ICS-SASKEN:2
03-15 00:08:08.859: E/audio_hw_default(1145): ICS-SASKEN:0
03-15 00:08:08.859: E/audio_hw_default(1145): ICS-SASKEN:2
03-15 00:08:09.101: D/dalvikvm(2013): GC_CONCURRENT freed 429K, 10% free 6689K/7431K, paused 3ms+3ms
03-15 00:08:09.953: W/System.err(1999): android.os.NetworkOnMainThreadException
03-15 00:08:09.953: W/System.err(1999): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
03-15 00:08:09.953: W/System.err(1999): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
03-15 00:08:09.953: W/System.err(1999): at libcore.io.IoBridge.sendto(IoBridge.java:463)
03-15 00:08:09.960: W/System.err(1999): at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)
03-15 00:08:09.960: W/System.err(1999): at java.net.DatagramSocket.send(DatagramSocket.java:287)
03-15 00:08:09.960: W/System.err(1999): at org.span.manager.SendMessageActivity.sendMessage(SendMessageActivity.java:189)
03-15 00:08:09.960: W/System.err(1999): at org.span.manager.SendMessageActivity.access$5(SendMessageActivity.java:173)
03-15 00:08:09.960: W/System.err(1999): at org.span.manager.SendMessageActivity$1.onClick(SendMessageActivity.java:104)
03-15 00:08:09.960: W/System.err(1999): at android.view.View.performClick(View.java:3511)
03-15 00:08:09.960: W/System.err(1999): at android.view.View$PerformClick.run(View.java:14105)
03-15 00:08:09.960: E/audio_hw_default(1145): ICS-SASKEN:0
03-15 00:08:09.960: E/audio_hw_default(1145): ICS-SASKEN:2
03-15 00:08:09.968: W/System.err(1999): at android.os.Handler.handleCallback(Handler.java:605)
03-15 00:08:09.968: W/System.err(1999): at android.os.Handler.dispatchMessage(Handler.java:92)
03-15 00:08:09.976: W/System.err(1999): at android.os.Looper.loop(Looper.java:137)
03-15 00:08:09.976: W/System.err(1999): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-15 00:08:09.984: W/System.err(1999): at java.lang.reflect.Method.invokeNative(Native Method)
03-15 00:08:09.984: W/System.err(1999): at java.lang.reflect.Method.invoke(Method.java:511)
03-15 00:08:09.984: W/System.err(1999): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-15 00:08:09.984: W/System.err(1999): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-15 00:08:09.992: W/System.err(1999): at dalvik.system.NativeStart.main(Native Method)
03-15 00:08:10.117: D/dalvikvm(1246): GC_FOR_ALLOC freed 314K, 12% free 9760K/11015K, paused 75ms
03-15 00:08:10.218: D/MainActivity(1999): onStart()
03-15 00:08:10.218: D/MainActivity(1999): onResume()
03-15 00:08:10.320: D/MainActivity(1999): Temp ==> 260 -- Celsius ==> 26 -- Fahrenheit ==> 79
03-15 00:08:10.484: D/OpenGLRenderer(1999): Flushing caches (mode 0)
I ran into the same problem with my MANET app when I tried running it on ICS. Google requires you thread off all network operations that might be linked to the main UI thread. I don't think it's supper accurate in determining this though. I had my broadcast sender as a Runnable in a Service, but it would still complain. (apparently a Service isn't a completely new thread!)
When NetworkOnMainThreadException is thrown it doesn't have a message, so logging or toasting it will be "null".
The work around (or proper way to handle it) is to wrap your message send in an AsyncTask class. It'll solve any NetworkOnMainThreadException errors.
I would take a look and offer a fix but I wouldn't be able to look at it before next week, so I thought I would just point out the problem and solution for now. Hope this helps.
Hi.
I was looking at the gateway and DNS settings for a use case where a cell or Wifi node would be an Internet/Intranet link point. However I can't tell if the dns.server setting in manet.conf is being picked up by anything. I can't see any shell level evidence and poked around the MM source looking for clues. Thanks.
Hi.
I was handed a bunch of Samsung S4s this week and told to see if I can get them all working in a Manet(Manager). Right off I knew that Samsung had stopped supporting adhoc in their kernels a couple of years ago, but given your documented success with kernel patching the S3, I thought I would take a look before giving up too soon.
Based on your comments in this issue I opened earlier this year (#5) and the pointer you offered to this post (https://groups.google.com/forum/#!topic/spandev/oCtyKHE1G3s) on how to build a kernel for Samsungs, I figured I had a reasonable starting point.
I've downloaded the Samsung SGH-i337M JellyBean source and setup a FedoraCore VM for building a new kernel, but there's one piece of info that would determine the level of effort here and that's whether the Samsung SGH-i337M kernel has the Wireless Extensions included. How or where could I go to determine this? I'm clear on the wireless driver and it's exposure of supporting modes, but not if the extensions required exist at all.
Thank you.
Whenever i try to run the app on the virtual device it returns the following error.
Gradle syncing is successful but the error arises when i try to run the app.
Error:Execution failed for task ':app:compileDebugNdk'.
Error: Your project contains C++ files but it is not using a supported native build system.
Consider using CMake or ndk-build integration with the stable Android Gradle plugin:
https://developer.android.com/studio/projects/add-native-code.html
or use the experimental plugin:
https://developer.android.com/studio/build/experimental-plugin.html.
The application code is not working. Emulator is not showing the application.why??
I've mentioned this before, but ManetManager can get in a funky state sometimes. It's hard to pin down what exactly the reproducible use case is, but it typically happens when you play with the Wifi or power state (the device goes into sleep mode). The symptom is Manet Manager (when you switch back to it) will either have a double Enabled and Disabled icon (both at once on the screen), or just the disabled icon. In either case, when you try to start the manet, it will fail to do so. I'm in that state right now, so I thought I would open this issue to capture my notes.
Here's my logcat output:
10-21 12:10:40.507: D/CoreTask(2748): Root command ==> /data/data/org.span/bin/adhoc start 1
10-21 12:10:40.570: E/su(3331): sudb - Opening database
10-21 12:10:40.578: E/su(3331): sudb - Database opened
10-21 12:10:40.585: E/su(3331): sudb - Database closed
10-21 12:10:40.585: D/su(3331): 10050 org.span.service.core.ManetService executing 0 "/data/data/org.span/tmp/command.sh" using shell /system/bin/sh : sh
10-21 12:10:40.726: D/WifiHW(3334): >>> wifi_load_driver
10-21 12:10:40.726: I/WifiHW(3334): >>> init_rfkill
10-21 12:10:40.726: I/WifiHW(3334): wlan
10-21 12:10:40.726: I/WifiHW(3334): , rfkill_id: 0
10-21 12:10:40.726: I/WifiHW(3334): rfkill_state_path_wifi: /sys/class/rfkill/rfkill0/state
10-21 12:10:40.726: I/WifiHW(3334): <<< init_rfkill
10-21 12:10:40.726: D/WifiHW(3334): <<< wifi_load_driver loaded already, wifi power is ON
10-21 12:10:47.078: D/ManetManagerApp(3162): onAdhocStateUpdated()
10-21 12:10:47.078: D/MainActivity(3162): onAdhocStateUpdated()
10-21 12:10:47.078: D/MainActivity(3162): removeDialog()
10-21 12:10:47.093: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:10:47.093: D/ManetManagerApp(2748): onAdhocStateUpdated()
10-21 12:10:47.093: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:10:47.093: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:10:47.101: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:10:59.999: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:10:59.999: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:10:59.999: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:11:00.007: D/ManetServiceHelper(2748): Alarm activated!
10-21 12:11:00.515: I/ManetStarter.PrepareNetwork(3134): Failed to start adhoc mode!
Here's the output from shell where adhoc is run to manually start the manet:
# ./adhoc start 1
./adhoc start 1
about to run: [/data/data/org.span/bin/iptables -t filter -F]
about to run: [/data/data/org.span/bin/iptables -t nat -F]
about to run: [echo 1 > /proc/sys/net/ipv4/ip_forward]
about to run: [/data/data/org.span/bin/iptables -A FORWARD -j ACCEPT]
about to run: [/data/data/org.span/bin/ifconfig eth0 192.168.1.100 netmask 255.255.255.0]
error: SIOCSIFADDR (No such device)
about to run: [/data/data/org.span/bin/iwconfig eth0 mode ad-hoc]
Error for wireless request "Set Mode" (8B06) :
SET failed on device eth0 ; No such device.
about to run: [/data/data/org.span/bin/iwconfig eth0 essid AndroidAdhoc]
Error for wireless request "Set ESSID" (8B1A) :
SET failed on device eth0 ; No such device.
about to run: [/data/data/org.span/bin/iwconfig eth0 channel 1]
Error for wireless request "Set Frequency" (8B04) :
SET failed on device eth0 ; No such device.
about to run: [/data/data/org.span/bin/iwconfig eth0 commit]
Error for wireless request "Commit changes" (8B00) :
SET failed on device eth0 ; No such device.
script result was []
If I can come up with steps to reproduce this, I'll update this issue.
Hi. I've been working with olsrd and MeshTether as a MANET base for a OSM Map based app where MANET nodes can broadcast and share their location with each other. (other ideas and features to follow) I just recently found out about the great work you're doing with the SPAN project and Manet Manager. (great stuff, I'm particularly jazzed about the quality of the code)
I'm at the point where I need to collect routing and topology information for my app in order to draw node arcs. This is particularly helpful when viewing nodes on a map and trying to determine if a structure is blocking communication, etc...
I took a look at your code and noticed that you build olsrd with the txtplugin running on port 2006. If I switched to Manet Manager, which seems much more functional that MeshTether, txtplugin is already running, but given that you're building a suite of apps that build on Manet Manager, I thought you might have another app-to-app integration approach, such as broadcasting intents wider than just the Manet Manager app.
If you do, please let me know so I can start looking at it. Thanks and keep up the great work.
From an external application, I can start adhoc mode with:
private ManetHelper manet = new ManetHelper(this);
manet.sendStartAdhocCommand();
However, when I try to stop it with
manet.sendStopAdhocCommand();
I get a null pointer exception. Similarly, when I try to connect to the service (actually, I'm not really sure why I have to do this, as the function sendStartAdhocCommand works without being connected...) with
manet.connectToService();
it seems to work (manet.isConnectedToService() returns true), but manet.disconnectFromService(); fails with "java.lang.IllegalArgumentException: Service not registered: null".
Can you explain either of these behaviors, and perhaps explain their relationship?
Thanks!
Hi jrobble.
I don't have the time to detail everything here, but a friend of mine was playing with external radios on Android. (he's kind of an old school nerd and loves radios) He's managed to get USB support working on our S4s. I took a look at how device specific wireless interfaces are selected and it looks like DeviceConfig.java getWifiInterface() returns wlan0 and eth0.
If I was able to find a reliable way to determine if a device had support for a 2nd network interface (that wasn't loaded yet, because we need ManetManager to do so from adhoc/iwconfig) would you have a problem (or recommendation on how to) with me enhancing ChangeSettings.java and DeviceConfig.java to add both the default wlan0 + external wlan1?
I threw him a build with wlan1 hard coded for him to test. Do you know of anywhere else wlan0 or eth0 would be a factor?
Hopefully it'll all work out. If it does I'll post some info on the external device. I don't have the radio make and driver info. With the S4s I know USB support was missing and we had to rebuild the kernel. Thanks!
AT&T has eat'in the .config. /proc/config.gz does not exist anymore.
Is there an older one somewhere I can use to run make oldconifg against?
I want to develop an app based on MANET, could I take manet-manager as a black box?
Hi, please help, how the project find the other device IP address when join the network? I ma trying to do broadcast some packet in the ad hoc, but seems every time it only send the packet to itself. I did some research, but all their broadcast packet are doing under Wifi network, and also their detect other device IP method are not appear in this project, I don't know its the reason that this project turn off wifi so that method won't work anymore or you find another way to do it. Can you give me some hint, thank you!
Hello. I am trying to compile edify and I get this error. Can you help me to solve it? I use ndk 10.
Thank you.
[armeabi] Executable : adhoc
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to 'operator new[](unsigned int)'
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to 'operator delete(void_)'
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to 'operator delete'
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to 'operator new(unsigned int)'
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to '__cxa_pure_virtual'
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to '__cxa_guard_acquire'
C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/libutils.so: error: undefined reference to '__cxa_guard_release'
collect2.exe: error: ld returned 1 exit status
make.exe: *_* [C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager//obj/local/armeabi/adhoc] Error 1
make.exe: Leaving directory `C:/Users/iSense/Desktop/android-ndk-r10/samples/AndroidManetManager/scripts'
BSSID is much more important than SSID in mesh networks, allow to set this to a fixed value
Hi! I was wondering if it's possible that nodes decide to forward or not to forward packets depending on its battery state. I've seen that OLSR implements an attribute called willingness that actually does this function, but for what I've seen in all packets this attribute is set to 3 (unknown), I assume this is because the willingness function it's not implemented yet.. Am I right?
So if I want to implement this what would I need to do? Modify Node class and add Willingness attribute related to the battery state of the node and modify the class OLSRProtocol to take willingness into account?
I'm a bit lost here if anyone can give me some advice would be nice! Ty!
I have been trying to build and run manet manager from android studio, I am getting lots of errors regarding wireless-tools. I am running android studio from ubuntu and I own a nexus 5
Hi!
I've been trying to add the manet manager to an app that i'm building, but with no success.
I've created the JAR from the MM and imported to my app. I try to start de ad-hoc like this:
manet = new ManetHelper(this);
manet.registerObserver(this);
EulaHelper eula = new EulaHelper(this, this);
eula.showDialog();
manet.connectToService();
I'll started creating a simple app that only starts an ad-hoc network with a button but every time I recive an error:
03-04 11:01:03.930: E/ManetHelper::sendMessage(4021): You must connect to the ManetService before sending messages to it!
I understand I have some error with the service but don't know what i'm doing wrong.. Anyone can help me?
Allow to change the netmask to be able to connect to existing meshes with netmasks bigger than /24
Good day,
I am currently working on a project to create a clicker app that works with Manet Manager. I currently have 3 devices (details are below, have flashed the nexus 7 kernel (https://github.com/monk-dot/SPAN/tree/master/kernels/ASUS%20Nexus%207) on all devices and have performed all preliminary steps for getting a device into adhoc mode. I can get any two devices to talk to each other properly, however when a third device is introduced the devices do not interact with each other properly. Below is an example of what happens
Nexus 4 (n4) (Android 4.4.4)
192.168.1.99
Broadcast to : n4, n7
Nexus 7 (touch) (Android 4.4.2)
192.168.1.200
Broadcast to : n7, touch
Nexus 7 (n7) (Android 4.4.4)
192.168.1.100
Broadcast to : n4, n7.
I have attached the routing table of all devices for the example above and the iwconfig output. Thanks for your anticipated help.
Bukunola
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.