• 5星
22.18MB GJZGRB 2021-04-13 13:13:45
• While I was writing the Xillybus IP core for PCI express, I quickly found out that it’s very difficult to start off: Online resources as well as the official spec bombards you with gory deta
Foreword
While I was writing the Xillybus IP core for PCI express, I quickly found out that it’s very difficult to start off: Online resources as well as the official spec bombards you with gory details about the nuts and bolts, but says much less about what the machine is supposed to do. So once I made the effort to figure that out for myself, I decided to write this little guide, which will hopefully help others get a softer start. This is based upon the official PCI Express specification 1.1, but applies very well to later versions. There is no substitute to reading the original spec, though. The name of the game if to get the details right, so that the device works properly in environments that are not at hand for testing.
Don’t pick on me for not describing the whole picture, or using inaccurate definitions. Being accurate is what the spec is for. All I’m trying to do here is to making it more human readable. I’ve also published asample TLP sniff dump of a session, which may help understand how the machinery works.
And I rely on other sources to describe form factors, lane counts, data rates and such. For an overview of these, I suggestWikipedia’s entry on this. I also suggest to read about  PCI configuration, in particular the part about enumeration.
PCI express is not a bus
The first thing to realize about PCI express (PCIe henceforth), is that it’s  not PCI-X, or any other PCI version. The previous PCI versions, PCI-X included, are true buses: There are parallel rails of copper physically reaching several slots for peripheral cards. PCIe is more like a network, with each card connected to a network switch through a dedicated set of wires. Exactly like a local Ethernet network, each card has its own physical connection to the switch fabric. The similarity goes further: The communication takes the form of packets transmitted over these dedicated lines, with flow control, error detection and retransmissions. There are no MAC addresses, but we have the card’s physical (“geographic”) position instead to define it, before it’s allocated with high-level means of addressing it (a chunk in the I/O and address space).
As a matter of fact, a minimal (1x) PCIe connection merely consists of four wires for data transmission (two differential pairs in each direction) and another pair of wires to supply the card with a reference clock. That’s it.
On the other hand, the PCIe standard was deliberately made to behave very much like classic PCI. Even though it’s a packet-based network, it’s all about addresses, reads, writes an interrupt.
There’s still the plug-and-play configuration done, and the cards are accessed in terms of reads and writes to address and I/O space, just like before. There are still Vendor/Product IDs, and several mechanisms to mimic old behavior. To make a long story short, the PCIe standard goes a long way to look like good old PCI to an operation system unaware of PCIe.
So PCIe is a packet network faking the traditional PCI bus. Its entire design makes it possible to migrate a PCI device to PCIe without making any change in software, and/or transparently bridge between PCI and PCIe without losing any functionality.
A simple bus transaction
In order to get an understanding of the whole things, let’s see what happens when a PC’s CPU wants to write a 32-bit word to a PCIe peripheral. Several details and possibilities are deliberately left out for sake of simplicity in the description below.
Since it’s a PC, it’s likely that the CPU itself performs a simple write operation on its own bus, and that the memory controller chipset, which is connected to the CPU’s bus, has the direct connection to the PCIe bus. So what happens is that the chipset (which, in PCIe terms functions as a Root Complex) generates a Memory Write packet for transmission over the bus. This packet consists of a header, which is either 3 or 4 32-bit words long (depending on if 32 or 64 bit addressing is used) and one 32-bit word containing the word to be written. This packet simply says “write this data to this address”.
This packet is then transmitted on the chipset’s PCIe port (or one of them, if there are several). The target peripheral may be connected directly to the chipset, or there may be a switch network between them. This way or another, the packet is routed to the peripheral, decoded, and executed by performing the desired write operation.
A closer look
This simplistic view ignores several details. For example, the underlying communications mechanism, which consists of three layers: The Transaction Layer, the Data Link Layer, and the Physical Layer. The description of the packet above was defined as a Transaction Layer Packet (TLP), which relates to PCIe’s uppermost layer.
The Data Link layer is responsible for making sure that every TLP arrives to its destination correctly. It wraps TLPs with its own header and with a Link CRC, so that the TLP’s integrity is assured. An acknowledge-retransmit mechanism makes sure no TLPs are lost on the way. A flow control mechanism makes sure a packet is sent only when the link partner is ready to receive it. All in all, whenever a TLP is handed over to the Data Link Layer for transmission, we can rely on its arrival, even if there is a slight uncertainty regarding the time of arrival. Failing to deliver a TLP is a major malfunction of the bus.
We’ll come back to the Data Link Layer when discussing credits and packet reordering. But to this end, it’s enough to realize that classic bus operations are substituted by transmission of a TLP over the PCIe fabric.
I’d also like to mention that a Memory Write TLP’s data payload may be significantly longer than a single 32-bit word, forming a PCIe write burst. The TLP’s size limits are set at the peripheral’s configuration stage, but typical numbers are a maximum of 128, 256 or 512 bytes per TLP.
And before going on, it’s worth to note that the sender of a Memory Write TLP doesn’t get an indication that the packet has reached its final destination, even less that it has been executed. Even though the Data Link Layer gets a positive acknowledge, that only means that the packet made its way safely to the nearby switch. No end-to-end acknowledgment is ever made, and neither is it really necessary.
A sample write packet
Let’s take the data write case mentioned above, and see the details of the TLP. Suppose that the CPU wrote the value 0x12345678 to the physical address 0xfdaff040 using 32-bit addressing. The packet could then consist of four 32-bit words (4 DWs, Double Words) as follows:

Example of Memory Write Request TLP

So the packet was transmitted as 0x40000001, 0x0000000f, 0xfdaff040, 0x12345678.
Let’s just explain the color coding:
Gray fields are reserved, which means that the sender has to put zeros there (and the receiver ignore them). Some gray fields are marked “R” which means that the field is always reserved, and some have a name, meaning that the field is reserved because of the nature of this specific packet.Green fields are allowed to have nonzero values, but they are rarely used by endpoint peripherals (from what I’ve seen).The values of the specific packet are marked in red.
Now let’s briefly explain the valid fields:
The Fmt field, together with the Type field say this is a Memory Write Request.The TD bit is zero, indicating that there is no extra CRC on the TLP data (TLP Digest). This extra CRC has no justification if we trust our hardware not to corrupt the TLPs, since the Link Layer has its own CRC to make sure nothing gets wrong on the way.The Length field has the value 0x001, indicating that this TLP has one DW (32-bit word) of data.The Requester ID field says that the sender of this packet is known by having ID zero — it’s the Root Complex (the PCIe port closest to the CPU). While mandatory, this field has no practical use in a Write Request, except for reporting back errors.The Tag is an unused field in this case. The sender can put anything here, and all other components should ignore it. We shall get a closer look at it later.The 1st BE field (1st Double-Word Byte Enable) allows to choose which of the four bytes in the first data DW are valid, and should be written. Set as 0xf in our case, it marks that all four bytes are written to.The Last BE field must be zero when Length is unity, since the first DW and the last is the same one.The Address field is simply the address to which the first data DW is written. Well, bits 31-2 of this address. Note that the two LSBs of DW 2 in the TLP are zero, so DW 2 actually reads the write address itself. Multiply 0x3f6bfc10 by four, and you get 0xfdaff040.And finally, we have one DW of data. This is a good time to mention that PCIe runs big Endian, and Intel processors think little Endian. So if this was a regular PC computer, it was writing 0x78563412 in its software representation.
Now let’s see what happens when the CPU wants to read from a peripheral. Read operations are a bit more tricky, because inevitably there are going to be two packets involved: One TLP from the CPU to the peripheral, asking the latter to perform a read operation, and one TLP going back with the data. In PCIe terms we have a Requester (the CPU in our case) and aCompleter (the peripheral).
We’ll assume that the CPU wants a single a single DW (32-bit word) from address 0xfdaff040 (same as before). As before, it’s likely that it initiates a read operation on the bus it shares with its memory controller, which contains the Root Complex, which in turn generates a TLP to be sent over the PCIe bus. It’s a Read Request TLP, which may look like this:

Example of Memory Read Request TLP

So this packet consists of the 3 DWs 0x00000001, 0x00000c0f, 0xfdaff040. It tells the peripheral to read one full DW at address 0xfdaff040, and to return the result to the bus entity whose ID is 0x0000.
It’s strikingly similar to the Write Request example shown above, so I’ll focus on the differences:
The Fmt/Type fields have changed (actually, only Fmt) to indicate this is a Read Request.As before, The Requester ID field says that the sender of this packet has ID zero. It’s the same field as before, but in a Read Request it’s functionally crucial, since it tells the Completer where to send its response. We’ll see more about this ID below.The Tag is significant in Read Requests. It’s important to realize that it doesn’t mean anything by itself, but that it has the function of a tracking number: When the Completer responds, it must copy this value to the Completion TLP. This allows the Requester to match Completion answers with its Request. After all, multiple requests from a single device on a bus are allowed. This Tag is set by the Requester for its own needs, and the standard doesn’t require a certain enumeration method, as long as the Tags of all outstanding requests are unique. Despite the 8 bits allocated, only the 5 LSBs are allowed for use, and the rest must be zero by default. This allows for a maximum of 32 outstanding requests between a pair of bus entities. For applications that need it, in-standard extensions may allow as many as 2048.
The Length field indicates that one DW should be read, and the Address field from which address. The two BE fields retain the same meaning and rules as with a Write Request,  only they pick which bytes to read rather than which bytes to write.
The considerations for applying read requests are discussed on  another tutorial.
The Completion
When the peripheral receives a Read Request TLP, it must respond with some sort of Completion TLP, even if it can’t fulfill the action requested. We’re going to look at a successful case: The peripheral read the chunk of data from its internal resources, and now needs to return the result back to the Requester (the CPU in our case).
The packet could look like this:

Example of Completion TLP

So the TLP consists of 0x4a000001, 0x01000004, 0x00000c00, 0x12345678. The packets basically says “tell bus entity 0x0000 that the answer to its Request to entity 0x0100, which was tagged 0x0c, is 0x12345678.” The CPU (or actually, the memory controller = Root Complex) can now look up in its internal records what that request was about, and complete the relevant bus cycle. Let’s chop it down to pieces:
The Fmt field, together with the Type field say this is a Completion packet with data.The Length field has the value 0x001, indicating that this TLP has one DW (32-bit word) of data. But wait. Isn’t the Requester supposed to know that anyhow? The answer is that there’s a limit to a TLP’s length, which may be less than the number of DWs requsted. When that happens, several Completion TLPs are sent back. So the Length field says how many DWs are in this specific packet. But that’s a different story.And if we’re at it, we have the Byte Count field. In our case of a single-TLP completion, it’s simply the number of valid payload bytes in the packet. Since the 1st DW BE field in the Request was all ones, we have four valid bytes, as stated in the field. Just for general knowledge, the real definition of this field is the number of bytes left for transmission, including those in the current packet. That’s useful in multiple TLP completions, as demonstrated just below.Then we have Lower Address field. It’s the 7 least significant bits of the address, from which the first byte in this TLP was read. It’s 0x40 in our case, coming from the lower bits of 0xfdaff040. This field can be useful with multiple TLP completions.The Completer ID identifies the sender of this packet, which is 0x1000. I’ll dissect this ID below.The Requester ID identifies the receiver of this packet, which is zero ID (Root Complex). If there’s some PCIe switches to route through, this serves as the destination address.The Status field is zero, indicating that the Completion was successful. As one can guess, other values indicate different types of rejections.The BCM field is always zero, except when a packet origins from a bridge with PCI-X. So it’s zero.And finally, we have one DW of data.
By the way, the Completer may return the data sliced up into several packets. The last packet in the completion can then be detected by checking for
Length == ((LowerAddress & 3) + ByteCount + 3) >> 2
and if we happen to restrict ourselves to DW-granularity in our requests, this simply becomes
Length == ByteCount >> 2
So much for these two examples. Now some more general speaking.
Posted and non-Posted operations
If we compare the life cycle of a bus write operation with the one of a read, there’s an evident difference: A write TLP operation is fire-and-forget. Once the packet has been formed and handed over to the Data Link Layer, there’s no need to worry about it anymore. A read operation, on the other hand, requires the Requester to wait for a Completion. Until the Completion packet arrives, the Requester must retain information about what the Request was, and sometimes even hold the CPU’s bus: If the CPU’s bus started a read cycle, it must be held in wait states until the value of the desired read operation is available at the bus’ data lines. This can be a horrible slowdown of the bus, which is rightfully avoided in recent systems.
The terminology for fire-and-forget operations, such as a Memory Write is  Posted operations. Such operations consist of a Request only. Naturally, operations that consist of a Request and Completion are callednon-Posted operations.
I/O Requests
The PCIe bus supports I/O operations only for the sake of backward compatibility, and strongly recommends not to use I/O TLPs in new designs. One of the reasons is that both read and write requests in I/O space are non-Posted, so the Requester is forced to wait for a completion on write operations as well. Another issue is that I/O operations only take 32-bit addresses, while the PCIe spec endorses 64-bit support in general.
Identification and routing
Since PCIe is essentially a packet network, with the possibility of switches on the way, these switches need to know where to send each TLP. There are three routing methods: By address, by ID and implicit. By address routing is applied for Memory and I/O Requests (read and write). Implicit routing is used only for certain message TLPs, such as broadcasts from Root Complex and messages that always go to the Root Complex. All other TLPs are routed by ID.
The ID is a 16-bit word formed in terms of the well known triplet: Bus number, Device number and Function number. Their meaning is exactly like in legacy PCI buses. The ID is formed as follows:

Formation of PCIe ID

If you’re running Linux, I suggest trying the lspci utility with its numerous flags to get friends with the bus structure.
Bus Mastering (DMA)
This issue used to be a bit spooky until PCIe. After all, there’s something intrusive about telling the CPU to step aside from the bus, now I’m running the show.
On PCIe, it’s significantly less exotic. It boils down to the simple notion, that anyone on the bus can send read and write TLPs on the bus, exactly like the Root Complex. This allows the peripheral to access the CPU’s memory directly (DMA) or exchange TLPs with peer peripherals (to the extent that the switching entities support that).
Well, there are two things that need to happen first, as with any PCI device: The peripheral needs to be granted bus mastering by setting the “Bus Master Enable” bit in one of the standard configuration registers. The second thing is that the driver software needs to inform the peripheral about the relevant buffer’s physical address, most probably by writing to a BAR-mapped register.
Interrupts
PCIe supports two kinds of interrupts: Legacy INTx and MSI.
INTx interrupts are supported for the sake of compatibility with legacy software, and also in order to allow bridging between classic PCI buses and PCIe. Since INTx interrupts are level triggered (i.e. the interrupt request is active as long as the physical INTx wire is at low voltage), there’s a TLP packet for saying that the line has been asserted, and another that it has been deasserted. Not only is this a quirky in itself, but the old problems with INTx interrupts retain, such as interrupt sharing and the need for each interrupt handling routine to check who the interrupt is really for.
It was because of these issues, that a new form of interrupt, MSI, was introduced in (conventional) PCI 2.2. The idea was, that since virtually all PCI peripherals have bus master capabilities, why not let the peripheral signal an interrupt by writing to a certain address?
PCIe does exactly the same to generate an MSI:  Signaling an interrupt merely consists of sending a TLP over the bus, which is simply a posted Write Request, with a special address, which the host has written into the peripheral’s configuration space during initialization. Any modern operating system (Linux included, of course) can then call the correct interrupt routine, without the need to guess who generated the interrupt. Neither is it really necessary to “clear” the interrupt, if the peripheral doesn’t need the acknowledgment.

This concludes part I of this little guide. I still owe you a few issues, such as credits and reordering, which are discussed inpart II.

Aside from wrapping TLPs with its header (2 bytes) and adding a CRC at the end (LCRC actually, 4 bytes), the Data Link layer runs packets of its own for maintaining reliable transmission. These special packets are Data Link Layer Packets (DLLPs). We’ll list them shortly:
Ack DLLP for acknowledging successfully received TLPs.Nack DLLP for indicating that a TLP arrived corrupted, and that a retransmit is due. Note that there’s also a timeout mechanism in case nothing that looks like a TLP arrives.Flow Control DLLPs: InitFC1, InitFC2 and UpdateFC, used to announce credits, as described below.Power Management DLLPs.
Flow control
As mentioned before, the data link layer has a Flow Control (FC) mechanism, which makes sure that a TLP is transmitted only when the link partner has enough buffer space to accept it.
I used the term “link partner” and not “destination” deliberately. For example, when a peripheral is connected to the Root Complex through a switch, it runs its flow control mechanism against the switch and not the final destination. In other words, once the TLP is transmitted from the peripheral, it’s still subject to the flow control mechanism between the switch and the Root Complex. If there are more switches on the way, each leg has its own flow control.
The mechanism is not the simplest, and its description in the spec will give you goosebumps. So I’ll try to put it fairly clear.
The flow control mechanism runs independent accounting for 6 (six!) distinct buffer consumers:
Posted Requests TLP’s headersPosted Requests TLP’s dataNon-Posted Requests TLP’s headersNon-Posted Requests TLP’s dataCompletion TLP’s headersCompletion TLP’s data
These are the six credit types.
The accounting is done in flow control units, which correspond to 4 DWs of traffic (16 bytes), always rounded up to the nearest integer. Since headers are always 3 or 4 DWs in length, every TLP transmitted consumes one unit from the respective header credit. When data is transmitted, the number of consumed units is the number of data DWs in the TLP, divided by four, rounded upwards. So we can imagine data buckets at the receiver of 16 bytes each, on which we are not allowed to mix data from different TLPs. Each bucket is a flow control unit.
Now lets imagine that there’s a doorkeeper at the transmitter, which counts thetotal number of flow control units consumed since the link establishment, separately for each credit type. This is six numbers to keep track of. This doorkeeper also has the information about the maximum number each of these credit types is allowed to reach. If a certain TLP for transmission would make any of these counted units exceed its limit, it’s not allowed through. Another TLP may be transmitted instead (subject to reordering rules) or the doorkeeper simply waits for the limit to rise.
This is the way the flow control works. When the link is established, both sides exchange their initial limits. As each receiver processes incoming packets, it updates the limits for its link partner, so it can use the buffer space released. UpdateFC FLLP packets are sent periodically to announce the new credit limits.
Well, I overlooked a small detail: Since we’re counting the total number of units since the link started, there’s always a potential for overflow. The PCIe standard allocates a certain number of bits for each credit type counter and its limit (8 bits for header credits, 12 bits for data credits), knowing that they will overflow pretty soon. This overflow is worked around by making the comparison between each counter and its limit with straightforward modulo arithmetic. So given some restrictions on not setting the limit too high above the counter, the flow control mechanism implements the doorkeeper described above.
Bus entities are allowed to announce an infinite credit limit for any or all of the six credit types, meaning that flow control for that specific credit type is disabled. As a matter of fact, endpoints (as opposed to switches and the Root Complex)must advertise an infinite credit for completion headers and data. In other words, an endpoint can’t refuse to accept a completion TLP based upon flow control. So the Requester of a non-posted transactions must take responsibility for being able to accept the completion by verifying that it has enough buffer space when making the request. This also applies to root complexes not allowing peer-to-peer transactions.
Virtual channels
In  part I of this guide, I marked the TC fields in the example TLPs green, saying that those fields are almost always zero. TC stands for Traffic Class and is an identifier used to create Virtual Channels. These Virtual Channels are merely separate sets of data buffers having a separate flow control credits and counters. So by choosing a TC other than zero (and setting up the bus entities accordingly) one can have TLPs being subject to independent flow control systems, preventing TLPs belonging to one channel block the traffic of TLPs belonging to another.
The mapping from TC’s to Virtual Channels is done by software for each bus entity. Anyhow, the real-life PCIe elements I’ve seen so far support only one Virtual Channel, VC0, and hence only TC0 is used, which is the minimum required by spec. So unless some special application requires this, TC will remain zero in all TLPs, and this whole issue can be disregarded.
Packet reordering
One of the issues that comes to mind in a packet network, is to what extent the TLPs may arrive in an order different from how they were sent. The Internet Protocol (IP, as in TCP/IP) for example, allows any packet reshuffling on the way. The PCIe specification allows a certain extent of TLP reordering, and in fact in some cases reordering is mandatory to avoid deadlocks.
Fortunately, the legacy PCI compatibility concern was taken into account in this issue as well, unless the “relaxed ordering” bit is set in the TLP, which it rarely is. This is one of the bits in the Attr field, marked green in the TLP examples inpart I of this guide. So all in all, one can trust that things will work as if there was a good old bus we were talking with. Those of us who write to a few registers, and then trigger an event by writing to another one, can go on doing it. I turn off the BAR’s Prefetch bit to be on the safe side, even though there’s nothing to imply that it has anything to do with writes.
The spec defines reordering rules in full detail, but it’s not easy to get the bottom line.  So I’ll mention a few results of those rules. All here is said assuming relaxed ordering bit is cleared in all transactions. I’m also ignoring I/O space completely (why use it?):
Posted writes and MSI’s arrive in the order they were sent. Now, all memory writes are posted, and MSIs are in fact (posted) memory writes.  So we know for sure that memory writes are executed in order, and that if we issued an MSI after filling a buffer (writes…) it will arrive after the buffer was actually written to.A read request will never arrive before a write request or MSI sent before it. As a matter of fact, performing a Read Request is a safe way to wait for a write to complete.Write requests may very well come before read requests sent before them. This mechanism prevents deadlock in certain exotic scenarios. Don’t write to a certain memory area while waiting for the read completion to come in.Read completions for a certain request (i.e. with the same Tag and Requester ID) arrive in the order they were sent (so they arrive in order with rising addresses). Read completions of different request may be reordered (but who cares).
Other than that, anything can change order or arrival, including read requests which may be reordered among themselves and with read completions.
To relieve any paranoia about an interrupt message arriving before the write operations that preceded it, section 2.2.7 in the spec spells it out:

The Request format used for MSI/MSI-X transactions is identical to the Memory Write Request format defined above, and MSI/MSI-X Requests are indistinguishable from memory writes with regard to ordering, Flow Control, and data integrity.

As just mentioned, reading from a bus entity after writing to it, is a safe way to wait for the write operation to finish for real. But why read anything, if we’re not interested in the data? So they made up a zero-length request, which reads nothing. All four Byte Enables are assigned zeroes, meaning nothing is read. As for the completion, section 2.2.5 in the spec says:

If a Read Request of 1 DW specifies that no bytes are enabled to be read (1st DW BE[3:0] field = 0000b), the corresponding Completion must specify a Length of 1 DW, and include a data payload of 1 DW

So we have one DW of rubbish data in the completion. That’s fair enough.
Every TLP carrying data must limit the number of payload data DWs to Max_Payload_Size, which is a number allocated during configuration (typically 128 bytes). This number applies only to payloads, and not to the Length field itself:  Memory Read Requests are not restricted in length by Max_Payload_Size (per spec 2.2.2), but arerestricted by Max_Read_Request_Size (per spec 2.2.7).
So a Memory Read Request may ask for more data than is allowed in one TLP, and hence multiple TLP completions are inevitable.
Regardless of the Max_Payload_Size restrictions, completions of (memory) read requestsmay be split into several completion TLPs. The cuts must be in addresses aligned by RCB bytes (Request Completion Boundary, 128 bytes, for Root Complex possibly 64) per spec 2.3.11. If the Request doesn’t cross such an alignment boundary, only a single Completion TLP is allowed. Multiple Memory Read Completions for a single Read Request must return data in increasing address order (which will be kept by the switching network).
And a last remark, citing the spec 2.2.7: Requests must not specify an Address/Length combination which causes a Memory Space access to cross a 4-KB boundary.

That’s it. I hope reading through the PCI Express specification will be easier now. There’s still a lot to read…

展开全文
caibaihui 2013-10-25 13:41:44
• ## How To Write Your Own Ebook(r) In 7 Days! Reference Writing Google eBook

How To Write and Publish Your Own Ebook “How to write, publish, & sell your own OUTRAGEOUSLY Profitable eBook in as little as 7 days – even if you can’t write, can’t type and failed

How To Write and Publish Your Own Ebook

“How to write, publish, &sell your own OUTRAGEOUSLY Profitable eBook in as little as 7 days – even if you can’t write, can’t type and failed high school English class!”

Discover theNew Secrets for how to write an ebook and publish it as quickly as
next Monday, February 3
… only 7 days from today!

“As soon as I just kept it simple and did what you said, it worked!…” “I wanted to thank you.  I followed your advice about how to write an ebook and get it on Amazon and am now making sales from a revenue stream I never even knew about a month ago.I just did what you said and got it done and the sales started coming in… and this iswithout ANY direct promotion…” - Ray Burton BuildingBodies.ca Personal Training

Amazon Kindle tosell it FOR you on the web’s Largest Retailer!   Extremely High Profit Margins!   “ZERO” delivery cost –no printing or postage   A low-riskbusiness you can operate virtually anywhere in the world (just need an internet connection)   Make money on “autopilot” 24 hours a day!   Prestigeand recognition as a “best selling” author

Date: Monday, January 27, 2014
From: Jim Edwards Author, “How to Write and Publish Your Own eBook… in as Little as 7 Days”V2.0
Dear Internet Friend,
If you want thefinancial independence and passive income stream from selling apopular ebook, the satisfaction and prestige that comes from being an author, and if you want to do it while you’re still*young* enough to enjoy it… then this might be the most important letter you’ll ever read about how to write an ebook.
Here’s why:
We’ll teach youhow to write and publish your own OUTRAGEOUSLY Profitable eBook withless than a week’s work – even if you feel like you can’t write a complete sentence, can’t type to save your life and still have nightmares about finishing term papers!
Now that’s certainly a tall statement, but let us show you how it’svery possible, in fact, quite straightforward to turn out your own highly successful ebook using the methods we’ll teach you in thisnew and completely revised course…

“The training in this course is exceptional…” “The training in this course is exceptional. I started with a scant amount of knowledge on eBooks and how they’re created, butI came out with an entire toolbox of tips, formulas, and a host of invaluable resources. Well done.” - Jarrett Cross

You need a proven expert to guide you straight through the process… with no bull
Jim Edwards has helped well over 1,000 authors write, publish and promote their ebooks, print books, and audio books!
Jim is a 10-year veteran newspaper columnist and author whose reputation for writing and promoting ebooks online is legendary!
Just one of Jim’s ebook info-products made him$45,000 in only 3 months! Over the last 14 years, Jim has publishedseveral best-selling ebooks – including “Selling Your Home Alone”, “The TEN Dirty Little Secrets of Mortgage Financing”, and “Turn Words Into Traffic”. Jim recentlymade$7,704.37 in one week with a single ebook… and what makes that even more amazing is he didn’t even promote it – someone else did!   Authors have paid Jim as much as$6,000 to consult with him about their ebooks and info-products! In fact, an ebook-based information product Jim created went over$90,000 in sales in less than 5 months!
You need step-by-step details spelled out quickly! … by a real-world expert who can teach you the ropes.
Over the last 14 years, Jim has written, created andsold *millions of dollars* in ebooks and info-products online.
He has helped thousands of authors.
If you want to learn how toquickly and profitably turn out your own best selling ebook – Jim will help you do it through thisground-breaking, completely revised NEW ebook course!

“Jim does all of it right in front of you…” “Thorough, thoughtful, to the pointstep-by-step process that ANYONE can do to create and market an ebook… No filler…ALL meat and potatoes! And the best part is thatJim does all of it right in front of you so you can see him doing exactly what he’s telling you to do. That’s why so many people sign up for each NEW program he delivers. Thanks Jim.” - John Nettleton

Here are just some of the amazing secrets, tips & techniques this course will teach you for how to write and publish an ebook
How to getup, running, and selling on Amazon Kindle – FAST! (The Web’s #1 ebook retailer WANTS to sell your ebook for you – here’s how!) - The*sure-fire* secret to creating an ebook that sells like crazywhile having more fun than you ever thought possible! - How toquickly avoid the #1 Mistake authors make that causes them to take months or years to write a book…so you can finish in just a few days. - Astep-by-step explanation of how to actually get a complete REAL ebook DONEin less than 72 hours! - The absolute “bullet-proof”best ebook to write and sell online -FAST. - The“right” way to publish your ebook so virtually everyone connected to the Internet canbuy it and read it. - 3 *Proven* methods for turning out ahighly profitable ebook in record time… even if you have no idea what to write about. - Step-by-step exactly how to format your ebooks so they look great onAmazon Kindle, in PDF, or any other publishing format you need!

“I paid $997 for a course on Kindle publishing that wasn’t nearly as thorough as this…” “Jim always over-delivers on his info-products and this one is no exception. I hate to admit it, but I paid$997 for a course on Kindle publishing that wasn’t nearly as thorough as this one.” - Gwynne Curry

Thefastest and BEST strategy to generate $thousands of dollars in ebooksales… sometimes in just a few days! - Quickly and easilyovercome the single greatest obstacle any author – new or experienced – ever faces! - Thesingle “Step” that virtually guarantees success in writing and selling your ebook. - How toaccept virtually every major credit card on the planet for a paltry$50 setup fee andno minimum monthly fees! - How writing abouta subject you hate can actually make you rich! - How answeringone simple “magic” question virtually guarantees your successwith your very first ebook. - How to structure your ebook so it creates not onlysales, but “passive income” for months and years well into thefuture. - How toharness the power of your subconscious mind to practicallywrite your ebook on total “auto-pilot”. - The Billion-Dollar Game-Changerand How and Why it’s now possible to actually make REAL money withfiction as an ebook author (now it’s VERY possible)!

“Love your visuals and examples to help us get it…” “Jim, you’ve done it again. You are at the head of the class when it comes tooverdelivering good quality content and making it hard for even a slug to fail. Love your visuals and examples to help us get it. Keep it coming!” - David Dansereau

Learn the tips, tricks and secrets directly from one of the most successful e-authors online today!
Goinside the mind of one of the most successful ebook authors today to learn his real-world secrets. - Discover what he learned aboutmaking money quick off a thin and easy to write ebook. - Learn from someone just like you… who jumped in, wrote a book, and ismaking money passively day and night. - Jim willreveal his secrets to YOU… -
Marketing secrets – how toexplode ebook sales virtually overnight! - How he writesand manages his time with a schedule so hectic you’d wonder how he has time to get anything done… let alone author more ebooks! - What works and what doesn’t in the“real world” of online publishing.
Here’s the bottom line on this incredible resource…
“How to Write and Publish your own eBook in as little as 7 Days”V2.0 will guide you step-by-step on how to:

Identify a Target Market with laser-beam focusCreate an ebook idea that will sellHow to write an ebook quickly and more effortlessly than you ever dared to dream possibleGet free editing servicesPublish your ebook to sell through the webStep-by-step How To Publish and Sell your ebook on Amazon Kindle… the Web’s #1 ebook RetailerStart marketing, selling and making money with your ebook online!… and much MORE!

“Great to know you’re as reliable and commited as ever…” “Once again, Jim, you’ve come up withthe real deal. No BS or fluff, and delivered in a way that’s real easy to digest and put into practice. Great value, and great to know you’re as reliable and commited as ever, rather than the ‘fly by night’, ‘here today, gone tomorrow’ gurus” - Peter Burton

Warning: Do NOT buy any course on how to write your own ebook unless it meets the following criteria:
One: Explains exactly how tochoose a subject that has an audience *eager* to purchase it, especially on Amazon’s Kindle!
Two: Shows you not only how to write an ebookfor profit, but also to enhance your career and have a lot of fun in the process.
Three: Shows youstep-by-step how to publish your ebook so that virtually everyone – regardless if they own a PC or a Mac – canbuy, download and read it without problems.
Four: Demonstrates how tocreate a “passive income” stream by including simple, yet powerful elements in your ebook.
Five: Gives you the big, unbiased picture aboutmarketing and selling your ebook online… then gives you the tools to go do it!
Six: Is written by someone who doesn’t just talk useless theory… but gives you the benefit of over 14 years of online publishing and selling experience straight from the “front lines”.
This information is priceless
Jim regularly gets paidFIVE hundred dollars an hour for his time.   In fact, Jim recently *sold out* a “e-class” training where he taught authors to conceive, write and publish their own ebook. This priceless training let these authors in on Jim’s proven secrets!   Jim has spoken at Internet conferences and Author Summits whereattendees paid thousands of dollars to hear him speak.
In summary, here’s what you get:
You getimmediate access to the breakthrough ebook “How to Write and Publish your own eBook in as little as 7 Days”V2.0 along with some very exciting bonuses foracting now.
If you respond right away,you pay the introductory price of only $29. Act immediately and receive the following bonuses Since we know it’s 100% to your benefit to act right away, we want to sweeten the pot and give you every possible reason to say YES today! If you respond immediately, you’ll also receive the following: FREE Bonus REPORT: “How To Take Every Major Credit Card On The Planet” How to accept virtually every credit card on the planet and set up an affiliate program that automatically signs up your affiliates so they can sell your ebook for you, tracks their sales, and cuts them a check every 2 weeks… all for only a$50 one-time setup fee and no minimum monthly fees – ever!
*This REPORT will easily save you $275-$500 in application fees and headaches.

Bonus “Wizard” #1:
Jim’s “Killer Ebook Title Wizard”
This wizard makes coming up with keyword-rich, money-making titles for your ebooks an absolute breeze! Just enter in a few blanks, click a button and PRESTO – instantly generate dozens of attention-getting titles you can use for your ebooks, special reports, articles and more! These types of titles are critical for success in getting found on Amazon’s Kindle Store. This one tool could be the difference between successful sales and an ebook that falls flat!
*This amazing ebook Title Wizard would sell for at least $97 – but the only place you can get it is right here, FREE just for giving us a risk-free try! Bonus “Wizard” #2: Jim’s “Ebook Description Wizard” One of the hardest things for an author to do is come up with keyword-rich, effective sales copy for their Amazon Kindle Store listings, back-of-the-book descriptions, and short descriptions on the web. This wizard solves that problem for you instantly by giving you the proven format, flow and wording for killer ebook descriptions that motivate people to press the “BUY NOW” button. These descriptions also help you get FOUND on Amazon Kindle because of their keyword-rich, yet easily readable format. *This amazing ebook Description Wizard would sell for at least$97 – but the only place you can get it is right here, FREEjust for giving us a risk-free try!

Bonus 2-Webinar Set:  “10 Ways To Have Your eBook Done By Next Friday!”
This 2-part webinar series leaves no stone unturned to give you all possible options for creating the content for your first or next ebook best-seller. No matter where you are, what you do, or whether you consider yourself a “writer” or not, these webinars lay out the options for you in step-by-step detail.These webinars alone are worth 3-5X the small price of the entire “7 Day eBook V2.0″ program.
*In fact, this incredible 2-part Webinar series would sell for at least $97 – but the only place you can get it is right here, FREEjust for giving us a risk-free try! You can’t lose with our 100%, ironclad, money-back guarantee By the way, these bonuses are valued between$469 and $694 – and the Credit Card Report is yours to keep even in the unlikely event you decide to take advantage of our ironclad money-back guarantee: Your satisfaction is assured through our no risk, you-can’t-lose, 100%, no-questions-asked, iron-clad money-back guarantee. If for any reason, you aren’t thrilled and satisfied with your purchase, just contact us within 60 Days and we’ll refund 100% of your purchase price. What we’re saying is don’t decide now if “How to Write and Publish your own eBook in as little as 7 Days” V2.0 is right for you. Try it out for 60 Days – risk free. If it doesn’t help you overcome any stumbling blocks to writing your own ebook, if it doesn’t guide you step by step through picking a topic for a market begging to buy it, if it doesn’t show you how to market your book to the widest audience possible, if it doesn’t take you by the hand and teach you exactly how to get your words down on paper even if you can’t “write” or type, if it doesn’t makecreating your own ebook easier than you ever dreamed possible, then we don’t want your money… we’ll give it all back. You have nothing to lose (and a successful, money-making, prestige and self esteem building ebook to gain) because regardless, the FREE bonuses are yours to keep just for giving us a try. Click here for an instant download of the ebook. Once your credit card is approved (usually less than 60-seconds), you will be taken to a special download page where you will download the ebook along with access to your FREE Bonuses. INSTANT ACCESS Purchase Online with Credit Card by Secure Server Click Here NOW to download your copy! It doesn’t matter if it’s 2:00 a.m. in the morning! You will be downloading and reading the ebook and incredible bonuses within just a few minutes… and using it to get your very own ebook written and published in as little as 7 days! To your success, Jim Edwards P.S. — This gem will be sold for$49. This introductory price of $29 is a “Buy it NOW before it’s gone” offer… so act fast!… .. P.P.S. — Let’s be blunt: If you pass on this offer, will you have an ebook or not one week from today? Probably not! You’ll still wish and want it, but you won’t write it or make money from it. Face it. Most of what you need is instruction and encouragement. Get this book NOW and have your own ebook as fast as one week from TODAY! Wouldn’t you like to be making money and bragging about your passive income within a week? Act now! Buy now! Your satisfaction is guaranteed. Click here! Take a Look At What These Students Had To Say About The NEW & Updated “7 Day eBook V2.0“ “Six days after completing the course, I finished my first eBook…” If you’re serious about writing an eBook and actually getting it published on the Internet, you can’t do better than Jim Edwards’ course, 7Day eBook v2.0. Edward’s original book was good, but this updated course brings the information into the age of the Kindle and other eBook readers. The session on choosing an eBook topic that has sales potential is actually worth the full price of the course. Can it work? Well, I can tell you that six days after completing the course, I finished my first eBook, complete with cover graphics and an audiobook version as a bonus. Get the course, follow the instructions, publish, rinse, and repeat. - Gary MacFadden “I bought and studied your earlier ebook “How to Write and Publish Your Own eBook…in as little as 7 Days!” but this course was even better” You exceeded my expectations! I bought and studied your earlier ebook “How to Write and Publish Your Own eBook…in as little as 7 Days!” but this course was even better. It provided the detail and depth I needed to feel confident enough to write my own ebook. It was well worth the time and money I invested, and I will be recommending your book when it comes out. Well done, Jim! – Don Neil, Business Consultant Thank you for creating & presenting such a thorough and clearly understandable eBook writing course. I’m confident that I will get several quality eBooks written using your clear instructions. - Doug Holser “If you have always believed you could write an ebook but didn’t know where to start, this is the place to go.” If you have always believed you could write an ebook but didn’t know where to start, this is the place to go. Jim makes it so easy in a step by step format, with plenty of tips and tricks that he has learned the hard way in over a decade of marketing ebooks. - Dy Witt “I’ve learned more, and taken more action, than in anything else I’ve done.” I absolutely loved this training. I’ve spent a LOT of money that I couldn’t afford to spend on internet training and ebook info, and marketing, and NONE of what I’ve done has been so specific, clear, and helpful as this has been. Your class gave us ways to easily determine the direction we wanted to go in; to organize our thoughts and writing in such a way as to make the creation of the eBook itself REALLY simple; and to get it up online with a minimum of fuss. In other words, I’ve learned more, and taken more action, than in anything else I’ve done. I was able to take a book that I’ve been trying to write for several years (and gotten nowhere with!), and, by working thru the process you teach in this course, break it down into manageable bits. In fact, it became so manageable that I ended up with a series of books planned, rather than one ginormous one. - Marie Angeli “I learned everything I needed to know on how to get an ebook created and published in just a few days.” I have been watching as Ebook readers are becoming a fast growing trend and realize that there is a great need for reading content. If you are considering taking your knowledge or other sources of information or even if you have a great fiction tale you want to tell, Jim Edwards’ training on ebook writing and publishing is THE source of information. I learned everything I needed to know on how to get an ebook created and published in just a few days. Jim takes the information and makes it clear and easy to understand. He gives you great examples to make learning easier and even provides templates so you can just follow along, do what he does, and have a book published before you know it. He even answers all your nagging questions. This training is the best value on the Internet! And you’ll love Jim’s teaching style! - Anita Thibeault “Thanks to your training it’s really happening now.“ Jim, I have tried to get my ebook going for years.YEARS! I’d start, stop, start again, get frustrated and quit the whole thing. Thanks to your training it’s really happening now. I am actually putting it together and feel confident about the parts I need to put together so it can happen. - Mark S. Kearns, MA, N.H.D. “I know I am way ahead of where I was before taking this course…” I cannot put into words how this training helped me. I do think with the training I received, Jim Edwards has answered my questions and eliminated my self imposed doubts about being able to move forward toward my goals of not only being a published eBook author, but one whose eBooks are read. Jim shares plainly the expertise he acquired over many years and teaches what he knows will work for you. I know I am way ahead of where I was before taking this course… I feel I am finally looking forward to success in this area instead of just dreaming about it. - Rusty Norman “This training will save you time and money and you will finally get your e-book done and published!” Fantastic training, Jim! Thank you so much for all the obvious hard work you put into this training. You covered every topic and question I had about creating my e-book and more. You certainly over delivered. For those even contemplating creating an e-book, you must get this training before you take another step. This training will save you time and money and you will finally get your e-book done and published! - Allison Higgins “…the BEST training I have had from Jim Edwards!” The 7 Day eBook (V2.0) training was without a doubt the BEST training I have had from Jim Edwards! He is brilliant in his thinking and very well organized in his presentations. With his assistance I am on the move! - Noreen Palmer “…Very thorough, well paced and practical training…” Jim provided a very thorough, well paced and practical training that was extremely enjoyable and immediately actionable. I have gained a lot of insightand a renewed confidence in bringing my eBooks to market. His good humored down to earth style and ability to present his own experience in such helpful ways, makes this training a joy to recommend. - Gordon Dickson “This is a fantastic course. I wish we had this 4 Kindle books ago!” This is a fantastic course. I wish we had this 4 Kindle books ago! The steps Jim gives will make our next one much smoother and faster to create, and will be much easier to target to an eager audience. Thanks very much, Jim! - Cathy Vartuli “The VALUE I have gotten from “How To Write And Publish Your Own Ebook …In As Little As 7 Days V2.0” is outrageous…” Thank you Jim for being a great, honest and genuine mentor! Thank you for sharing your wisdom and the benefits of your own experiences. The VALUE I have gotten from “How To Write And Publish Your Own Ebook …In As Little As 7 Days V2.0” is outrageous. It contained everything that I needed to know for ebook creation and publishing and with tons of extra goodies, too. With much gratitude, - Sonja Bendz “I really appreciate the fact that you are making your classes reasonable in price.” As usual, this training was very thorough. I always know that I am going to get my money’s worth from your courses, which is the reason that I keep coming back for more. I really appreciate the fact that you are making your classes reasonable in price. - Anne Buchanan “This course in particular delivered exactly what it promised.” Jim Edwards has always been one of my favorite teachers. He’s a down to earth guy that doesn’t waste my time telling me how good he is, but showing me what I can do to become as good as he is! He is detailed and comprehensive without being hard to follow, so it is easy to understand his instructions.He is also very sensitive to the needs of his individual students and does his best to answer everyone’s questions. This course in particular delivered exactly what it promised. Jim gave us step by step instructions and explained WHY each step was necessary. He also gave supporting examples and real time online demonstrations of what he was teaching us… I look forward to Jim’s next course. - John Vincent Palozzi “…covered not only the “how to” but also what to avoid…” The 7 eBook writing course encompassed every facet of writing an eBook in simple step by step instructions. Jim gave an excellent series of webinars that covered not only the “how to” but also what to avoid and all the short cuts and invaluable resources available to use while writing the eBook. This training course was the absolutely the “Ultimate” eBook writing resource. - Saundra “Michelle” Lee “Jim left no stone unturned…” Jim left no stone unturned in helping us understand how to write and publish an ebook. This time I feel confident that I’ll actually get mine done. - Rose Roberts “One word. . .value” One word. . .value. For the price and time, Jim’s course is great, well worth it. And I’m looking forward to his marketing course ! - Greg Nelson Click Here To Register Now * Based on the original ebook “How to Write and Publish Your Own eBook… in as little as 7 Days” by Jim Edwards and Joe Vitale. * DISCLAIMER: Your results will most certainly vary from person to person. Our best efforts, time, energy and experiences have been used in preparing this information, but, as you are surely aware, your results cannot be guaranteed. The fact is – as with any educational product of this type – you may make a lot of money, you may make a little money, or you may not make any money (heck, you might even lose money). Any testimonials are for information purposes and should not be considered “typical” results or even true results as they have not been verified in any way (other than our students sent them to us). We have no statistical data to support “actual” results from any user and strongly suspect that, unfortunately, most people who buy ANY information product online probably don’t do much, if anything, with any of the products they buy. Hopefully you’ll be different and actually take action on what we teach you here. * DISCLAIMER: “7 Day Ebook” v2.0, “How to Write and Publish your own eBook in as little as 7 Days” V2.0, Jim Edwards, and Guaranteed Response Marketing, LLC are not connected with, endorsed by Amazon, Amazon Kindle, or any Amazon related company, nor is any endorsement or connection inferred. Amazon, Amazon Kindle are trademarks of their respective companies. But we sure love Amazon and the Amazon Kindle Military Medals  展开全文 Jason009 2014-01-27 20:08:09 • Define your career goals and choose a ... This is the most important advice for anyone who has zero experience in programming and aims to join the developers’ community. But how can you make a c...  Define your career goals and choose a language. This is the most important advice for anyone who has zero experience in programming and aims to join the developers’ community. But how can you make a choice having no idea which language suits your purposes the most? Wouldn’t it be easy if there was a “market leader” among all programming languages? Then all newcomers could always have a safe choice — learn this language and you’ll surely be in high demand. Of course, it’s impossible. Languages are “tools” for solving numerous tasks. But still, there’s one which can be considered as a stellar choice — it’s Java. Java is a well-structured, object-oriented language, which can be considered easy for beginners. You can master it quite rapidly, as there are many processes that run automatically. You don’t have to delve into “how the things work in there” too deep. Java is a cross-platform language. It allows a programmer to create an application, which can be deployed on any device. It’s the language of choice for the Internet of Things and the right tool for building enterprise-level applications. What’s important for a “freshman”, Java has one of the biggest global communities and high-quality documentation. If you have a problem, it’s more than likely that the answer is ready there, waiting for you. Two more benefits of Java are vast collections and frameworks that cover most of the challenges you’ll have to deal with as a Junior developer. Finally, it is a language with a respectable background and a prominent future. Two latest versions, enhanced with new features, were released within six months of each other. This helps Java to stand on the front burner and keep the highest positions in respectable professional rankings. But even when we’re talking about a programming language with a low learning curve, there are plenty of hidden rocks for beginners. How much time do you need to learn? Which sources to trust? Which mistakes to avoid? Let’s go all the way through your learning experience. Ensure you bypass the common obstacles So, you’re new to programming. Congratulations: as you can make use of other programmers’ experience and avoid the common mistakes in a self-education. Here are some frequent lapses. Learning without setting a specific goal To estimate the scale and desired level of knowledge in a certain programming language, first of all, you should answer a simple question: why do you need programming? If you’re serious about coding and intend to become a Java developer, you’ll need to study every day for at least 4–5 hours. But if you simply want to enlarge your scope, you can choose a more relaxed tempo. Anyway, try not to extend your education for many years to come, because the technologies evolve. While you learn a certain framework or development tool to get a job, it becomes outdated. Reading “anything useful” that pops up isn’t the best strategy of learning. It’s okay to make adjustments to the general plan. However, not following it at all will inevitably demotivate you. An attempt to learn too many technologies at once This a subsequent mistake, which leads to learning without an end. Don’t try to stuff your educational plan with too many technologies and tools to avoid burnout. You’ll need time to process the information and see how everything works on practice. Too much research and theory without practice Programming is a skill which you can gain only with lots of practice. You’ll need a serious background in theory, but as long as you only read (or watch) lectures and courses, you can’t really code. Think about it. Nobody can learn how to swim without trying it. You need explanations, but above all, you need action. Only plenty of practice will teach you how to deal with everyday programmers’ problems. For example, you’ll get a habit to check your code regularly and not let the connected problems to pile up. You will also start with the easiest solutions. Then move to more exquisite, constantly working on the improvement of your code. And the most important, you’ll get used to coding on a daily basis. Learning to code in isolation Beginners often hesitate, whether they should join online programming communities or attend events, mainly because of imposter syndrome. But remember: nobody wants to bring you down. The programming community is collaborative. This is how numerous open data sources appear. They’re used to work in a team, and surely, all of them were beginners at a certain moment of life. Take a look: there are plenty of forums and web sources on programming. Developers eagerly share their knowledge and are open to collaborations. You can start learning online, get a useful hint from more experienced colleagues and later, find your first coding project. Being sure that one day you will fully understand all aspects of programming If anyone discovered a pill to take and immediately get skilled at any programming language, he’d be the richest person on the planet (sorry, Jeff Bezos). But until then, there’s no certain end in your education, if you’ve chosen to be a programmer. Even when you have a job, never stop learning. Things change rapidly in a programming world. On the other side, when you’re still learning how to code, try to accept some facts as they are. Do not dig into every subject, as its background might be too “heavy”. Make a perfect training program It’s easier to achieve your aim step by step. Now, when you know the common mistakes, you can avoid them. Here are five steps you can take to learn Java. Set a goal and choose a language. You can do pretty much anything with Java. You can build application servers, desktop, and mobile applications, enterprise applications, and run unit tests. But of course, a programming language isn’t everything you need to know to become a pro. Try to think of specific activity areas. Today’s trends are building cloud-based applications (you’ll also need to learn cloud computing basics and specific tools for cloud development), working with the Internet of Things, performing Big data analysis, creating games, etc. 2. Create an educational plan. Are you ready to make Java programming your profession? Then dedicate at least 2–3 (on the workdays) to 5 hours (on the weekends) to studying daily. In this case, you will likely need 3 to 6 months to prepare for a Junior developer position. In general, your learning process will be divided into a few stages: Installation of JDK (Java Development Kit) from Oracle website and Installation of Java runtime environment (IntelliJ IDEA, Eclipse or NetBeans); Learning Java Syntax; Learning Java Core; Learning Java Collections; Learning popular libraries and frameworks; Exploring frequently used APIs (for example, servlets, JSP, JDBC, JUnit); Mastering Git; And so on. Try to follow your plan and keep the balance between theory and practice. Programming is a skill that needs training every day. If you finish studying a certain subject, continue with a few coding tasks (3 to 10, depending on their difficulty). You can easily adjust the well-known Pareto principle (80/20 rule) to Java learning. The “20” will stand for research and “80” for practice. This is not an exaggeration: you’ll need four times more coding than reading to memorize what you’ve learned and developed your coding skills. Unfortunately, if you won’t write your code at once, you will forget everything you’ve read on the next day. Luckily, you don’t need to invent your own training program, if you have the right sources. 3. Choose the right tools and join programming communities. Let’s be honest: a perfect Java course doesn’t exist. Some will give you a profound basic knowledge, some will provide with a good deal of practice. Choose a few platforms for education, communication, and practice. Choose one online course which combines a plain explanation of theory with the real coding. Join the communities, where you can ask any question about the aspects of coding on Java, share your thoughts and find like-minded people. The top communities for Java developers are listed below. Use multiple sources for learning Java You will need lots of tools to accomplish your goals. Here’s a set of “tools” for you to succeed. Strictly practice:CodeAcademy This is probably one of the best-known online platforms for learning numerous languages. Of course, there’s a section for Java learners, too. Here you start coding from the first lesson. There are pretty useful hints, which you can get if a certain task seems to be tough (which is normal when you are a beginner). The logic is simple: read the task, write code and run it to see what happens as a result, and then move to the next step. The tasks gradually become more complicated, until you start to write your code from a clean sheet. The FAQ section is pretty useful and you have an option to discuss each task with other students. This course can be a great complementary tool in learning Java. As told before, you need to code to master Java programming. 2. Play and code from the beginning:CodeGym.cc These are online courses for Java learners with a special feature — gamification. Nowadays it’s common for online courses to adopt gamified elements, as they bring instant motivation, a sense of constant achievements and make it easier to reach your goal. At CodeGym’s you start from level 0 in the futuristic universe with space travel, robots, and other cool things. Your aim is to pass four educational quests to level up a character — a robot. Each quest includes 10 levels, and each level has up to 10–12 lessons, taught by crew members of a galactic ship. A lesson consists of a minimum theory and a set of tasks with instant verification and tips on how to improve your code. You start coding from the beginning, solving very simple tasks, until you’re ready for much more complicated and massive coding projects. The whole story allows you not to get stuck on a certain subject or task, move forward and return later to the “twisters”. All in all, there are impressive 1200+ tasks in a course. An amount that converts in at least 300–500 hours of coding. 3. Challenge programmers:Codewars This is another online platform with tons of practice. Though it’s more suitable for learners with at least a small background in programming. Codewars empower you to sharpen skills in a certain language by training katas. You can write your code in a browser and use test cases to check it step by step. You can also compare your solution with others to broaden your knowledge and discuss the best practices. Each kata has a rank, and each kata is a challenge with other programmers. When you solve more difficult tasks, you can get more complicated challenges to improve coding skills. What differs this platform from others is that it allows to study and practice in a group. 4. Listen to the lectures of a “pro” level:EdX EdX is an educational platform founded by Harvard University and MIT. It covers many fields of study, including Java programming and many related subjects. There are plenty of verified introductory courses and certificate programs, provided by universities. Each course has a defined time frame and includes video lectures with a text transcript. It’s easy to return to previous lessons and revise the material. There are dozens of different courses, some of them are free. But still, this is a source strictly for learning Java theory. Be sure to strengthen those courses with hours of coding. Want to stay tuned to the latest news, reviews and updated in Java world? That’s the right thing to do. Java is constantly evolving, upgrading and bringing new features. Be sure to have a couple of media you can read daily. One of the largest are: Javaworld (news, useful tutorials, “how to’s” and everything else to keep you up to date with Java programming); Java Code Geeks (a resource center for those who learn Java with educational tutorials, articles, and tips on how to get a job as a Java programmer); DZone (plenty of articles and guides for beginners and experienced developers); Javarevisited (a daily updated blog which covers numerous Java learning topics). Do you remember the advice to join a community to make your education more effective? You can ask any question in Stack Overflow’s Java section or Coderanch. Also, there are at least three large communities on Reddit, likelearnprogramming,java andlearnjava, where you will find useful tips on learning Java and programming in general. If you need more specific information, for example, a hint on improving your code in the certain tasks, try the special help section at CodeGym, where other students and “coding coaches” will help you with any problem. And finally, Oracle has a vast Java Community, open for both the newcomers and experienced developers. Being a programmer means constant improvement and gaining new knowledge. If you develop a knack for self-education from the start, you’ll succeed by all means. Are you ready to try? This article was published HERE  展开全文 weixin_29071809 2021-02-27 14:45:01 • 1. I better take a pen and note this down.我还是拿笔记一下。2. I testify, moreover, that with but a movement of Thy Pen Thine injunction Be Thou hath been enforced, and Gods hidden Secret hath been...  1. I better take a pen and note this down. 我还是拿笔记一下。 2. I testify, moreover, that with but a movement of Thy Pen Thine injunction Be Thou hath been enforced, and Gods hidden Secret hath been divulged, and all created things have been called into being, and all the Revelations have been sent down. 我亦证实，祢的圣笔仅仅一挥，钦此之令便生效施行，上帝之隐秘得以披露，一切受造物皆获新生，所有启示降临人间。 3. They developed a pen that worked at zero gravity, upside down, underwater, in practically any surface including crystal and in a temperature range from below freezing to over 300 degrees C. 他们研发了一种圆珠笔，在失重、倒过来、水里，而且几乎在任何表面，包括水晶表面，在零度到300度的情况下，都能书写。 4. To solve this problem, it took them one decade and$12 million. They developed a pen that worked at zero gravity, upside down, underwater, in practically any surface including crystal and in a temperature range from below freezing to over 300 degrees C.
为了解决这个问题，太空总署花了十年时间和一千两百万美元发明了零重力下、上下颠倒拿著和在水中都能使用的笔，且能在任何一种表面书写，能耐受零度以下到摄氏 300 度以上的笔。
5. pen down的意思
5. When the war was over, he laid down the sword and took up the pen.
战争结束后，他弃文从武了。
6. B、If A operation can not yet get intact image, should take down the telecope, and then use the small pen shape stick aims at the two ostioles on the ocular lens side, anticlockwise upwards to rotate until get intact and clear image
A 的动作还未能达到全屏，可取下望远镜，用配件中的笔型调镜器对准望远镜目镜端上的任一个小孔逆时针向上微调，直至图象全屏清晰为止。
7. 911查询·英语单词大全
7. The 4th: Keyword choice, I do me this website when, had used the person of the same trade's keyword thing of a pen this all estreat comes down.
第四：关键词选择，我做我这个网站的时候，就已经把同行的关键词用一个笔事本全部摘抄下来。
8. Me:never lay down your sword, and take up another weapon—pen
不要放下你们的剑，再拿起另外一件武器——笔
9. It likes staying the pen container and the drawer, so long as feeds by the peanut and the soybean namely can survive gets down.
它爱栖身笔筒和抽屉，只要喂以花生和黄豆即能生存下去。
10. She sat at the table, collar off, head down, and pen in position, ready to begin the long letter.
她坐在桌前，衣领已解掉，头低了下来，拿好钢笔，准备开始写一封长信。
11. The pen doesn't write unless you bear down hard on it.
如果你不用力，这只笔就写不出来。
12. When I went abroad I saw a lot of things. The first time, I gained some wisdom from it to a certain extent, and the second time to another extent. On my first trip, I made notes of what I experienced in a journal. But this time, I put down the pen. I thought, if I write these things down, will the people at home be able to bear it?
即使我们住在寺里，还是偏离了正确的修行-好远好远，身在国外的日子，目睹了不少的事，先是增长了些许智慧，一段时日後，又增长一些，初次旅行，我记录了途中的所见所闻，这回，我却停了笔，心想：要是写了下来，能见容於国人吗？
13. Sometimes, just the act of jotting stuff down is like etchingit onto your brain with a marker pen.
有时候，把一些东西匆匆记下来就好像用一支记号笔刻进你大脑一样。
14. Just now, I was trying to take up a ball pen to write down the mandarin translation as required at work. But, I couldn't write.
刚才因为工作需要，当我执起桌面的原子笔，要亲手写下之前的中文翻译，我竟然忘记了很多中文字。
15. I haven'tbeen in that line for quite some time:I'm bombarded with all kindsof things-bi9, little, thick, thin-and it'S enough dealing withthem one at a time, SO who knows how much time and energy I'llhave left to sit down and take up a pen!
久已不干这勾当了；大的小的粗的细的种种事情箭一般地射到身上来，逐一对付已经够受了，知道还有多少坐定下来执笔的功夫与精神！
16. Less a horseshoe nails, horse suddenly fell in the trenches, so the battle will fail; a tungsten filament lamp burned down, the whole room would be a pitch-black; pen nib on the core lost a small bead on the re - also he could not write words.
马掌少了一颗钉子，马会在战壕中突然摔倒，以致整个战斗都会失败；电灯烧毁了一根钨丝，整个房间就会一片漆黑；圆珠笔芯掉了笔尖上的小圆珠，就再也写不出字来。
17. Sheets of vellum, animal hides specially prepared for writing, were cut down to the appropriate size. After the general layout of the page was planned, the page was lightly ruled with a pointed stick, and the scribe went to work with ink-pot and either sharpened quill feather or reed pen.
按照一定的尺寸裁好皮纸(一种可以用来书写的动物皮)后，再经过总体的页面规划设计，将纸页用尖木棍固定，抄写者就用鹅毛笔或者苇杆笔沾著墨水开始抄写了。
18. Second, and perhaps you will ask, can the amplifier input impedance down to zero, just like the table pen docking multimeter, as there is no interference signal is not it?
二、也许你又会问，那能不能把放大器的输入阻抗降到零，就像刚才万用表的表笔对接一样，干扰信号不就没有了吗？
19. I like snow in cold, a pen to write down your name.
我喜欢在寒冷的雪，用笔写下你的名字。
20. So my pen jots down your tears.
它会记下你滴滴的泪水。

展开全文
weixin_39815410 2020-12-08 07:57:47
• weiyuefei 2016-07-11 11:02:06
• ## SSD [FAILED] Failed to mount /sysroot解决办法 linx centos ssd

u012158332 2018-12-22 14:59:23
• Scythe666 2017-10-13 17:48:10
• ## Java - Introduction to Thread Pools Java

chimomo 2019-11-05 18:02:02
• sun7545526 2012-11-13 23:01:14
• lichao_ustc 2014-12-25 14:48:19
• ## Mapping High-Level Constructs to LLVM IR LLVM 文档 compiler 类型

snsn1984 2013-12-31 09:50:42
• ## Introduction to C++ Programming in UE4——UE4官方文档翻译与理解（一） C++ 虚幻4编程 UE4

u012999985 2016-05-10 11:22:01
• weixin_42152298 2021-01-27 11:08:48
• u010681466 2014-10-27 17:08:15
• ## Introduction to React react.js

Hhhhhaohao 2021-07-13 15:52:31
• wishfly 2016-03-30 16:01:14
• wzb56 2014-05-30 21:14:54
• ## ZERO PAGE removal influence access module codec

cybertan 2010-02-11 09:55:00
• ## 阿里云centos环境之linux上redis安装及踩过的坑(七) redis 阿里云 centos linux

achenyuan 2017-11-13 17:39:34
• screaming 2016-03-23 09:26:16
• ## LeetCode 简单算法题 算法 简单 leetCode

github_35631540 2018-06-06 19:55:57
• ## Machine Learning - Solving the Problem of Overfitting: Regularization 机器学习 algorithm

iracer 2016-02-21 13:28:52
• ## Zero Copy I: User-Mode Perspective system socket descriptor signal buffer

shaoguangleo 2010-08-18 19:48:00
• wzj983 2017-04-29 17:12:14
• wzb56 2014-05-30 20:48:48
• ## 6.S081 Lab 1: Xv6 and Unix utilities unix

u012419550 2021-02-24 15:09:23
• ## Android内核的编译和调试 Android内核 内核调试 内核编译

QQ1084283172 2017-04-28 11:02:27
• ## 电源管理之android内核suspend to disk的实现（九）--tuxonice实现方案 android系统 linux内核

hellomxj1 2014-01-23 18:08:43
• ## liunux 查看系统参数、网络参数的命令 网络 sysctl ipv4 network

lianshaohua 2021-10-29 21:27:28
• ## 神经网络指南Hacker's guide to Neural Networks 指南 guide 神经网络 深度学习

GarfieldEr007 2016-04-12 12:53:01

...