What language/ software does Rosetta stone use? - audio

Rosetta stone allows you to speak and check you pronunciation with the native speaker, what programming language would such a feature be built in or what server/clientside software would be necessary?

I suppose I'll take a crack at this question, even though it's pretty vague and I've never used Rosetta Stone.
First, if your program was running within a web browser (I assume that's your goal since you said create a web program,) you'll need to be able to capture audio locally. Obviously, you wouldn't want to require the user to upload audio files they've created. This would typically be done with Adobe Flash, but I'm sure you could also use Silverlight, Java, or an unmanaged browser extension specific to each browser you want to support.
Getting the audio is probably the easy part. Processing the actual wave form for pronunciation would be fairly tricky. You'd have to match each phoneme, making sure it was valid, and making sure the right parts of the word were accentuated. I doubt it would make much sense to have this sort of linguistic data down on the client, and I doubt something like Flash would be very good at doing this sort of wave form analysis anyway. Most likely, these samples are uploaded to a server where they are analyzed for correctness. This could be done in pretty much any programming language, so one could only guess how Rosetta did it. Perhaps Java code, pure C++, or .NET.

Related

How to create an audio journal in Ubuntu 11.10

I understand that this question might be a little broad, but I am wanting to make an audio recording and playback program to act as a journal. What is the best way to go about this?
I have never done any programming with sound before and really have no idea where to even start, but I do understand that I am probably going to need codecs and interface my program with specific libraries available in Ubuntu. So, to make things a little more specific:
What libraries should I look at for recording and playback?
Are there any reliable resources that show how to effectively use these libraries?
The first question takes precedence of course, as I can use Google to find the answers to the second question myself.
A couple of Google searches didn't really provide specifics for what I am wanting to do here, so I thought I would ask the experts. However, if the question is unsuitable, let me know and I will remove it.
If this is just for you to use I would pick a scripting language with reasonable library coverage (perl, python, ruby) and then glue together the various modules needed.
In terms of architecture you could just have a folder of audio recordings, write a command-line tool that when run starts recording what you say until you press Control-D - then plays it back, asks "OK? 'Y/N'", and if you say Y saves it to the folder. You could then write a little web page generator that creates an index.html to the recordings.

simple game development on linux

I'd like to develop simple 2d games on linux. Something like one below. The only decent tecnology I've found was PyGame. Is there any other worth taking a look? Is there a possibility to develop flash games on linux?
Thanks in advance.
I will have to agree with previous user , pygame is an amazing powerful and easy to use library.
Now about your flash games, there is a back door.
First forget about flash. Yes I know that this seems a bit out of topic , but no worries you can compensate for this.
Now python has something called Pyjamas, dont laugh its actually a very serious package. What pyjamas does is to convert python code to javascript code, all this happens automatically and you dont need to know a single line of javascript , even though knowing javascript could help as well. Of course the benefits of converting python to javascript means that not only you can run python apps inside any browser and any device supporting a browser including iPad, iphone, and pretty much anything else you can also use javascript libraries. Actually you can use only javascript libraries , so forget about using pygame with pyjamas.
Now HTML5 is the future, its still an ongoing project and far from finished, but YouTube already is using it with alot of success. Html5 together with the new version of javascrip offer features very similar to Flash, with the added advantage unlike Flash which is tied to Adobe , HTML5 is open source and a web standard. That means that borwser support Html5 out of the box with no need to install anything. So you could use HTML5 and Javascript to build your browser games. I think that HTML5 will replace the Flash in the near future. Remember because you will be using pyjama you will writing your code in python only, but of course you could mix it with some javascript code if you wish so.
I will advice for the time being epxlore pygame , because its dead easy to use, and when the right time comes and feel confident with python, take a look at pyjamas and fire away your browser games. The important thing to remember is that unlike other easy to lear language Python is a serious language used for almost anything, so you never run out of option. So do your coding and have fun.
Oh in case you need to check out pyjamas its right here.
Pyjamas Website
Here's a list of some open source game engines in general. You'll want to look at the cross-platform, 2D-oriented engines and see which one best meets your needs as far as programming language and features.
However, PyGame is pretty well-developed, and Python is an exceptionally easy and fun language to do anything in, including game development. I recommend you check out PyGame first, I think it would work well for your task.
As for developing flash games on Linux, there's little chance of that. To develop flash games you need Adobe's suite, and it is only compatible with Windows and Mac. So unless your computer can handle the stress of Adobe software (which is pretty high) in an emulated environment (Wine, which adds considerable hardware overhead), you'd need Windows or Mac OS X to do that. You can still play them, however.
There are flash libraries for games that work in linux. It's a but more of a pain in the ass but maybe all the hassle will teach you a thing or two ?
Here are some usefull links
http://flashgamedojo.com/go/
http://www.flixel.org/download.html (mentions some linux options)

Game engine or graphics library?

Should I use a game engine or a graphics library? I was just thinking of making a simple game to start out with, but what about when you get to higher-end stuff and high poly models? Which would be faster?
Also, should I choose Xith3D or JMonkeyEngine?
Or if I were to go with a graphics library should I go with JOGL, LWJGL, or the new JOgre?
Java is fine for making games, if I wanted to switch to c++ I wouldn't be asking.
There is in fact 2 questions to ask yourself to find the answer :
Do you want to make the game in no time or learn about more technical side of game programming?
Does the game is a variant of a well known/established genre or is it structurally different?
If you answered:
1==game && 2==genre : Use a game engine. Choose one that have been used for the target genre. Just make the game with this tool as fast as you can.
1==game && 2==different : As the structure of your game will be different, it will be hard to make something that match your game structure with a full engine. Maybe using a framework (made of several separated libs) will be of better use. Anyway, it will not be really fast to make but at least with a framework you'll not have to build the lower layer code and check that all libs are compatible.
1==technical && 2==genre : Well in this case you could study an engine or make your own. If it's your first game or your first 3D app, I recommand using DirectX or OpenGL directly one time, then pass to an engine later, like Ogre. Anyway, try to right yourself what techniques you want to learn about.
1==technical && 2==different : Take time to choose several libraries for each side of your game, then work on getting things together to make it work in your specific case. It might be the most interesting case but it's also the most time consuming. Anyway, use libs. Use ogre for graphics, etc.
Now, there is still a question to ask yourself when choosing your lib/engine, whatever the previous choice : does your game need to be cross-platform?
Check that your tool/engine match your answer to this question.
By the way, if you want to get in the industry OR want to get technical, you'll have to talk to hardware (at least if you want to learn about graphic programming) so use C++ (or C) instead of java. It will go in your way.
I wouldn't recommend Java for game development, as it tends to be slow and games require performance. To make a simple game, a graphics library would be enough. For a complex game, although, a game engine would offer you more interesting stuff.
A simple set of graphics libraries with some cool utilities to make simple games would be openGL + GLUT. I've already used it for small games...
Ok, so you want to learn game programming. You have a lot of options, but I don't see much of a plan in your question or comments, nor am I quite sure what your exact goals are. The only sure thing I get is that you want to work with 3D graphics.
The thing is, you're asking about performance without actually running into performance issues. Your question feels premature.
For the sake of making a choice, start building with JMonkeyEngine. It seems to be a fairly advanced 3D engine in Java. Starting with an engine allows you to concentrate more on the design of the game instead of having to fine tune everything yourself.
Take the time to make the game complete, with all the finishing touches, such as menus, player options, whatever completes the game. Finished projects teach you a lot about game design, and look good in your portfolio.
Repeat this process with slightly higher-complexity projects, over and over again. Depending on how quickly you advance the complexity and how well the engine is built, you will eventually reach a project where the engine doesn't keep up with your expectations. From here, you can take advantage of the Open Source aspect of the engine and figure out exactly HOW the engine is handling your design.
From this point your learning path switches gears. Instead of learning about generic game programming (which, by this point, you should have a fair bit of expertise in), you start to dig deeper into hardware interaction and low-level optimization.
This all assumes that you are only just beginning to get into game design and game programming, but have a fair amount of experience in your chosen language.

How to improve programming knowledge, and how to test the current state of it?

Hey guys, I'm very excited about how experienced I am in programming.
The first, working program that I have written, was in 2004 with C. Since this I have tried many programming languages, now got stuck with php. Currently I'm working as a web-developer, and everyones pleased with the work I do. Except me :) Thats the reason why i want to know, how high my experience and my knowledge is.
Could you tell me, some tips, tricks, test, or anything, on what I can see how much I need to learn and practice to get a mastermind in programming? (at first place in php)
I'm also a programmer who doesn't like to stagnate, so perhaps I can offer a few tips:
1) What's your weakest area? Networking? Graphics? Regex? What is the one area that if someone asked you "I need a program that can do X" and that X scares you what is it. Now study as much as you can on that subject. Hack out a few prototypes and make it so that you understand it allot better. I used to hate Regex commands, now I use them whenever I can.
2) Study "different" languages. I'd recommend learning a "functional" language such as Erlang, Lisp, or perhaps certain aspects of Python. Get a book on "functional programming" and read it through, and then think how you can apply these concepts to your current work. Start using map() and filter() in python instead of for loops, etc.
3) If you're doing web programming, get yourself a massive set of data and start doing some number crunching. A while back I was playing EVE Online, so I fired up SQL Server Express and hacked out some market analysis routines in it. It was around 4 GB of data the server crunched through, but I learned allot about SQL Server in the mean time.
I recently was watching a lecture on Lisp and the Professor said: "Computer Science is not about computers and not about science. It's about knowledge, and how to manipulate that knowledge to obtain more knowledge" So true, so the more tools you have for manipulating and gaining knowledge, the better programmer you'll be.
Start a new programming project and take your time to make every single aspect of it as good as possible.
Use git or Mercurial for source control. Use submodules (or whatever the Mercurial equivalent is) to manage external frameworks. Set up post-commit hooks to run your unit tests and zip up your executable. Use new branches for everything and do octopus-merges to get them all back into a single branch.
Script everything you do. Deploying a new version of your app (including website updates!) should be as simple as running a single script.
Make your app 100% localized. Deploying in a new language should be as easy as sending a strings file out to a volunteer to get translated, then popping that translated file into your source code, no additional work needed.
Optimize, optimize, optimize. Spend the extra week to make your app load 100ms faster.
Refactor, refactor, refactor. Don't just go for orthogonality and abstraction, aim for pure code beauty. Using your classes should be like using Duplo blocks, they just snap into place with not an error in sight.
Unit test everything. 100% coverage. Don't let a single regression go unannounced. Automate the entire test suite so that you can't promote your code without all the tests passing.
Put your app in the cloud. If you're writing something for the desktop or a mobile device, give your users a way to sync their data to a website. Write that website. If your project is web-based, give your users a mobile or desktop front-end to access their accounts.
Accessibility. Handicapped users should be thrilled with the care you put into designing your app.
Keep in mind that if you do everything I listed here, you'll never ship, but you'll be a well-rounded a developer, an asset to most any team.

Why is software support for Bidirectional text (Hebrew,Arabic) so poor? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 9 years ago.
Improve this question
While most operating systems and web browsers have very good support for bidirectional text such as Hebrew and Arabic, most commercial and open-source software does not:
Most text editors, besides the original notepad and the visual studio editor, does a very poor job. (And I tried dozens of them).
I could not find any file compare tool doing a decent job - No even Beyond-Compare.
Same thing for software and packages dealing with charting and reporting.
Some questions I have:
Do you share the same pain I do?
Is the software you write bidirectional compliant? Do you have bug reports about it?
Do you even know what are the issues involved? Do you test for them?
Any suggestions on how to make the software world a better place for bidirectional language speakers?
Do you share the same pain I do?
No. And that's probably the answer: most people have no idea how bidirectional languages work. I for example have some troubles working with that. Because I'm interested in that topic quite a bit I was reading pango sources a while back, and that's probably the second reason why the support sucks: it's damn hard to get right.
I think the GNOME project has one of the best support for bidirectional user interfaces thanks to Pango (of course I can't verify that because I wouldn't be able to spot the problems).
But because you said "open source": I think the globalization support in open source projects is generally outstanding. Linux sucks are pretty much everything, but internationalization is something they get right.
gettext is still one of the few translation systems that has a (I know half baked but) working pluralization system.
Is the software you write bidirectional compliant? Do you have bug reports about it?
Probably not. I'm working on a web publishing software currently and that's one of the things I haven't tested at all so far :-(
Do you even know what are the issues involved? Do you test for them?
Bi-directional support is not no the direct roadmap. So no tests for them, where the issues are I know from the translation interface I wrote for Plurk.
Any suggestions on how to make the software world a better place for bidirectional language speakers?
For an open source project: ask guys to help you that know where the issues are. For closed source? Hire someone who knows.
I think there are two main answers to this:
1) Most languages read left-to-right, so people either think they can get away with not having it or just don't even think about it in the first place.
2) It can be hard to support it, depending on what your project is. If your tools/libraries don't support it, your software probably won't either. And it's not just hard in a programming sense, but hard to get it right when the programmers aren't familiar with right-to-left languages. As I understand it, to really properly support bi-directional text, some things in the UI must also be flipped to look "right."
The only reason I know anything about this is because I work with a guy who speaks Arabic as his native language and I've talked to him about it a little. I still don't know much about it. Our products only pretty recently started supporting Arabic and I haven't been a part of that effort.
Simple, get more bidirectional language speakers to voice their concerns! With so few bidirectional language users around, I'd imagine that bidirectional text support is pretty low on most people's priority lists. The more bug reports you and other bidirectional language speakers file, though, the more the problem will be addressed.
If you break up a string into substrings and display them individually you will break the OS bidi rendering, also if you add some mostly innocent symbols (like a - for example) you will mess up the text display.
The two things you have to know to write bidi-compatible software is:
Always display entire strings, never try to display parts of a larger string.
Always test any formatting code with bidi text.
And if you are writing a text editor, word processor or anything that requires high end typography and you can't follow rule 1 above then writing a bidi rendering engine is a lot of work.
I'm left-handed, and deal with similar issues in the physical world. It's a natural part of being in the minority, that businesses primarily cater to the majority.
If you think there are problems with bidirectional text, you should check out the Turkish i problem sometime..
Anyhow, I think what will happen is either that text processing will become very standardized, and the libraries will do things correctly, or you'll have to wait until the app becomes big enough to warrant adding good support..
I know ltr text in Flash is a pain in the ass - I've heard it's easier for web pages, although you've got to be careful how you process strings so they don't get mixed up.
This is an awfully subjective question, by the way, one that's impossible to find a 'solution' for - are you sure this is the right place to ask it?
I myself has been researching around on how to add native BiDi to Android. Results so far: lots of work, Android practically lacks real BiDi.
The issue is that the world of computers is all about internet and sharing, especially open-source software. This means dominant languages are the concern, and if you note english is actually the standard and other (mostly western) languages are provided as side translations.
I speak Arabic/Hebrew/English. With computers I use almost only englis, with arabic/hebrew for local stuff (news, online tv, ...) which is handled well by web browsers. However since I bought Samsung Galaxy and started updating firmware I starting noting how big the problem is :(
A note regarding some of the answers - There are no "bidirectional languages". a language is either left to right or right to left (or top to bottom...). A Text or a String can be bidirectional if it contains both say Hebrew and English.
Regarding the question, Firefox seem to work swell for me. Also MSWord and that's pretty much everything I use Hebrew in.
Any suggestions on how to make the software world a better place for bidirectional language speakers?
Unfortunately, I don't think the situation will improve unless there are a lot more RTL-language-speakers participating in global affairs... which seems unlikely.
Currently we have Israel which is a very technologically advanced society, but very small and nearly all the educated people speak English. And then there are the Arab countries and others that use Arabic script, which don't produce and consume nearly as much information as the Western world, according to studies I've seen.

Resources