• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

Programming |OT| C is better than C++! No, C++ is better than C

Nesotenso

Member
ok questions with list comprehension in python. this from the coursera class

creating a list with 16 elements and all elements are from 0 to 7 with each appearing twice

numlist =[ i for i in range(16] gives 0 to 15. I need 0 to 7 twice.
 
No interpreter in front of me but you don't necessarily need a list comprehension to generate a list of numbers.
If you need a list like [0, 1, 2 ... 7, 0, 1, 2 ... 7] then:

Code:
range(8) * 2

will do what you need. * duplicates a list that many times.

Although if you need [0, 0, 1, 1, 2, 2 ... 7, 7] then:
Code:
[x for x in range(8) for y in range(2)]
 

SolKane

Member
ok questions with list comprehension in python. this from the coursera class

creating a list with 16 elements and all elements are from 0 to 7 with each appearing twice

numlist =[ i for i in range(16] gives 0 to 15. I need 0 to 7 twice.

One thing you can try is to write a loop within a loop, which if you've done before is fairly trivial. Write an outer for loop that goes 2 times, and the inner for loop which will be used to populate the list, eg:

Code:
for i in range(2):
     for j in range(8):
         numlist.append(j)

An alternative, more Pythonish way:
If you already have the list assigned with the values 0 to 7, you can then call the extend method of the list to add those values in a second time. Like so:

Code:
numlist == [0, 1, 2, 3, 4, 5, 6, 7]
numlist.extend(numlist)
numlist == [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7]

Alternatively you can use the * operator if you need to copy the values some n number of times, and reassign the list.

Code:
 numlist = numlist * 10
Will reassign numlist the initial values 10 times. So if it contains 0-7 it will now have 10 sets of that, for 70 total values.
 

Nesotenso

Member
One thing you can try is to write a loop within a loop, which if you've done before is fairly trivial. Write an outer for loop that goes 2 times, and the inner for loop which will be used to populate the list, eg:

Code:
for i in range(2):
     for j in range(8):
         numlist.append(j)

An alternative, more Pythonish way:
If you already have the list assigned with the values 0 to 7, you can then call the extend method of the list to add those values in a second time. Like so:

Code:
numlist == [0, 1, 2, 3, 4, 5, 6, 7]
numlist.extend(numlist)
numlist == [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7]



Alternatively you can use the * operator if you need to copy the values some n number of times, and reassign the list.

Code:
 numlist = numlist * 10
Will reassign numlist the initial values 10 times. So if it contains 0-7 it will now have 10 sets of that, for 70 total values.

thanks

for the following code I am getting none as the output. Is there way to look at the shuffled list ?

Code:
import random
numlist = [ i for i in range (8)]

numlist = numlist * 2
num_list = random.shuffle(numlist)

print(num_list)

EDIT : print (numlist) displays it.
 
thanks

for the following code I am getting none as the output. Is there way to look at the shuffled list ?

Code:
import random
numlist = [ i for i in range (8)]

numlist = numlist * 2
num_list = random.shuffle(numlist)

print(num_list)

EDIT : print (numlist) displays it.

I just looked this up. random.shuffle is in an in-place operation (i.e. it will shuffle the vector you give it). You can't assign it to a new variable directly.

Just do:
random.shuffle(numlist)
 

survivor

Banned
Spent the weekend working on a Django project for school was interesting and educational since I haven't used Python or Django before. So I was learning a new language and a framework at the same time.

One thing I wish I used was a proper Python IDE instead of doing everything in ST2/Vim. Outside of spelling mistakes, my biggest problem was the mysterious indentation syntax errors which I could never figure out what caused them. All what I did to fix them was cut and paste the block of code again, or just rewrite it again in Vim.
 

butzopower

proud of his butz
Spent the weekend working on a Django project for school was interesting and educational since I haven't used Python or Django before. So I was learning a new language and a framework at the same time.

One thing I wish I used was a proper Python IDE instead of doing everything in ST2/Vim. Outside of spelling mistakes, my biggest problem was the mysterious indentation syntax errors which I could never figure out what caused them. All what I did to fix them was cut and paste the block of code again, or just rewrite it again in Vim.

For Vim, this should be handy: http://vim.wikia.com/wiki/Highlight_unwanted_spaces
 

mltplkxr

Member
I think every C programmer should learn JavaScript and Ruby just to experience the stark existential horror of how modern languages have evolved both syntactically and in their execution environment. Or, as a friend puts it, "if you love string concatenation, you'll love JavaScript."

When I learned how the automatic dispatch system for Rails table lookups worked (override the missing method handler, perform heuristics on the method name, etc.), I was truly amazed and terrified.

I'm really not a fan of Javascript either but there is so much stuff made with that now.
 

Tomat

Wanna hear a good joke? Waste your time helping me! LOL!
When you guys are given a program, how do you go on about designing it and implementing it?

Do you go straight to your IDE or whatever use to make it? Do you write a lot of stuff down on paper first and try to work it out? What do you guys do?

I usually think about it in my head for a while and then go for trial and error in Visual Studio, but this method kind of sucks. I need to find a better way to working on programs.
 

usea

Member
When you guys are given a program, how do you go on about designing it and implementing it?

Do you go straight to your IDE or whatever use to make it? Do you write a lot of stuff down on paper first and try to work it out? What do you guys do?

I usually think about it in my head for a while and then go for trial and error in Visual Studio, but this method kind of sucks. I need to find a better way to working on programs.
Broadly, I use a 2-step process.
1) Figure out how to solve the problem
2) Figure out how to implement the solution from step 1

For some tricky problems I might have to spend some time writing things down or talking to somebody for step 1. However, most stuff usually ends up being all step 2, and I just immediately open an editor and start typing. If you don't know how to solve a problem, it's probably a better idea to figure that out before you start programming. This might not always be the case, depending on why you don't know how to solve it. If you can't fit all the moving parts in your head at once, sometimes it helps to first implement parts you know you'll need, so you can see everything in front of you. This is not usually the case though, in my experience.

Almost all problems and solutions can be broken down into sub-problems and sub-solutions. Breaking problems and solutions down like this is by far the best way to approach basically every programming task.
 
Does anyone know how to check whether a window has focus in Swing? Preferably Scala Swing but Java would be fine. The basic structure of my program is that there's a main window and theoretically an infinite number of sub-windows. If someone clicks a button on the main window, I only want it to effect the last sub-window that was selected.

I can think of a few ways I could easily hack out a solution but I hate hacks. Though I imagine I've been a bit daft and completely overlooked something.
 

-Winnie-

Member
What kind of keyboards do you guys use for programming? I've got a Logitech one, but I had a play around with a mechanical keyboard and found it fun to use, but not sure if the benefits are worth the price of admission.
 
What kind of keyboards do you guys use for programming? I've got a Logitech one, but I had a play around with a mechanical keyboard and found it fun to use, but not sure if the benefits are worth the price of admission.

http://www.kinesis-ergo.com/

kb_adv-blk720x471.jpg
 

iapetus

Scary Euro Man
Does anyone know how to check whether a window has focus in Swing? Preferably Scala Swing but Java would be fine. The basic structure of my program is that there's a main window and theoretically an infinite number of sub-windows. If someone clicks a button on the main window, I only want it to effect the last sub-window that was selected.

I can think of a few ways I could easily hack out a solution but I hate hacks. Though I imagine I've been a bit daft and completely overlooked something.

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Window.html#isFocused()

?
 

warpony663

Neo Member
I'm trying to set up a File system watcher that monitors a folder for any changes to the contents and output the changes to a csv file. I've used the FileSystemWatcher class example on MSDN as a start but can't get the program to write to the csv file. I tried something crazy involving two separate files but that didn't work very well.

Sorry for the crappy code, been working all day and have just commented out something when I was messing about instead of deleting them

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
// based on MSDN example code

namespace Task1
{
    class Program
    {
        //public System.IO.StreamWriter log_file = new StreamWriter("C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\logfile.csv");
        static void Main(string[] args)
        {
            try
            {   // check for file existance and creates the files if they do not exist
                if (!File.Exists("C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\log_file.csv"))
                {
                    File.Create("C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\log_file.csv");
                }
            }
            catch { Console.WriteLine("Cannot Create file!"); }


            string path = "C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\Storage\\"; //the path to the folder that will be used
            System.IO.StreamWriter log_file = new StreamWriter("C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\log_file.csv");
            System.IO.StreamReader temp = new StreamReader("C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\temp.csv");

            if (!Directory.Exists(path)) // checks to see if the specified path exists
            {
                Console.WriteLine("watch folder not found, creating watch folder...\n");
                Directory.CreateDirectory(path); // creates the folder
            }

            Console.Out.WriteLine("Filesystem watcher started...\nWatching " + path + "\n\nPress q to quit");

            FileSystemWatcher FileSystem = new FileSystemWatcher(path);
            FileSystem.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; //sets up the file data to use for detecting changes
            FileSystem.Filter = "*.*"; //filter uses a wildcard for any changes to any file

            FileSystem.Changed += new FileSystemEventHandler(Changed); // event handler some times fires twice
            FileSystem.Created += new FileSystemEventHandler(Changed);
            FileSystem.Deleted += new FileSystemEventHandler(Changed);
            FileSystem.Renamed += new RenamedEventHandler(Renamed);


            FileSystem.EnableRaisingEvents = true; // allows the system to automatically notify about events
            do 
            {
                string line = temp.ReadLine();
                log_file.WriteLine(line + ",");
            }
            while (Console.Read() != 'q');            
        }

        private static void Changed(object source, FileSystemEventArgs file)
        {
            Console.WriteLine("File: " + file.FullPath + " " + file.ChangeType + " " + DateTime.UtcNow); // gives full file path, change type and the time that it occured at
            System.IO.StreamWriter log_file = new StreamWriter("C:\\Users\\Warpony\\Desktop\\App Dev 2\\App 1\\temp.csv"); 
            log_file.WriteLine("File: " +file.FullPath + " " + file.ChangeType + " " + DateTime.UtcNow + ",");
            log_file.Close();
        }

        private static void Renamed(object source, RenamedEventArgs file)
        {
            Console.WriteLine("File: " + file.OldFullPath + "\n" + file.ChangeType + " to " + file.FullPath + " " + DateTime.UtcNow);// gives old and new full file path and time it was renamed
        }
    }
}
 
Haha holy shit, this thing looks like a beast. What makes it so much better than a standard keyboard? Just ergonomics?

Ergonomics, yes, but also because ctrl/alt/backspace/etc. are underneath your thumb instead of requiring awkward use of your pinky or moving away from home rows. Those of us who used to use Sparcs all the time appreciated their having Ctrl where modern keyboards have Caps Lock.

It's also programmable but I've never bothered with that.
 

mike23

Member
I'm trying to set up a File system watcher that monitors a folder for any changes to the contents and output the changes to a csv file. I've used the FileSystemWatcher class example on MSDN as a start but can't get the program to write to the csv file. I tried something crazy involving two separate files but that didn't work very well.

Sorry for the crappy code, been working all day and have just commented out something when I was messing about instead of deleting them

...

First, it's best practice to use using blocks when possible whenever you use disposable objects. Particularly when you're using files, since you want to make sure locks are released when you need them to be.
File.Create returns a filestream that will have a hold on the file and may cause problems.

Otherwise:

You have the temp file open in multiple places. Once in the Main and once in the event handler. Trying to share files like that is not really a good idea.

Writing and reading from a temp filestream is definitely not the way to go though. Consider using in memory stuff like a list<string> if you want to pass around strings in the program.

You should look at the new StreamWriter(string path, bool append) overload. The default overwrites the existing file. So each time an event is raised, your current handler would erase all the previous lines.

Also, are your events being entered?

edit:
Your Console.read in the loop at the end of the main method might block the console.writelines in the handlers as well.

As to why it is called twice, that's just the way it works:
http://stackoverflow.com/questions/1764809/filesystemwatcher-changed-event-is-raised-twice


This seems to work fine.

Code:
        private static void Changed(object source, FileSystemEventArgs file)
        {
            Console.WriteLine("File: " + file.FullPath + " " + file.ChangeType + " " + DateTime.UtcNow); // gives full file path, change type and the time that it occured at
            using (var log_file = new StreamWriter(@"C:\Users\Mike\Dropbox\log.csv", true))
            {
                log_file.WriteLine("File: " + file.FullPath + " " + file.ChangeType + " " + DateTime.UtcNow + ",");
            }
        }

        private static void Renamed(object source, RenamedEventArgs file)
        {
            Console.WriteLine("File: " + file.OldFullPath + "\n" + file.ChangeType + " to " + file.FullPath + " " + DateTime.UtcNow);// gives old and new full file path and time it was renamed
        }

        private static void Main(string[] args)
        {
            string path = @"C:\Users\Mike\Desktop";
            var watcher = new FileSystemWatcher(path);
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName |
                                   NotifyFilters.DirectoryName; //sets up the file data to use for detecting changes
            watcher.Filter = "*.*"; //filter uses a wildcard for any changes to any file

            watcher.Changed += new FileSystemEventHandler(Changed); // event handler some times fires twice
            watcher.Created += new FileSystemEventHandler(Changed);
            watcher.Deleted += new FileSystemEventHandler(Changed);
            watcher.Renamed += new RenamedEventHandler(Renamed);
            watcher.EnableRaisingEvents = true;

            while (true)
            {
                Thread.Sleep(1000);
            }
        }
 
Really though you'll find Java very easy to pick up coming from C++ once you get used to the new everywhere. Oh god so much new.

I see what you mean now. new here, new there, everywhere a new new

I spent a half hour or so trying to figure out why I was getting a null pointer exception. Turns out I didn't allocate an object before using it. I figured out how to get stack traces in my Java Console now, so it won't take so long. But sheesh!
 
Quick question, when dealing with x86-64 assembly:

I have to write a stub function which doesn't call anything. 3 integers are passes as parameters (int a, int b, int c). Even though they are really 32bit, or a long in asm terms, I can access them via the 64bit registers to which they are assigned, correct?

I.E:

Code:
int somefunc(int a, int b, int c)
{
    //code
}

where 

int a is in %rdi
int b is in %rsi
int c is in %rdx

(I don't have to write anything besides this small stub accessing the parameters and working with them. It's a handwritten assignment, so I think the main point is to demonstrate the lack of need to use the stack and its offsets and use the far faster registers instead...)
 

leroidys

Member
Quick question, when dealing with x86-64 assembly:

I have to write a stub function which doesn't call anything. 3 integers are passes as parameters (int a, int b, int c). Even though they are really 32bit, or a long in asm terms, I can access them via the 64bit registers to which they are assigned, correct?

I.E:

Code:
int somefunc(int a, int b, int c)
{
    //code
}

where 

int a is in %rdi
int b is in %rsi
int c is in %rdx

(I don't have to write anything besides this small stub accessing the parameters and working with them. It's a handwritten assignment, so I think the main point is to demonstrate the lack of need to use the stack and its offsets and use the far faster registers instead...)

I believe so. I know you can access them with the 32 bit register names even in 64 bit (edi, esi, edx).
 

butzopower

proud of his butz
Thanks for the link.

Just changed my settings for Vim so now everything becomes spaces and not tabs. Should fix the problem when coding in with it, but I guess I should do the same to Sublime Text 2 cause when using it, I'm still getting weird syntax indentation errors.

It's not free, and I actually haven't used it for Python, but the JetBrains IDE is actually incredibly well done, at least RubyMine is. It's super easy to just jump in and out of libraries, test drive code, etc. There's a 30 day trial that doesn't bother you or make you register your email or anything @ http://www.jetbrains.com/pycharm/

I'd still advocate knowing vim, though, it's incredibly useful when remoting into servers, and sometimes just when you feel like using vim.
 

squidyj

Member
Is it just me or are there no reflections yet? If so, I'd suggest you handle reflections before refraction. Also, you need to adjust your colour values there. It kinda looks like you just have ambient lighting in, but then you have a shade of specular in the center that makes me think otherwise.

Edit: NM, looks like that dim lighting IS your diffuse lighting and that you don't have any ambient (judging by your shadows).
Oh and my bad on the double post.

I think for that one I had disabled reflections in order to lock down what was going wrong with my refraction. I have both now. Likewise with the ambient. And a fresnel term, and my local reflection is normalized but I'd kind of like to give up on specular coefficient and scale my reflection ray further off the glossiness of my surface. Ah well, after this semester's over I'll start working on some sort of GPU path tracer. I'm thinking CUDA but I don't know, I'll have to look into it.
 
I am making a Custom Panorama-app with Google Maps API and I'd like a list of clickable buttons to represent the different panoramas.

Changing between the panoramas (created with createCustomLinks()) is no problemo, but getting the panos to change when pressing a button is.

I know I got to create a google.maps.event.addListener for (I think) 'links_changed'-event but that's pretty much as far as I got.

My code is pretty much equal to this:
https://developers.google.com/maps/documentation/javascript/examples/streetview-custom-tiles

found in here:
https://developers.google.com/maps/documentation/javascript/streetview

Something like this:

if the button is named
Code:
<button id="example">Example</button>

and there is a said DomListener

Code:
google.maps.event.addDomListener(document.getElementById('example'), 'click', someFunction);
//this gives me TypeError: a is null for some reason

then it should do that function that changes the panorama

Code:
 function someFunction(){

// SOMETHING THAT CHANGES THE PANORAMA
}



Any advice?
 
I don't know anything about the google maps api but if you're getting a null value than that probably means that your "example" button is named incorrectly or something similar. Document.getElementById will give back a null if it can't locate the element specified.
 
I don't know anything about the google maps api but if you're getting a null value than that probably means that your "example" button is named incorrectly or something similar. Document.getElementById will give back a null if it can't locate the element specified.

Which is exactly why I added "for some reason" hehe

The documentation says:

This convenience method has a signature as shown below:

addDomListener(instance:Object, eventName:string, handler:Function)

where instance may be any DOM element supported by the browser, including:

Hierarchical members of the DOM such as window or document.body.myform
Named elements such as document.getElementById("foo")

so I got no idea why it can't find the said element. Weird.
 

nan0

Member
The example from Google uses double quotes for document.getElementById("foo"), while you use single quotes document.getElementById('example'), maybe that makes any difference. The only thing that struck me, I don't know any JS.
 
so I got no idea why it can't find the said element. Weird.

If you can host the page you are trying to get working somewhere I can take a look but it's hard to know what the issue could be without more info. Did you try to just pop open a console/scratchpad and do a getElementById manually to see what it returns?

The example from Google uses double quotes for document.getElementById("foo"), while you use single quotes document.getElementById('example'), maybe that makes any difference. The only thing that struck me, I don't know any JS.

No difference in JS, purely a convention/preference thing.
 

Kinitari

Black Canada Mafia
Ugh - would appreciate some advice. I'm currently working on the e-card that's going to be sent around for the holidays, and while it was coming along nicely I just find out that corporate has all .swf files filtered out in outlook (Awesomely enough, I was asked to do it in flash, and only found this out by testing it out) - so now I need to think of alternative solutions. It looks like whatever I make, it wont be embedded into emails regardless, so while that sucks it gives me some flexibility - what do people recommend?
 
If you're going to be pointing people to a website to look at it, then you could consider doing it in JavaScript with the HTML5 canvas:

http://www.html5canvastutorials.com/

Fully supported by all modern browsers and no need to load any plugins etc. when going to a page. Also nice and simple to load up images/draw things, move things around, play sound and so forth. Should work totally fine on smartphones too (I think).

Alternatives are to just do it in flash given an external link
ugh
, or do it as a Java applet, which requires java. Most modern machines and OSs have that installed anyway, although there could be issues with smartphones? Probably some other stuff you could use but I really think the JS is the lowest impact option.
 
I think for that one I had disabled reflections in order to lock down what was going wrong with my refraction. I have both now. Likewise with the ambient. And a fresnel term, and my local reflection is normalized but I'd kind of like to give up on specular coefficient and scale my reflection ray further off the glossiness of my surface. Ah well, after this semester's over I'll start working on some sort of GPU path tracer. I'm thinking CUDA but I don't know, I'll have to look into it.

Are you thinking of doing any of that realtime path tracing stuff on the gpu? That stuff is pretty inspiring.

I'm working on a standard take-forever ray tracer, but am going to generate the first hit on the gpu as a speed-up. Then the following rays will do their standard traces on the cpu.
 

neemmss

Member
I decided to switch to php and learn that. I have been reading there is the "right" way of learning it and the "wrong" way that makes you a bad php programmer. The more I search there is no consensus from people on what to do / what way / what to read to learn php the right way. Can anyone direct me in the right direction?

Thanks. :)
 

squidyj

Member
Are you thinking of doing any of that realtime path tracing stuff on the gpu? That stuff is pretty inspiring.

I'm working on a standard take-forever ray tracer, but am going to generate the first hit on the gpu as a speed-up. Then the following rays will do their standard traces on the cpu.

Yeah, that's the idea. I'd like to implement a variety of GI solutions, SPPM, BDPT, etc. but I really want to get voxel cone tracing up and running, that would be very cool. I'm guessing it'll take me into the summer

And yeah, I didn't do it for this because the scenes aren't very complicated and I need to spend more time on my other courses during the semester but I would have likely rasterized to a buffer and maybe baked a conservative shadow map per light or something to cut down on casting them shadow rays.
 
I decided to switch to php and learn that. I have been reading there is the "right" way of learning it and the "wrong" way that makes you a bad php programmer. The more I search there is no consensus from people on what to do / what way / what to read to learn php the right way. Can anyone direct me in the right direction?

Thanks. :)

The obnoxious response to this is to say that the right way to learn PHP is to not learn it at all. But the best way to learn it is really to make sure that you are following the most modern conventions. A lot of PHP is bad old junk that's in there because it's in there rather than because it's useful or effective.

I'm far from an expert on PHP, mainly because I refuse to use it for anything, but when I did have to learn it before, I found the Official Documentation to be a reasonably coherent explanation of everything. The comments that people post tend to fill in the blanks or provide opionions on best practice which are usually good. Sometimes a giant flame war erupts in the comments which is your clue that the topic in question is a particularly murky one.

I also came across this the other day, and while I haven't read it in detail, from a quick look through it seems to cover most of the bases well.

You said "switch to", which language(s) are you familiar with already? That might affect the best way for you to approach PHP, depending on existing knowledge.
 

Minamu

Member
Where can I read easy to understand basics about generic programming in c#? I have a rudimentary bubble sorter kind of running but it's not very pretty(for class)
 
Z

ZombieFred

Unconfirmed Member
Hey guys, what's the best language to learn as a network/server administrator? People have said powershell and thinking of that but I've been kind of leaning towards c# since of how I can create MIS packages with it and also the object based benefits doing so. This is coming from a guy with little programming language done in the past and more cmd and some other syntax commands. Thanks guys.
 

usea

Member

Minamu

Member
By generic programming, you're referring to this right?

http://www.codeguru.com/csharp/.net/article.php/c19413/Introducing-NET-Generics.htm
http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx

If you have any questions, or want some advice specific to your code, feel free to ask.
Yes, I think so :) It's a small do whatever you want assignment so I need to give some sort of context (ie make a stupid game) to a generic sorter that can do "any" kind of type/object.
 

injurai

Banned
I've learned or at least been introduced to a lot of the basics in C++ and Java. Are there any good resources for not a fresh beginner, but by no means an expert to learn Python without wading through all the hand holding?

Something that mostly covers syntax, mechanics, and difference in Python, not necessarily what computer science is.
 

usea

Member
I've learned or at least been introduced to a lot of the basics in C++ and Java. Are there any good resources for not a fresh beginner, but by no means an expert to learn Python without wading through all the hand holding?

Something that mostly covers syntax, mechanics, and difference in Python, not necessarily what computer science is.
I usually have luck googling things like "python for java programmers" etc. I don't know any places specifically though.
 
Top Bottom