Understanding JVM Better [closed] - jvm

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I want to know the internals of the JVM, how it performs and the details that matters. Can you suggest any resource or best book available for this ??

Most of what I know of the JVM comes from the Sun docs. They have some great whitepapers on the HotSpot VM:
http://java.sun.com/javase/technologies/hotspot/index.jsp
You mentioned performance, so maybe you would be interested in the Sun performance docs:
http://java.sun.com/docs/performance/
For a more hands on approach, try looking at Kaffe. This will show you what a virtual machine does, but not necessarily how Java code works in Sun's JVM:
Kaffe is a clean room implementation of the Java virtual machine, plus the associated class libraries needed to provide a Java runtime environment.
And the OpenJDK is a great place to learn about how the Java Platform is implemented:
http://openjdk.java.net/

Chapters from "Inside the Java 2 Virtual Machine":
http://www.artima.com/insidejvm/ed2/index.html
"Under the Hood" articles by Bill Venners
http://www.artima.com/underthehood/index.html
There's also "Jasmin", an assember for JVM, if you want to get your hands dirty and try low level programming with the JVM.
http://jasmin.sourceforge.net/

The obvious first choice is The Java Virtual Machine Specification. There's also The Wikipedia Page, which links to additional resources.

If your motivation is to find out how to write code that works faster or uses less memory the VM spec won't help too much.
The VM spec isn't designed to give you information about that, it is designed to let VM developer know, roughly, how to implement the VM.
That being said it cannot hur to read it.
The best way to find out about speed/memory issues is at a much higher level, there are any number of books that will help you faster/leaner code.
A profiler is an invaluable tool for testing your code to see what is faster/uses less memory. Profile, see what is slow/uses a lot of memory, change it, profile, see what the changes did.

Here is one good and short explanation of the heap, objects allocation, and garbage collection,
Understanding Memory Management.
You can explore more starting from there.

Related

Documentation system that allows for reusability and Markdown support? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I'm investigating different documentation systems for a project keeping up. Most recently I've been using DITA and the DITA OT, but its complexity makes me want to shoot myself.
Are there any systems that provide the following functionality:
Markdown support
Reusable content (I can refer to previously defined paragraphs or terms)
Localization support
Preferably, free or open source
Preferably, allows for multiple output
I wish I could use Pandoc for this, but it doesn't appear to support reusable content.
Edit: I just ended up writing my own library for this: https://github.com/gjtorikian/markdown_conrefs
If you don't mind reStructuredText instead of markdown, Sphynx is worth a look.
You could use pandoc + pre or post processor.
That way you could easily implement snippet reuse.
This is a topic close to my heart. There's quite a lot of Markdown processor options out there, but at time of writing those are more a case of personal solutions to this persistent problem. We all tend to get frustrated, make something to help in the short term, and share it.
The challenge has been to extend this to something built for purpose and at scale. Which is where I've turned my focus to over the last few years. That includes first working on PressGang CCMS inside of a tech writing team at Red Hat, and then being inspired to spin out Corilla, a dedicated technical writing startup building the tool you require.
PressGang (the prototype)
Please refer to the PressGang CCMS project for an idea of what we did at Red Hat to build tools to solve this. The lead engineer did a run-through video that you can see on Vimeo, and I've created a public Amazon AMI if you wish to try it. It's not being maintained but it's all open source.
It's a relatively large stack written for the most part in Java, but was useful as a look into an open source project in this space. But with bias I'd suggest...
Corilla (the product)
We cofounded Corilla as an open source company to focus on bringing together the elements of content reuse and collaboration with the ease of Markdown and Asciidoc. I've spent years writing DocBook XML, and quickly built my own snippets for Sublime Text to minimise the considerable overhead of authoring in that markup. The tide is of course turning. We need easier ways to write faster, and we need them to be discoverable, reusable, and allow the entire team to generate the content in formats they require.
I'd encourage you to get involved with the beta, as the technical writing and developer community is driving the project, and as we solve our problems together. Being able to resource and drive this to market is far more rewarding than having to pick through incomplete processor chains. I've been there, it's time we did more.

Documentation of a software project [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I am working with a team that works on a very large software project, we have tons of Documentation that is written in MS WORD format with nohyperlinked indexes, no search ability.
Everyday we waste our time trying to find the exact document or reference.
I was thinking if there was way or even a professional tool that would convert all this into a wiki format and maybe with a little manual (painful) help be organised into something that improves the accessibility.
I use Google Desktop Search to make my life a little easier but its not the best solution
I just want to know if any of you faced similar problems and possible solutions to this issue.
Confluence wiki lets you import Word documents. I've been told it's a really good wiki with a lot of features.
Open Source: Trac Wiki
The Trac Wiki system is a popular open source option. There's even a thread on another Stack Exchange site about converting Word documents into the Track Wiki format. Some large scale or notable users of Trac include Red Hat, Django, Handbrake and SourceForge.
Commercial: Confluence
Confluence is another popular option, as mentioned by Alex Korban. A good example of a large-scale use of it is the Application Server 7 community documentation of software company JBoss.
2015 Update - PressGang and Corilla
I'll just add a quick update that I agree so strongly with this problem of discoverable content and collaboration that I've worked on solving it in a few different projects.
PressGang (the prototype)
Please refer to the PressGang CCMS project for an idea of what we did at Red Hat to build tools to solve this. The lead engineer did a run-through video that you can see on Vimeo, and I've created a public Amazon AMI if you wish to try it. It's not being maintained but it's all open source. Check out the repository or get involved in the community fork.
Corilla (the product)
That was an amazing experience to be a part of and inspired me to spin out Corilla, an open source technical writing startup tackling exactly the problems you mention. This will have both a commercial/enterprise version available as well as open source community version. There's a beta currently running that I would encourage you to get involved with - the problems you're experiencing will be great to shape the solutions being built.
Don't know about tools to convert MS Word to a Wiki, but if you save your documentation in ODF (The XML format from OpenDocument) it should be possible to import the documents in your own program, or transform them using XSL, and output them in Wiki format.
In the process you can try to guess some links based on string matching.
The difficult part, in a team used to write documentation in a word processor (without even using word processing basic features like indexes, table of contents and hyperlinks), is to convince them to use another system that is not a typewriter.

Natural Language Parsing tools: what is out there and what is not? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
I'm looking for various NLP tools for a project I'm working on and right now I've found most useful the Stanford NLP projects.
Does anyone know if there are other tools that are out there that would be useful for a language understander?
And more importantly, are there tools that are NOT out there?
Most specifically, I'm looking for an api for morphophoneme analysis etc.
EDIT: I am an academic (a student working on a research project) and am mainly looking for open source or, at least, open api projects.
I suggest you take a look at the following:
the ususal nlp libraries like Open NLP, LingPipe, NLTK, Gate, UIMA. All of these provide parsers and word stemmers (i.e. they don't give you back the root of a word, but its stem). Some also provide lemmatizers.
websites which collect NLP tools. These are but a few of them: the wiki of the Association of Computational Linguistics, Language Technology World, the website of the compling dep. at Heidelberg University
I'm not aware of a tool which returns the root of a word, but, as I said, there are stemmers and lemmatizers. For lemmatization, try Tree Tagger or Morpha. Morphophonemic analysis is a term not specific enough to get you what you want.
Once you know more specifically what you need, you could search the archives of the Corpora List or post a question there.
NTLK is an interesting toolkit which allows building NLP-based applications. This can be used for practical applications which require for example POS tagging, or which implement simple classifiers or entity extractors.
I'm unsure of what a "language understander" application would encompass, however, but this sounds like something which may be beyond what can [easily] be based upon NLTK.
Reading the question completely, and its reference to morphophonics, seems to confirm that NLTK would probably not serve the OP's purpose very well; to my knowledge NTLK doesn't offer modules that deal with text at this level. You may want to check this for yourself however, as NLTK is a broad and active project and may have seen recent additions in this area.
I want to chime in with a link to the MontyLingua python package, which can be found here. I think it uses a different parser than the nltk.
http://www.fslog.com/2008/09/20/montylingua3-gpled-fork-of-montylingua/
you can google a comparison with nltk.
Maluuba has just released an API to their Natural Language Processor. It's available at http://developer.maluuba.com.
There are three libraries written for it by Maluuba:
Python Library: https://github.com/maluuba/napi-python
Ruby Library: https://github.com/maluuba/napi-ruby
Java Library: https://github.com/maluuba/napi-java
For an example of the power of it, take this query as an example of what can be extracted:
>> client.interpret phrase: 'Set up a meeting with Bob tomorrow \
night at 7 PM to discuss the TPS reports'
=>
{:entities=>
{
:daterange=>[{:start=>"2012-11-15", :end=>"2012-11-16"}],
:title=>["meeting to discuss the tps reports"],
:timerange=>[{:start=>"12:00:00AM", :end=>"12:00:00AM"}],
:contacts=>[{:name=>"bob"}]
},
:action=>:CALENDAR_CREATE_EVENT,
:category=>:CALENDAR
}

Good resources for example process definitions of software development methodologies? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
Is there any website specifically for sharing and accessing actual software development processes implemented in software organizations?
There are lots of resources that give advices and descriptions for implementing these processes. They are very useful. But I think having actual example process definitions would be very useful as well. Specifically, I am now looking for an example process definition in CMMI. I overviewed several books but none of them presents any specific example implementation.
I think the authors are probably concerned that the readers might just copy these process definitions without understanding specific customization decisions in them. They are very rightful in this concern. But anyway, I think this is an important need for general software community. Understanding and interpreting an example document properly should be the responsibility of the reader.
If you don't know any good resource that shares specific implementations of the processes, what do you think about this need? Don't you think that we, software engineers and developers, should share our process definitions as we share our code?
There is a good wikipedia article with a lot of resources. Also searching for "UCM Workflows" on IBM Rational web would lead to good examples, I'd rather not deep link into their page. The question is how far into detail you want to go into the process. Most resources available will only give you a rough overview of basic development processes.
What you mean by examples is probably going into the details of specific implementation of such development process. For larger and established software development companies their development process will most likely not be readily reusable, because it will involve many custom made tools and configurations and the process itself could be in some cases considered proprietary, giving the company a competitive edge over others. Going into details about the process could also pose a security risk, because it would reveal a lot about the company infrastructure. So I don't think you would find much in form of examples from successful software development companies and what you find is either too general or written by theory-crafters.
This is a field of special interest for me for almost a decade now and I only ever found bits and pieces published about specific processes used by major software corporations. I would certainly welcome a forum to share experience with other professionals in this field.
Try looking at EPFC - Eclipse Process Composing Framework, there are some example processes, tools and best practices to develop them.
There are merits in providing some sample templates which would assist someone getting started. The limitation is that it could force the user to adopt the templates without thinking about the application.
Most methodologies adopt a 'guideline' approach with some tailoring. For example, the RUP system, promoted by Rational (now IBM) traditionally suffered from the assumption that it was only applicable to large scale projects. This prompted discussion on how RUP can be applied to a one person project. Of course it takes work and effort and if you are a small project team sometimes tailoring the methodology could overshadow the project; i.e are you trying to build a methodology or a product ?
As for samples some examples are:
Agile Unified Process - gives good examples of both process, artifacts and also commentary on the process and it's application,
Open Unified Process - again samples, artifacts and easily navigated system.
I do not know of such a "process repository". I only see general description like this one.
Note: While the CMMI implementations I have come across are quite tailored for a specific enterprise/environment, I found them truly effective when evaluated/challenged.
In that regard, the study Six Sigma and CMMI interesting, not so much as a practical example of CMM, but rather as a way to put CMM in perspective.
The OPEN Process Framework Repository Organization's web site contains an online repository with over 1,100 method components.
It doesn't contain final methods because, according to method engineering precepts, you must compose your methods from these components depending on your product, project and organisational needs.

Is there a good description of the "system call" mechanism used in OSes? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I am looking for a good primer or technical description of the System Call mechanism that is used by operating systems to transition from user space to the kernel to invoke functions such as "open", "read", "write", etc...
Is there anything other than the Wikipedia entry?
Websites, pdfs, books, source code, all are welcome :)
The exact method depends on the processor architecture and what operations it defines for transferring to kernel mode. One approach, and the traditional one on x86, was to use a software interrupt. It turns out this wasn't very fast for the general case so later, Intel added SYSCALL and AMD added SYSENTER. Windows XP and later choose an appropriate system call technique for the platform, at boot time.
You could choose to use specific software interrupt numbers for specific functions, but generally the processor doesn't have enough interrupts to cover all the system functions, so it's necessary to make one of the registers contain the function number required. If you're doing that anyway, it's not much of a hardship to only use the one system call function.
Windows CE, before version 6.0, uses a side-by-side process virtual address model that actually allows processes to call into each other directly. The page protections are set up so that when this is done, an access violation fault occurs: the kernel gets control, fixes up the process address space (moving the called process into slot 0), fixes up slot-0-based arguments to point to the calling process, and returns to user mode. Because the return address is in another process, when the function call returns, the reverse process occurs. Unfortunately this model only allows very small virtual address spaces for each process (32MB) and a low number of processes (32), so Windows CE 6.0 reverts to a more traditional system call model.
Well for source code, there are plenty of open source kernels to dive into.
As for books, Robert Love's book on the Linux kernel is very informative.
You may want to have a look at the minix kernel. It's open source, designed to be simple, and is used in a lot of Uni-level OS courses. Have a dig around in /usr/src/kernel/proc.c especially the sys_call function and surrounding functionality. Keep in mind that minix is a microkernel, so some things may be subtlety different to what you are used to.
If you want to purchase a book that is extremely useful for *nix programming. I would recommend "Advanced Programming in the UNIX Environment" by Stevens and Rago.
It has in depth explanations, and code examples.
For a good explanation of system calls in Linux, look at the sample device drivers in Linux Device Drivers.
It's architecture dependent, and requires an understanding of computer architecture. Tanenbaum's "Structured Computer Organisation" has a good summary of the basics of a system call. For more, read any textbook on operating system design.