Giter Club home page Giter Club logo

groovykoans's People

Contributors

achimgrimm avatar apandichi avatar dispader avatar kamilszymanski avatar kob-aha avatar nadavc avatar timyates avatar winkler1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

groovykoans's Issues

Test 02 of Koan 04 fails

I can't get a Success on test 02 from the default solution.

I have java 1.6.0.32, windows 7 (64 bits).

Stacktrace is:

junit.framework.ComparisonFailure: expected:<...m laoreet fermentum.[
Ut ornare turpis vitae est auctor sit amet tincidunt nisi feugiat. Donec nec ligula ut nibh convallis mollis
sollicitudin et lacus. Phasellus odio erat, consectetur vitae dictum ac, varius consectetur dolor.
Aenean pretium volutpat nisi vel laoreet. Nulla facilisi. Phasellus sed nisi nibh. Curabitur auctor erat vel arcu
bibendum id auctor lacus fermentum. Suspendisse cursus volutpat feugiat. Suspendisse sed urna lectus,
molestie fermentum augue.

Donec mauris diam, mattis quis posuere at, pharetra ac libero. Mauris a lacus id lorem tempus dapibus. Ut viverra
imperdiet sapien, vel rhoncus mauris cursus eu. Donec bibendum feugiat ultrices. Vivamus facilisis nisi et lectus
Etiam id leo vitae nibh bibendum semper vel sed velit. Etiam tristique urna auctor arcu feugiat nec vehicula neque
vulputate. Pellentesque nunc leo, tincidunt sed dapibus sed, pulvinar nec nunc. Mauris vel urna vitae ipsum mattis
congue accumsan a tellus. Donec adipiscing arcu quis enim iaculis ut commodo nisl lacinia. Mauris turpis justo,
congue quis sed urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Morbi sagittis tincidunt quam, ac tristique elit rhoncus id. In sem sem, tempus venenatis faucibus eu, dictum ac
congue eu laoreet ac, porttitor non magna. Mauris imperdiet aliquam nisi sed scelerisque. Maecenas eget]
convallis sapien. M...> but was:<...m laoreet fermentum.[
Ut ornare turpis vitae est auctor sit amet tincidunt nisi feugiat. Donec nec ligula ut nibh convallis mollis
sollicitudin et lacus. Phasellus odio erat, consectetur vitae dictum ac, varius consectetur dolor.
Aenean pretium volutpat nisi vel laoreet. Nulla facilisi. Phasellus sed nisi nibh. Curabitur auctor erat vel arcu
bibendum id auctor lacus fermentum. Suspendisse cursus volutpat feugiat. Suspendisse sed urna lectus,
molestie fermentum augue.

Donec mauris diam, mattis quis posuere at, pharetra ac libero. Mauris a lacus id lorem tempus dapibus. Ut viverra
imperdiet sapien, vel rhoncus mauris cursus eu. Donec bibendum feugiat ultrices. Vivamus facilisis nisi et lectus
Etiam id leo vitae nibh bibendum semper vel sed velit. Etiam tristique urna auctor arcu feugiat nec vehicula neque
vulputate. Pellentesque nunc leo, tincidunt sed dapibus sed, pulvinar nec nunc. Mauris vel urna vitae ipsum mattis
congue accumsan a tellus. Donec adipiscing arcu quis enim iaculis ut commodo nisl lacinia. Mauris turpis justo,
congue quis sed urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Morbi sagittis tincidunt quam, ac tristique elit rhoncus id. In sem sem, tempus venenatis faucibus eu, dictum ac
congue eu laoreet ac, porttitor non magna. Mauris imperdiet aliquam nisi sed scelerisque. Maecenas eget
]
convallis sapien. M...>
    at junit.framework.Assert.assertEquals(Assert.java:85)
    at groovy.util.GroovyTestCase.assertEquals(GroovyTestCase.java:367)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1330)
    at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.callStatic(StaticMetaClassSite.java:62)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:53)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:157)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:169)
    at org.groovykoans.koan04.Koan04.test02_MoreClosureIntro(Koan04.groovy:145)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:243)
    at junit.framework.TestSuite.run(TestSuite.java:238)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:55)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:42)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:75)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at $Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:103)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.remote.internal.TypeCastDispatch.dispatch(TypeCastDispatch.java:30)
    at org.gradle.messaging.remote.internal.WorkerProtocol.handleIncoming(WorkerProtocol.java:53)
    at org.gradle.messaging.remote.internal.WorkerProtocol.handleIncoming(WorkerProtocol.java:31)
    at org.gradle.messaging.remote.internal.ProtocolStack$ProtocolStage.handleIncoming(ProtocolStack.java:167)
    at org.gradle.messaging.remote.internal.ProtocolStack$BottomStage.handleIncoming(ProtocolStack.java:277)
    at org.gradle.messaging.remote.internal.ProtocolStack$BottomConnection$1.run(ProtocolStack.java:299)
    at org.gradle.messaging.remote.internal.ProtocolStack$ExecuteRunnable.dispatch(ProtocolStack.java:120)
    at org.gradle.messaging.remote.internal.ProtocolStack$ExecuteRunnable.dispatch(ProtocolStack.java:116)
    at org.gradle.messaging.dispatch.AsyncDispatch.dispatchMessages(AsyncDispatch.java:132)
    at org.gradle.messaging.dispatch.AsyncDispatch.access$000(AsyncDispatch.java:33)
    at org.gradle.messaging.dispatch.AsyncDispatch$1.run(AsyncDispatch.java:72)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

koan 08 test 2

koan 08 test 2

No ------ EDIT HERE ----- comments, unsure really what to do here. Also, getting undefined class Person/Cartoon -- is this test about package/other file inclusion, or the subject is switch.isCase()?

gradle task removeSolution fail

FAILURE: Build failed with an exception.

  • Where:
    Build file 'D:\groovy\groovykoans-master\build.gradle' line: 38
  • What went wrong:
    Could not compile build file 'D:\groovy\groovykoans-master\build.gradle'.
    Cause: startup failed:
    build file 'D:\groovy\groovykoans-master\build.gradle': 38: unexpected token: ?
    @ line 38, column 28.
    def solutionRegex = $/(?sm)(// -{12} START EDITING HERE -{22})(.*?)(\s+//
    -{12} STOP EDITING HERE -{22})/$
    ^

1 error

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug
    option to get more log output.

BUILD FAILED

Implement Groovy Power Asserts

On the asserts... why not just use groovy power asserts? They're more readable (IMO), and produce the nice power assert messages when they fail. You can always tack on your desired message as a 2nd param:

assertEquals('Modify "Hola" to "Hello" to proceed', "Hello", hello)

can just be

assert hello == "Hello", 'Modify "Hola" to "Hello" to proceed'

Why learn nasty old JUnit syntax if not necessary? :)

(reported by @winkler1)

Tricky Solution for 'test05_ElvisAndSafeNavigation'

I don't consider myself a Groovy expert but not a novice either and I found quite a tricky behauvior that may need some extra clarification in test05.
I wrote the following solution, which may seem correct:
message = 'Hello ' + userService.getLoggedInUser()?.getFirstName()?:'Anonymous' + '!'
However, unless parenthesis are added as follows it does not work
message = 'Hello ' + (userService.getLoggedInUser()?.getFirstName()?:'Anonymous') + '!'

Seeing why in one case it returns "Hello null" is easy, but understanding why on the other the result is "Hello Ronaldo" is not.

Seeing the missleading behauviour of elvis operator, ¿wouln'd it be nice to add a test for it, or some extra information?

Thanks

Koan08.test03_MultiAssignment()

Solution is wrong, it misses 10 as nextInt(n) is not inclusive.
Should be maxInt+1
// ------------ START EDITING HERE ----------------------
def random = new Random()
[random.nextInt(maxInt+1), random.nextInt(maxInt+1)]
// ------------ STOP EDITING HERE ----------------------

Koan04 Test 02 - 'n' is incorrectly appearing in result...

I was having issues with Koan04.

As I am new to Groovy closures, my first thought for filtering was break file into lines and loop through with a for loop and only append the StringWriter with lines that don't start with "#".

List<String> unfilteredLines = new File("$prefix/exercise.txt").readLines()

for (String unfilteredLine : unfilteredLines){
    if(!unfilteredLine.startsWith("#")){
        filteredResult.append(unfilteredLine)
    }
}

This worked correctly but the test was failed when compared against ‘answer’, I added println to see what 'answer' was and what 'result' was.

String result = filteredResult.toString().trim().replaceAll(/[\n\r]+/, /\n/)
String answer = new File("$prefix/exercise-solved.txt").text.replaceAll(/[\n\r]+/, /\n/)
println result
println answer
assert answer == result

Result output:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque fringilla lacus ut diam laoreet fermentum.Ut ornare turpis vitae est auctor sit amet tincidunt nisi feugiat. Donec nec ligula ut nibh convallis mollissollicitudin et lacus. Phasellus odio erat, consectetur vitae dictum ac, varius consectetur dolor.Aenean pretium volutpat nisi vel laoreet. Nulla facilisi. Phasellus sed nisi nibh. Curabitur auctor erat vel arcubibendum id auctor lacus fermentum. Suspendisse cursus volutpat feugiat. Suspendisse sed urna lectus,molestie fermentum augue.Donec mauris diam, mattis quis posuere at, pharetra ac libero. Mauris a lacus id lorem tempus dapibus. Ut viverraimperdiet sapien, vel rhoncus mauris cursus eu. Donec bibendum feugiat ultrices. Vivamus facilisis nisi et lectusEtiam id leo vitae nibh bibendum semper vel sed velit. Etiam tristique urna auctor arcu feugiat nec vehicula nequevulputate. Pellentesque nunc leo, tincidunt sed dapibus sed, pulvinar nec nunc. Mauris vel urna vitae ipsum mattiscongue accumsan a tellus. Donec adipiscing arcu quis enim iaculis ut commodo nisl lacinia. Mauris turpis justo,congue quis sed urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Morbi sagittis tincidunt quam, ac tristique elit rhoncus id. In sem sem, tempus venenatis faucibus eu, dictum accongue eu laoreet ac, porttitor non magna. Mauris imperdiet aliquam nisi sed scelerisque. Maecenas egetconvallis sapien. Mauris convallis sapien ut tellus condimentum volutpat. Nunc nec velit nisl, aliquet gravida felis.

Answer output:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque fringilla lacus ut diam laoreet fermentum.nUt ornare turpis vitae est auctor sit amet tincidunt nisi feugiat. Donec nec ligula ut nibh convallis mollisnsollicitudin et lacus. Phasellus odio erat, consectetur vitae dictum ac, varius consectetur dolor.nAenean pretium volutpat nisi vel laoreet. Nulla facilisi. Phasellus sed nisi nibh. Curabitur auctor erat vel arcunbibendum id auctor lacus fermentum. Suspendisse cursus volutpat feugiat. Suspendisse sed urna lectus,nmolestie fermentum augue.nDonec mauris diam, mattis quis posuere at, pharetra ac libero. Mauris a lacus id lorem tempus dapibus. Ut viverranimperdiet sapien, vel rhoncus mauris cursus eu. Donec bibendum feugiat ultrices. Vivamus facilisis nisi et lectusnEtiam id leo vitae nibh bibendum semper vel sed velit. Etiam tristique urna auctor arcu feugiat nec vehicula nequenvulputate. Pellentesque nunc leo, tincidunt sed dapibus sed, pulvinar nec nunc. Mauris vel urna vitae ipsum mattisncongue accumsan a tellus. Donec adipiscing arcu quis enim iaculis ut commodo nisl lacinia. Mauris turpis justo,ncongue quis sed urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.nMorbi sagittis tincidunt quam, ac tristique elit rhoncus id. In sem sem, tempus venenatis faucibus eu, dictum acncongue eu laoreet ac, porttitor non magna. Mauris imperdiet aliquam nisi sed scelerisque. Maecenas egetnconvallis sapien. Mauris convallis sapien ut tellus condimentum volutpat. Nunc nec velit nisl, aliquet gravida felis.```

If you notice, there is a "n" added at what is the first line break.

fringilla lacus ut diam laoreet fermentum.Ut ornare
fringilla lacus ut diam laoreet fermentum.nUt ornare

Notice the "n" inserted between the "." and "Ut ornare", this should not be here.

After switching to Groovy closure.

File file = new File("$prefix/exercise.txt")
file.filterLine(filteredResult) { String line ->
    !line.startsWith('#')
}

The "n" is now present in both "result" and "answer". Unfortunately, though this now passes it is not correct, the "n" should not be there.

fringilla lacus ut diam laoreet fermentum.nUt ornare
fringilla lacus ut diam laoreet fermentum.nUt ornare

I am working on Groovy Koans via IntelliJ on a MacBook Pro. I have suspected that this may have something to do with line endings, but is an issue in either way.

Gradle wrapper failing on Java 8

When running the tests with the Gradle wrapper, e.g. ./gradlew koan01, it fails under Java 8 with an exception. The underlying exception is:

Caused by: java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)

Turns out this is a bug in older versions of Gradle (see http://issues.gradle.org/browse/GRADLE-2667). This was fixed in Gradle 1.10, so the fix is trivial - just update the Gradle wrapper to 1.10 or later.

Gradle seems to be a requirement; is that stated anywhere?

I'm new to Groovy -- so it was nice to find your koans. But...

The instructions should mention the necessity for installing Gradle. As it wasn't mentioned, I attempted to do things without running "./gradlew KoanN" without any success.

Is "gradlew" always to be installed (per the example) in the parent directory of the main Koans directory?

Thank you.

How to run test from terminal?

From the terminal, how can I run the test case from the test directory?

Example using Koan01.
I navigated to this location.
https://github.com/nadavc/groovykoans/tree/master/src/test/groovy/org/groovykoans/koan01

Ran this command.

javac *.java && groovy -cp . Koan01.groovy 

Error:

unable to resolve class User 

Command History:

Operators-MacBook-Pro:koan01 lbattle$ javac *.java && groovy -cp . Koan01.groovy 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 102: unable to resolve class User 
 @ line 102, column 14.
           User player = new User('Ronaldo', 'Nazário de Lima', 'ron', null)
                ^

/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 102: unable to resolve class User 
 @ line 102, column 23.
           User player = new User('Ronaldo', 'Nazário de Lima', 'ron', null)
                         ^

/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 103: unable to resolve class UserService 
 @ line 103, column 21.
           UserService userServiceWithUserLoggedIn = [getLoggedInUser: { player }] as UserService
                       ^

/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 103: unable to resolve class UserService 
 @ line 103, column 81.
   [getLoggedInUser: { player }] as UserSer
                                 ^

/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 104: unable to resolve class UserService 
 @ line 104, column 21.
           UserService userServiceWithoutLoggedInUser = [getLoggedInUser: { null }] as UserService
                       ^

/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 104: unable to resolve class UserService 
 @ line 104, column 82.
   = [getLoggedInUser: { null }] as UserSer
                                 ^

/groovykoans/src/test/groovy/org/groovykoans/koan01/Koan01.groovy: 131: unable to resolve class UserService 
 @ line 131, column 41.
   e String createMessageForUser(UserServic
                                 ^

7 errors

01 works out of the box

Hey-
Not sure how to best contact you so trying this. First - awesome idea!

Issue - I downloaded the zip and did the first koan.

E:\downloads\nadavc-groovykoans-19dc5c1\nadavc-groovykoans-19dc5c1>gradlew koan01
Groovy Koans 0.1:
"When 900 years old, you reach, look as good, you will not." - Yoda

-------------------------------------------------------------------
Running exercises in test01_AssertionsAndSomeSyntax().......SUCCESS
Running exercises in test05_ElvisAndSafeNavigation()........SUCCESS
Running exercises in test04_Lists().........................SUCCESS
Running exercises in test02_GStrings()......................SUCCESS
Running exercises in test03_MapsInGroovy()..................SUCCESS
Koan is complete. Well done!

The code already has the answers in it!


On the asserts... why not just use groovy power asserts? They're more readable (IMO), and produce the nice power assert messages when they fail. You can always tack on your desired message as a 2nd param:

assertEquals('Modify "Hola" to "Hello" to proceed', "Hello", hello)

can just be

assert hello == "Hello", 'Modify "Hola" to "Hello" to proceed'

Why learn nasty old JUnit syntax if not necessary? :)

Error running koans on Gradle 2.0

Upgraded to Gradle 2.0, running the koans results in an error:

FAILURE: Build failed with an exception.

  • Where:
    Build file '/Users/joe/devel/projects/groovykoans/build.gradle' line: 32

  • What went wrong:
    A problem occurred evaluating root project 'groovykoans'.

    Could not find method groovy() for arguments [[org.codehaus.groovy:groovy:2.0.5, org.codehaus.groovy:groovy-ant:2.0.5, org.codehaus.groovy:groovy-sql:2.0.5, org.codehaus.groovy:groovy-test:2.0.5]] on root project 'groovykoans'.

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.