text:
User talk:SeekerVI~enwikibooks

Spaces in link text
G'day, I notice that you are replacing spaces in linked names with underscores (e.g. "Miso soup" → "Miso_soup"). Firstly, this is unnecessary because the MediaWiki software automatically handles converting names into URL-friendly strings. Secondly, it might actually be a bad idea, because it could cause some problem later down track - the page names themselves do not have underscores in them (i.e. only the URL-friendly representations of them do). Personally, I'd leave them all as spaces. Webaware talk 04:57, 18 January 2007 (UTC)
 * I wouldn't want to add work to your plate. Only change them back if you're in there again anyway. There currently isn't any problem with them; mostly I just wanted to let you know not to bother doing it, because it doesn't have any (positive) impact. Webaware talk 05:30, 18 January 2007 (UTC)

Your account will be renamed
Hello,

The developer team at Wikimedia is making some changes to how accounts work, as part of our on-going efforts to provide new and better tools for our users like cross-wiki notifications. These changes will mean you have the same account name everywhere. This will let us give you new features that will help you edit and discuss better, and allow more flexible user permissions for tools. One of the side-effects of this is that user accounts will now have to be unique across all 900 Wikimedia wikis. See the announcement for more information.

Unfortunately, your account clashes with another account also called SeekerVI. To make sure that both of you can use all Wikimedia projects in future, we have reserved the name SeekerVI~enwikibooks that only you will have. If you like it, you don't have to do anything. If you do not like it, you can pick out a different name.

Your account will still work as before, and you will be credited for all your edits made so far, but you will have to use the new account name when you log in.

Sorry for the inconvenience.

Yours, Keegan Peterzell Community Liaison, Wikimedia Foundation 23:40, 17 March 2015 (UTC)

Renamed
 This account has been renamed as part of single-user login finalisation. If you own this account you can |log in using your previous username and password for more information. If you do not like this account's new name, you can choose your own using this form after logging in: . -- Keegan (WMF) (talk) 05:28, 19 April 2015 (UTC)

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: User talk:SeekerVI~enwikibooks


text:
User:Iamunknown/Thinktank/Staff lounge

Before the the most recent archival, the staff lounge was 312 kilobytes and very overwhelming. Currently most issues are hammered out (at least in part) there. I think that something needs to be done. Here I am going to hammer out ideas about what could be done. I invite you to contribute. Please do not remove anything; instead, if for some reason you wish to change something, strike it out. Discuss on the talk page.

Brainstorm
What is posted at the staff lounge?
 * Policy-related text
 * Formerly "policy of the week"
 * Calls for discussion concerning mature proposals
 * General Wikibooks-related questions
 * Questions directed from the English Embassy
 * Calls for help (clean up, blocking open proxies, etc.)
 * This may well be addressed by the postings on the RfA page for and "general" request for help page

What should be posted in the staff lounge?

Status quo

 * Nearly everything is posted at the staff lounge
 * NOT desirable IMO (HT)

How could it change?

 * Decentralise the staff lounge. A user would go to {[Wikibooks:Staff lounge]], see a list of the descriptions of the satellite pages, and then go there.
 * Problem: then there is no place of maximum visibility
 * Have a <input> box to create a sub-page with the topic title as the sub-page name.
 * Problem: then users would have to add each sub-page to their watchlist
 * Question: would it require an extra step to include the sub-page into the staff lounge?

 * My big bugbear is navigation - folks just don't know where to look and (by comparison) the Staff Lounge is easy to find (I asked quite a few questions there when I started!). We really do need to radically improve navigation at the top of SL and then make sure the info gets carried thro to other places where navigation is found including the welcome template.  In passing I feel we should decommission ViP in favour of WB:AN - nothing like as much of it these days - and try and make more use of the WB:AN (might be worth placing messages on admin talk pages to make sure they are actually watching it) - scratch that for the new "request for help" page if that gets off the ground!
 * (A derivative of the 1st one but with max visibility depending on from where) Could we have a page between the staff lounge and the staff lounge for real. So from some places clicking on the staff lounge would get you a "what do you really want?" page and here is where to go?  Obviously there would be issues about which links got the intervening page but ...
 * One possibility: decomission the staff lounge altogether, create a header on top of the main page talk page with the "what do you really want?" navigation which would send you to WB:AN, help request, etc. Or the main page talk page header could just be the staff lounge included as a header.

 * Maintain the massive staff lounge but create two templates to wrap around the larger discussion which will minimise them, and then if you want to take part in the discussion, you would just maximise it by clicking an "expand" link
 * Problem: not scalable. The staff lounge keeps getting bigger, and doing that will only make it appear to be small.
 * Problem: does not address the fact that many conversations which are in no way related to each other are being forced into one page.

Approaching from a different angle
What is it that folk are looking for help with (assuming we have a main "help" page)
 * "I need help with my layout"
 * "I need help with content"
 * "I need to know what is acceptable"
 * "I need an administrator"
 * "I've found a vandal"
 * "I need help with repetitive tasks"
 * - feel free to add
 * Finally if you can't see what you might want above, please ask in the Staff Lounge

title: User:Iamunknown/Thinktank/Staff lounge


text:
Cookbook:Cuisine of Mongolia

| East Asian cuisines

 * Buuz (beef/mutton)
 * Bansh (dumplings boiled in water)
 * Khuushuur (dumplings deep fried in fat)

 * Khorkhog
 * Boodog
 * Öröm (clotted cream)
 * Byaslag (cheese)
 * Aruul (dried curds)
 * Suutei Tsai (salted milk tea)
 * Fast cooking recipes

title: Cookbook:Cuisine of Mongolia


text: User:SeekerVI~enwikibooks

title: User:SeekerVI~enwikibooks


text:
Category:Subject:Computer science

eo:Kategorio:Udk:004 es:Categoría:Informática fr:Catégorie:Informatique is:Flokkur:Tölvunarfræði nl:Categorie:Informatica pl:Kategoria:Informatyka vi:Thể loại:Khoa học máy tính

title: Category:Subject:Computer science


text: Category:Book:DD-WRT

title: Category:Book:DD-WRT


text: Category:Book:FontLab

title: Category:Book:FontLab


text: Category:Book:Effective Reasoning

title: Category:Book:Effective Reasoning


text:
Electronics/Control Unit

The Control Unit provides the Micro-Instructions that are necessary for the execution of a program. The micro instruction that should be executed next is decided based on the Current instruction fetched from memory and the bit values off the Various CPU status registers such as Negative, Zero etc.

Of the two CPU architectures in use the RISC (Reduced Instruction Set Computing) and the CISC (Complex Instruction Set Computing) have different philosophies in this regard where the RISC believes in having a larger number of more simple Micro-instructions and the CISC believes in a smaller number of more complex instructions.

title: Electronics/Control Unit


text: Category:Book:Adobe GoLive Guide

title: Category:Book:Adobe GoLive Guide


text: Category:Book:CA Unicenter NSM Textbook

title: Category:Book:CA Unicenter NSM Textbook


text:
Talk:CA Unicenter NSM Textbook

One suggestion: clarify what CA Unicenter NSM is. I had never heard of it, and had to guess based on a Google search. --User:Iamunknown 06:32, 18 January 2007 (UTC)

Need someone to write about Unicenter
Hey, if any of you CA Unicenter gurus would like to make some money writing about Unicenter, please contact me. Anything you write for me would be placed under a Creative Commons license.

title: Talk:CA Unicenter NSM Textbook


text: Category:Book:The Holocaust

title: Category:Book:The Holocaust


text: Category:Book:Erlang Programming

title: Category:Book:Erlang Programming


text: Category:Book:Ancient History/Stubs

title: Category:Book:Ancient History/Stubs


text:
User:Diza~enwikibooks

Hi there, here's my wikipedia user page

title: User:Diza~enwikibooks


text:
User talk:Rajanyprasad

1.	What is load testing?

- Load testing is to test that if the application works fine with the loads that result from large number of simultaneous users, transactions and to determine weather it can handle peak usage periods.

2.	What is Performance testing?

- Timing for both read and update transactions should be gathered to determine whether system functions are being performed in an acceptable timeframe. This should be done standalone and then in a multi user environment to determine the effect of multiple transactions on the timing of a single transaction.

3.	Did u use LoadRunner? What version?

- Yes. Version 7.2.

4.	Explain the Load testing process?

- Step 1: Planning the test. Here, we develop a clearly defined test plan to ensure the test scenarios we develop will accomplish load-testing objectives. Step 2: Creating Vusers. Here, we create Vuser scripts that contain tasks performed by each Vuser, tasks performed by Vusers as a whole, and tasks measured as transactions. Step 3: Creating the scenario. A scenario describes the events that occur during a testing session. It includes a list of machines, scripts, and Vusers that run during the scenario. We create scenarios using LoadRunner Controller. We can create manual scenarios as well as goal-oriented scenarios. In manual scenarios, we define the number of Vusers, the load generator machines, and percentage of Vusers to be assigned to each script. For web tests, we may create a goal-oriented scenario where we define the goal that our test has to achieve. LoadRunner automatically builds a scenario for us. Step 4: Running the scenario. We emulate load on the server by instructing multiple Vusers to perform tasks simultaneously. Before the testing, we set the scenario configuration and scheduling. We can run the entire scenario, Vuser groups, or individual Vusers. Step 5: Monitoring the scenario. We monitor scenario execution using the LoadRunner online runtime, transaction, system resource, Web resource, Web server resource, Web application server resource, database server resource, network delay, streaming media resource, firewall server resource, ERP server resource, and Java performance monitors. Step 6: Analyzing test results. During scenario execution, LoadRunner records the performance of the application under different loads. We use LoadRunner’s graphs and reports to analyze the application’s performance.

5.	When do you do load and performance Testing?

- We perform load testing once we are done with interface (GUI) testing. Modern system architectures are large and complex. Whereas single user testing primarily on functionality and user interface of a system component, application testing focuses on performance and reliability of an entire system. For example, a typical application-testing scenario might depict 1000 users logging in simultaneously to a system. This gives rise to issues such as what is the response time of the system, does it crash, will it go with different software applications and platforms, can it hold so many hundreds and thousands of users, etc. This is when we set do load and performance testing.

6.	What are the components of LoadRunner?

- The components of LoadRunner are The Virtual User Generator, Controller, and the Agent process, LoadRunner Analysis and Monitoring, LoadRunner Books Online.

7.	What Component of LoadRunner would you use to record a Script?

- The Virtual User Generator (VuGen) component is used to record a script. It enables you to develop Vuser scripts for a variety of application types and communication protocols.

8.	What Component of LoadRunner would you use to play Back the script in multi user mode?

- The Controller component is used to playback the script in multi-user mode. This is done during a scenario run where a vuser script is executed by a number of vusers in a group.

9.	What is a rendezvous point?

- You insert rendezvous points into Vuser scripts to emulate heavy user load on the server. Rendezvous points instruct Vusers to wait during test execution for multiple Vusers to arrive at a certain point, in order that they may simultaneously perform a task. For example, to emulate peak load on the bank server, you can insert a rendezvous point instructing 100 Vusers to deposit cash into their accounts at the same time.

10.	What is a scenario?

- A scenario defines the events that occur during each testing session. For example, a scenario defines and controls the number of users to emulate, the actions to be performed, and the machines on which the virtual users run their emulations.

11.	Explain the recording mode for web Vuser script?

- We use VuGen to develop a Vuser script by recording a user performing typical business processes on a client application. VuGen creates the script by recording the activity between the client and the server. For example, in web based applications, VuGen monitors the client end of the database and traces all the requests sent to, and received from, the database server. We use VuGen to: Monitor the communication between the application and the server; Generate the required function calls; and Insert the generated function calls into a Vuser script.

12.	Why do you create parameters?

- Parameters are like script variables. They are used to vary input to the server and to emulate real users. Different sets of data are sent to the server each time the script is run. Better simulate the usage model for more accurate testing from the Controller; one script can emulate many different users on the system.

13.	What is correlation? Explain the difference between automatic correlation and manual correlation?

- Correlation is used to obtain data which are unique for each run of the script and which are generated by nested queries. Correlation provides the value to avoid errors arising out of duplicate values and also optimizing the code (to avoid nested queries). Automatic correlation is where we set some rules for correlation. It can be application server specific. Here values are replaced by data which are created by these rules. In manual correlation, the value we want to correlate is scanned and create correlation is used to correlate.

14.	How do you find out where correlation is required? Give few examples from your projects?

- Two ways: First we can scan for correlations, and see the list of values which can be correlated. From this we can pick a value to be correlated. Secondly, we can record two scripts and compare them. We can look up the difference file to see for the values which needed to be correlated. In my project, there was a unique id developed for each customer, it was nothing but Insurance Number, it was generated automatically and it was sequential and this value was unique. I had to correlate this value, in order to avoid errors while running my script. I did using scan for correlation.

15.	Where do you set automatic correlation options?

- Automatic correlation from web point of view can be set in recording options and correlation tab. Here we can enable correlation for the entire script and choose either issue online messages or offline actions, where we can define rules for that correlation. Automatic correlation for database can be done using show output window and scan for correlation and picking the correlate query tab and choose which query value we want to correlate. If we know the specific value to be correlated, we just do create correlation for the value and specify how the value to be created.

16.	What is a function to capture dynamic values in the web Vuser script?

- Web_reg_save_param function saves dynamic data information to a parameter.

17.	When do you disable log in Virtual User Generator, When do you choose standard and extended logs?

- Once we debug our script and verify that it is functional, we can enable logging for errors only. When we add a script to a scenario, logging is automatically disabled. Standard Log Option: When you select Standard log, it creates a standard log of functions and messages sent during script execution to use for debugging. Disable this option for large load testing scenarios. When you copy a script to a scenario, logging is automatically disabled Extended Log Option: Select extended log to create an extended log, including warnings and other messages. Disable this option for large load testing scenarios. When you copy a script to a scenario, logging is automatically disabled. We can specify which additional information should be added to the extended log using the Extended log options.

18.	How do you debug a LoadRunner script?

- VuGen contains two options to help debug Vuser scripts-the Run Step by Step command and breakpoints. The Debug settings in the Options dialog box allow us to determine the extent of the trace to be performed during scenario execution. The debug information is written to the Output window. We can manually set the message class within your script using the lr_set_debug_message function. This is useful if we want to receive debug information about a small section of the script only.

19.	How do you write user defined functions in LR? Give me few functions you wrote in your previous project?

- Before we create the User Defined functions we need to create the external library (DLL) with the function. We add this library to VuGen bin directory. Once the library is added then we assign user defined function as a parameter. The function should have the following format: __declspec (dllexport) char* (char*, char*)Examples of user defined functions are as follows:GetVersion, GetCurrentTime, GetPltform are some of the user defined functions used in my earlier project.

20.	What are the changes you can make in run-time settings?

- The Run Time Settings that we make are: a) Pacing - It has iteration count. b) Log - Under this we have Disable Logging Standard Log and c) Extended Think Time - In think time we have two options like Ignore think time and Replay think time. d) General - Under general tab we can set the vusers as process or as multithreading and whether each step as a transaction.

21.	Where do you set Iteration for Vuser testing?

- We set Iterations in the Run Time Settings of the VuGen. The navigation for this is Run time settings, Pacing tab, set number of iterations.

22.	How do you perform functional testing under load?

- Functionality under load can be tested by running several Vusers concurrently. By increasing the amount of Vusers, we can determine how much load the server can sustain.

23.	What is Ramp up? How do you set this?

- This option is used to gradually increase the amount of Vusers/load on the server. An initial value is set and a value to wait between intervals can be specified. To set Ramp Up, go to ‘Scenario Scheduling Options’

24.	What is the advantage of running the Vuser as thread?

- VuGen provides the facility to use multithreading. This enables more Vusers to be run per generator. If the Vuser is run as a process, the same driver program is loaded into memory for each Vuser, thus taking up a large amount of memory. This limits the number of Vusers that can be run on a single generator. If the Vuser is run as a thread, only one instance of the driver program is loaded into memory for the given number of Vusers (say 100). Each thread shares the memory of the parent driver program, thus enabling more Vusers to be run per generator.

25.	If you want to stop the execution of your script on error, how do you do that?

- The lr_abort function aborts the execution of a Vuser script. It instructs the Vuser to stop executing the Actions section, execute the vuser_end section and end the execution. This function is useful when you need to manually abort a script execution as a result of a specific error condition. When you end a script using this function, the Vuser is assigned the status "Stopped". For this to take effect, we have to first uncheck the “Continue on error” option in Run-Time Settings.

26.	What is the relation between Response Time and Throughput?

- The Throughput graph shows the amount of data in bytes that the Vusers received from the server in a second. When we compare this with the transaction response time, we will notice that as throughput decreased, the response time also decreased. Similarly, the peak throughput and highest response time would occur approximately at the same time.

27.	Explain the Configuration of your systems?

- The configuration of our systems refers to that of the client machines on which we run the Vusers. The configuration of any client machine includes its hardware settings, memory, operating system, software applications, development tools, etc. This system component configuration should match with the overall system configuration that would include the network infrastructure, the web server, the database server, and any other components that go with this larger system so as to achieve the load testing objectives.

28.	How do you identify the performance bottlenecks?

- Performance Bottlenecks can be detected by using monitors. These monitors might be application server monitors, web server monitors, database server monitors and network monitors. They help in finding out the troubled area in our scenario which causes increased response time. The measurements made are usually performance response time, throughput, hits/sec, network delay graphs, etc.

29.	If web server, database and Network are all fine where could be the problem?

- The problem could be in the system itself or in the application server or in the code written for the application.

30.	How did you find web server related issues?

- Using Web resource monitors we can find the performance of web servers. Using these monitors we can analyze throughput on the web server, number of hits per second that occurred during scenario, the number of http responses per second, the number of downloaded pages per second.

31.	How did you find database related issues?

- By running “Database” monitor and help of “Data Resource Graph” we can find database related issues. E.g. You can specify the resource you want to measure on before running the controller and than you can see database related issues

32.	Explain all the web recording options?

33.	What is the difference between Overlay graph and Correlate graph?

- Overlay Graph: It overlay the content of two graphs that shares a common x-axis. Left Y-axis on the merged graph show’s the current graph’s value & Right Y-axis show the value of Y-axis of the graph that was merged. Correlate Graph: Plot the Y-axis of two graphs against each other. The active graph’s Y-axis becomes X-axis of merged graph. Y-axis of the graph that was merged becomes merged graph’s Y-axis.

34.	How did you plan the Load? What are the Criteria?

- Load test is planned to decide the number of users, what kind of machines we are going to use and from where they are run. It is based on 2 important documents, Task Distribution Diagram and Transaction profile. Task Distribution Diagram gives us the information on number of users for a particular transaction and the time of the load. The peak usage and off-usage are decided from this Diagram. Transaction profile gives us the information about the transactions name and their priority levels with regard to the scenario we are deciding.

35.	What does vuser_init action contain? - Vuser_init action contains procedures to login to a server.

36.	What does vuser_end action contain? - Vuser_end section contains log off procedures.

37.	What is think time? How do you change the threshold?

-  Think time is the time that a real user waits between actions. Example: When a user receives data from a server, the user may wait several seconds to review the data before responding. This delay is known as the think time. Changing the Threshold: Threshold level is the level below which the recorded think time will be ignored. The default value is five (5) seconds. We can change the think time threshold in the Recording options of the Vugen.

38.	What is the difference between standard log and extended log?

- The standard log sends a subset of functions and messages sent during script execution to a log. The subset depends on the Vuser type Extended log sends a detailed script execution messages to the output log. This is mainly used during debugging when we want information about: Parameter substitution. Data returned by the server. Advanced trace.

39.	Explain the following functions:

- lr_debug_message - The lr_debug_message function sends a debug message to the output log when the specified message class is set. lr_output_message - The lr_output_message function sends notifications to the Controller Output window and the Vuser log file. lr_error_message - The lr_error_message function sends an error message to the LoadRunner Output window. lrd_stmt - The lrd_stmt function associates a character string (usually a SQL statement) with a cursor. This function sets a SQL statement to be processed. lrd_fetch - The lrd_fetch function fetches the next row from the result set.

40.	Throughput - If the throughput scales upward as time progresses and the number of Vusers increase, this indicates that the bandwidth is sufficient. If the graph were to remain relatively flat as the number of Vusers increased, it would be reasonable to conclude that the bandwidth is constraining the volume of data delivered.

41.	Types of Goals in Goal-Oriented Scenario - Load Runner provides you with five different types of goals in a goal oriented scenario: o	The number of concurrent Vusers o	The number of hits per second o	The number of transactions per second o	The number of pages per minute o	The transaction response time that you want your scenario

42.	Analysis Scenario (Bottlenecks): In Running Vuser graph correlated with the response time graph you can see that as the number of Vusers increases, the average response time of the check itinerary transaction very gradually increases. In other words, the average response time steadily increases as the load increases. At 56 Vusers, there is a sudden, sharp increase in the average response time. We say that the test broke the server. That is the mean time before failure (MTBF). The response time clearly began to degrade when there were more than 56 Vusers running simultaneously.

43.	What is correlation? Explain the difference between automatic correlation and manual correlation?

- Correlation is used to obtain data which are unique for each run of the script and which are generated by nested queries. Correlation provides the value to avoid errors arising out of duplicate values and also optimizing the code (to avoid nested queries). Automatic correlation is where we set some rules for correlation. It can be application server specific. Here values are replaced by data which are created by these rules. In manual correlation, the value we want to correlate is scanned and create correlation is used to correlate.

44.	Where do you set automatic correlation options?

- Automatic correlation from web point of view, can be set in recording options and correlation tab. Here we can enable correlation for the entire script and choose either issue online messages or offline actions, where we can define rules for that correlation. Automatic correlation for database, can be done using show output window and scan for correlation and picking the correlate query tab and choose which query value we want to correlate. If we know the specific value to be correlated, we just do create correlation for the value and specify how the value to be created.

45.	What is a function to capture dynamic values in the web vuser script?

- Web_reg_save_param function saves dynamic data information to a parameter.

title: User talk:Rajanyprasad


text:
Cookbook:Chupaqueso

Chupaquesos ("suck cheese") are a cheesy dish invented by Howard Tayler in his webcomic, Schlock Mercenary. The basic idea is to fry cheese until it reaches a rubbery consistency, then cover that rubbery layer with cheese and toppings, then fold it into a tube.

Ingredients

 * About 3 oz (85 g) shredded "shell" cheese (e.g. cheddar)
 * About 1 oz (28 g) shredded "filler" cheese (e.g. parmesan, Monterey Jack)
 * Example toppings:
 * Bacon
 * Chopped cold cuts
 * Banana peppers
 * Chili peppers
 * Marinated mushrooms
 * Marinara sauce

Procedure

 * 1) In a medium-large non-stick or cast-iron skillet, sprinkle the "shell" cheese evenly. It will melt and bubble, and eventually form a layer of cheese.
 * 2) Once the underside is orange or brown colored, flip it over.
 * 3) Sprinkle the filler cheese down the middle, and put whatever toppings you want down the middle.
 * 4) Fold the shell over, and let it cook long enough to melt the filler cheese if desired.
 * 5) Serve and eat right away.

Notes, tips, and variations

 * It's advisable to get the toppings ready in advance—it's a time-critical procedure once the cheese is flipped.

title: Cookbook:Chupaqueso


text:
User talk:Limetom

Hello and welcome to Wikibooks!

Here are some tips to help you get started:
 * You should sign your name on Talk and vote pages using four tildes, like this: ~~~~.
 * Remember to conduct any editing experiments in the sandbox.
 * If you're a Wikipedian, see Wikibooks for Wikipedians for a primer on how things work here (it's a little different).
 * If you want to base your work here on materials from Wikipedia, please use WB:RFI to bring the material over in compliance with the GFDL.
 * If you're an instructor and plan on using wikibooks for a class project, see Guidelines for class projects
 * Please say hello at the Staff Lounge with any questions or ideas.
 * Eventually, you might want to read the Manual of Style and Policies and Guidelines.
 * Please take a look at Naming policy before starting a new book.
 * Remember to maintain a Neutral point of view.
 * Explore, be bold in editing pages, and have fun!

You will find more resources in Community Portal. If you want to ask a question, visit the Study help desk, the Staff lounge, IRC channel or ask me personally on my talk page. For site news, see the Bulletin board. It might be an idea if you add this page to your "watchlist" so that you can see when any new information is posted there.

Good luck! -- Herby talk thyme 13:06, 18 January 2007 (UTC)

title: User talk:Limetom


text:
User talk:Ebbe

Hello and welcome to Wikibooks!

Here are some tips to help you get started:
 * You should sign your name on Talk and vote pages using four tildes, like this: ~~~~.
 * Remember to conduct any editing experiments in the sandbox.
 * If you're a Wikipedian, see Wikibooks for Wikipedians for a primer on how things work here (it's a little different).
 * If you want to base your work here on materials from Wikipedia, please use WB:RFI to bring the material over in compliance with the GFDL.
 * If you're an instructor and plan on using wikibooks for a class project, see Guidelines for class projects
 * Please say hello at the Staff Lounge with any questions or ideas.
 * Eventually, you might want to read the Manual of Style and Policies and Guidelines.
 * Please take a look at Naming policy before starting a new book.
 * Remember to maintain a Neutral point of view.
 * Explore, be bold in editing pages, and have fun!

You will find more resources in Community Portal. If you want to ask a question, visit the Study help desk, the Staff lounge, IRC channel or ask me personally on my talk page. For site news, see the Bulletin board. It might be an idea if you add this page to your "watchlist" so that you can see when any new information is posted there.

Good luck! -- Herby talk thyme 13:06, 18 January 2007 (UTC)

title: User talk:Ebbe


text:
User talk:Sadler721

Hello and welcome to Wikibooks!

Here are some tips to help you get started:
 * You should sign your name on Talk and vote pages using four tildes, like this: ~~~~.
 * Remember to conduct any editing experiments in the sandbox.
 * If you're a Wikipedian, see Wikibooks for Wikipedians for a primer on how things work here (it's a little different).
 * If you want to base your work here on materials from Wikipedia, please use WB:RFI to bring the material over in compliance with the GFDL.
 * If you're an instructor and plan on using wikibooks for a class project, see Guidelines for class projects
 * Please say hello at the Staff Lounge with any questions or ideas.
 * Eventually, you might want to read the Manual of Style and Policies and Guidelines.
 * Please take a look at Naming policy before starting a new book.
 * Remember to maintain a Neutral point of view.
 * Explore, be bold in editing pages, and have fun!

You will find more resources in Community Portal. If you want to ask a question, visit the Study help desk, the Staff lounge, IRC channel or ask me personally on my talk page. For site news, see the Bulletin board. It might be an idea if you add this page to your "watchlist" so that you can see when any new information is posted there.

Good luck! -- Herby talk thyme 13:06, 18 January 2007 (UTC)

title: User talk:Sadler721


text:
User talk:Film8ker~enwikibooks

Hello and welcome to Wikibooks!

Here are some tips to help you get started:
 * You should sign your name on Talk and vote pages using four tildes, like this: ~~~~.
 * Remember to conduct any editing experiments in the sandbox.
 * If you're a Wikipedian, see Wikibooks for Wikipedians for a primer on how things work here (it's a little different).
 * If you want to base your work here on materials from Wikipedia, please use WB:RFI to bring the material over in compliance with the GFDL.
 * If you're an instructor and plan on using wikibooks for a class project, see Guidelines for class projects
 * Please say hello at the Staff Lounge with any questions or ideas.
 * Eventually, you might want to read the Manual of Style and Policies and Guidelines.
 * Please take a look at Naming policy before starting a new book.
 * Remember to maintain a Neutral point of view.
 * Explore, be bold in editing pages, and have fun!

You will find more resources in Community Portal. If you want to ask a question, visit the Study help desk, the Staff lounge, IRC channel or ask me personally on my talk page. For site news, see the Bulletin board. It might be an idea if you add this page to your "watchlist" so that you can see when any new information is posted there.

Good luck! -- Herby talk thyme 13:12, 18 January 2007 (UTC)

MMM pages & naming
Hi - I notice that you have created some new pages for MMM which look interesting. I actually don't know the answer to this myself but the pages might be named Movie Making Manual/DV/Contents rather than the way you have it. I don't see it as a real issue but worth a thought now rather than later (BTW nothing need be lost - pages can be "moved" to the new name). Let me know if I can help - regards -- Herby talk thyme 13:12, 18 January 2007 (UTC)

Convention
I had thought of making it a separate book, but I think it would be best to include it in the MMM umbrella. To that end, I was just trying to maintain the naming convention as it appeared to be used in MMM thus far. I have no vested interest in either naming convention as long as it's consistent. I am wading my way through these thick waters so I'll leave the decision to people who know more about how the mechanics of this site work. What do you think should be done?

--Film8ker 19:49, 18 January 2007 (UTC)
 * Hi Chris - that is a pity - I was hoping you would have a clear view . I'll give it some thought and maybe ask around myself - as I say, nothing will be lost if a "move" is better in the end (even to  a separate book.  I'll get back to you if/when I have a bright idea - regards -- Herby  talk thyme 19:08, 18 January 2007 (UTC)

I'm starting another book about roulette, and according to the naming convention page (http://en.wikibooks.org/wiki/Wikibooks:Naming_policy) we should be using the slashes. I say we should migrate the whole MMM to the slash system if that's the convention.

--Film8ker 19:49, 18 January 2007 (UTC)

 * -I'll take a look but I think almost all MMM is changed to the / system (I know I did some myself). What is the next book on?  BTW can you sign you posts (on talk pages, or where others do) use --~ (its on the toolbar of the editor if you have .js on).  Offline now for a few hours - Cheers -- Herby  talk thyme 19:35, 18 January 2007 (UTC)

 * -Server has been down I think so little time at pres. With some thought now - how about MMM-DV/ as a naming policy? It connects it with MMM while leaving some separation (as there should be looking at the pages concerned.  If you need a hand let me know (or want to talk it thro)  Cheers -- Herby  talk thyme 14:40, 19 January 2007 (UTC)

 * -I would appreciate the assistance. Film8ker 23:15, 25 January 2007 (UTC)

OK - looks like you did it and it looks fine. Regards -- Herby talk thyme 13:24, 26 January 2007 (UTC)
 * reset

New Book Help
I'm creating a new book on Roulette. The guide is a little ambiguous as to how to add the bood to the bookshelf and how to use the new wikibook template. All I was able to figure out how to do was add a suggestion to the bookshelf. Have I done everything I need to?

Film8ker 01:23, 19 January 2007 (UTC)

Your account will be renamed
Hello,

The developer team at Wikimedia is making some changes to how accounts work, as part of our on-going efforts to provide new and better tools for our users like cross-wiki notifications. These changes will mean you have the same account name everywhere. This will let us give you new features that will help you edit and discuss better, and allow more flexible user permissions for tools. One of the side-effects of this is that user accounts will now have to be unique across all 900 Wikimedia wikis. See the announcement for more information.

Unfortunately, your account clashes with another account also called Film8ker. To make sure that both of you can use all Wikimedia projects in future, we have reserved the name Film8ker~enwikibooks that only you will have. If you like it, you don't have to do anything. If you do not like it, you can pick out a different name.

Your account will still work as before, and you will be credited for all your edits made so far, but you will have to use the new account name when you log in.

Sorry for the inconvenience.

Yours, Keegan Peterzell Community Liaison, Wikimedia Foundation 23:10, 17 March 2015 (UTC)

Renamed
 This account has been renamed as part of single-user login finalisation. If you own this account you can |log in using your previous username and password for more information. If you do not like this account's new name, you can choose your own using this form after logging in: . -- Keegan (WMF) (talk) 04:59, 19 April 2015 (UTC)

title: User talk:Film8ker~enwikibooks


text:
Wikibooks:Requests for deletion/Trinidadian English

Trinidadian English
Marked for speedy as a GFDL copyvio of a wikipedia article, which it is, but appears to have had at least some work done to it since. Apparently a copy of an article that was deleted then reposted on wikipedia, see List of Trinidadian English terms. I recommend adding a query on the article's talk page before deleting. -- SB_Johnny | talk 03:10, 17 December 2006 (UTC)

 * Comment: It is valid, I randomly googled about 20 of the words and they all came up as being Trinidadian English. This isn't a book, but could it be? --Elaragirl 00:41, 22 December 2006 (UTC)
 * Well, it was marked for speedy as a GFDL copyvio, not because of the content. It was copied before the days of import, and apparently we're missing the early edits. (By that measure the current wikipedia article is also copyvio). We could try to get an admin to undelete the early stuff and import it now, if there were substantial revisions before the one that was copied. -- SB_Johnny | talk 01:07, 22 December 2006 (UTC)
 * I recuse myself from the discussion as I originally tagged the article as a candidate for speedy deletion. --Iamunknown 01:32, 22 December 2006 (UTC)
 * What if I rewrote the whole thing? --Elaragirl 21:05, 28 December 2006 (UTC)
 * Sure, you could give that a shot. --Swift 16:47, 2 January 2007 (UTC)

 * Transwiki to Wiktionary - this is just a syllabary and nothing more, and in fact a violation of WB:WIW. Wiktionary does allow (I've worked on some stuff moved there from Wikibooks like this) some "categories" and other project pages to keep a link like this, and add some of these works into that project.  It would certainly take a slightly different form that current exists here, but it is something that would be interesting to add to the depth that already exists on that sister project. --Rob Horning 08:08, 2 January 2007 (UTC)
 * Transwiki, as per Rob Horning, unless this gets properly rewritten as a wikibook. --Swift 16:47, 2 January 2007 (UTC)
 * Transwiki as with the above comments. Xania [[Image:Flag_of_Poland_2.svg|15px]]talk 13:11, 7 January 2007 (UTC)
 * Though I recused myself from the discussion, I would like to point out the reason I originally tagged this page for speedy deletion. It is in violation of the GFDL. It specifically was a copy-and-paste version, with minor edits, of either the 2006-08-05 or 2006-08-09 revision of List of Trinidadian English terms, probably as fork in case the content got deleted at w:Wikipedia:Articles for deletion/List of Trinidadian English terms (second nomination). It was copied without the edit history as required to be legal under the Wikipædia's GDFL license. Just food for thought — User:Iamunknown 13:22, 7 January 2007 (UTC)
 * Well, we can always import "after the fact" and restore to reflect the modifications here. -- SB_Johnny | talk 19:32, 7 January 2007 (UTC)
 * Up to which revision would you import? From my own analysis, it could have been either the 2006-08-10 or the 2006-08-05 revision that User:Grika copied from. The only difference between the two is that w:User:Mailer Diablo removed the afd header as he closed the afd discussion. I know this is incredibly nit-picky, but I want the GFDL copyright issues to be infallible. I don't think we can do that in this case — User:Iamunknown 07:49, 8 January 2007 (UTC)
 * Comment. I dont think we even need to get that tricky. We could simply post a note that says the page originally came from wikipedia, that the orignal authors of the page are located on that project, and that technical issues prevent the history pages from accurately describing the pages edit history. --Whiteknight (talk) (projects) 18:50, 12 January 2007 (UTC)
 * If it is kept by an informed consensus even though, if you think my arguments are valid, it is in violation of the GFDL, and we do not decide to back-import the texts, then I would feel more comfortable with copying and pasting the history (with a prose note about its complicated history) to a talk sub-page and then posting something a link on the talk page. Its not really technical issues — it's circumstantial issues — User:Iamunknown 20:10, 12 January 2007 (UTC)


text:
User talk:Iamunknown/Thinktank/Staff lounge

There is plenty of talk now about consolidating the various "get help" pages (VIP, AN, etc) into a single centralized help page. If we do this, it would be an excellent first-step in sorting out the staff-lounge discussion. Essentially, we could use the staff-lounge as a high-visibility disambiguation page, and we could splinter off into topic-specific rooms (although I would favor a minimum number of such rooms). For instance, we could have:

 * Welcome to the staff lounge!
 * If you would like to request help from a staff member or administrator, see "Get Help Page".
 * If you would like to discuss site-wide issues please see "Staff Lounge/Wikibooks".
 * If you would like to share news with the community, see "Bulletin Board".
 * For general chat, see "Staff Lounge/Chat".
 * To post a complaint, an insult, or other negative message, press Ctrl+F5 and type your message into the box.

(The last part is a little joke, we probably won't include it). Either way, we would essentially break the staff lounge into 4 new destinations (which is better then 1, but not too many), two of which are likely to be on everybody's watchlists already. What do you think about this? --Whiteknight (talk) (projects) 14:09, 18 January 2007 (UTC)

 * One thing that we need to remember is that most of the posts on staff lounge aren't from newbies looking for help (although we do get those kinds of posts too). What the staff lounge is most used for is a discussion area for seasoned members to discuss changes and post news. We use it as a place to announce other discussions in other places (RfA, important VfD, policies, etc). We could likely keep the main staff lounge page reserved for such announcements ("a new discussion is happening at..."), and use other pages for the actual discussions. That should help the process of keeping all the information centralized, but not overloading staff-lounge with all the actual discussion text. --Whiteknight (talk) (projects) 19:13, 18 January 2007 (UTC)

Time for discussion
One of the key things about the process on Wikibooks, and something I hope we don't lose, is that we tend to take a bit more time to discuss issue in comparison to say Wikipedia. I hope that this is something that continues.

The proposal to try and split up the Staff Lounge into seperate areas, such as "Policy", "News", "Inter-project cooperation", and "Book development" might be a good idea for this reason alone. Certainly the Staff Lounge has become quite active and it is becoming increasingly important to try and clear out old discussions just so you aren't overwhelmed when you turn there.

Another alternative that could be done for especially larger discussions is to have that entire discussion moved to a sub-page for itself, with a link prominent on the "top" of the main Staff Lounge page. This would be done (for now) on an ad-hoc basis, and mainly for the more controversial topics, especially those that seem to be a recurring theme of discussion.

At this point what really needs to happen is for somebody to simply be bold and make the changes to the Staff Lounge. I don't see any major opposition to trying to do some reform, and discussion have been held in the past for trying to come up with some sort of archiving policy/procedure to help clean out some of the cruft. I don't think we are quite at the stage, however, of using a 'bot for doing the cleaning. --Rob Horning 16:49, 18 January 2007 (UTC)

Another direction
Look at what I've outlined here [User:Iamunknown/Staff_lounge#Approaching_from_a_different_angle] and try and match it to what we already have - AN, SL, Study Help desk and I would like to get in aspects of RFC. Any good? -- Herby talk thyme 18:12, 18 January 2007 (UTC)


text:
Spanish/Print version

= Spanish =

= Main Contents =
 * Introduction
 * Lesson one
 * Lesson two
 * Lesson three
 * Lesson four
 * Lesson five
 * Lesson six
 * Pronunciation
 * Contributors

= Introduction =

= Lesson one =

= Lesson two =

= Lesson three =

= Lesson four =

= Lesson five =

= Lesson six =

= Pronunciation =

= Contributors =

title: Spanish/Print version


text: Template:Haskell/Import Haskell wiki

title: Template:Haskell/Import Haskell wiki


text:
User talk:Bculley

Hello and welcome to Wikibooks!

Here are some tips to help you get started:
 * You should sign your name on Talk and vote pages using four tildes, like this: ~~~~.
 * Remember to conduct any editing experiments in the sandbox.
 * If you're a Wikipedian, see Wikibooks for Wikipedians for a primer on how things work here (it's a little different).
 * If you want to base your work here on materials from Wikipedia, please use WB:RFI to bring the material over in compliance with the GFDL.
 * If you're an instructor and plan on using wikibooks for a class project, see Guidelines for class projects
 * Please say hello at the Staff Lounge with any questions or ideas.
 * Eventually, you might want to read the Manual of Style and Policies and Guidelines.
 * Please take a look at Naming policy before starting a new book.
 * Remember to maintain a Neutral point of view.
 * Explore, be bold in editing pages, and have fun!

You will find more resources in Community Portal. If you want to ask a question, visit the Study help desk, the Staff lounge, IRC channel or ask me personally on my talk page. For site news, see the Bulletin board. It might be an idea if you add this page to your "watchlist" so that you can see when any new information is posted there.

Good luck! -- Herby talk thyme 15:59, 18 January 2007 (UTC)

title: User talk:Bculley


text:
Haskell/Libraries/Arrays

Haskell'98 supports just one array constructor type, namely Array, which gives you immutable boxed arrays. "Immutable" means that these arrays, like any other pure functional data structure, have contents fixed at construction time. You can't modify them, only query. There are "modification" operations, but they just return new arrays and don't modify the original one. This makes it possible to use Arrays in pure functional code along with lists. "Boxed" means that array elements are just ordinary Haskell (lazy) values, which are evaluated on demand, and can even contain bottom (undefined) value. You can learn how to use these arrays at http://haskell.org/tutorial/arrays.html and I'd recommend that you read this before proceeding to the rest of this page.

Nowadays the main Haskell compilers, GHC and Hugs, ship with the same set of Hierarchical Libraries, and these libraries contain a new implementation of arrays which is backward compatible with the Haskell'98 one, but which has far more features. Suffice it to say that these libraries support 9 types of array constructors: Array, UArray, IOArray, IOUArray, STArray, STUArray, DiffArray, DiffUArray and StorableArray. It is no wonder that the array libraries are a source of so much confusion for new Haskellers. However, they are actually very simple - each provides just one of two interfaces, and one of these you already know.

Immutable arrays
The first interface provided by the new array library, is defined by the typeclass IArray (which stands for "immutable array" and defined in the module ) and defines the same operations that were defined for Array in Haskell '98. Here's a simple example of its use that prints :

The big difference is that it is now a typeclass and there are 4 array type constructors, each of which implements this interface: Array, UArray, DiffArray, and DiffUArray. We will later describe the differences between them and the cases when these other types are preferable to use instead of the good old Array. Also note that to use Array type constructor together with other new array types, you need to import Data.Array.IArray module instead of Data.Array.

Mutable IO arrays
The second interface is defined by the type class MArray (which stands for "mutable array" and is defined in the module ) and contains operations to update array elements in-place. Mutable arrays are very similar to IORefs, only they contain multiple values. Type constructors for mutable arrays are IOArray and IOUArray (in ) and operations which create, update and query these arrays all belong to the IO monad:

This program creates an array of 10 elements with all values initially set to 37. Then it reads the first element of the array. After that, the program modifies the first element of the array and then reads it again. The type declaration in the second line is necessary because our little program doesn't provide enough context to allow the compiler to determine the concrete type of.

Mutable arrays in ST monad
In the same way that IORef has its more general cousin STRef, IOArray has a more general version STArray (and similarly, IOUArray is parodied by STUArray; both defined in ). These array types allow one to work with mutable arrays in the ST monad:

Believe it or not, now you know all that is needed to use any array type. Unless you are interested in speed issues, just use Array, IOArray and STArray where appropriate. The following topics are almost exclusively about selecting the proper array type to make programs run faster.

Freezing and thawing
Haskell allows conversion between immutable and mutable arrays with the freeze and thaw functions:

For instance, the following converts an Array into an STArray, alters it, and then converts it back:

Freezing and thawing both copy the entire array. If you want to use the same memory locations before and after freezing or thawing but can allow some access restrictions, see the section Unsafe operations and running over array elements.

DiffArray
As we already stated, the update operation on immutable arrays (IArray) just creates a new copy of the array, which is very inefficient, but it is a pure operation which can be used in pure functions. On the other hand, updates on mutable arrays (MArray) are efficient but can be done only in monadic code. DiffArray (defined in ) combines the best of both worlds - it supports the IArray interface and therefore can be used in a purely functional way, but internally it uses the efficient update of MArrays.

How does this trick work? DiffArray has a pure external interface, but internally it is represented as a reference to an IOArray.

When the '//' operator is applied to a diff array, its contents are physically updated in place. The old array silently changes its representation without changing the visible behavior: it stores a link to the new current array along with the difference to be applied to get the old contents. So if a diff array is used in a single-threaded style, that is, after '//' application the old version is no longer used, then  takes O(1) time and   takes O(n) time. Accessing elements of older versions gradually becomes slower. Updating an array which is not current makes a physical copy. The resulting array is unlinked from the old family. So you can obtain a version which is guaranteed to be current and thus has fast element access by performing the "identity update", .

The library provides two "differential" array constructors - DiffArray, made internally from IOArray, and DiffUArray, based on IOUArray. If you really need to, you can construct new "differential" array types from any 'MArray' types living in the 'IO' monad. See the module documentation for further details.

Usage of DiffArray doesn't differ from that of Array, the only difference is memory consumption and speed:

You can use 'seq' to force evaluation of array elements prior to updating an array:

Unboxed arrays
In most implementations of lazy evaluation, values are represented at runtime as pointers to either their value, or code for computing their value. This extra level of indirection, together with any extra tags needed by the runtime, is known as a box. The default "boxed" arrays consist of many of these boxes, each of which may compute its value separately. This allows for many neat tricks, like recursively defining an array's elements in terms of one another, or only computing the specific elements of the array which are ever needed. However, for large arrays, it costs a lot in terms of overhead, and if the entire array is always needed, it can be a waste.

Unboxed arrays (defined in ) are more like arrays in C - they contain just the plain values without this extra level of indirection, so that, for example, an array of 1024 values of type Int32 will use only 4 kb of memory. Moreover, indexing of such arrays can be significantly faster.

Of course, unboxed arrays have their own disadvantages. First, unboxed arrays can be made only of plain values having a fixed size -- Int, Word, Char, Bool, Ptr, Double and others (listed in the UArray class definition). You can even implement unboxed arrays yourself for other simple types, including enumerations. But Integer, String and any other types defined with variable size cannot be elements of unboxed arrays. Second, without that extra level of indirection, all of the elements in an unboxed array must be evaluated when the array is evaluated, so you lose the benefits of lazy evaluation. Indexing the array to read just one element will construct the entire array. This is not much of a loss if you will eventually need the whole array, but it does prevent recursively defining the array elements in terms of each other, and may be too expensive if you only ever need specific values. Nevertheless, unboxed arrays are a very useful optimization instrument, and I recommend using them as much as possible.

All main array types in the library have unboxed counterparts:

Array - UArray         (module Data.Array.Unboxed) IOArray - IOUArray     (module Data.Array.IO) STArray - STUArray     (module Data.Array.ST) DiffArray - DiffUArray (module Data.Array.Diff)

So, basically replacing boxed arrays in your program with unboxed ones is very simple - just add 'U' to the type signatures, and you are done! Of course, if you change Array to UArray, you also need to add "Data.Array.Unboxed" to your imports list.

StorableArray
A storable array is an IO-mutable array which stores its contents in a contiguous memory block living in the C heap. Elements are stored according to the class 'Storable'. You can obtain the pointer to the array contents to manipulate elements from languages like C.

It is similar to 'IOUArray' (in particular, it implements the same MArray interface) but slower. The advantage is that it's compatible with C through the foreign function interface. The memory addresses of storable arrays are fixed, so you can pass them to C routines.

The pointer to the array contents is obtained by 'withStorableArray'. The idea is similar to 'ForeignPtr' (used internally here). The pointer should be used only during execution of the 'IO' action returned by the function passed as argument to 'withStorableArray'.

If you want to use this pointer afterwards, ensure that you call 'touchStorableArray' AFTER the last use of the pointer, so that the array will be not freed too early.

Additional comments: GHC 6.6 should make access to a 'StorableArray' as fast as to any other unboxed array. The only difference between 'StorableArray' and 'UArray' will be that UArray lies in relocatable part of GHC heap while 'StorableArray' lies in non-relocatable part and therefore keep the fixed address, what allow to pass this address to the C routines and save it in the C data structures.

GHC 6.6 also adds 'unsafeForeignPtrToStorableArray' operation that allows to use any Ptr as address of 'StorableArray' and in particular work with arrays returned by C routines. Example of using this operation:

This example allocs memory for 10 Ints (which emulates array returned by some C function), then converts returned 'Ptr Int' to 'ForeignPtr Int' and 'ForeignPtr Int' to 'StorableArray Int Int'. It then writes and reads first element of array. At the end, memory used by array is deallocated by 'free' which again emulates deallocation by C routines. We can also enable automatic freeing of allocated block by replacing "newForeignPtr_ ptr" with "newForeignPtr finalizerFree ptr". In this case memory will be automatically freed after last array usage, as for any other Haskell objects.

The Haskell Array Preprocessor (STPP)
Using mutable arrays in Haskell (IO and ST ones) is not very handy. But there is one tool which adds syntax sugar and makes using of such arrays very close to that in imperative languages. It is written by Hal Daume III and you can get it as http://hal3.name/STPP/stpp.tar.gz

Using this tool, you can index array elements in arbitrary complex expressions with just "arr[|i|]" notation and this preprocessor will automatically convert such syntax forms to appropriate calls to 'readArray' and 'writeArray'. Multi-dimensional arrays are also supported, with indexing in the form "arr[|i|][|j|]". See further descriptions at http://hal3.name/STPP/

ArrayRef library
The ArrayRef library reimplements array libraries with the following extensions:

 * dynamic (resizable) arrays
 * polymorphic unboxed arrays

It also adds syntax sugar what simplifies arrays usage. Although not so elegant as with STPP, it's on other hand implemented entirely inside Haskell language, without any preprocessors.

Unsafe operations and running over array elements
As mentioned above, there are operations that converts between mutable and immutable arrays of the same type, namely 'freeze' (mutable → immutable) and 'thaw' (immutable → mutable). These copy the entire array. If you are sure that a mutable array will not be modified or that an immutable array will not be used after the conversion, you can use unsafeFreeze/unsafeThaw instead - these operations convert array in-place if input and resulting arrays have the same memory representation (i.e. the same type and boxing). Please note that "unsafe*" operations modifies memory - they sets/clears flag in array header which tells about array mutability. So these operations can't be used together with multi-threaded access to array (using threads or some form of coroutines).

There are also operations that converts unboxed arrays to another element type, namely castIOUArray and castSTUArray. These operations rely on actual type representation in memory and therefore there is no any guarantees on their results. In particular, these operations can be used to convert any unboxable value to the sequence of bytes and vice versa, f.e. it's used in AltBinary library to serialize floating-point values. Please note that these operations don't recompute array bounds according to changed size of elements. You should do it yourself using 'sizeOf' operation!

While arrays can have any type of indexes, internally any index after bounds checking is converted to plain Int value (position) and then one of low-level operations, unsafeAt, unsafeRead, unsafeWrite, is used. You can use these operations yourself in order to outpass bounds checking and make your program faster. These operations are especially useful if you need to walk through entire array:

"unsafe*" operations in such loops are really safe because 'i' loops only through positions of existing array elements.

Parallel arrays (module GHC.PArr)
As we already mentioned, array library supports two array varieties - lazy boxed arrays and strict unboxed ones. Parallel array implements something intervening - it's a strict boxed immutable array. This keeps flexibility of using any data type as array element while makes both creation and access to such arrays much faster. Array creation implemented as one imperative loop that fills all array elements, while access to array elements don't need to check "box". It should be obvious that parallel arrays are not efficient in cases where calculation of array elements are rather complex and you will not use most of array elements. One more drawback of practical usage is that parallel arrays don't support IArray interface which means that you can't write generic algorithms which work both with Array and parallel array constructor.

Like many GHC extensions, this is described in a paper: An Approach to Fast Arrays in Haskell, by Manuel M. T. Chakravarty and Gabriele Keller.

You can also look at sources of GHC.PArr module, which contains a lot of comments.

Special syntax for parallel arrays is enabled by "ghc -fparr" or "ghci -fparr" which is undocumented in user manual of GHC 6.4.1.

Welcome to the machine
Array#, MutableArray#, ByteArray#, MutableByteArray#, pinned and moveable byte arrays

GHC heap contains two kinds of objects - some are just byte sequences, other contains pointers to other objects (so called "boxes"). These segregation allows to find chains of references when performing garbage collection and update these pointers when memory used by heap is compacted and objects are moved to new places. Internal (raw) GHC's type Array# represents a sequence of object pointers (boxes). There is low-level operation in ST monad which allocates array of specified size in heap, its type is something like (Int -> ST s Array#). The Array# type is used inside Array type which represents boxed immutable arrays.

There is a different type for mutable boxed arrays (IOArray/STArray), namely MutableArray#. Separate type for mutable arrays required because of 2-stage garbage collection mechanism. Internal representation of Array# and MutableArray# are the same excluding for some flags in header and this make possible to on-place convert MutableArray# to Array# and vice versa (this is that unsafeFreeze and unsafeThaw operations do).

Unboxed arrays are represented by the ByteArray# type. It's just a plain memory area in the heap, like the C's array. There are two primitive operations that creates a ByteArray# of specified size - one allocates memory in normal heap and so this byte array can be moved each time when garbage collection occurs. This prevents converting of ByteArray# to plain memory pointer that can be used in C procedures (although it's still possible to pass current ByteArray# pointer to "unsafe foreign" procedure if it don't try to store this pointer somewhere). The second primitive allocates ByteArray# of specified size in "pinned" heap area, which contains objects with fixed place. Such byte array will never be moved by GC so it's address can be used as plain Ptr and shared with C world. First way to create ByteArray# used inside implementation of all UArray types, second way used in StorableArray (although StorableArray can also point to data, allocated by C malloc).

There is also MutableByteArray# type what don't had much difference with ByteArray#, but GHC's primitives support only monadic read/write operations for MutableByteArray#, and only pure reads for ByteArray#, plus unsafeFreeze/unsafeThaw operations that changes appropriate fields in headers of this arrays. This differentiation don't make much sense except for additional safety checks.

So, pinned MutableByteArray# or C malloced memory used inside StorableArray, unpinned MutableByteArray# used inside IOUArray and STUArray, and unpinned ByteArray# are used inside UArray.

Both boxed and unboxed arrays API are almost the same:

marr <- alloc n           - allocates mutable array with given size arr <- unsafeFreeze marr  - converts mutable array to immutable one marr <- unsafeThaw arr    - converts immutable array to mutable one x   <- unsafeRead marr i  - monadic reading of value with given index from mutable array unsafeWrite marr i x      - monadic writing of value with given index from mutable array let x = unsafeAt arr i    - pure reading of value with given index from immutable array (all indexes are counted from 0)

Based on these primitive operations, the arrays library implements indexing with any type and with any lower bound, bounds checking and all other high-level operations. Operations that creates/updates immutable arrays just creates them as mutable arrays in ST monad, make all required updates on this array and then use unsafeFreeze before returning array from runST. Operations on IO arrays are implemented via operations on ST arrays using stToIO operation.

Mutable arrays and GC
GHC implements 2-stage GC which is very fast - minor GC occurs after each 256 kb allocated and scans only this area (plus recent stack frames) when searching for a "live" data. This solution uses the fact that usual Haskell data are immutable and therefore any data structures that was created before previous minor GC can't point to the data structures created after this GC (due to immutability data can contain only "backward" references).

But this simplicity breaks when we add to the language mutable boxed references (IORef/STRef) and arrays (IOArray/STArray). On each GC, including minor ones, each element in mutable data structures should be scanned because it may be updated since last GC and now point to the data allocated since last GC.

For programs that contains a lot of data in mutable boxed arrays/references GC times may easily outweigh useful computation time. Ironically, one of such programs is GHC itself. Solution for such programs is to add to cmdline option like "+RTS -A10m" which increases size of minor GC chunks from 256 kb to 10 mb, i.e. makes minor GC 40 times less frequent. You can see effect of this change using "+RTS -sstderr" option - "%GC time" should significantly decrease.

There is a way to include this option into your executable so it will be used automatically on each execution - you should just add to your project C source file that contains the following line:

char *ghc_rts_opts = "-A10m";

Of course, you can increase or decrease this value according to your needs.

Increasing "-A" value don't comes for free - aside from obvious increasing of memory usage, execution times (of useful code) will also grow. Default "-A" value tuned to be close to modern CPU cache sizes that means that most of memory references are fall inside the cache. When 10 mb of memory are allocated before doing GC, this data locality is no more holds. So, increasing "-A" can either increase or decrease program speed, depending on its nature. Try various settings between 64 kb and 16 mb while running program with "typical" parameters and try to select a best setting for your concrete program and cpu combination.

There is also another way to avoid increasing GC times - use either unboxed or immutable arrays. Also note that immutable arrays are build as mutable ones and then "freezed", so during the construction time GC will also scan their contents.

Hopefully, GHC 6.6 fixed the problem - it remembers what references/arrays was updated since last GC and scans only them. You can suffer from the old problems only in the case when you use very large arrays.

Further information:
 * RTS options to control the garbage collector
 * Problem description by Simon Marlow and report about GHC 6.6 improvements in this area
 * Notes about GHC garbage collector
 * Papers about GHC garbage collector

title: Haskell/Libraries/Arrays


text:
User talk:65.18.94.197

Thanks for experimenting with Wikibooks. Your test worked, and has now been removed. Please use Sandbox for any other tests you want to do, since testing material in modules will normally be removed quickly. Please see the welcome page if you would like to learn more about contributing to our project. Thanks. -- Herby talk thyme 17:07, 18 January 2007 (UTC)

title: User talk:65.18.94.197


text: Category:Cocktails with cachaça

title: Category:Cocktails with cachaça


text:
User talk:204.38.129.10

Welcome to Wikibooks. We invite everyone to contribute constructively to our collection. Take a look at the welcome page if you would like to learn more about contributing. However, unconstructive edits are considered vandalism, and if you continue in this manner you may be blocked from editing without further warning. Please stop, and consider improving rather than damaging the hard work of others. Thanks. -- Herby talk thyme 18:15, 18 January 2007 (UTC)

'''OK - now you are being annoying. I see you are blocked for six months for persistent vandalism on Wikipedia. If you make further contributions of vandal pages here I promise you you will be blocked here too -- Herby talk thyme 18:30, 19 January 2007 (UTC)'''

Carrying out my promise - you are blocked -- Herby talk thyme 18:25, 22 January 2007 (UTC)

Written by Anonymous User: ''The vandalism wasn't me; I'm using someone else's computer and they no longer use internet. 3:28 PM EST -5GMT

Hum - interesting given that it is a school IP address - you have been warned and your edits will be watched -- Herby talk thyme 19:37, 2 March 2007 (UTC)

title: User talk:204.38.129.10


text:
User talk:86.151.216.4

Welcome to Wikibooks. We invite everyone to contribute constructively to our collection. Take a look at the welcome page if you would like to learn more about contributing. However, unconstructive edits are considered vandalism, and if you continue in this manner you may be blocked from editing without further warning. Please stop, and consider improving rather than damaging the hard work of others. Thanks. -- Herby talk thyme 18:27, 18 January 2007 (UTC)

title: User talk:86.151.216.4


text:
Wikibooks:Arbitration/Panic2k4 vs. SBJohnny/Defendant Rebuttal

Panic
I have now given enough information on where I stand and what I defend, on this arbitration and in any of my actions I don't see myself represented in any of the accusations, I don't have any history of "disruptive behavior" even if some users have that idea, it is without basis.

I don't see "reverting" as an aggressive act while it doesn't involve the "destruction" of content (if not spam). I have been reverted many times before and during the arbitration and will probably see my edits reverted in the future, I have no problem with it and if I had I would address the users that did the reversions if I don't see a reason for it.

I have no difficulty and I'm even accustomed to work with others, but I grant you that a few users had a problem with my view for my work here and in all these years of active involvement on Wikibooks you have now a good idea on how many disagreements I had. (2, Paddu and Darklama)

I have been a good contributor to Wikibooks and I object having Darklama's problems in working with me stated as my problems, Darklama's has violated several policies and guidelines and even legal impositions and my civility on dealing and engaging the user in discussion is portrayed as my inability to deal with others, nothing could be more far from the truth as can be attested by the number of contributors to the books I work on clearly demonstrate.

My actions on Wikibooks do speak for themselves if the reader takes the chance to examine them, but I do not agree that any other cause or past event should be used to validate the reasons for the block that brought us to this Arbitration.

I have taken the time to provide the reader some information on the background since the accusation seems to imply that it had a bearing on its actions.

Paddu
As I stated before the attempt to involve Paddu in this discussion (that has nothing directly related with the C++ Book) was (as I tried to hint in my colorful illustration, the involvement of North Korea on the fight against terrorism) wrong, as the subjects and events of my divergence with Paddu don't have any bearing or prove any of the points the accusation tries to validate, they were of importance and significance but the Wikibooks community failed to provide a viable solution at the time, I found one and took the chance to make use of it and so ended that dispute, as Paddu can and will confirm if asked, he was not actively contributing to the book in question (there were contributions made by him but he had stopped contributing content long before I started), I even recognize the right of precedence to Paddu, since he was there before I came (this isn't generally recognized in Wikibooks or at least they recently aren't), Paddu's divergence with me was on the format and scope of the book (even the actual forking proposal does state that they can be a base for a fork), I was adding content that Paddu thought shouldn't be on the book and I was using a format he didn't like (I was using a monolithic approach much like Darklama merge of several pages on a single one), this facilitated me to provide the book a better flow and order, since I started working on it, Paddu did not add any content and was only defending his vision for the work, even after the fork the original work stalled (I and a few others were the only ones contributing actively to it), at that time and after a few structural changes to the original book (some of the content I added and changes were approved by Paddu, he stopped using Wikibooks).

Paddu was also involved at the time in other Wikibooks discussions, policy and general improvements and in helping new users, I don't see as the fork was the bases for Paddu to quit Wikibooks but I can understand as it being a factor on his decision(you have to ask him that), I never tried to engage Paddu since he had stated he did not had the time or disposition to add content to any of the books. (and the "fork" solution was only taken because we were actively reverting each others changes, I take the blame for the "fork" as that was the only solution viable at the time, and it worked, all this can be gathered form the history files or by directly asking any me or Paddu about it)

The resulting work or "the forked" (Programming:C -/- -/-) continued it's evolution on his own namespace with several users participating actively on it up to the forced merge, the general community (or some admins if you prefer) at the time took into themselves to force the merge, even against what I consider a proper approval of the decision to force a merge, I took the time to fight the merge (I was the only of both books communities, if you like) even taking care to defend Paddu's view points and different intentions for the original book since he wasn't present at the time (can't remember if I did send him a email or not, I think I did). (I also take this time to correct the stated page history problem, there isn't one, a fork is an independent version of a work the history logs don't need to be merged, the only need is to give credit to the original work and authors, it was and it is still maintained after the merge, some credits are given to the "forked" version since the result of the merge substituted the original work and the "fork" was deleted)

More, Paddu's involvement was clearly an attempt to provide more fodder and bases to validate wrongful actions, this is simply too clear as the only persons contacted by the other party were the ones they saw has having a problem with me, in this case they were wrong my problem with Paddu ended after the fork, I did not engage the user or performed any action on the "original" work after it, I and Paddu didn't like the solution but it did solve our problems, at the time as I wasn't interested in debating simple change as was happening, I was more interested in adding content to the books, I see the creation of disputes as the primary factor to reduce my creative contribution to the projects I'm involved and a major reason of frustration to any user, that is why I can comprehend Darklama's stance on the problem and it was that point that did get me a bit angry in seeing the other user getting pulled into our divergence, since the "forced" merge I have taken the time to become more involved with the community to try to address some of it's structural problems and so I have carefully addressed Darklama's actions and proposals in a very civil and contained way.

If Paddu has some points that he thinks should be addressed he is free to propose/request any change and if there is a need to restore any pages histories please don't blame me or any of my actions, check how the merge was performed, 90% is a simple move of my "forked" version, I did not initiate the merge (I did help with the moving of some pages as requested, but not the main talk or other primary sections of the work), I never stopped working on it since I've started, I did at least one edit a week.

So it seems to me clear that the if the accusation didn't already know this facts, it didn't spend any time finding about them, it is also clear on the last statement by SB_Johnny, he doesn't have a good understanding on what did happen at that time (the fork), and on the evolution/history of the book or even a unbiased understanding on Darklama's actions, even so, he claims to be acting on his interpretations those events, events that don't have nothing to do with the actual problem(s) he indicated as being addressing and are stated on the block logs and seem to be now the base of the accusation.

Blocks
The accusation bases all the blocks in my inability to be civil even if the Be civil has a very high degree of interpretations, I have so far proven that I never violated the core premise of the policy, that is to respect my neighbors and keep being civil and the accusation fails to prove that point.

All the blocks were made without properly addressing the Blocking Policy, I'm not a vandal, I did not engage in actively reverting pages, I did not break any policy (even if I did the policy clearly states "Admins should only do this as a last resort - efforts to educate must be made first, followed by warnings." this was not followed and blocks were done on the spot) and finally I'm not a troublemaker and I'm contributing to Wikibooks goals that is a particular factor for me being still here defending what I think should be corrected and avoided in the future. Even the timeout of the block is a clear abuse of the policy as an active vandal is given only a 24h block, more, the policy clearly states that "Use of blocks to gain advantage in a content dispute is prohibited." (I have demonstrated that there is a clear convergence or cooperation with the users SBJohnny and Darklama)

I have provided extensive information on the several blocks events, as the accusation sees them as a chain of events that lead to its final action and the one that resulted in this arbitration, I think it is now obvious that the action was (failing other description) "abusive".

Since the accusation fails to correct any of his assertions, I must again clearly state that user James Dennet was not a new user, he is only an unexperienced user to Wikibooks, he has been collaborating here almost as long as I.

The charges

 * " If repeated often enough, a lie will become the new truth. "
 * Paul Joseph Goebbles, Minister of Propaganda, Nazi Germany

All these lies may now be considered facts, but factual truths can prove all to be myths. I think I have already provided enough proof to refute any of the facts taken as justification for the charges made against me. On the other hand no proof was presented so far that would validate any of the charges, or to change my mind on my request for the removal of the block, the arbitration even provided some actions and facts that I now seen in a new and darker light.

SB_Johnny & Darklama
It is now clear that there is convergence, cooperation and coordination between the users SBJohnny and Darklama, I made some assumptions and since no rebuttal addressed those interpretations or the facts I brought so far to the reader attention, it is still one of the points that must be granted greater attention.

All that I have to say to the accusation I have already stated and the accusation did not provide any new evidence or information that I need to address. There was a small shift on the accusation to the Paddu event I think I have now cleared up. They are in complete agreement as was expected and the actions indicate, it's with some dismay that I can't understand why SBJohnny took this path as even if he was misinformed he should have taken the time to get a better understanding of the problem or just excused himself from taking action on this way, after the second block I made clear to SBJohnny that I had the right to and would address any action I took as unfair.

Closing Words
A Wikibookian few "possessions" or traits include his reputation, his contributions log and other permanent logs of his activities, that includes the users block log, this is the yard stick by one is judged and recognized by his pears.

Reputation is very volatile thing and is built on how others perceive events or take the time to check the facts it is the most easy way to cause damage to another user and the most hard to correct and only time and or the ever changing community can restore, permanent logs are forever, not even time will fix them, that is why so much trouble was taken in making clear to administrators to use the block function with especial attention and that it should only be used in extreme situations as is clearly stated in MediaWiki Administrator's Handbook/User Block, so, since I consider that the blocking action that generated this arbitration was not fair and even broke the Assume_good_faith in regards to my actions among other considerations that I have by now demonstrated.

My participation on the moderation isn't only based on my wish to have the block removed it is also as a demonstration that users in general can be easy prey from abuse, even more if they don't participate on the community, most users are anonymous contributors that came here to participate temporarily on one or two projects, they wish not to be involved on the bigger scope of the Wikibooks project or take an active participation in the community, I doubt that an unknown user to the community would have been given the chance or would be willing to get himself involved in this sort of discussions/debates/proceedings, this only demonstrates that such actions do really deserve extra care and should not be executed in the way it was implemented in this case as I think I have demonstrated.

All the blocks had they even had a valid motive as stated by the accusation could and should be addressed first by discussion and only acted upon as stated on the block policy after a clear warning to comply or correct the users actions in accord to active policies (not guidelines, since guidelines are not enforcible) failed, it is now demonstrated that not even this steps were taken.

And so, sadly, this is why we are here. --Panic 02:23, 20 January 2007 (UTC)


text:
User talk:MrJoe

Official Welcome
Come introduce yourself at the new users page. If you have any questions, you can ask there or contact me personally.

Hello and Thanks
Hello MrJoe,

Thanks for your work on the Adventist Youth Honors Answer Book. I am always pleased, gratified, and excited to see when someone comes along and makes a positive contribution to this work. If you have any questions, drop me a note on my talk page. Also, if you don't mind, I'd like to add you to the list of authors in our Infobox. I would rather have a real name instead of a username, but if you'd rather remain anonymous, that's fine too.

Thanks again for your help!

Jim Thomas 19:07, 18 January 2007 (UTC)

 * Thanks Joe. It's very very nice to know that people are using this. I do have fun writing, editing, and compiling answers, but it's even better knowing when it actually helps people.  I'll put you on the list!

 * Jim Thomas 20:38, 18 January 2007 (UTC)

Adventist Youth Honors Answer Book/Recreation/Gold Prospecting
Nice job! Did I understand correctly that you were the one who authored and submitted the honor? If so, congrats on having it accepted, and thanks for adding it to the Wikibook. --Jomegat (talk) 13:01, 20 March 2008 (UTC)

Model Hot Air Balloons
Hi MrJoe,

I'm thinking about getting rid of some of the Wikipedia links in Model Hot Air Balloons. Instead, I would simply import the articles from Wikipedia and paste them right in. Importing is something that has to be done by an admin (and I am one, so I can do that), and it preserves the edit history of the Wikipedia article. In effect, it makes it look like our honor was edited by whomever contributed to the imported article.

The main reason I would want to remove the links is because they are completely suppressed in the print version (they used to get converted to URLs, but that had a very cluttered look). There are a few wiki-to-pdf generators out there however, that DO still convert the links to urls.

Also, I like to have all the info in an honor contained in the module without having to chase links to get the answers. --Jomegat (talk) 01:15, 16 October 2008 (UTC)
 * My thought was to add short summary type information to each of the answers, in addition to the links. If the links are there, then the more in depth information is readily available for those who want it. I only put the links in this afternoon, because I didn't have time to add actual text. However, I was looking up the info so I could teach the honor this evening and putting in the links was a quick way to make at least some of the info easily available.--MrJoe (talk) 04:55, 16 October 2008 (UTC)
 * I think that's a pretty good approach. I'll start importing articles this evening.  We can trim out the cruft and move the links to a place where they won't become an eyesore in the print version.  Actually, maybe I should wait on the imports if you're going to be using this tonight.  History merges are messy and complicated procedures that involve replacing a page with the imported material, deleting it, undeleting everything again, and then restoring to the pre-import version.  That would not be good if I were doing that while you were referencing it! I hope it goes well for you tonight.  It really looks like a fascinating honor.  --Jomegat (talk) 12:29, 16 October 2008 (UTC)
 * Having printed out the various Wikipedia articles I added links for, and seeing how long they are. I think that it would probably be easier to just write up some basic answers than to import the articles and then delete the 90%+ of the text that is unneeded. We started the honor last night and we don't have a regular meeting next week so we won't be using the article in the immediate future. So if you want to import stuff go ahead, I will try to keep an eye on the honor over the next several days and work on it if I get a chance, but I don't know how much time I'll have. I just moved and am in the middle of a seemingly endless series of DIY projects which eat almost all of my free time. --MrJoe (talk) 16:41, 16 October 2008 (UTC)

title: User talk:MrJoe


text:
User:Purduemse1429

Purduemse1429 is a materials science and engineering graduate student at Purdue University.

title: User:Purduemse1429


text:
A Beginner's Guide to D/D Transition Guide

Introduction
This is meant to be a very fast-paced tutorial to D for experienced programmers. Instead of spending a long time explaining D, this text will demonstrate various D features and let them speak for themselves. If you are debating whether D is the language for you, you have two general approaches:

 * Read a bunch of languages comparisons, articles, and flamewars about D.
 * See how it works.

If you'd like to take the former, Google is your friend. You might also want to start off at Digital Mars's D Homepage.

If the latter is your cup of tea, you're in the right place. We'll start off small and progressively show more advanced features until we've covered all the major points of the language. Additionally, if you'd like more examples of any specific topic, the DSource Tutorials Project is the right place for you.

What We'll Cover
For now, we will only cover core language features and the bare minimum library calls required to utilize them. One of the first things you should realize about D, as opposed to C++ and Java, is that it includes in the language many features relegated to libraries in its predecessors. So while a Java tutorial would be remiss in not mentioning java.util.ArrayList, in D we get by with int[]. (More on this later.)

Style of This Guide
Each section will have a code snippet and a description of how D differs from its predecessors. Usually, that will be sufficient; occasionally, there will also be an explanation of a feature which is vastly different (read: revolutionary versus evolutionary).

Hello World

 * As you can see, D is more Java-like in that it uses import statements instead of #include. In fact, D has no preprocessor at all. Don't worry; you'll see how to do almost all your preprocessor tricks with D itself.
 * main can return void.
 * std.stdio and writefln are part of the library, so we won't really discuss them here. Sufficed to say, writef follows the printf family of functions and writefln adds the Java-like "ln" suffix to denote newline.

Arrays (and more)

 * 1) We use int[], as opposed to int ages[] or int* ages or int *ages. Arrays are proper types in D, not just aliases for pointers. Those familiar with scripting languages like Perl and Python should find this much more comfortable. For the rest of you, wait a few minutes and then you'll appreciate it.
 * 2) Array literal.
 * 3) Notice that I didn't set it to 0. Shouldn't I be worried about some arbitrary data? Nah, D sets all variables to a default value.
 * 4) Well, unless I specify otherwise by setting it to void.
 * 5) We use writefln to print formatted lines, much like printf in C. It prints 0 and then some arbitrary junk.
 * 6) What is this? Arrays have properties attached to them, like length. It can be very convenient, especially when dealing with dynamic arrays (later).
 * 7) The for loop is totally unchanged. But we really shouldn't use a for loop here. You'll learn about foreach later on.
 * 8) Casts are all explicitly specified with the cast keyword.

Strings

 * 1) Strings are character arrays which cannot be modified on a per element basis. You'll see more about arrays later. Another major note is that D strings are not null terminated. Arrays simply keep track of their length.
 * 2) firstname is assigned to "Walter".
 * 3) ~ is the concatenation operator. There is no ambiguity between + and ~ for strings.
 * 4) One way of outputting, although number 8 is better
 * 5) To modify a string, we get a duplicate (a copy) of the string. .dup returns a mutable copy of an array.
 * 6) Since b is really a pointer to a, b actually gets modified on this line. firstname remains unchanged.
 * 7) Although we cannot change string on an per element basis, we can re-assign them.
 * 8) Since fullname was created through concatenation, it also remains unchanged.

Dynamic Arrays and Foreach

 * 1) Defining a dynamic array is very intuitive; simply omit the length.
 * 2) Extending a dynamic array is simply done by resizing it.
 * 3) foreach is awesome. Here's the simple case: the part before the semicolon is the variable from the array, and the one afterwards is the array. And yes, foreach can work with much more than just arrays.
 * 4) ref simply means pass by reference. Without this, the original array would be unaffected.
 * 5) Built-in sort. If I'm not mistaken, both implementations use a quicksort, which- as its name implies- is pretty good.
 * 6) And now another form of foreach. The left-side of the semicolon can specify two variables, separated by a comma. In this case, the first is the index (think of "i" in your typical for loop) and the second is the value.

If you feel like there's something missing in the above code, you're right: I didn't put the data type on the variables in the foreach loop. D actually supplies an "auto" keyword which means "automatically figure out what type I want," and it is implicitly understood in the foreach loop if a type is missing.

I know I lumped many important things together in this example. The rest of the guide should elucidate all these topics to a greater extent, but you can always read up the official language specs or look at the dsource tutorials if you like.

Associative Arrays

 * 1) In order to pass in arguments, we simple have main receive an array of strings. Unlike C/C++, we needn't worry about "int argc" since arrays know their own length.
 * 2) To define an associative array, you simple put a value type inside the square brackets; otherwise it's like a normal array. You can put any type in there (classes, arrays, etc.). However, if you use objects as keys, keep in mind that you'll have to do some fancy stuff with hash functions and opCmp (which is beyond the scope of this document, but described fully in D Programming Language- Arrays.
 * 3) This "1..$" construct is a slice of an array; it means "return an array which includes the element at index 1 all the way to the end ($)". There are other ways of doing this, such as "1..length", but this one can be very nifty. If you're wondering why we would ignore the first element, it's because, like in C/C++, the first element is the name of the program.
 * 4) In order to access elements of an associative array, you simply give an index of the key type for it.
 * 5) All associative arrays have a property called "keys" (along with others like values and length) which returns an array of all the keys. Like any other array, you can then call the property sort on that.
 * 6) This is just an alternative way to print lines, each argument is simply converted and printed sequentially.


text:
Roulette

Contents

 * History of Roulette
 * Game Mechanics
 * Table Layouts (American, European, etc)
 * Wheel Layouts
 * Non-Mechanical Random Number Generators, and how they relate
 * Statistical Systems
 * Progressive
 * Regressive
 * Other Systems
 * Mechanical Systems
 * Math & Probability – the man behind the curtain
 * Famous Stories, Myths, and Urban Legends
 * Changing the Odds - cheating, biased wheels, etc
 * Appendices
 * Online Casinos
 * Outside Links

title: Roulette


text:
User talk:Neutron08

Radiation Oncology wiki
Neutron, thanks for your help with the Radiation Oncology wikibook! Brim 20:28, 18 January 2007 (UTC)

title: User talk:Neutron08