Michelle Phan - Asian Makeup Tutorial

Michelle Phan  - asian makeup tutorial

Michelle Phan is an American make-up demonstrator and entrepreneur who became notable as a YouTube personality. Phan's YouTube channel has over 8 million subscribers, 1.1 billion lifetime views, and 385 uploaded videos.

Michelle Phan  - asian makeup tutorial
Early life

Michelle Phan was born on April 11, 1987, in Boston, Massachusetts. She has an older brother and a younger half sister. Phan and her family moved to Tampa, Florida where she attended Tampa Bay Technical High School. Phan attended Ringling College of Art and Design. In March 2014, Ringling gave Phan an Honorary Doctorate of Arts degree.

Michelle Phan  - asian makeup tutorial
Career

In 2005, Phan had a personal blog in which she discussed different makeup tutorials and received requests for further instruction. She began posting tutorial vlogs on Xanga under the username Ricebunny and then began publishing on YouTube in May 2007.

She patterned her production style on Bob Ross: "There is something magical about narration and voiceovers. Recording a voiceover is an art form in itself."

BuzzFeed featured two of Phan's "How To Get Lady Gaga's Eyes" makeup tutorials in 2009 and 2010, which helped them go viral and brought her over a million subscribers. Phan became a YouTube advertising partner and launched FAWN, a YouTube MCN (multi-channel network), in 2012.

In 2010, Lancôme made Phan their official video make-up artist after she featured some of their products in her videos. She became their first Vietnamese spokesperson, acting as Lancôme's representative not only in the United States but also around the world. In 2011, Phan co-founded 'MyGlam', a monthly beauty products subscription service, which has since been renamed "ipsy", launched in September 2012. "ipsy" is a sponsor of "Generation Beauty", a beauty conference that Phan helped organize.

On August 15, 2013, L'Oreal launched a new cosmetic line called em by Michelle Phan, dedicating the brand to her mother.

In May 2014, Phan announced her partnership with Endemol Beyond USA to build a talent network that will feature people from YouTube and create content for millennials. The ICON network, dedicated to "beauty, lifestyle and entertainment", launched in March 2015 online and on television via Roku.

In September 2014, Phan partnered with Cutting Edge Group (CEG) to launch Shift Music Group. Phan also launched a book with Random House in October 2014, called “Make Up: Your Life Guide to Beauty, Style, and Success -- Online and Off."

In 2014, Phan's YouTube Channel was listed on New Media Rockstars' Top 100 Channels, ranked at #48.

In 2015, Phan was named to the Inc. 30 under 30 and Forbes 30 under 30 lists. The same year, Michelle Phan raised $100 million to value the company Ipsy at over $500 million.

On February 2016, Phan announced that she will voice Jessica Jones on the mobile game Marvel Avengers Academy.

Michelle Phan  - asian makeup tutorial
Copyright infringement lawsuit

In July 2014, it was announced that Phan was being sued by Ultra Records over alleged copyright infringement relating to the music used in her YouTube videos. Ultra plans to seek up to $150,000 in damages per infringement, according to the lawsuit, which currently names 50 instances of infringement. In total it is estimated that Ultra is seeking up to $7.5 million from Phan to compensate for her use of the label's artists' music. Phan filed a counter-suit against Ultra Records on September 18, 2014 in the United States District Court for the Central District of California.

Although Phan has remained quiet regarding the topic, other members of YouTube have spoken out to suggest that Phan had previously received permission from the record label to use their artists' music. It has also been said that Ultra Records is seeking a higher payback per video due to Phan's rise in celebrity via YouTube's growing platform and her rumored net worth of $5 million.

In August 2015, both suit and countersuit were dropped with both parties agreeing to settle out of court. The terms of the agreement have not been made public.

Michelle Phan  - asian makeup tutorial
Awards and nominations

Michelle Phan  - asian makeup tutorial
Publications

  • Make Up: Your Life Guide to Beauty, Style, and Success -- Online and Off. Penguinâ€"Random House. 2014. ISBN 9780804137348. 

Michelle Phan  - asian makeup tutorial
References

Michelle Phan  - asian makeup tutorial
External links

  • Official website
  • Michelle Phan's channel on YouTube
Learn more »

Core Data - Core Data Tutorial

Core Data  - core data tutorial

Core Data is an object graph and persistence framework provided by Apple in the macOS and iOS operating systems. It was introduced in Mac OS X 10.4 Tiger and iOS with iPhone SDK 3.0. It allows data organised by the relational entityâ€"attribute model to be serialized into XML, binary, or SQLite stores. The data can be manipulated using higher level objects representing entities and their relationships. Core Data manages the serialised version, providing object lifecycle and object graph management, including persistence. Core Data interfaces directly with SQLite, insulating the developer from the underlying SQL.

Just as Cocoa Bindings handle many of the duties of the controller in a modelâ€"viewâ€"controller design, Core Data handles many of the duties of the data model. Among other tasks, it handles change management, serializing to disk, memory footprint minimization and queries against the data.

Core Data  - core data tutorial
Usage

Core Data describes data with a high level data model expressed in terms of entities and their relationships plus fetch requests that retrieve entities meeting specific criteria. Code can retrieve and manipulate this data on a purely object level without having to worry about the details of storage and retrieval. The controller objects available in Interface Builder can retrieve and manipulate these entities directly. When combined with Cocoa bindings the UI can display many components of the data model without needing background code.

For example: a developer might be writing a program to handle vCards. In order to manage these, the author intends to read the vCards into objects, and then store them in a single larger XML file. Using Core Data the developer would drag their schema from the data designer in Xcode into an interface builder window to create a GUI for their schema. They could then write standard Objective-C or Swift code to read vCard files and put the data into Core Data managed entities. From that point on the author's code manipulates these Core Data objects, rather than the underlying vCards. Connecting the Save menu item to the appropriate method in the controller object will direct the controller to examine the object stack, determine which objects are dirty, and then re-write a Core Data document file with these changes.

Core Data is organized into a large hierarchy of classes, though interaction is only prevalent with a small set of them.

Core Data  - core data tutorial
Storage formats

Core Data can serialize objects into XML, Binary, or SQLite for storage. With the release of Mac OS X 10.5 Leopard, developers can also create their own custom atomic store types. Each method carries advantages and disadvantages, such as being human readable (XML) or more memory efficient (SQLite). This portion of Core Data is similar to the original Enterprise Objects Framework (EOF) system, in that one can write fairly sophisticated queries. Unlike EOF, it is not possible to write your own SQL. Recently, Core Data store for ODBC has been made available in ODBC framework.

Core Data schemas are standardized. If you have the Xcode Data Model file, you can read and write files in that format freely. Unlike EOF, though, Core Data is not currently designed for multiuser or simultaneous access unless you use ODBC framework. Schema migration is also non-trivial, virtually always requiring code. If other developers have access to and depend upon your data model, you may need to provide version translation code in addition to a new data model if your schema changes.

Core Data  - core data tutorial
History and genesis

Core Data owes much of its design to an early NeXT product, Enterprise Objects Framework (EOF).

EOF was specifically aimed at object-relational mapping for high-end SQL database engines such as Microsoft SQL Server and Oracle. EOF's purpose was twofold: first, to connect to the database engine and hide the implementation details; second, to read the data out of the simple relational format and translate that into a set of objects. Developers typically interacted with the objects only, which dramatically simplifies development of complex programs, at the cost of some "setup". The EOF object model was deliberately designed to make the resulting programs "document like", in that the user could edit the data locally in memory, and then write out all changes with a single Save command.

Throughout its history, EOF "contained" a number of bits of extremely useful code that were not otherwise available under NeXTSTEP/OpenStep. For instance, EOF required the ability to track which objects were "dirty" so the system could later write them out. This was presented to the developer not only as a document-like system, but also in the form of an unlimited "Undo" command stack. Many developers complained that this state management code was far too useful to be isolated in EOF, and it was later moved into the Cocoa API during the transition to Mac OS X.

Oddly, what was not translated was EOF itself. EOF was used primarily along with another OpenStep-era product, WebObjects, which was an application server originally based on Objective-C. At the time, Apple was in the process of porting WebObjects to the Java programming language, and as part of this conversion, EOF became much more difficult to use from Cocoa. Enough developers complained about this that Apple apparently decided to do something about it.

One critical realization is that the object state management system in EOF did not really have anything to do with relational databases. The same code could be, and was, used by developers to manage graphs of other objects as well. In this role, the really useful parts of EOF were those that automatically built the object sets from the raw data, and then tracked them. It is this concept, and perhaps code, that forms the basis of Core Data.

Core Data  - core data tutorial
Notes

Core Data  - core data tutorial
References

  • Apple Inc. (September 17, 2009). "Core Data Programming Guide". Retrieved from http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html
  • Apple Inc. (September 9, 2009). "Core Data Tutorial for iPhone OS". Retrieved from http://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html
  • Apple Inc. (2006). "EOModeler User Guide". Retrieved from http://developer.apple.com/legacy/mac/library/documentation/WebObjects/UsingEOModeler/Introduction/Introduction.html#//apple_ref/doc/uid/TP30001018-CH201-TP1
  • Jurewitz, M. & Apple Inc. (2010). "iPhone Development Videos: Working With Core Data". Retrieved from http://developer.apple.com/videos/iphone/#video-advanced-coredata
  • Stevenson, S. (2005). "Core Data Class Overview". Retrieved from http://cocoadevcentral.com/articles/000086.php
  • Zarra, M. S. (2009). Core Data Apple's API for Persisting Data on Mac OS X. The Pragmatic Programmers.
  • LaMarche, J., & Mark, D. (2009). More iPhone 3 Development: Tackling iPhone SDK 3. Apress.

Core Data  - core data tutorial
External links

  • Apple Inc. (2006). "Developing With Core Data". Retrieved from http://developer.apple.com/macosx/coredata.html
  • Apple Inc. (2009). "Web Objects Tutorial". Retrieved from http://developer.apple.com/legacy/mac/library/documentation/DeveloperTools/Conceptual/WOTutorial/Introduction/Introduction.html
  • CocoaDev. (n.d.). Retrieved from http://www.cocoadev.com/
  • Github. "Odbc framework". https://github.com/mhakman/osx-cocoa-odbc
  • mFluent LLC. "View Core Data Persistence Files". https://github.com/yepher/CoreDataUtility
  • Stevenson, S. (2005). "Build A Core Data Application". Retrieved from http://cocoadevcentral.com/articles/000085.php
Learn more »

COBOL - Cobol Tutorial

COBOL  - cobol tutorial

COBOL (/ˈkoÊŠbÉ'l/, an acronym for common business-oriented language) is a compiled English-like computer programming language designed for business use. It is imperative, procedural and, since 2002, object-oriented. COBOL is primarily used in business, finance, and administrative systems for companies and governments. COBOL is still widely used in legacy applications deployed on mainframe computers, such as large-scale batch and transaction processing j obs. But due to its declining popularity and the retirement of experienced COBOL programmers, programs are being migrated to new platforms, rewritten in modern languages or replaced with software packages. Most programming in COBOL is now purely to maintain existing applications.

COBOL was designed in 1959 by CODASYL and was partly based on previous programming language design work by Grace Hopper, commonly referred to as "the (grand)mother of COBOL". It was created as part of a US Department of Defense effort to create a portable programming language for data processing. Intended as a stopgap, the Department of Defense promptly forced computer manufacturers to provide it, resulting in its widespread adoption. It was standardized in 1968 and has since been revised four times. Expansions include support for structured and object-oriented programming. The current standard is ISO/IEC 1989:2014.

COBOL has an English-like syntax, which was designed to be self-documenting and highly readable. However, it is verbose and uses over 300 reserved words. In contrast with modern, succinct syntax like y = x;, COBOL has a more English-like syntax (in this case, MOVE x TO y). COBOL code is split into four divisions (identification, environment, data and procedure) containing a rigid hierarchy of sections, paragraphs and sentences. Lacking a large standard library, the standard specifies 43 statements, 87 functions and just one class.

Academic computer scientists were generally uninterested in business applications when COBOL was created and were not involved in its design; it was (effectively) designed from the ground up as a computer language for business, with an emphasis on inputs and outputs, whose only data types were numbers and strings of text. COBOL has been criticized throughout its life, however, for its verbosity, design process and poor support for structured programming, which resulted in monolithic and incomprehensible programs.

COBOL  - cobol tutorial
History and specification

Background

In the late 1950s, computer users and manufacturers were becoming concerned about the rising cost of programming. A 1959 survey had found that in any data processing installation, the programming cost US$800,000 on average and that translating programs to run on new hardware would cost $600,000. At a time when new programming languages were proliferating at an ever-increasing rate, the same survey suggested that if a common business-oriented language were used, conversion would be far cheaper and faster.

In April 1959, Mary K. Hawes called a meeting of representatives from academia, computer users, and manufacturers at the University of Pennsylvania to organize a formal meeting on common business languages. Representatives included Grace Hopper, inventor of the English-like data processing language FLOW-MATIC, Jean Sammet and Saul Gorn.

The group asked the Department of Defense (DoD) to sponsor an effort to create a common business language. The delegation impressed Charles A. Phillips, director of the Data System Research Staff at the DoD, who thought that they "thoroughly understood" the DoD's problems. The DoD operated 225 computers, had a further 175 on order and had spent over $200 million on implementing programs to run on them. Portable programs would save time, reduce costs and ease modernization.

Phillips agreed to sponsor the meeting and tasked the delegation with drafting the agenda.

COBOL 60

On May 28 and 29 of 1959 (exactly one year after the Zürich ALGOL 58 meeting), a meeting was held at the Pentagon to discuss the creation of a common programming language for business. It was attended by 41 people and was chaired by Phillips. The Department of Defense was concerned about whether it could run the same data processing programs on different computers. FORTRAN, the only mainstream language at the time, lacked the features needed to write such programs.

Representatives enthusiastically described a language that could work in a wide variety of environments, from banking and insurance to utilities and inventory control. They agreed unanimously that more people should be able to program and that the new language should not be restricted by the limitations of contemporary technology. A majority agreed that the language should make maximal use of English, be capable of change, be machine-independent and be easy to use, even at the expense of power.

The meeting resulted in the creation of a steering committee and short-, intermediate- and long-range committees. The short-range committee was given to September (three months) to produce specifications for an interim language, which would then be improved upon by the other committees. Their official mission, however, was to identify the strengths and weaknesses of existing programming languages and did not explicitly direct them to create a new language. The deadline was met with disbelief by the short-range committee. One member, Betty Holberton, described the three-month deadline as "gross optimism" and doubted that the language really would be a stopgap.

The steering committee met on June 4 and agreed to name the entire activity as the Committee on Data Systems Languages, or CODASYL, and to form an executive committee.

The short-range committee was made up of members representing six computer manufacturers and three government agencies. The six computer manufacturers were Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, and Sylvania Electric Products. The three government agencies were the US Air Force, the Navy's David Taylor Model Basin, and the National Bureau of Standards (now the National Institute of Standards and Technology). The committee was chaired by Joseph Wegstein of the US National Bureau of Standards. Work began by investigating data description, statements, existing applications and user experiences.

The committee mainly examined the FLOW-MATIC, AIMACO and COMTRAN programming languages. The FLOW-MATIC language was particularly influential because it had been implemented and because AIMACO was a derivative of it with only minor changes. FLOW-MATIC's inventor, Grace Hopper, also served as a technical adviser to the committee. FLOW-MATIC's major contributions to COBOL were long variable names, English words for commands and the separation of data descriptions and instructions.

IBM's COMTRAN language, invented by Bob Bemer, was regarded as a competitor to FLOW-MATIC by a short-range committee made up of colleagues of Grace Hopper. Some of its features were not incorporated into COBOL so that it would not look like IBM had dominated the design process, and Jean Sammet said in 1981 that there had been a "strong anti-IBM bias" from some committee members (herself included). In one case, after Roy Goldfinger, author of the COMTRAN manual and intermediate-range committee member, attended a subcommittee meeting to support his language and encourage the use of algebraic expressions, Grace Hopper sent a memo to the short-range committee reiterating Sperry Rand's efforts to create a language based on English. In 1980, Grace Hopper commented that "COBOL 60 is 95% FLOW-MATIC" and that COMTRAN had had an "extremely small" influence. Furthermore, she said that she would claim that work was influenced by both FLOW-MATIC and COMTRAN only to "keep other people happy [so they] wouldn't try to knock us out". Features from COMTRAN incorporated into COBOL included formulas, the PICTURE clause, an improved IF statement, which obviated the need for GO TOs, and a more robust file management system.

The usefulness of the committee's work was subject of great debate. While some members thought the language had too many compromises and was the result of design by committee, others felt it was better than the three languages examined. Some felt the language was too complex; others, too simple. Controversial features included those some considered useless or too advanced for data processing users. Such features included boolean expressions, formulas and table subscripts (indices). Another point of controversy was whether to make keywords context-sensitive and the effect that would have on readability. Although context-sensitive keywords were rejected, the approach was later used in PL/I and partially in COBOL from 2002. Little consideration was given to interactivity, interaction with operating systems (few existed at that time) and functions (thought of as purely mathematical and of no use in data processing).

The specifications were presented to the Executive Committee on September 4. They fell short of expectations: Joseph Wegstein noted that "it contains rough spots and requires some additions", and Bob Bemer later described them as a "hodgepodge". The subcommittee was given until December to improve it.

At a mid-September meeting, the committee discussed the new language's name. Suggestions included "BUSY" (Business System), "INFOSYL" (Information System Language) and "COCOSYL" (Common Computer Systems Language). The name "COBOL" was suggested by Bob Bemer.

In October, the intermediate-range committee received copies of the FACT language specification created by Roy Nutt. Its features impressed the committee so much that they passed a resolution to base COBOL on it. This was a blow to the short-range committee, who had made good progress on the specification. Despite being technically superior, FACT had not been created with portability in mind or through manufacturer and user consensus. It also lacked a demonstrable implementation, allowing supporters of a FLOW-MATIC-based COBOL to overturn the resolution. RCA representative Howard Bromberg also blocked FACT, so that RCA's work on a COBOL implementation would not go to waste.

It soon became apparent that the committee was too large for any further progress to be made quickly. A frustrated Howard Bromberg bought a $15 tombstone with "COBOL" engraved on it and sent it to Charles Phillips to demonstrate his displeasure. A sub-committee was formed to analyze existing languages and was made up of six individuals:

  • William Selden and Gertrude Tierney of IBM,
  • Howard Bromberg and Howard Discount of RCA,
  • Vernon Reeves and Jean E. Sammet of Sylvania Electric Products.

The sub-committee did most of the work creating the specification, leaving the short-range committee to review and modify their work before producing the finished specification.

The specifications were approved by the Executive Committee on January 3, 1960, and sent to the government printing office, which printed these as COBOL 60. The language's stated objectives were to allow efficient, portable programs to be easily written, to allow users to move to new systems with minimal effort and cost, and to be suitable for inexperienced programmers. The CODASYL Executive Committee later created the COBOL Maintenance Committee to answer questions from users and vendors and to improve and expand the specifications.

During 1960, the list of manufacturers planning to build COBOL compilers grew. By September, five more manufacturers had joined CODASYL (Bendix, Control Data Corporation, General Electric (GE), National Cash Register and Philco), and all represented manufacturers had announced COBOL compilers. GE and IBM planned to integrate COBOL into their own languages, GECOM and COMTRAN, respectively. In contrast, International Computers and Tabulators planned to replace their language, CODEL, with COBOL.

Meanwhile, RCA and Sperry Rand worked on creating COBOL compilers. The first COBOL program ran on 17 August on an RCA 501. On December 6 and 7, the same COBOL program (albeit with minor changes) ran on an RCA computer and a Remington-Rand Univac computer, demonstrating that compatibility could be achieved.

The relative influences of which languages were used continues to this day in the recommended advisory printed in all COBOL reference manuals:

COBOL is an industry language and is not the property of any company or group of companies, or of any organization or group of organizations.

No warranty, expressed or implied, is made by any contributor or by the CODASYL COBOL Committee as to the accuracy and functioning of the programming system and language. Moreover, no responsibility is assumed by any contributor, or by the committee, in connection therewith. The authors and copyright holders of the copyrighted material used herein are as follows:

FLOW-MATIC (trademark of Unisys Corporation), Programming for the UNIVAC (R) I and II, Data Automation Systems, copyrighted 1958, 1959, by Unisys Corporation; IBM Commercial Translator Form No. F28-8013, copyrighted 1959 by IBM; FACT, DSI 27A5260-2760, copyrighted 1960 by Minneapolis-Honeywell.

They have specifically authorized the use of this material, in whole or in part, in the COBOL specifications. Such authorization extends to the reproduction and use of COBOL specifications in programming manuals or similar publications.

COBOL-61 to COBOL-65

Many logical flaws were found in COBOL 60, leading GE's Charles Katz to warn that it could not be interpreted unambiguously. A reluctant short-term committee enacted a total cleanup and, by March 1963, it was reported that COBOL's syntax was as definable as ALGOL's, although semantic ambiguities remained.

Early COBOL compilers were primitive and slow. A 1962 US Navy evaluation found compilation speeds of 3â€"11 statements per minute. By mid-1964, they had increased to 11â€"1000 statements per minute. It was observed that increasing memory would drastically increase speed and that compilation costs varied wildly: costs per statement were between $0.23 and $18.91.

In late 1962, IBM announced that COBOL would be their primary development language and that development of COMTRAN would cease.

The COBOL specification was revised three times in the five years after its publication. COBOL-60 was replaced in 1961 by COBOL-61. This was then replaced by the COBOL-61 Extended specifications in 1963, which introduced the sort and report writer facilities. The added facilities corrected flaws identified by Honeywell in late 1959 in a letter to the short-range committee. COBOL Edition 1965 brought further clarifications to the specifications and introduced facilities for handling mass storage files and tables.

COBOL-68

Efforts began to standardize COBOL to overcome incompatibilities between versions. In late 1962, both ISO and the United States of America Standards Institute (now ANSI) formed groups to create standards. ANSI produced USA Standard COBOL X3.23 in August 1968, which became the cornerstone for later versions. This version was known as American National Standard (ANS) COBOL and was adopted by ISO in 1972.

COBOL-74

By 1970, COBOL had become the most widely used programming language in the world.

Independently of the ANSI committee, the CODASYL Programming Language Committee was working on improving the language. They described new versions in 1968, 1969, 1970 and 1973, including changes such as new inter-program communication, debugging and file merging facilities as well as improved string-handling and library inclusion features. Although CODASYL was independent of the ANSI committee, the CODASYL Journal of Development was used by ANSI to identify features that were popular enough to warrant implementing. The Programming Language Committee also liaised with ECMA and the Japanese COBOL Standard committee.

The Programming Language Committee was not well-known, however. The vice-president, William Rinehuls, complained that two-thirds of the COBOL community did not know of the committee's existence. It was also poor, lacking the funds to make public documents, such as minutes of meetings and change proposals, freely available.

In 1974, ANSI published a revised version of (ANS) COBOL, containing new features such as file organizations, the DELETE statement and the segmentation module. Deleted features included the NOTE statement, the EXAMINE statement (which was replaced by INSPECT) and the implementer-defined random access module (which was superseded by the new sequential and relative I/O modules). These made up 44 changes, which rendered existing statements incompatible with the new standard. The report writer was slated to be removed from COBOL, but was reinstated before the standard was published. ISO later adopted the updated standard in 1978.

COBOL-85

In June 1978, work began on revising COBOL-74. The proposed standard (commonly called COBOL-80) differed significantly from the previous one, causing concerns about incompatibility and conversion costs. In January 1981, Joseph T. Brophy, Senior Vice-President of Travelers Insurance, threatened to sue the standard committee because it was not upwards compatible with COBOL-74. Mr. Brophy described previous conversions of their 40-million-line code base as "non-productive" and a "complete waste of our programmer resources". Later that year, the Data Processing Management Association (DPMA) said it was "strongly opposed" to the new standard, citing "prohibitive" conversion costs and enhancements that were "forced on the user".

During the first public review period, the committee received 2,200 responses, of which 1,700 were negative form letters. Other responses were detailed analyses of the effect COBOL-80 would have on their systems; conversion costs were predicted to be at least 50 cents per line of code. Fewer than a dozen of the responses were in favor of the proposed standard.

In 1983, the DPMA withdrew its opposition to the standard, citing the responsiveness of the committee to public concerns. In the same year, a National Bureau of Standards study concluded that the proposed standard would present few problems. A year later, a COBOL-80 compiler was released to DEC VAX users, who noted that conversion of COBOL-74 programs posed few problems. The new EVALUATE statement and inline PERFORM were particularly well received and improved productivity, thanks to simplified control flow and debugging.

The second public review drew another 1,000 (mainly negative) responses, while the last drew just 25, by which time many concerns had been addressed.

In late 1985, ANSI published the revised standard. Sixty features were changed or deprecated and many were added, such as:

  • Scope terminators (END-IF, END-PERFORM, END-READ, etc.)
  • Nested subprograms
  • CONTINUE, a no-operation statement
  • EVALUATE, a switch statement
  • INITIALIZE, a statement that can set groups of data to their default values
  • Inline PERFORM loop bodies â€" previously, loop bodies had to be specified in a separate procedure
  • Reference modification, which allows access to substrings
  • I/O status codes.

The standard was adopted by ISO the same year. Two amendments followed in 1989 and 1993, the first introducing intrinsic functions and the other providing corrections. ISO adopted the amendments in 1991 and 1994 respectively, before subsequently taking primary ownership and development of the standard.

COBOL 2002 and object-oriented COBOL

In 1997, Gartner Group estimated that there were a total of 200 billion lines of COBOL in existence, which ran 80% of all business programs.

In the early 1990s, work began on adding object-orientation in the next full revision of COBOL. Object-oriented features were taken from C++ and Smalltalk. The initial estimate was to have this revision completed by 1997, and an ISO Committee Draft (CD) was available by 1997. Some vendors (including Micro Focus, Fujitsu, and IBM) introduced object-oriented syntax based on drafts of the full revision. The final approved ISO standard was approved and published in late 2002.

Fujitsu/GTSoftware, Micro Focus and RainCode introduced object-oriented COBOL compilers targeting the .NET Framework.

There were many other new features, many of which had been in the CODASYL COBOL Journal of Development since 1978 and had missed the opportunity to be included in COBOL-85. These other features included:

  • Free-form code
  • User-defined functions
  • Recursion
  • Locale-based processing
  • Support for extended character sets such as Unicode
  • Floating-point and binary data types (until then, binary items were truncated based on their declaration's base-10 specification)
  • Portable arithmetic results
  • Bit and boolean data types
  • Pointers and syntax for getting and freeing storage
  • The SCREEN SECTION for text-based user interfaces
  • The VALIDATE facility
  • Improved interoperability with other programming languages and framework environments such as .NET and Java.

Three corrigenda were published for the standard: two in 2006 and one in 2009.

COBOL 2014

Between 2003 and 2009, three technical reports were produced describing object finalization, XML processing and collection classes for COBOL.

COBOL 2002 suffered from poor support: no compilers completely supported the standard. Micro Focus found that it was due to a lack of user demand for the new features and due to the abolition of the NIST test suite, which had been used to test compiler conformance. The standardization process was also found to be slow and under-resourced.

COBOL 2014 includes the following changes:

  • Portable arithmetic results have been replaced by IEEE 754 data types
  • Major features have been made optional, such as the VALIDATE facility, the report writer and the screen-handling facility.
  • Method overloading
  • Dynamic capacity tables (a feature dropped from the draft of COBOL 2002)

Legacy

COBOL programs are used globally in governments and businesses and are running on diverse operating systems such as z/OS, VME, Unix, OpenVMS and Windows. In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code and 5 billion lines more being written annually.

Near the end of the 20th century, the year 2000 problem (Y2K) was the focus of significant COBOL programming effort, sometimes by the same programmers who had designed the systems decades before. The particular level of effort required to correct COBOL code has been attributed to the large amount of business-oriented COBOL, as business applications use dates heavily, and to fixed-length data fields. After the clean-up effort put into these programs for Y2K, a 2003 survey found that many remained in use. The authors said that the survey data suggest "a gradual decline in the importance of Cobol in application development over the [following] 10 years unless ... integration with other languages and technologies can be adopted".

In 2006 and 2012, Computerworld surveys found that over 60% of organizations used COBOL (more than C++ and Visual Basic .NET) and that for half of those, COBOL was used for the majority of their internal software. 36% of managers said they planned to migrate from COBOL, and 25% said they would like to if it was cheaper. Instead, some businesses have migrated their systems from expensive mainframes to cheaper, more modern systems, while maintaining their COBOL programs.

COBOL  - cobol tutorial
Features

Syntax

COBOL has an English-like syntax, which is used to describe nearly everything in a program. For example, a condition can be expressed as  x IS GREATER THAN y or more concisely as  x GREATER y  or  x > y. More complex conditions can be "abbreviated" by removing repeated conditions and variables. For example,  a > b AND a > c OR a = d  can be shortened to a > b AND c OR = d. As a consequence of this English-like syntax, COBOL has over 300 keywords. Some of the keywords are simple alternative or pluralized spellings of the same word, which provides for more English-like statements and clauses; e.g., the IN and OF keywords can be used interchangeably, as can IS and ARE, and VALUE and VALUES.

Each COBOL program is made up of four basic lexical items: words, literals, picture character-strings (see § PICTURE clause) and separators. Words include reserved words and user-defined identifiers. They are up to 31 characters long and may include letters, digits, hyphens and underscores. Literals include numerals (e.g. 12) and strings (e.g. 'Hello!'). Separators include the space character and commas and semi-colons followed by a space.

A COBOL program is split into four divisions: the identification division, the environment division, the data division and the procedure division. The identification division specifies the name and type of the source element and is where classes and interfaces are specified. The environment division specifies any program features that depend on the system running it, such as files and character sets. The data division is used to declare variables and parameters. The procedure division contains the program's statements. Each division is sub-divided into sections, which are made up of paragraphs.

Code format

COBOL can be written in two formats: fixed (the default) or free. In fixed-format, code must be aligned to fit in certain areas. Until COBOL 2002, these were:

In COBOL 2002, Areas A and B were merged to form the program-text area, which now ends at an implementor-defined column.

COBOL 2002 also introduced free-format code. Free-format code can be placed in any column of the file, as in newer programming languages. Comments are specified using *>, which can be placed anywhere and can also be used in fixed-format source code. Continuation lines are not present, and the >>PAGE directive replaces the / indicator.

Identification division

The identification division identifies the following code entity and contains the definition of a class or interface.

Object-oriented programming

Classes and interfaces have been in COBOL since 2002. Classes have factory objects, containing class methods and variables, and instance objects, containing instance methods and variables. Inheritance and interfaces provide polymorphism. Support for generic programming is provided through parameterized classes, which can be instantiated to use any class or interface. Objects are stored as references which may be restricted to a certain type. There are two ways of calling a method: the INVOKE statement, which acts similarly to CALL, or through inline method invocation, which is analogous to using functions.

COBOL does not provide a way to hide methods. Class data can be hidden, however, by declaring it without a PROPERTY clause, which leaves the user with no way to access it. Method overloading was added in COBOL 2014.

Environment division

The environment division contains the configuration section and the input-output section. The configuration section is used to specify variable features such as currency signs, locales and character sets. The input-output section contains file-related information.

Files

COBOL supports three file formats, or organizations: sequential, indexed and relative. In sequential files, records are contiguous and must be traversed sequentially, similarly to a linked list. Indexed files have one or more indexes which allow records to be randomly accessed and which can be sorted on them. Each record must have a unique key, but other, alternate, record keys need not be unique. Implementations of indexed files vary between vendors, although common implementations, such as Câ€'ISAM and VSAM, are based on IBM's ISAM. Relative files, like indexed files, have a unique record key, but they do not have alternate keys. A relative record's key is its ordinal position; for example, the 10th record has a key of 10. This means that creating a record with a key of 5 may require the creation of (empty) preceding records. Relative files also allow for both sequential and random access.

A common non-standard extension is the line sequential organization, used to process text files. Records in a file are terminated by a newline and may be of varying length.

Data division

The data division is split into six sections which declare different items: the file section, for file records; the working-storage section, for static variables; the local-storage section, for automatic variables; the linkage section, for parameters and the return value; the report section and the screen section, for text-based user interfaces.

Aggregated data

Data items in COBOL are declared hierarchically through the use of level-numbers which indicate if a data item is part of another. An item with a higher level-number is subordinate to an item with a lower one. Top-level data items, with a level-number of 1, are called records. Items that have subordinate aggregate data are called group items; those that do not are called elementary items. Level-numbers used to describe standard data items are between 1 and 49.

In the above example, elementary item num and group item the-date are subordinate to the record some-record, while elementary items the-year, the-month, and the-day are part of the group item the-date.

Subordinate items can be disambiguated with the IN (or OF) keyword. For example, consider the example code above along with the following example:

The names the-year, the-month, and the-day are ambiguous by themselves, since more than one data item is defined with those names. To specify a particular data item, for instance one of the items contained within the sale-date group, the programmer would use the-year IN sale-date (or the equivalent the-year OF sale-date). (This syntax is similar to the "dot notation" supported by most contemporary languages.)

Other data levels

A level-number of 66 is used to declare a re-grouping of previously defined items, irrespective of how those items are structured. This data level, also referred to by the associated RENAMES clause, is rarely used and, circa 1988, was usually found in old programs. Its ability to ignore the hierarchical and logical structure data meant its use was not recommended and many installations forbade its use.

A 77 level-number indicates the item is stand-alone, and in such situations is equivalent to the level-number 01. For example, the following code declares two 77-level data items, property-name and sales-region, which are non-group data items that are independent of (not subordinate to) any other data items:

An 88 level-number declares a condition name (a so-called 88-level) which is true when its parent data item contains one of the values specified in it VALUE clause. For example, the following code defines two 88-level condition-name items that are true or false depending on the current character data value of the wage-type data item. When the data item contains a value of 'H', the condition-name wage-is-hourly is true, whereas when it contains a value of 'S' or 'Y', the condition-name wage-is-yearly is true. If the data item contains some other value, both o f the condition-names are false.

Data types

Standard COBOL provides the following data types:

Type safety is variable in COBOL. Numeric data is converted between different representations and sizes silently and alphanumeric data can be placed in any data item that can be stored as a string, including numeric and group data. In contrast, object references and pointers may only be assigned from items of the same type and their values may be restricted to a certain type.

PICTURE clause

A PICTURE (or PIC) clause is a string of characters, each of which represents a portion of the data item and what it may contain. Some picture characters specify the type of the item and how many characters or digits it occupies in memory. For example, a 9 indicates a decimal digit, and an S indicates that the item is signed. Other picture characters (called insertion and editing characters) specify how an item should be formatted. For example, a series of + characters define character positions as well as how a leading sign character is to be positioned within the final character data; the rightmost non-numeric character will contain the item's sign, whil e other character positions corresponding to a + to the left of this position will contain a space. Repeated characters can be specified more concisely by specifying a number in parentheses after a picture character; for example, 9(7) is equivalent to 9999999. Picture specifications containing only digit (9) and sign (S) characters define purely numeric data items, while picture specifications containing alphabetic (A) or alphanumeric (X) characters define alphanumeric data items. The presence of other formatting characters define edi ted numeric or edited alphanumeric data items.

USAGE clause

The USAGE clause declares the format data is stored in. Depending on the data type, it can either complement or be used instead of a PICTURE clause. While it can be used to declare pointers and object references, it is mostly geared towards specifying numeric types. These numeric formats are:

  • Binary, where a minimum size is either specified by the PICTURE clause or by a USAGE clause such as BINARY-LONG.
  • USAGE COMPUTATIONAL, where data may be stored in whatever format the implementation provides; often equivalent to  USAGE BINARY
  • USAGE DISPLAY, the default format, where data is stored as a string
  • Floating-point, in either an implementation-dependent format or according to IEEE 754.
  • USAGE NATIONAL, where data is stored as a string using an extended character set
  • USAGE PACKED-DECIMAL, where data is stored in the smallest possible decimal format (typically packed binary-coded decimal)

Report writer

The report writer is a declarative facility for creating reports. The programmer need only specify the report layout and the data required to produce it, freeing them from having to write code to handle things like page breaks, data formatting, and headings and footings.

Reports are associated with report files, which are files which may only be written to through report writer statements.

Each report is defined in the report section of the data division. A report is split into report groups which define the report's headings, footings and details. Reports work around hierarchical control breaks. Control breaks occur when a key variable changes it value; for example, when creating a report detailing customers' orders, a control break could occur when the program reaches a different customer's orders. Here is an example report description for a report which gives a salesperson's sales and which warns of any invalid records:

The above report description describes the following layout:

  Sales Report                                                             Page  1    Seller: Howard Bromberg    Sales on 10/12/2008 were $1000.00    Sales on 12/12/2008 were    $0.00    Sales on 13/12/2008 were   $31.47    INVALID RECORD: Howard Bromberg             XXXXYY    Seller: Howard Discount  ...  Sales Report                                                            Page 12      Sales on 08/05/2014 were  $543.98    INVALID RECORD: William Selden      12O52014FOOFOO    Sales on 30/05/2014 were    $0.00  

Four statements control the report writer: INITIATE, which prepares the report writer for printing; GENERATE, which prints a report group; SUPPRESS, which suppresses the printing of a report group; and TERMINATE, which terminates report processing. For the above sales report example, the procedure division might look like this:

Procedure division

Procedures

The sections and paragraphs in the procedure division (collectively called procedures) can be used as labels and as simple subroutines. Unlike in other divisions, paragraphs do not need to be in sections. Execution goes down through the procedures of a program until it is terminated. To use procedures as subroutines, the PERFORM verb is used. This transfers control to the specified range of procedures and returns only upon reaching the end.

Unusual control flow can trigger mines, which cause control in performed procedures to return at unexpected times to unexpected locations. Procedures can be reached in three ways: they can be called with PERFORM, jumped to from a GO TO or through execution "falling through" the bottom of an above paragraph. Combinations of these invoke undefined behavior, creating mines. Specifically, mines occur when execution of a range of procedures would cause control flow to go past the last statement of a range of procedures already being performed.

For example, in the code in the adjacent image, a mine is tripped at the end of update-screen when the screen is invalid. When the screen is invalid, control jumps to the fix-screen section, which, when done, performs update-screen. This recursion triggers undefined behavior as there are now two overlapping ranges of procedures being performed. The mine is then triggered upon reaching the end of update-screen and means control could return to one of two locations:

  • The first PERFORM statement
  • The PERFORM statement in fix-screen, where it would then "fall-through" into update-screen and return to the first PERFORM statement upon reaching the end.

Statements

COBOL 2014 has 47 statements (also called verbs), which can be grouped into the following broad categories: control flow, I/O, data manipulation and the report writer. The report writer statements are covered in the report writer section.

Control flow

COBOL's conditional statements are IF and EVALUATE. EVALUATE is a switch-like statement with the added capability of evaluating multiple values and conditions. This can be used to implement decision tables. For example, the following might be used to control a CNC lathe:

The PERFORM statement is used to define loops which are executed until a condition is true (not while, unlike other languages). It is also used to call procedures or ranges of procedures (see the procedures section for more details). CALL and INVOKE call subprograms and methods, respectively. The name of the subprogram/method is contained in a string which may be a literal or a data item. Parameters can be passed by reference, by content (where a copy is passed by reference) or by value (but only if a prototype is available). CANCEL unloads subprograms from memory. GO TO causes the program to jump to a specified procedure.

The GOBACK statement is a return statement and the STOP statement stops the program. The EXIT statement has six different formats: it can be used as a return statement, a break statement, a continue statement, an end marker or to leave a procedure.

Exceptions are raised by a RAISE statement and caught with a handler, or declarative, defined in the DECLARATIVES portion of the procedure division. Declaratives are sections beginning with a USE statement which specify the errors to handle. Exceptions can be names or objects. RESUME is used in a declarative to jump to the statement after the one that raised the exception or to a procedure outside the DECLARATIVES. Unlike other languages, uncaught exceptions may not terminate the program and the program can proceed unaffected.

I/O

File I/O is handled by the self-describing OPEN, CLOSE, READ, and WRITE statements along with a further three: REWRITE, which updates a record; START, which selects subsequent records to access by finding a record with a certain key; and UNLOCK, which releases a lock on the last record accessed.

User interaction is done using ACCEPT and DISPLAY.

Data manipulation

The following verbs manipulate data:

  • INITIALIZE, which sets data items to their default values.
  • MOVE, which assigns values to data items.
  • SET, which has 15 formats: it can modify indices, assign object references and alter table capacities, among other functions.
  • ADD, SUBTRACT, MULTIPLY, DIVIDE, and COMPUTE, which handle arithmetic (with COMPUTE assigning the result of a formula to a variable).
  • ALLOCATE and FREE, which handle dynamic memory.
  • VALIDATE, which validates and distributes data as specified in an item's description in the data division.
  • STRING and UNSTRING, which concatenate and split strings, respectively.
  • INSPECT, which tallies or replaces instances of specified substrings within a string.
  • SEARCH, which searches a table for the first entry satisfying a condition.

Files and tables are sorted using SORT and the MERGE verb merges and sorts files. The RELEASE verb provides records to sort and RETURN retrieves sorted records in order.

Scope termination

Some statements, such as IF and READ, may themselves contain statements. Such statements may be terminated in two ways: by a period (implicit termination), which terminates all unterminated statements contained, or by a scope terminator, which terminates the nearest matching open statement.

Nested statements terminated with a period are a common source of bugs. For example, examine the following code:

Here, the intent is to display y and z if condition x is true. However, z will be displayed whatever the value of x because the IF statement is terminated by an erroneous period after DISPLAY y.

Another bug is a result of the dangling else problem, when two IF statements can associate with an ELSE.

In the above fragment, the ELSE associates with the  IF y  statement instead of the  IF x  statement, causing a bug. Prior to the introduction of explicit scope terminators, preventing it would require  ELSE NEXT SENTENCE  to be placed after the inner IF.

Self-modifying code

The original (1959) COBOL specification supported the infamous  ALTER X TO PROCEED TO Y  statement, for which many compilers generated self-modifying code. X and Y are procedure labels, and the single  GO TO  statement in procedure X executed after such an ALTER statement means  GO TO Y  instead. Many compilers still support it, but it was deemed obsolete in the COBOL 1985 standard and deleted in 2002.

Hello, world

A "Hello, world" program in COBOL:

When the â€" now famous â€" "Hello, World!" program example in The C Programming Language was first published in 1978 a similar mainframe COBOL program sample would have been submitted through JCL, very likely using a punch card reader, and 80 column punch cards. The listing below, with an empty DATA DIVISION, was tested using GNU/Linux and the System/370 Hercules emulator running MVS 3.8J. The JCL, written in July 2015, is derived from the Hercules tutorials and samples hosted by Jay Moseley. In keeping with COBOL programming of that era, HELLO, WORLD is displayed in all capital letters.

After submitting the JCL, the MVS console displayed:

Line 10 of the console listing above is highlighted for effect, the highlighting is not part of the actual console output.

The associated compiler listing generated over four pages of technical detail and job run information, for the single line of output from the 14 lines of COBOL.

COBOL  - cobol tutorial
Criticism and defense

Lack of structure

In the 1970s, adoption of the structured programming paradigm was becoming increasingly widespread. Edsger Dijkstra, a preeminent computer scientist, wrote a letter to the editor of Communications of the ACM, published 1975 entitled "How do we tell truths that might hurt?", in which he was critical of COBOL and several other contemporary languages; remarking that "the use of COBOL cripples the mind". In a published dissent to Dijkstra's remarks, the computer scientist Howard E. Tompkins claimed that unstructured COBOL tended to be "written by programmers that have never had the benefit of structured COBOL taught well", arguing that the issue was primarily one of training.

One cause of spaghetti code was the GO TO statement. Attempts to remove GO TOs from COBOL code, however, resulted in convoluted programs and reduced code quality. GO TOs were largely replaced by the PERFORM statement and procedures, which promoted modular programming and gave easy access to powerful looping facilities. However, PERFORM could only be used with procedures so loop bodies were not located where they were used, making programs harder to understand.

COBOL programs were infamous for being monolithic and lacking modularization. COBOL code could only be modularized through procedures, which were found to be inadequate for large systems. It was impossible to restrict access to data, meaning a procedure could access and modify any data item. Furthermore, there was no way to pass parameters to a procedure, an omission Jean Sammet regarded as the committee's biggest mistake. Another complication stemmed from the ability to PERFORM THRU a specified sequence of procedures. This meant that control could jump to and return from any procedure, creating convoluted control flow and permitting a programmer to break the single-entry single-exit rule.

This situation improved as COBOL adopted more features. COBOL-74 added subprograms, giving programmers the ability to control the data each part of the program could access. COBOL-85 then added nested subprograms, allowing programmers to hide subprograms. Further control over data and code came in 2002 when object-oriented programming, user-defined functions and user-defined data types were included.

Nevertheless, much important legacy COBOL software uses unstructured code, which has become unmaintainable. It can be too risky and costly to modify even a simple section of code, since it may be used from unknown places in unknown ways.

Compatibility issues

COBOL was intended to be a highly portable, "common" language. However, by 2001, around 300 dialects had been created. One source of dialects was the standard itself: the 1974 standard was composed of one mandatory nucleus and eleven functional modules, each containing two or three levels of support. This permitted 104,976 official variants.

COBOL-85 was not fully compatible with earlier versions, and its development was controversial. Joseph T. Brophy, the CIO of Travelers Insurance, spearheaded an effort to inform COBOL users of the heavy reprogramming costs of implementing the new standard. As a result, the ANSI COBOL Committee received more than 2,200 letters from the public, mostly negative, requiring the committee to make changes. On the other hand, conversion to COBOL-85 was thought to increase productivity in future years, thus justifying the conversion costs.

Verbose syntax

COBOL syntax has often been criticized for its verbosity. Proponents say that this was intended to make the code self-documenting, easing program maintenance. COBOL was also intended to be easy for programmers to learn and use, while still being readable to non-technical staff such as managers. The desire for readability led to the use of English-like syntax and structural elements, such as nouns, verbs, clauses, sentences, sections, and divisions. Yet by 1984, maintainers of COBOL programs were struggling to deal with "incomprehensible" code and the main changes in COBOL-85 were there to help ease maintenance.

Jean Sammet, a short-range committee member, noted that "little attempt was made to cater to the professional programmer, in fact people whose main interest is programming tend to be very unhappy with COBOL" which she attributed to COBOL's verbose syntax.

Isolation from the computer science community

The COBOL community has always been isolated from the computer science community. No academic computer scientists participated in the design of COBOL: all of those on the committee came from commerce or government. Computer scientists at the time were more interested in fields like numerical analysis, physics and system programming than the commercial file-processing problems which COBOL development tackled. Jean Sammet attributed COBOL's unpopularity to an initial "snob reaction" due to its inelegance, the lack of influential computer scientists participating in the design process and a disdain for business data processing. The COBOL specification used a unique "notation", or metalanguage, to define its syntax rather than the new Backusâ€"Naur form because few committee members had heard of it. This resulted in "severe" criticism.

Later, COBOL suffered from a shortage of material covering it; it took until 1963 for introductory books to appear (with Richard D. Irwin publishing a college textbook on COBOL in 1966). By 1985, there were twice as many books on Fortran and four times as many on BASIC as on COBOL in the Library of Congress. University professors taught more modern, state-of-the-art languages and techniques instead of COBOL which was said to have a "trade school" nature. Donald Nelson, chair of the CODASYL COBOL committee, said in 1984 that "academics ... hate COBOL" and that computer science graduates "had 'hate COBOL' drilled into them". A 2013 poll by Micro Focus found that 20% of university academics thought COBOL was outdated or dead and that 55% believed their students thought COBOL was outdated or dead. The same poll also found that only 25% of academics had COBOL programming on their curriculum even though 60% thought they should teach it. In contrast, in 2003, COBOL featured in 80% of inf ormation systems curricula in the United States, the same proportion as C++ and Java.

There was also significant condescension towards COBOL in the business community from users of other languages, for example FORTRAN or assembler, implying that COBOL could be used only for non-challenging problems and that COBOL programmers were not particularly bright.

Concerns about the design process

Doubts have been raised about the competence of the standards committee. Short-term committee member Howard Bromberg said that there was "little control" over the development process and that it was "plagued by discontinuity of personnel and ... a lack of talent." Jean Sammet and Jerome Garfunkel also noted that changes introduced in one revision of the standard would be reverted in the next, due as much to changes in who was in the standard committee as to objective evidence.

COBOL standards have repeatedly suffered from delays: COBOL-85 arrived five years later than hoped, COBOL 2002 was five years late, and COBOL 2014 was six years late. To combat delays, the standard committee allowed the creation of optional addenda which would add features more quickly than by waiting for the next standard revision. However, some committee members raised concerns about incompatibilities between implementations and frequent modifications of the standard.

Influences on other languages

COBOL's data structures influenced subsequent programming languages. Its record and file structure influenced PL/I and Pascal, and the REDEFINES clause was a predecessor to Pascal's variant records. Explicit file structure definitions preceded the development of database management systems and aggregated data was a significant advance over Fortran's arrays.

COBOL's COPY facility, although considered "primitive", influenced the development of include directives.

The focus on portability and standardization meant programs written in COBOL could be portable and facilitated the spread of the language to a wide variety of hardware platforms and operating systems. Additionally, the well-defined division structure restricts the definition of external references to the Environment Division, which simplifies platform changes in particular.

Learn more »

Paint Tool SAI - Paint Tool Sai Tutorial

Paint Tool SAI  - paint tool sai tutorial

SAI or Easy Paint Tool SAI (ペイントツールSAI) is a lightweight raster graphics editor and painting software for Microsoft Windows developed and published by Systemax Software. Development of the software began on August 2, 2004, and the first alpha version was released on October 13, 2006. SAI's official release (1.0.0) was on February 25, 2008, and an update preview was released shortly after.

The painting application is available in both Japanese, and an official English translation. An unofficial user-made translation for the software also exists. Sai can be purchased directly through the developers' website, and purchases through PayPal are now also accepted in addition to the BitCash and TelecomCredit payment systems that have been available for Japanese users.

Paint Tool SAI is available on Microsoft Windows 98, Me, 2000, XP, Vista, 7, 8, 8.1 and 10.

Paint Tool SAI  - paint tool sai tutorial
Features

SAI is a lightweight painting application. The user interface allows multiple documents to be opened at the same time. The drawing canvas can be both zoomed and rotated using the sliders on the navigator or the hotkeys configured on the keyboard. The toolbar on the top part of the screen also includes a button to mirror the drawing view without mirroring the actual drawing. It is also possible to open multiple viewports to the same document. An application-wide scratchpad (which can be used as a color mixing panel) is provided, which is saved between sessions. Colors can be stored in the swatches panel.

Various raster drawing tools are implemented, such as the Airbrush, Watercolor, Pen, and Marker, which can all be easily customized, and stored in slots in the user interface of the application. There is also a set of vector drawing tools intended for inking, which, like the raster tools, can be configured to be pen pressure-sensitive.

Work can be done on separate layers, which can be grouped and have opacity masks. In addition to this, layers can be masked by clipping them to a lower layer. This allows one to add shading and highlights to an area without creating new masks for the additional layers.

There is also a pen movement and pressure smoothing feature which can be manually configured as to how much effect it has.

Selection tools include the simple square selection, the lasso, and magic wand, which can be configured for anti-aliasing. There is also a selection brush tool, which can be customized like the drawing brush.

SAI comes with a full set of transformation tools that can work on selections, including move, resize, rotate, and a free (perspective) transform. Any series of transforms can be set up and then applied at once to a specific selection minimizing the softening of the image. There are two caveats with using the transform tools that often confuse new users and are not made clear by SAI's sparse included English documentation.

First, SAI includes several tools for creating a selection, but only the rectangular (rubber band) selection tool shows the transformation options. But it does not matter how a selection is initially created, selecting the rectangular selection tool will then show the transformation options which will work fine with it. Effectively the 'rectangular selection' tool button (a dotted rectangle in the tool palette) is also the 'make transform tools visible' tool button.

Second, to apply the transform tools to a selection on a vector layer requires a non-obvious additional step. After creating a raster selection by whatever means, the user must click selection on the menu bar and then click either select points or select strokes from the drop down menu after which the selected points are highlighted and are affected by the transformation tools as expected. Those points remain selected until the menu is opened again and clear selected points is clicked, even if another raster selection is made. Many fairly experienced users assume that the transform tools do not work at all on vector layers. This has been erroneously repeated in some review articles and user provided tutorials around the web, including this Wikipedia article at one point.

Some common features that exist in similar software, such as text layers, gradients, and shape tools, are not implemented, as SAI focuses on drawing and painting, while the final composition is often done using another application. SAI displays white and transparency in the same way, which may cause significant display differences when exporting to another program, such as Adobe Photoshop. There is also no printing functionality, but documents can be exported in a range of popular formats, such as .PSD or .BMP files, in addition to the native .SAI format.

Because the program does not focus on image editing, the only adjustments present are Brightness/Contrast and Hue/Saturation, and therefore no support of level editing, channel extraction, etc. Users may use another program for more complex editing, but when the image is brought back to SAI, its properties may be changed.

SAI also includes linework layers, which can be used instead of manually drawing linework. The linework layer include different tools designed specifically for creating lineart, such as the Line, Curve, Edit, Pressure, and Weight tool.

Paint Tool SAI  - paint tool sai tutorial
Help files

While the SYSTEMAX website unfortunately provides no support and very little information regarding the usage of the program aside from purchase and licensing legalities, the software itself has an in-depth help section detailing the software's operation, customization and individual features, which can be accessed at any time using the F1 key, or the "Help sections" option. The use of these available files can often clear up confusion about the software and its functions. Several online guides and tutorials made by the community are available as well.

Paint Tool SAI  - paint tool sai tutorial
Customization

Various settings and features can be accessed and edited by the user either from the built-in Options dialog, or using the provided misc.ini file in the installation folder which allows additional options and customization. Existing brush presets can be edited, and the user has the choice of adding custom ones by placing bitmap files into the "elemap" folder. New canvas presets, as well as custom brush textures may be added by the user, in the form of grayscale bitmaps.

Paint Tool SAI  - paint tool sai tutorial
References

Paint Tool SAI  - paint tool sai tutorial
External links

  • Official website (Japanese)
  • Official website (English)
  • Fan sites:
    • SAI History by TANE (Japanese)(Japanese)
    • "SAI 101 Archive". Banana Orange blog. Nov 13, 2009. Tutorials  (English) & (Spanish)
    • Paint Tool SAI on social media VKontakte (Russian)
    • Unofficial (English)
    • Unofficial (German)
Learn more »

Dwarf Fortress - Dwarf Fortress Tutorial

Dwarf Fortress  - dwarf fortress tutorial

Dwarf Fortress (officially called Slaves to Armok: God of Blood Chapter II: Dwarf Fortress) is a part construction and management simulation, part roguelike, indie video game created by Tarn and Zach Adams. Freeware and in development since 2002, its first alpha version was released in 2006 and it received attention for being a two-member project surviving solely on donations. The primary game mode is set in a procedurally generated fantasy world in which the player indirectly controls a group of dwarves, and attempts to construct a successful and wealthy underground fortress. Critics praised its complex, emergent gameplay but had mixed reactions to its difficulty. The game influenced Minecra ft and was selected among other games to be featured in the Museum of Modern Art to show the history of video gaming in 2012.

The game has text-based graphics and is open-ended with no main objectives. Before playing, the player has to generate worlds with continents, oceans and histories documenting civilizations. The main game mode, Fortress mode, consists of selecting a suitable site from the generated-world, establishing a successful colony or fortress, combating threats like goblin invasions, generating wealth and taking care of the dwarves. Each dwarf is modeled down to its individual personality, has likes or dislikes and specific trainable skills in various labors. The second main game mode, Adventure mode, is a turn-based, open-ended roguelike where the player starts off as an adventurer in the world and is free to explore, complete quests, or even visit old abandoned fortresses. The combat system is anatomically detailed with combat logs describing organs getting pierced, fat getting bruised and limbs getting severed.

Prior to Dwarf Fortress, Tarn Adams was working on a project called Slaves to Armok: God of Blood which was a role-playing game. By 2004, Adams decided to shift from the original Armok to Dwarf Fortress after the former became difficult to maintain. Adams calls it his life's work and said in 2011, that version 1.0 will not be ready for at least another 20 years, and even after that he would continue to work on it. The game has a cult following and an active online community. As there is no way to win, every fortress, no matter how successful, is usually destroyed somehow. This prompts the unofficial community motto: "Losing is Fun!"

Dwarf Fortress  - dwarf fortress tutorial
Gameplay

Overview and game modes

Dwarf Fortress has three primary game modes which take place in worlds created by the player, where most of the elements are randomly generated. Fortress mode is a construction and management simulation of a colony of dwarves. There are no objectives, with the player being free to decide how to go about managing the colony and making them interact with the environment, thus making it an open-ended and sandbox-style game. Since there is no way to win, it only ends when the entire colony is defeated by the various possible threats or the player decides to abandon the fortress. The visuals are text-based using code page 437 characters in various colors as graphics. Thus, it is full of letters, numbers and symbols; dwarves are represented by the symbol U+263A ☺ , a cat and dog are a white "c" and brown "d", while a giant spider is a grey "S".

Adventure mode is a turn-based, open-ended roguelike where the player starts off as an adventurer. In Legends mode, players can view maps, histories of each civilization and any figure who has lived or died in the generated world. Any noticeable achievement made by the player in any of the two game modes is recorded in the Legends. A testing arena is present, where players can simulate battles between selected units in various conditions.

World generation

The first step in Dwarf Fortress is generating a playable world; only one game can be played per world at a time. The player can adjust certain parameters governing size, savagery, mineral occurrences and the length of history. The map shows symbols representing roads, hills, towns and cities of the various civilizations, and it changes as the generation progresses.

The process involves procedurally-generated basic elements like elevation, rainfall, mineral distribution, drainage and temperature. For example, a high-rainfall and low-drainage area would make a swamp. Areas are thus categorized into biomes, which have two variables: savagery and alignment. They have their own specific type of plant and animal populations. The next phase is erosionâ€"which the drainage simulates. Rivers are created by tracing their paths from the mountains (which get eroded) to its end which is usually an ocean; some form into lakes. The salinity field defines oceans, mangroves or alluvial plains. Names are generated for the biomes and rivers. The names depend on the area's good/evil variable (the alignment) and though in English, they are originally in one of the four in-game languages of dwarves, elves, humans and goblins; these are the four main races in any generated world.

After a few minutes the world is populated and its history develops for the amount of in-game years selected in the history parameter. Civilizations, races and religions spread and wars occur, with the "population" and "deaths" counters increasing. The ticker stops at the designated "years" value, at which point the world can be saved for use in any game mode. Should the player choose to retire a fortress or gets defeated, this world will persist and will become available for further games.

Fortress mode

Basics

When Fortress mode is selected, the player is given the option to choose the embark location in the world. The player can consider the environment, elevations, biome, soil types and mineral concentrations which can pose significant challenges to the development or survival of the fortress. Customizing the colony's supplies, domestic animals and skills are available, but each dwarves' mental and physical attributes are randomly generated. The game describes in detail each dwarf's physical appearance, like hair and facial features. The mental abilities, individual preferences and desires are also randomly generated. Each dwarf's relationships with others and the deities they worship can be viewed.

The player embarks with the expedition team (seven dwarves, their livestock and supplies), and does not have direct control over them. In order to construct and operate the fortress, the player has to designate specific tasks to be performed and the dwarves will go about it. They can be assigned any labors, but their work still depends on their relative skill with it, which can increase as they perform the said task. Some task categories are stone-working, woodworking, metalworking, farming-related and crafts-making; there are further combat-related skills. They are categorized further, such as are leatherworking, butchery, clothesmaking, gem-related, glassmaking, and clay-related industries. Activities take place in workshops which need to be constructed; for example, stills for brewing alcohol. The metal industry has a very important role because it produces weapons and armor for the military, trap components for defense, and high-value furniture and decorations.

Functional mechanics

The player initially can see a top-down view of the surface-level of the fortress site; each layer of a z-axis level can be viewed when the player changes it. An entire underground level would be seen as its entire section of terrain while a mountain at the surface level would have only its section visible with the remaining surface landscape. Thus, for digging, the player can designate, for every z-level starting from the surface, staircases to be carved and at the final designated level, ending the staircase by making it dug into a room.

The geology in Dwarf Fortress is fairly accurate. Rocks like olivine or gabbro can be dug up. The topmost layer usually consists of sand, clay or plain soilâ€"this can be used for underground farming. Deeper levels will be layers of rock; minerals appear in layers or clusters around the right depth. Gems like tourmalines appear in rare clusters. Water is simulated like falling sand, every space can contain up to seven levels of it. A tile having "one" level of water is the lowest while a tile with "seven" is full. There is a system for simulating temperature and heat. Fires can spread and burn dwarves and furniture. There are four basic seasons in an in-game year: spring, summer, autumn and winter.

Mineral ores can be mined just like normal stone and the raw ore can be smelted to produce their corresponding metal bars. Different ores or metal bars can be alloyed together for higher quality materials. For steel production, flux stones are used to make pig iron bars and smelt it with regular iron and coal (or charcoal). Specific metal items can be melted back to their respective bars. Without steel, the alloy bronze or regular iron are the next best suitable metals to use. Bronze requires two ores or bars of tin and copper. The metal adamantine, found deep below, is extremely light but very strong, making it excellent for sharp weapons and armor. Raw adamantine can be extracted into strands and can further be either woven in cloth or smelted into wafers.

Fortress management and growth

Underground farming has customized crops like "Plump Helmet" mushrooms, which can be brewed to make mushroom wine. As the fortress prospers, migrants come in larger numbers from the mountainhome (the colony's home civilization) and will need further accommodation. Trading caravans, which can be from the various neighboring civilizations including the home civilization, visit the fortress on a yearly basis and are useful for getting supplies not available in the player's fortress area. The role of bookkeeper, manager and broker can be assigned to any dwarf during early game. The bookkeeper maintains records of every item present in the fort, the manager auto-assigns jobs and the broker deals with trading caravans. The production of crafts from any material are useful for trading. The caravans come from civilizations of elves and humans but depending on the embark region and history, they may be absent or sometimes even hostile.

Dwarves need to be provided with food and drink (mostly in the form of alcohol). A dwarf will get negative thoughts for drinking plain water and even for drinking the same type of alcohol, making it necessary to grow different crops for producing different drinks. Things like not having a separate bedroom can upset a dwarf. They may make friends and sometimes marry; females give birth. Dwarves can get upset by sustaining injuries, having poor clothing, losing their pets, friends or relatives; interacting with or seeing their corpses can aggravate this. A frustrated dwarf may break furniture or attack others. Continuous stress will cause them to throw tantrums and eventually go insane, whether going berserk and attacking their comrades in a homicidal rage, becoming suicidally depressed and jumping off a cliff, or simply going "stark raving mad" and stumbling around randomly until their untimely death. Their quality of life can be improved by giving them luxurious personal be drooms and a well-decorated dining room, medical care, and providing them with a variety of drinks and well-cooked meals. A chain reaction where a single dwarf's unhappiness causes the entire fortress's population to start throwing tantrums can begin when one dwarf throws a tantrum, attacks and kills another one with many friends, which drastically affects the happiness of many more.

As the fortress expands and develops, new noble positions become available. While regular dwarves will be happy with simple rooms provided to them, dwarves appointed or elected to noble positions will need more luxurious accommodation. Nobles will even make demands and mandates, getting negative thoughts if they are not fulfilled. A justice system is present to punish criminals, for example, dwarves who injure or kill another dwarf or destroy furniture. Occasionally, a vampire dwarf, with a fake background history, may arrive with a migrant wave and start killing and feeding on the other citizens without being noticed.

Inspired dwarves will occasionally get into a "Strange Mood". They will take over a workshop and go searching for the required materials to begin construction of an artifact. If they cannot find the materials, the dwarf will wait at the workshop, demanding it till it is available. After a few in-game weeks, the work results in a legendary artifact, an item so masterfully crafted that it is usually worth more than a beginning fortress' total wealth put together. These artifacts will be added to the world's records and its exact description can be viewed. Through this entire period of being in a strange mood, a dwarf will not eat, drink or sleep and will eventually go insane if prolonged due to any reason.

Threats, defense and dwelling deeper

The first in-game year will usually consist of kobold thieves and goblin snatchers trying to infiltrate the fortress. Thieves try to steal valuables while snatchers try to kidnap dwarven children to raise them as future soldiers. Goblin and kobold civilizations near the fortress will always be hostile and a source of frequent attacks. Wildlife is usually harmless, but depending on the fortress location, more fierce elephants, bears, unicorns, giant spiders and wolves may be a threat. Wealthier and more populated fortresses will get ambushes and sieges from neighboring goblin (or other enemy) civilization. A thriving fortress will attract certain mega-beasts like hydras, titans or dragons, and randomly generated creatures called "Forgotten Beasts". These unique creatures have randomized physical qualities and abilities, thus making them have the potential to be very powerful. Undead attack mainly in evil biomes or if the player embarks with a Necromancer Tower being near the site. Undead are harder to kill, and often reanimate once they are defeated with their body parts being separate units to fight.

Military squads can be assigned to a barracks to train in and a uniform (armor and a weapon) can be chosen. Squads can be directly commanded to attack enemies. Crossbows can be made for ranged attacks and a range with targets can be constructed for training. Walls can be carved into fortifications and be used by ranged-units during attacks. Kennels can be made to train war animals like dogs. Players can use traps and engineering in addition to training an army. Traps can be made by constructing mechanisms and using metal or wood to construct large weapons like spikes, ax blades or cages. More complex lever-operated and pressure plate-triggering trap components are available.

The combat system in Dwarf Fortress is anatomically detailed. Combat is displayed by viewing the log which describes each weapon striking a specific part of the character's body. Internal organs can get punctured, combatants can fall to the ground, vomit and lose body parts. Each dwarf has individually detailed limbs, each with damageable bone, fat, muscle and skin. Fat can be bruised without breaking bones and vice versa. Injuries sometimes can be permanent. There is a medical system where a hospital can be set up containing crutches for disabled dwarves, traction benches, plasters and cloth for casts and bandages, thread for suturing, and splints.

Digging deeper is usually done for finding magma, which as a fuel source, removes the player's dependence on coal or wood. Another reason to dig deeper is for searching for specific raw materials, ores or gems. Magma pools or even bigger magma seas are found while digging into warm rock. Near magma seas, raw adamantine strata can be found. They are shaped like columns, which pass down through the entire magma sea. These columns are hollow and can be broken, revealing an entire shaft leading deeper into the underworld or hell. Underworld creatures are countless and can bring entire fortresses to ruin.

Adventure mode

Adventure mode is the secondary game mode in Dwarf Fortress. Unlike Fortress mode, Adventure mode has the player control a single character. In Adventure mode, character creation works similar to other role-playing games, with the player choosing the name, gender, race and personality of the character. Players also select from a choice of various skills and attributes, such as strength and agility. Like in Fortress mode, these skills further improve normally through exercised use unlike regular experience. They play in the same generated worlds. The character starts off in a random town, depending on the character's race, and can interact with the various non-player characters (NPCs). NPCs can speak about the surrounding areas or offer to follow and help the player. Quests are given via a "rumor" system, where rumors can spread among the NPCs, or players can decide to serve a leader and attain quests from them. Characters can also write poems, books and music compositions, based o n procedurally generated forms and styles. The player can choose to form a site and build using materials they collect. Players can use the quick travel mode to quickly travel between geographical regions.

Like regular characters in Fortress mode, characters have thirst, hunger and exhaustion levels. To survive, they must eat, drink and sleep. They need to take shelter at night when evil creatures like bogeymen come out. In addition to the regular combat mechanism, in this mode, the player can also choose which body parts to strike. A player can visit their retired or ruined fortresses made in Fortress mode. Instead of quitting, the character can be retired, and depending on the player's achievements, their life events will be documented in the Legends mode among the historical figures.

Dwarf Fortress  - dwarf fortress tutorial
History

Early development (2002â€"2006)

One of Tarn and Zach Adams' early works was a text based adventure game called dragslay, written in the BASIC language and influenced by Dungeons and Dragons. This was the brothers' first fantasy project. In high school, Tarn Adams taught himself the C programming language and developed it further. dragslay would later have an important influence on Dwarf Fortress. Adams explained his interest in fantasy games, that he had grown up "surrounded by that sort of thing...along with generic sci-fi, generic fantasy is part of our heritage." Years later, before entering graduate school in mathematics, Adams began working on a project he called Slaves to Armok: God of Blood. It was named after a deity in dragslay, originally named for a variable "arm_ok"â€"which counted the limbs the player still had attached. This new project was a two-dimensional (would later have 3D graphics) isometric fantasy role-playing game in which the play er encountered and fought goblins.

Adams took some time off Armok to work on small side-projects, and another one which would inspire Dwarf Fortress was Mutant Miner. It was turn-based loosely inspired by a game called Miner VGA. Mutant Miner involved the player digging underneath buildings, searching for ores and fighting monsters, and carrying radioactive "goo" back to the surface for application in growing extra limbs and gaining other abilities. Adams was dissatisfied with only having a single miner, and the game began to lag because it was turn-based. Adams said:

[I]nstead of rewriting the game, I thought, well maybe it should be dwarves instead. And it should be real-time to combat the [lag] problem. Now, you'd be digging out minerals in a mountain, combating threats inside, and making little workshops. Then I thought, well, how should the high score list work? We really like to keep records of plays. Not just high score lists, but expansive logs. So we'll often try to think of ways to play with the idea. This time, the idea was to let your adventurer come into the fortress after you lose and find the goblets you've made, and journals it generates.

First release (2006)

Adams began working on Dwarf Fortress in October 2002, estimating that the project would take two months, but suspended development soon after, in order to finish his previous work, Armok. He explained that it began like the 1982 arcade game Dig Dug. The Adams brothers started the Bay 12 Games company, launching its website and releasing their games online. Armok became harder to maintain due to him focusing on adding features to Dwarf Fortress instead, in addition to its inferior code and 3D graphics. By 2004, Adams announced on his website that he would be switching his main project to Dwarf Fortress after he struggled to continue working on it. Adams explained that it would be a simulation game with dwarves but kept Adventure mode as a surprise feature, which was revealed during its release. At that time, his fan base consisted of a few dozen people and more came in when he made this announcement. He put up a PayPal button after a reque st from a fan; similarly, a subscriber system was added later. In the next five months, they made around $300, which brought in only enough to cover the site's $20 hosting cost. He dubbed the game as Slaves to Armok, God of Blood II: Dwarf Fortress; Adams explained that it was a sequel because it continued to work on much of Armok's code but said its cumbersome name was mostly "for kicks."

Adams decided to focus on the game's development full-time during his first year of his math post-doctorate at Texas A&M in 2006. The university offered him $50,000 if he would stay another year. Adams agreed and commented on this, "I woke up the morning after I gave notice, like, I can actually make this work." Later, Adams expected he would use his $15,000 savings for a year and then have to get a job in order to support himself because the game had not been released yet. Development continued till 8 August 2006, when the first alpha version (version 0.21.93.19a) was released. Donations reached $800â€"$1000 in the following months, this average increased gradually until they were financially stable. He then decided to solely rely on donations.

Development (2007â€"present)

Adams did not use the 3D graphics which Armok had since its development was hampered because of it. He cited the ease in development of features like fluid simulation, copyright issues with the art and more unhindered possibilities as further reasons for not using it. Being used to the text-based graphics in roguelikes, he did not want graphical tilesets. The story-generation originated first from Armok, although present to some extent in dragslay. Tarn and Zach would write different chapters of events they would like to see, mix it together and try to implement it. Most of this story writing is managed by Zach, who has a role in the game's development. He graduated in ancient history and books like The Twelve Caesars and the writings of Assyrian kings influenced the game.

Hack, Starflight and the Ultima series were Adams' main influences. The roguelike Hack (1985) because of its randomly generated levels, deceased character persistence and detailed mechanics. Adams cited Ultima series as the inspiration for his generated worlds. The body part and wound system was inspired by 1990 role-playing game Cyberpunk 2020. He prefers modeling on individual elements, rather than entire systems, for better simulations with the outcomes being under his control. He said midpoint displacement generates the elevation of the world and its initial basic elements use fractals, which give it an overall natural look. He further explained that he made an algorithm to simulate rain shadows which occur in areas at the side of mountain deserts. For the distinct personalities of each unit, he took it from NEO PI-R test of which he admitted knowing little about. The feature of carps eating dwarves was unexpected when the game was rel eased. He had written them having the same size and carps were designed to be carnivorous. A part of the game he felt tough, was implementing an A* search algorithm for pathfinding in any in-game character which, depending on their numbers and complexity of the path, can cause a heavy load on a computer. Adams composed the game's flamenco-inspired music.

A z-axis was introduced in the 2008 release because he felt the limitations with a single plane increasing; the feature of making various constructions like walls was also added at this time. In the earlier version, players could dig only into a mountainside and not underground because of having only one "z-level", thus it was considered "2D". This was significantly easier to maintain due to the limited playable area. Adams commented that this major change was further difficult to implement because of considering details like fluid mechanics and cave-ins. Vampiric and lycanthropic infections with necromancers and undead were added in 2012.

On his reliance on PayPal donations, Adams says he is content since he feels that people really like his work or they would not pay. Adams said that donations remain stable except during a new version update, where there is a sudden increase. Their expenses being low, he has maintained that he is happy as long as the game is self-sustaining and will not charge for it. In 2011, Adams refused a job offer from an unspecified major game developer and a $300,000 deal to license the name Dwarf Fortress from another company. Adams felt that this amount would not equate to long-term donations and that he prefers working on his ownâ€"not being part of the gaming industry. Adams said, "Barely in the black one month, a little in the red another month. ... It's a risk I'm willing to take, and really I couldn't have it any other way." He has spent no money on advertising and was happy when bloggers, reviewers like former game journalist Kieron Gillen from PC Gamer and Games fo r Windows, wrote about his game. In 2015, Bay 12 Games set up a Patreon account to help fund it.

Further updates

As of July 2016, the latest update was version 0.43.05, with it completing 14 years in development despite being in alpha version. Adams and his brother have a to-do list of features the game should have before version 1.0 and the version number is the percentage progress of its completion. He says he has been able to maintain focus by shifting his attention to different aspects of the game, given its large coverage. While regular game development aim to perfect their work for release, he considers that a drawback since he continues exploring and learning while adding new features. Wired and Rock, Paper, Shotgun called some of its bug fixes unintentional and funny, with PC Gamer saying it makes an entertaining RSS feed to subscribe to. Adams has two favorite bugs. One is about a farmer dwarf planting his own bed. The other involves a dwarven executioner, with broken arms unable to use his hammer, delivering punishments by biting his victims and tearing off their limb s, keeping one in his mouth for years.

Adams considers Dwarf Fortress his life's work, and has stated in 2011 that he does not expect version 1.0 to be released for at least another twenty years, and even after that, he would still continue to update it. Adams calls his game an open-ended "story generator". The game's code base is proprietary, and Adams has stated he has no plans to release it into the open source domain, citing the risk of them going into financial trouble. He explained he would consider releasing its source if he could not maintain it anymore, seeing different game developers taking it up. He says that he does not mind any modifications as long as he is not put into risk.

Adams describes version 1.0 having an Adventure mode that would be a regular role-playing game, with changing plots and ordering subordinates to perform various tasks. Fortress mode would have a closer relationship with the outside generated world through war, trade and diplomacy. The world being bigger; he envisions the game to have many more features like magic, a tutorial, and a better interface. According to him, a tutorial is a burden because of the additional need of updating it and interface improvement is not a major priority till thenâ€"citing numerous existing fan-made applications for improving the game's interface. He said of version 1.0, "sitting down with a fresh DF world would be like sitting down to read a middling fantasy author you haven't read before, but with all the extras that being a video game provides, including the ability to write your own sequels." Modern in-game technologies and 3D graphics were fan requests Adams said he would never implement, yet sho wing ambivalence about the latter if the task was easy enough.

Dwarf Fortress  - dwarf fortress tutorial
Reception

The game received attention mainly because of its emergent gameplay, text-based graphics, complexity, poor interface and difficulty, with some reviewers describing playing the game from start as a steep learning curveâ€"with the meaning of a difficult learning process. It has been compared to other simulations games like SimCity and The Sims, Dungeon Keeper and roguelike games like NetHack. The game has not had much influence on the mainstream gaming industry because of its non-commercial nature. It being a two-man self-sustaining project, and Adams' independence and capability to follow his own ideas were highlighted. Gamasutra said, "There have been few indie gaming success stories as big as Dwarf Fortress" and Wired magazine, following one of its updates, described it as an "obtuse, wildly ambitious work-in-progress mashes the brutal dungeon crawling of roguelikes with the detail-oriented creativity of city-building sims."

The depth and complexity were praised. Jonah Weiner from The New York Times stated, "Many simulation games offer players a bag of building blocks, but few dangle a bag as deep, or blocks as small and intricately interlocking, as Dwarf Fortress." PC Gamer's Steve Hogarty commented, "Dwarf Fortress's reluctance to expend even a joule of energy in prettying itself results in astonishing hidden complexity." Regarding the open-ended nature and emergent gameplay, Rock, Paper, Shotgun's Graham Smith concluded that its procedurally generated world combined with the every character simulated "down to the most minute detail", the results are "often hilarious, occasionally tragic, and always surprising." Mike Rose from Gamasutra said, "...to an outsider looking in on this game so many years into development, with such a wide scope of features and potential play styles, it's fair to say that getting into Dwarf Fortress is perhaps one of the most daunting tas ks the video game industry as a whole can provide."

The lack of graphics, poor interface and controls were seen as the reasons for the game's difficulty. However, the reviewers also noted most of it having a role in gameplay and the argument that the text-based graphics forces players to use their own imagination, making it more engaging. Weiner wrote, "[the game] may not look real, but once you're hooked, it feels vast, enveloping, alive. A micro-manager's dream, the game gleefully blurs the distinction between painstaking labor and creative thrill." Quintin Smith from Rock, Paper, Shotgun said, "The interface has a tough job to do, bless it, but getting it to do what you want is like teaching a beetle to cook." Ars Technica's Casey Johnston highlighted the difficulty in performing basic actions and felt that tinkering or experimenting ended up being unproductive; she compared it to "trying to build a skyscraper by banging two rocks together". She pointed out the lack of in-game tutorial and said how players can learn by themselve s in other games, which are also open-ended or have intuitive mechanics, but in Dwarf Fortress, there is no autonomy "even after hours" of gameplay.

Dwarf Fortress  - dwarf fortress tutorial
Community

Dwarf Fortress has attracted a significant cult following. Web communities on the game came up on Something Awful forums besides on Bay 12 Games. The game's difficulty, with most fortresses eventually succumbing to various forms of defeat, and to encourage further experimentation through it led to its unofficial slogan "Losing is fun!" Adams said that it was originally from the manual and there as a consolation for players to get a grip on the issue of permadeath. The game's official podcast is called "Dwarf Fortress Talk", where Tarn and Zach answer questions from players. They send out crayon drawings or short stories to the donors, customized to their requests and display the highest donors on their website. Adams said that some fans who donated but have not played the gameâ€"just there for reading the stories. Besides donations, Adams said some fans have given computers while others have directly helped him with the game development. A community member ported it to Mac and Linux for free and other volunteers handle the bug tracking system.

Players and members of the community have often written creative interpretations of game events. They have made diaries, short videos, comics and audio depicting their stories whether it involved success or defeat. Besides testing the game, sharing it with others and supporting it through donations, they make suggestions, help newcomers, share stories, and information in the Bay 12 Games forums. They maintain the dedicated wiki; there are also fan-organized podcasts and meet-ups. In 2006, a saga called "Boatmurdered" where fans passed around a single fortress and each played the game and saved it before sending it to another, was portrayed in detail from the start to its destructive end. This spread around gaming sites and boosted the game's popularity. There have been tutorials on YouTube with one being a 15-part series, and another 12-part written series called "The Complete and Utter Newby Tutorial for Dwarf Fortress". An illustrated guide to the game, called Getting Started with Dwarf Fortress: Learn to play the most complex video game ever made was released by technology publisher O'Reilly Media in 2012 written by Peter Tyson. Containing 240 pages, it has a foreword from Adams and is updated along with the game's development.

On the game's community, Adams said, "They are the reason I've been able to make the step from hobbyist to full-time developer. I'm lucky to be able to run with whatever ideas we have and try new things." On players sending him forum posts or emails detailing their stories or events that happened during the game, Adams said, "It's really gratifying, because it's one of the things we set out to do is to get people to write these narratives about their game." Adams has admitted that some feats of the community surprised even him. Adams stated that the most impressive thing he had ever seen done with the game was when a player managed to create a Turing-complete 8-bit computer powered by dwarves.

There are third-party utilities and mods for the game like "Dwarf Therapist" which helps the player in managing toggling labors and skills. Another one called "Stonesense" with the help of "DFHack", a library, can render the game in a 3D isometric view. A "DF to Minecraft" utility was developed where players could load their in-game works to be able to view it while playing Minecraft. He acknowledged the role of the community in supporting development and has endorsed third-party tools, visualizers and interface code; He said that he admired these third-party developers since they managed to complete their work in spite of his game being closed-source.

On 11 June 2016 an event called Dwarfmoot was held at Mox Boarding House in Bellevue, Washington to celebrate the ten-year anniversary of the game since its first release. It was organized by video game developer Kinnon Stephens. The Adams brothers and Richard Garfield, the creator of Magic: The Gathering, attended it.

Dwarf Fortress  - dwarf fortress tutorial
Legacy

The game influenced Minecraft, which reviewers considered a more user-friendly version of Dwarf Fortress. Adams says he is thankful for the Minecraft developers citing his game because that drew more players. There have been other games inspired by the game but they have largely failed to replicate its visual style and depth. Homages to the game appear in World of Warcraft. In July 2014, the game won a poll conducted by Turtle Beach as the community's most "Beautiful Game"; games were nominated by fans posting videos, images or text, and a list was compiled by the community which also contained The Legend of Zelda: The Wind Waker, Far Cry 3 and The Last of Us. Justin Ma, one of the developers of FTL: Faster Than Light, commented on its use of text-based graphics, "Part of the reason Dwarf Fortress can include a breadth of mechanics unseen in other games is because complex mechanics are expressed in the most simple of v isual forms." Gaslamp Games cited it as one their main influences for the game Clockwork Empires. In 2015, Rock, Paper, Shotgun ranked Dwarf Fortress 7th on its The 50 Best Free Games On PC list.

In March 2013, the Museum of Modern Art in New York City exhibited Dwarf Fortress among other games selected to depict the history of video gaming. As new updates are made available, the Museum of Modern Art instantly downloads them and archives them in their secure server. Curator of the exhibition, Paola Antonelli, said she was amazed by the combination of "beautiful aesthetics" and "mind-boggling" complexity in the game.

Game designer Craig Ellsworth commended Dwarf Fortress for having a uniquely long "staying power". According to Ellsworth, it will not be replaced by any other more advanced game of its genre, partly because of it being the pioneer of its own and since it is on PC; console games get replaced faster. He wrote, "There is simply no such thing as a flashier Dwarf Fortress, and there can't be, by definition." Other reasons, according to him, were it being free and its long development period with its design to be "never-ending". He predicted the game will be most popular at its final release, with its legacy being more than just historic value. He pointed out that people like the game in its present condition; they will continue playing it more ardently, as long as it keeps developing, especially with new additions and features. He compared it to the board game Monopoly and the card game Magic: The Gathering. Ellsworth finally said that the game is either a "one-time fluke" or will inspire "a rise of ultra-small indies" with similar financial setups.

Learn more »