diff --git a/Chapter04_FirstWebScraper.ipynb b/Chapter04_FirstWebScraper.ipynb new file mode 100644 index 0000000..58850e8 --- /dev/null +++ b/Chapter04_FirstWebScraper.ipynb @@ -0,0 +1,178 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing Your First Web Scraper" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b'\\n\\nA Useful Page\\n\\n\\n

An Interesting Title

\\n
\\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n
\\n\\n\\n'\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "\n", + "html = urlopen('http://pythonscraping.com/pages/page1.html')\n", + "print(html.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "

An Interesting Title

\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "\n", + "html = urlopen('http://www.pythonscraping.com/pages/page1.html')\n", + "bs = BeautifulSoup(html.read(), 'html.parser')\n", + "print(bs.h1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "\n", + "html = urlopen('https://en.wikipedia.org/wiki/Iron_Gwazi')\n", + "bs = BeautifulSoup(html.read(), 'html.parser')\n", + "# 'class':['mw-file-description']\n", + "#bs.find_all(attrs={'class': ['mw-ui-icon-wikimedia-listBullet', 'vector-icon']})\n", + "\n", + "bs.find_all(_class='mw-ui-icon-wikimedia-listBullet')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The server could not be found!\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from urllib.error import HTTPError\n", + "from urllib.error import URLError\n", + "\n", + "try:\n", + " html = urlopen(\"https://pythonscrapingthisurldoesnotexist.com\")\n", + "except HTTPError as e:\n", + " print(\"The server returned an HTTP error\")\n", + "except URLError as e:\n", + " print(\"The server could not be found!\")\n", + "else:\n", + " print(html.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "

An Interesting Title

\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from urllib.error import HTTPError\n", + "from bs4 import BeautifulSoup\n", + "\n", + "\n", + "def getTitle(url):\n", + " try:\n", + " html = urlopen(url)\n", + " except HTTPError as e:\n", + " return None\n", + " try:\n", + " bsObj = BeautifulSoup(html.read(), \"lxml\")\n", + " title = bsObj.body.h1\n", + " except AttributeError as e:\n", + " return None\n", + " return title\n", + "\n", + "\n", + "title = getTitle(\"http://www.pythonscraping.com/pages/page1.html\")\n", + "if title == None:\n", + " print(\"Title could not be found\")\n", + "else:\n", + " print(title)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Chapter05_AdvancedHTMLParsing.ipynb b/Chapter05_AdvancedHTMLParsing.ipynb new file mode 100644 index 0000000..987715d --- /dev/null +++ b/Chapter05_AdvancedHTMLParsing.ipynb @@ -0,0 +1,1058 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "

War and Peace

\n", + "

Chapter 1

\n", + "
\n", + "\"Well, Prince, so Genoa and Lucca are now just family estates of the\n", + "Buonapartes. But I warn you, if you don't tell me that this means war,\n", + "if you still try to defend the infamies and horrors perpetrated by\n", + "that Antichrist- I really believe he is Antichrist- I will have\n", + "nothing more to do with you and you are no longer my friend, no longer\n", + "my 'faithful slave,' as you call yourself! But how do you do? I see\n", + "I have frightened you- sit down and tell me all the news.\"\n", + "

\n", + "It was in July, 1805, and the speaker was the well-known Anna\n", + "Pavlovna Scherer, maid of honor and favorite of the Empress Marya\n", + "Fedorovna. With these words she greeted Prince Vasili Kuragin, a man\n", + "of high rank and importance, who was the first to arrive at her\n", + "reception. Anna Pavlovna had had a cough for some days. She was, as\n", + "she said, suffering from la grippe; grippe being then a new word in\n", + "St. Petersburg, used only by the elite.\n", + "

\n", + "All her invitations without exception, written in French, and\n", + "delivered by a scarlet-liveried footman that morning, ran as follows:\n", + "

\n", + "\"If you have nothing better to do, Count [or Prince], and if the\n", + "prospect of spending an evening with a poor invalid is not too\n", + "terrible, I shall be very charmed to see you tonight between 7 and 10-\n", + "Annette Scherer.\"\n", + "

\n", + "\"Heavens! what a virulent attack!\" replied the prince, not in the\n", + "least disconcerted by this reception. He had just entered, wearing\n", + "an embroidered court uniform, knee breeches, and shoes, and had\n", + "stars on his breast and a serene expression on his flat face. He spoke\n", + "in that refined French in which our grandfathers not only spoke but\n", + "thought, and with the gentle, patronizing intonation natural to a\n", + "man of importance who had grown old in society and at court. He went\n", + "up to Anna Pavlovna, kissed her hand, presenting to her his bald,\n", + "scented, and shining head, and complacently seated himself on the\n", + "sofa.\n", + "

\n", + "\"First of all, dear friend, tell me how you are. Set your friend's\n", + "mind at rest,\" said he without altering his tone, beneath the\n", + "politeness and affected sympathy of which indifference and even\n", + "irony could be discerned.\n", + "

\n", + "\"Can one be well while suffering morally? Can one be calm in times\n", + "like these if one has any feeling?\" said Anna Pavlovna. \"You are\n", + "staying the whole evening, I hope?\"\n", + "

\n", + "\"And the fete at the English ambassador's? Today is Wednesday. I\n", + "must put in an appearance there,\" said the prince. \"My daughter is\n", + "coming for me to take me there.\"\n", + "

\n", + "\"I thought today's fete had been canceled. I confess all these\n", + "festivities and fireworks are becoming wearisome.\"\n", + "

\n", + "\"If they had known that you wished it, the entertainment would\n", + "have been put off,\" said the prince, who, like a wound-up clock, by\n", + "force of habit said things he did not even wish to be believed.\n", + "

\n", + "\"Don't tease! Well, and what has been decided about Novosiltsev's\n", + "dispatch? You know everything.\"\n", + "

\n", + "\"What can one say about it?\" replied the prince in a cold,\n", + "listless tone. \"What has been decided? They have decided that\n", + "Buonaparte has burnt his boats, and I believe that we are ready to\n", + "burn ours.\"\n", + "

\n", + "Prince Vasili always spoke languidly, like an actor repeating a\n", + "stale part. Anna Pavlovna Scherer on the contrary, despite her forty\n", + "years, overflowed with animation and impulsiveness. To be an\n", + "enthusiast had become her social vocation and, sometimes even when she\n", + "did not feel like it, she became enthusiastic in order not to\n", + "disappoint the expectations of those who knew her. The subdued smile\n", + "which, though it did not suit her faded features, always played\n", + "round her lips expressed, as in a spoiled child, a continual\n", + "consciousness of her charming defect, which she neither wished, nor\n", + "could, nor considered it necessary, to correct.\n", + "

\n", + "In the midst of a conversation on political matters Anna Pavlovna\n", + "burst out:\n", + "

\n", + "\"Oh, don't speak to me of Austria. Perhaps I don't understand\n", + "things, but Austria never has wished, and does not wish, for war.\n", + "She is betraying us! Russia alone must save Europe. Our gracious\n", + "sovereign recognizes his high vocation and will be true to it. That is\n", + "the one thing I have faith in! Our good and wonderful sovereign has to\n", + "perform the noblest role on earth, and he is so virtuous and noble\n", + "that God will not forsake him. He will fulfill his vocation and\n", + "crush the hydra of revolution, which has become more terrible than\n", + "ever in the person of this murderer and villain! We alone must\n", + "avenge the blood of the just one.... Whom, I ask you, can we rely\n", + "on?... England with her commercial spirit will not and cannot\n", + "understand the Emperor Alexander's loftiness of soul. She has\n", + "refused to evacuate Malta. She wanted to find, and still seeks, some\n", + "secret motive in our actions. What answer did Novosiltsev get? None.\n", + "The English have not understood and cannot understand the\n", + "self-abnegation of our Emperor who wants nothing for himself, but only\n", + "desires the good of mankind. And what have they promised? Nothing! And\n", + "what little they have promised they will not perform! Prussia has\n", + "always declared that Buonaparte is invincible, and that all Europe\n", + "is powerless before him.... And I don't believe a word that Hardenburg\n", + "says, or Haugwitz either. This famous Prussian neutrality is just a\n", + "trap. I have faith only in God and the lofty destiny of our adored\n", + "monarch. He will save Europe!\"\n", + "

\n", + "She suddenly paused, smiling at her own impetuosity.\n", + "

\n", + "\"I think,\" said the prince with a smile, \"that if you had been\n", + "sent instead of our dear Wintzingerode you would have captured the\n", + "King of Prussia's consent by assault. You are so eloquent. Will you\n", + "give me a cup of tea?\"\n", + "

\n", + "\"In a moment. A propos,\" she added, becoming calm again, \"I am\n", + "expecting two very interesting men tonight, le Vicomte de Mortemart,\n", + "who is connected with the Montmorencys through the Rohans, one of\n", + "the best French families. He is one of the genuine emigres, the good\n", + "ones. And also the Abbe Morio. Do you know that profound thinker? He\n", + "has been received by the Emperor. Had you heard?\"\n", + "

\n", + "\"I shall be delighted to meet them,\" said the prince. \"But tell me,\"\n", + "he added with studied carelessness as if it had only just occurred\n", + "to him, though the question he was about to ask was the chief motive\n", + "of his visit, \"is it true that the Dowager Empress wants Baron Funke\n", + "to be appointed first secretary at Vienna? The baron by all accounts\n", + "is a poor creature.\"\n", + "

\n", + "Prince Vasili wished to obtain this post for his son, but others\n", + "were trying through the Dowager Empress Marya Fedorovna to secure it\n", + "for the baron.\n", + "

\n", + "Anna Pavlovna almost closed her eyes to indicate that neither she\n", + "nor anyone else had a right to criticize what the Empress desired or\n", + "was pleased with.\n", + "

\n", + "\"Baron Funke has been recommended to the Dowager Empress by her\n", + "sister,\" was all she said, in a dry and mournful tone.\n", + "

\n", + "As she named the Empress, Anna Pavlovna's face suddenly assumed an\n", + "expression of profound and sincere devotion and respect mingled with\n", + "sadness, and this occurred every time she mentioned her illustrious\n", + "patroness. She added that Her Majesty had deigned to show Baron\n", + "Funke, and again her face clouded over with sadness.\n", + "

\n", + "The prince was silent and looked indifferent. But, with the\n", + "womanly and courtierlike quickness and tact habitual to her, Anna\n", + "Pavlovna wished both to rebuke him (for daring to speak he had done of\n", + "a man recommended to the Empress) and at the same time to console him,\n", + "so she said:\n", + "

\n", + "\"Now about your family. Do you know that since your daughter came\n", + "out everyone has been enraptured by her? They say she is amazingly\n", + "beautiful.\"\n", + "

\n", + "The prince bowed to signify his respect and gratitude.\n", + "

\n", + "\"I often think,\" she continued after a short pause, drawing nearer\n", + "to the prince and smiling amiably at him as if to show that\n", + "political and social topics were ended and the time had come for\n", + "intimate conversation- \"I often think how unfairly sometimes the\n", + "joys of life are distributed. Why has fate given you two such splendid\n", + "children? I don't speak of Anatole, your youngest. I don't like\n", + "him,\" she added in a tone admitting of no rejoinder and raising her\n", + "eyebrows. \"Two such charming children. And really you appreciate\n", + "them less than anyone, and so you don't deserve to have them.\"\n", + "

\n", + "And she smiled her ecstatic smile.\n", + "

\n", + "\"I can't help it,\" said the prince. \"Lavater would have said I\n", + "lack the bump of paternity.\"\n", + "

\n", + "\"Don't joke; I mean to have a serious talk with you. Do you know I\n", + "am dissatisfied with your younger son? Between ourselves\" (and her\n", + "face assumed its melancholy expression), \"he was mentioned at Her\n", + "Majesty's and you were pitied....\"\n", + "

\n", + "The prince answered nothing, but she looked at him significantly,\n", + "awaiting a reply. He frowned.\n", + "

\n", + "\"What would you have me do?\" he said at last. \"You know I did all\n", + "a father could for their education, and they have both turned out\n", + "fools. Hippolyte is at least a quiet fool, but Anatole is an active\n", + "one. That is the only difference between them.\" He said this smiling\n", + "in a way more natural and animated than usual, so that the wrinkles\n", + "round his mouth very clearly revealed something unexpectedly coarse\n", + "and unpleasant.\n", + "

\n", + "\"And why are children born to such men as you? If you were not a\n", + "father there would be nothing I could reproach you with,\" said Anna\n", + "Pavlovna, looking up pensively.\n", + "

\n", + "\"I am your faithful slave and to you alone I can confess that my\n", + "children are the bane of my life. It is the cross I have to bear. That\n", + "is how I explain it to myself. It can't be helped!\"\n", + "

\n", + "He said no more, but expressed his resignation to cruel fate by a\n", + "gesture. Anna Pavlovna meditated.\n", + "
\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "html = urlopen('http://www.pythonscraping.com/pages/warandpeace.html')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "print(bs)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "html = urlopen('http://www.pythonscraping.com/pages/warandpeace.html')\n", + "bs = BeautifulSoup(html, \"html.parser\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Well, Prince, so Genoa and Lucca are now just family estates of the\n", + "Buonapartes. But I warn you, if you don't tell me that this means war,\n", + "if you still try to defend the infamies and horrors perpetrated by\n", + "that Antichrist- I really believe he is Antichrist- I will have\n", + "nothing more to do with you and you are no longer my friend, no longer\n", + "my 'faithful slave,' as you call yourself! But how do you do? I see\n", + "I have frightened you- sit down and tell me all the news.\n", + "Anna\n", + "Pavlovna Scherer\n", + "Empress Marya\n", + "Fedorovna\n", + "Prince Vasili Kuragin\n", + "Anna Pavlovna\n", + "St. Petersburg\n", + "If you have nothing better to do, Count [or Prince], and if the\n", + "prospect of spending an evening with a poor invalid is not too\n", + "terrible, I shall be very charmed to see you tonight between 7 and 10-\n", + "Annette Scherer.\n", + "Heavens! what a virulent attack!\n", + "the prince\n", + "Anna Pavlovna\n", + "First of all, dear friend, tell me how you are. Set your friend's\n", + "mind at rest,\n", + "Can one be well while suffering morally? Can one be calm in times\n", + "like these if one has any feeling?\n", + "Anna Pavlovna\n", + "You are\n", + "staying the whole evening, I hope?\n", + "And the fete at the English ambassador's? Today is Wednesday. I\n", + "must put in an appearance there,\n", + "the prince\n", + "My daughter is\n", + "coming for me to take me there.\n", + "I thought today's fete had been canceled. I confess all these\n", + "festivities and fireworks are becoming wearisome.\n", + "If they had known that you wished it, the entertainment would\n", + "have been put off,\n", + "the prince\n", + "Don't tease! Well, and what has been decided about Novosiltsev's\n", + "dispatch? You know everything.\n", + "What can one say about it?\n", + "the prince\n", + "What has been decided? They have decided that\n", + "Buonaparte has burnt his boats, and I believe that we are ready to\n", + "burn ours.\n", + "Prince Vasili\n", + "Anna Pavlovna\n", + "Anna Pavlovna\n", + "Oh, don't speak to me of Austria. Perhaps I don't understand\n", + "things, but Austria never has wished, and does not wish, for war.\n", + "She is betraying us! Russia alone must save Europe. Our gracious\n", + "sovereign recognizes his high vocation and will be true to it. That is\n", + "the one thing I have faith in! Our good and wonderful sovereign has to\n", + "perform the noblest role on earth, and he is so virtuous and noble\n", + "that God will not forsake him. He will fulfill his vocation and\n", + "crush the hydra of revolution, which has become more terrible than\n", + "ever in the person of this murderer and villain! We alone must\n", + "avenge the blood of the just one.... Whom, I ask you, can we rely\n", + "on?... England with her commercial spirit will not and cannot\n", + "understand the Emperor Alexander's loftiness of soul. She has\n", + "refused to evacuate Malta. She wanted to find, and still seeks, some\n", + "secret motive in our actions. What answer did Novosiltsev get? None.\n", + "The English have not understood and cannot understand the\n", + "self-abnegation of our Emperor who wants nothing for himself, but only\n", + "desires the good of mankind. And what have they promised? Nothing! And\n", + "what little they have promised they will not perform! Prussia has\n", + "always declared that Buonaparte is invincible, and that all Europe\n", + "is powerless before him.... And I don't believe a word that Hardenburg\n", + "says, or Haugwitz either. This famous Prussian neutrality is just a\n", + "trap. I have faith only in God and the lofty destiny of our adored\n", + "monarch. He will save Europe!\n", + "I think,\n", + "the prince\n", + "that if you had been\n", + "sent instead of our dear Wintzingerode you would have captured the\n", + "King of Prussia's consent by assault. You are so eloquent. Will you\n", + "give me a cup of tea?\n", + "Wintzingerode\n", + "King of Prussia\n", + "In a moment. A propos,\n", + "I am\n", + "expecting two very interesting men tonight, le Vicomte de Mortemart,\n", + "who is connected with the Montmorencys through the Rohans, one of\n", + "the best French families. He is one of the genuine emigres, the good\n", + "ones. And also the Abbe Morio. Do you know that profound thinker? He\n", + "has been received by the Emperor. Had you heard?\n", + "le Vicomte de Mortemart\n", + "Montmorencys\n", + "Rohans\n", + "Abbe Morio\n", + "the Emperor\n", + "I shall be delighted to meet them,\n", + "the prince\n", + "But tell me,\n", + "is it true that the Dowager Empress wants Baron Funke\n", + "to be appointed first secretary at Vienna? The baron by all accounts\n", + "is a poor creature.\n", + "Prince Vasili\n", + "Dowager Empress Marya Fedorovna\n", + "the baron\n", + "Anna Pavlovna\n", + "the Empress\n", + "Baron Funke has been recommended to the Dowager Empress by her\n", + "sister,\n", + "the Empress\n", + "Anna Pavlovna's\n", + "Her Majesty\n", + "Baron\n", + "Funke\n", + "The prince\n", + "Anna\n", + "Pavlovna\n", + "the Empress\n", + "Now about your family. Do you know that since your daughter came\n", + "out everyone has been enraptured by her? They say she is amazingly\n", + "beautiful.\n", + "The prince\n", + "I often think,\n", + "I often think how unfairly sometimes the\n", + "joys of life are distributed. Why has fate given you two such splendid\n", + "children? I don't speak of Anatole, your youngest. I don't like\n", + "him,\n", + "Anatole\n", + "Two such charming children. And really you appreciate\n", + "them less than anyone, and so you don't deserve to have them.\n", + "I can't help it,\n", + "the prince\n", + "Lavater would have said I\n", + "lack the bump of paternity.\n", + "Don't joke; I mean to have a serious talk with you. Do you know I\n", + "am dissatisfied with your younger son? Between ourselves\n", + "he was mentioned at Her\n", + "Majesty's and you were pitied....\n", + "The prince\n", + "What would you have me do?\n", + "You know I did all\n", + "a father could for their education, and they have both turned out\n", + "fools. Hippolyte is at least a quiet fool, but Anatole is an active\n", + "one. That is the only difference between them.\n", + "And why are children born to such men as you? If you were not a\n", + "father there would be nothing I could reproach you with,\n", + "Anna\n", + "Pavlovna\n", + "I am your faithful slave and to you alone I can confess that my\n", + "children are the bane of my life. It is the cross I have to bear. That\n", + "is how I explain it to myself. It can't be helped!\n", + "Anna Pavlovna\n" + ] + } + ], + "source": [ + "#.find_all('span', {'class':{'green', 'red'}})\n", + "nameList = bs.findAll('span', {'class': ['green', 'red']})\n", + "for name in nameList:\n", + " print(name.get_text())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Anna\n", + "Pavlovna Scherer\n", + "Empress Marya\n", + "Fedorovna\n", + "Prince Vasili Kuragin\n", + "Anna Pavlovna\n", + "St. Petersburg\n", + "the prince\n", + "Anna Pavlovna\n", + "Anna Pavlovna\n", + "the prince\n", + "the prince\n", + "the prince\n", + "Prince Vasili\n", + "Anna Pavlovna\n", + "Anna Pavlovna\n", + "the prince\n", + "Wintzingerode\n", + "King of Prussia\n", + "le Vicomte de Mortemart\n", + "Montmorencys\n", + "Rohans\n", + "Abbe Morio\n", + "the Emperor\n", + "the prince\n", + "Prince Vasili\n", + "Dowager Empress Marya Fedorovna\n", + "the baron\n", + "Anna Pavlovna\n", + "the Empress\n", + "the Empress\n", + "Anna Pavlovna's\n", + "Her Majesty\n", + "Baron\n", + "Funke\n", + "The prince\n", + "Anna\n", + "Pavlovna\n", + "the Empress\n", + "The prince\n", + "Anatole\n", + "the prince\n", + "The prince\n", + "Anna\n", + "Pavlovna\n", + "Anna Pavlovna\n" + ] + } + ], + "source": [ + "nameList = bs.findAll('span', {'class': 'green'})\n", + "for name in nameList:\n", + " print(name.get_text())" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[

War and Peace

,

Chapter 1

]\n" + ] + } + ], + "source": [ + "titles = bs.find_all(['h1', 'h2','h3','h4','h5','h6'])\n", + "print([title for title in titles])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Well, Prince, so Genoa and Lucca are now just family estates of the\n", + "Buonapartes. But I warn you, if you don't tell me that this means war,\n", + "if you still try to defend the infamies and horrors perpetrated by\n", + "that Antichrist- I really believe he is Antichrist- I will have\n", + "nothing more to do with you and you are no longer my friend, no longer\n", + "my 'faithful slave,' as you call yourself! But how do you do? I see\n", + "I have frightened you- sit down and tell me all the news., Anna\n", + "Pavlovna Scherer, Empress Marya\n", + "Fedorovna, Prince Vasili Kuragin, Anna Pavlovna, St. Petersburg, If you have nothing better to do, Count [or Prince], and if the\n", + "prospect of spending an evening with a poor invalid is not too\n", + "terrible, I shall be very charmed to see you tonight between 7 and 10-\n", + "Annette Scherer., Heavens! what a virulent attack!, the prince, Anna Pavlovna, First of all, dear friend, tell me how you are. Set your friend's\n", + "mind at rest,, Can one be well while suffering morally? Can one be calm in times\n", + "like these if one has any feeling?, Anna Pavlovna, You are\n", + "staying the whole evening, I hope?, And the fete at the English ambassador's? Today is Wednesday. I\n", + "must put in an appearance there,, the prince, My daughter is\n", + "coming for me to take me there., I thought today's fete had been canceled. I confess all these\n", + "festivities and fireworks are becoming wearisome., If they had known that you wished it, the entertainment would\n", + "have been put off,, the prince, Don't tease! Well, and what has been decided about Novosiltsev's\n", + "dispatch? You know everything., What can one say about it?, the prince, What has been decided? They have decided that\n", + "Buonaparte has burnt his boats, and I believe that we are ready to\n", + "burn ours., Prince Vasili, Anna Pavlovna, Anna Pavlovna, Oh, don't speak to me of Austria. Perhaps I don't understand\n", + "things, but Austria never has wished, and does not wish, for war.\n", + "She is betraying us! Russia alone must save Europe. Our gracious\n", + "sovereign recognizes his high vocation and will be true to it. That is\n", + "the one thing I have faith in! Our good and wonderful sovereign has to\n", + "perform the noblest role on earth, and he is so virtuous and noble\n", + "that God will not forsake him. He will fulfill his vocation and\n", + "crush the hydra of revolution, which has become more terrible than\n", + "ever in the person of this murderer and villain! We alone must\n", + "avenge the blood of the just one.... Whom, I ask you, can we rely\n", + "on?... England with her commercial spirit will not and cannot\n", + "understand the Emperor Alexander's loftiness of soul. She has\n", + "refused to evacuate Malta. She wanted to find, and still seeks, some\n", + "secret motive in our actions. What answer did Novosiltsev get? None.\n", + "The English have not understood and cannot understand the\n", + "self-abnegation of our Emperor who wants nothing for himself, but only\n", + "desires the good of mankind. And what have they promised? Nothing! And\n", + "what little they have promised they will not perform! Prussia has\n", + "always declared that Buonaparte is invincible, and that all Europe\n", + "is powerless before him.... And I don't believe a word that Hardenburg\n", + "says, or Haugwitz either. This famous Prussian neutrality is just a\n", + "trap. I have faith only in God and the lofty destiny of our adored\n", + "monarch. He will save Europe!, I think,, the prince, that if you had been\n", + "sent instead of our dear Wintzingerode you would have captured the\n", + "King of Prussia's consent by assault. You are so eloquent. Will you\n", + "give me a cup of tea?, Wintzingerode, King of Prussia, In a moment. A propos,, I am\n", + "expecting two very interesting men tonight, le Vicomte de Mortemart,\n", + "who is connected with the Montmorencys through the Rohans, one of\n", + "the best French families. He is one of the genuine emigres, the good\n", + "ones. And also the Abbe Morio. Do you know that profound thinker? He\n", + "has been received by the Emperor. Had you heard?, le Vicomte de Mortemart, Montmorencys, Rohans, Abbe Morio, the Emperor, I shall be delighted to meet them,, the prince, But tell me,, is it true that the Dowager Empress wants Baron Funke\n", + "to be appointed first secretary at Vienna? The baron by all accounts\n", + "is a poor creature., Prince Vasili, Dowager Empress Marya Fedorovna, the baron, Anna Pavlovna, the Empress, Baron Funke has been recommended to the Dowager Empress by her\n", + "sister,, the Empress, Anna Pavlovna's, Her Majesty, Baron\n", + "Funke, The prince, Anna\n", + "Pavlovna, the Empress, Now about your family. Do you know that since your daughter came\n", + "out everyone has been enraptured by her? They say she is amazingly\n", + "beautiful., The prince, I often think,, I often think how unfairly sometimes the\n", + "joys of life are distributed. Why has fate given you two such splendid\n", + "children? I don't speak of Anatole, your youngest. I don't like\n", + "him,, Anatole, Two such charming children. And really you appreciate\n", + "them less than anyone, and so you don't deserve to have them., I can't help it,, the prince, Lavater would have said I\n", + "lack the bump of paternity., Don't joke; I mean to have a serious talk with you. Do you know I\n", + "am dissatisfied with your younger son? Between ourselves, he was mentioned at Her\n", + "Majesty's and you were pitied...., The prince, What would you have me do?, You know I did all\n", + "a father could for their education, and they have both turned out\n", + "fools. Hippolyte is at least a quiet fool, but Anatole is an active\n", + "one. That is the only difference between them., And why are children born to such men as you? If you were not a\n", + "father there would be nothing I could reproach you with,, Anna\n", + "Pavlovna, I am your faithful slave and to you alone I can confess that my\n", + "children are the bane of my life. It is the cross I have to bear. That\n", + "is how I explain it to myself. It can't be helped!, Anna Pavlovna]\n" + ] + } + ], + "source": [ + "allText = bs.find_all('span', {'class':{'green', 'red'}})\n", + "print([text for text in allText])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + } + ], + "source": [ + "nameList = bs.find_all(text='the prince')\n", + "print(len(nameList))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Well, Prince, so Genoa and Lucca are now just family estates of the\n", + "Buonapartes. But I warn you, if you don't tell me that this means war,\n", + "if you still try to defend the infamies and horrors perpetrated by\n", + "that Antichrist- I really believe he is Antichrist- I will have\n", + "nothing more to do with you and you are no longer my friend, no longer\n", + "my 'faithful slave,' as you call yourself! But how do you do? I see\n", + "I have frightened you- sit down and tell me all the news., Anna\n", + "Pavlovna Scherer, Empress Marya\n", + "Fedorovna, Prince Vasili Kuragin, Anna Pavlovna, St. Petersburg, If you have nothing better to do, Count [or Prince], and if the\n", + "prospect of spending an evening with a poor invalid is not too\n", + "terrible, I shall be very charmed to see you tonight between 7 and 10-\n", + "Annette Scherer., Heavens! what a virulent attack!, the prince, Anna Pavlovna, First of all, dear friend, tell me how you are. Set your friend's\n", + "mind at rest,, Can one be well while suffering morally? Can one be calm in times\n", + "like these if one has any feeling?, Anna Pavlovna, You are\n", + "staying the whole evening, I hope?, And the fete at the English ambassador's? Today is Wednesday. I\n", + "must put in an appearance there,, the prince, My daughter is\n", + "coming for me to take me there., I thought today's fete had been canceled. I confess all these\n", + "festivities and fireworks are becoming wearisome., If they had known that you wished it, the entertainment would\n", + "have been put off,, the prince, Don't tease! Well, and what has been decided about Novosiltsev's\n", + "dispatch? You know everything., What can one say about it?, the prince, What has been decided? They have decided that\n", + "Buonaparte has burnt his boats, and I believe that we are ready to\n", + "burn ours., Prince Vasili, Anna Pavlovna, Anna Pavlovna, Oh, don't speak to me of Austria. Perhaps I don't understand\n", + "things, but Austria never has wished, and does not wish, for war.\n", + "She is betraying us! Russia alone must save Europe. Our gracious\n", + "sovereign recognizes his high vocation and will be true to it. That is\n", + "the one thing I have faith in! Our good and wonderful sovereign has to\n", + "perform the noblest role on earth, and he is so virtuous and noble\n", + "that God will not forsake him. He will fulfill his vocation and\n", + "crush the hydra of revolution, which has become more terrible than\n", + "ever in the person of this murderer and villain! We alone must\n", + "avenge the blood of the just one.... Whom, I ask you, can we rely\n", + "on?... England with her commercial spirit will not and cannot\n", + "understand the Emperor Alexander's loftiness of soul. She has\n", + "refused to evacuate Malta. She wanted to find, and still seeks, some\n", + "secret motive in our actions. What answer did Novosiltsev get? None.\n", + "The English have not understood and cannot understand the\n", + "self-abnegation of our Emperor who wants nothing for himself, but only\n", + "desires the good of mankind. And what have they promised? Nothing! And\n", + "what little they have promised they will not perform! Prussia has\n", + "always declared that Buonaparte is invincible, and that all Europe\n", + "is powerless before him.... And I don't believe a word that Hardenburg\n", + "says, or Haugwitz either. This famous Prussian neutrality is just a\n", + "trap. I have faith only in God and the lofty destiny of our adored\n", + "monarch. He will save Europe!, I think,, the prince, that if you had been\n", + "sent instead of our dear Wintzingerode you would have captured the\n", + "King of Prussia's consent by assault. You are so eloquent. Will you\n", + "give me a cup of tea?, Wintzingerode, King of Prussia, In a moment. A propos,, I am\n", + "expecting two very interesting men tonight, le Vicomte de Mortemart,\n", + "who is connected with the Montmorencys through the Rohans, one of\n", + "the best French families. He is one of the genuine emigres, the good\n", + "ones. And also the Abbe Morio. Do you know that profound thinker? He\n", + "has been received by the Emperor. Had you heard?, le Vicomte de Mortemart, Montmorencys, Rohans, Abbe Morio, the Emperor, I shall be delighted to meet them,, the prince, But tell me,, is it true that the Dowager Empress wants Baron Funke\n", + "to be appointed first secretary at Vienna? The baron by all accounts\n", + "is a poor creature., Prince Vasili, Dowager Empress Marya Fedorovna, the baron, Anna Pavlovna, the Empress, Baron Funke has been recommended to the Dowager Empress by her\n", + "sister,, the Empress, Anna Pavlovna's, Her Majesty, Baron\n", + "Funke, The prince, Anna\n", + "Pavlovna, the Empress, Now about your family. Do you know that since your daughter came\n", + "out everyone has been enraptured by her? They say she is amazingly\n", + "beautiful., The prince, I often think,, I often think how unfairly sometimes the\n", + "joys of life are distributed. Why has fate given you two such splendid\n", + "children? I don't speak of Anatole, your youngest. I don't like\n", + "him,, Anatole, Two such charming children. And really you appreciate\n", + "them less than anyone, and so you don't deserve to have them., I can't help it,, the prince, Lavater would have said I\n", + "lack the bump of paternity., Don't joke; I mean to have a serious talk with you. Do you know I\n", + "am dissatisfied with your younger son? Between ourselves, he was mentioned at Her\n", + "Majesty's and you were pitied...., The prince, What would you have me do?, You know I did all\n", + "a father could for their education, and they have both turned out\n", + "fools. Hippolyte is at least a quiet fool, but Anatole is an active\n", + "one. That is the only difference between them., And why are children born to such men as you? If you were not a\n", + "father there would be nothing I could reproach you with,, Anna\n", + "Pavlovna, I am your faithful slave and to you alone I can confess that my\n", + "children are the bane of my life. It is the cross I have to bear. That\n", + "is how I explain it to myself. It can't be helped!, Anna Pavlovna]\n" + ] + } + ], + "source": [ + "title = bs.find_all(id='title', class_='text')\n", + "print([text for text in allText])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "Item Title\n", + "\n", + "Description\n", + "\n", + "Cost\n", + "\n", + "Image\n", + "\n", + "\n", + "\n", + "\n", + "Vegetable Basket\n", + "\n", + "This vegetable basket is the perfect gift for your health conscious (or overweight) friends!\n", + "Now with super-colorful bell peppers!\n", + "\n", + "$15.00\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Russian Nesting Dolls\n", + "\n", + "Hand-painted by trained monkeys, these exquisite dolls are priceless! And by \"priceless,\" we mean \"extremely expensive\"! 8 entire dolls per set! Octuple the presents!\n", + "\n", + "$10,000.52\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Fish Painting\n", + "\n", + "If something seems fishy about this painting, it's because it's a fish! Also hand-painted by trained monkeys!\n", + "\n", + "$10,005.00\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Dead Parrot\n", + "\n", + "This is an ex-parrot! Or maybe he's only resting?\n", + "\n", + "$0.50\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Mystery Box\n", + "\n", + "If you love suprises, this mystery box is for you! Do not place on light-colored surfaces. May cause oil staining. Keep your friends guessing!\n", + "\n", + "$1.50\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "\n", + "html = urlopen('http://www.pythonscraping.com/pages/page3.html')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "\n", + "for child in bs.find('table',{'id':'giftList'}).children:\n", + " print(child)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "Vegetable Basket\n", + "\n", + "This vegetable basket is the perfect gift for your health conscious (or overweight) friends!\n", + "Now with super-colorful bell peppers!\n", + "\n", + "$15.00\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Russian Nesting Dolls\n", + "\n", + "Hand-painted by trained monkeys, these exquisite dolls are priceless! And by \"priceless,\" we mean \"extremely expensive\"! 8 entire dolls per set! Octuple the presents!\n", + "\n", + "$10,000.52\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Fish Painting\n", + "\n", + "If something seems fishy about this painting, it's because it's a fish! Also hand-painted by trained monkeys!\n", + "\n", + "$10,005.00\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Dead Parrot\n", + "\n", + "This is an ex-parrot! Or maybe he's only resting?\n", + "\n", + "$0.50\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Mystery Box\n", + "\n", + "If you love suprises, this mystery box is for you! Do not place on light-colored surfaces. May cause oil staining. Keep your friends guessing!\n", + "\n", + "$1.50\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "\n", + "html = urlopen('http://www.pythonscraping.com/pages/page3.html')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "\n", + "for sibling in bs.find('table', {'id':'giftList'}).tr.next_siblings:\n", + " print(sibling) " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "$15.00\n", + "\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "\n", + "html = urlopen('http://www.pythonscraping.com/pages/page3.html')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "print(bs.find('img',\n", + " {'src':'../img/gifts/img1.jpg'})\n", + " .parent.previous_sibling.get_text())" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../img/gifts/img1.jpg\n", + "../img/gifts/img2.jpg\n", + "../img/gifts/img3.jpg\n", + "../img/gifts/img4.jpg\n", + "../img/gifts/img6.jpg\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "import re\n", + "\n", + "html = urlopen('http://www.pythonscraping.com/pages/page3.html')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "images = bs.find_all('img', {'src':re.compile('\\.\\.\\/img\\/gifts/img.*\\.jpg')})\n", + "for image in images: \n", + " print(image['src'])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " \n", + " Vegetable Basket\n", + " \n", + " This vegetable basket is the perfect gift for your health conscious (or overweight) friends!\n", + " Now with super-colorful bell peppers!\n", + " \n", + " $15.00\n", + " \n", + " \n", + " ,\n", + " \n", + " Russian Nesting Dolls\n", + " \n", + " Hand-painted by trained monkeys, these exquisite dolls are priceless! And by \"priceless,\" we mean \"extremely expensive\"! 8 entire dolls per set! Octuple the presents!\n", + " \n", + " $10,000.52\n", + " \n", + " \n", + " ,\n", + " \n", + " Fish Painting\n", + " \n", + " If something seems fishy about this painting, it's because it's a fish! Also hand-painted by trained monkeys!\n", + " \n", + " $10,005.00\n", + " \n", + " \n", + " ,\n", + " \n", + " Dead Parrot\n", + " \n", + " This is an ex-parrot! Or maybe he's only resting?\n", + " \n", + " $0.50\n", + " \n", + " \n", + " ,\n", + " \n", + " Mystery Box\n", + " \n", + " If you love suprises, this mystery box is for you! Do not place on light-colored surfaces. May cause oil staining. Keep your friends guessing!\n", + " \n", + " $1.50\n", + " \n", + " \n", + " ]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bs.find_all(lambda tag: len(tag.attrs) == 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Or maybe he's only resting?]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bs.find_all(lambda tag: tag.get_text() == 'Or maybe he\\'s only resting?')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"Or maybe he's only resting?\"]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bs.find_all('', text='Or maybe he\\'s only resting?')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Chapter06_Web-Crawlers.ipynb b/Chapter06_Web-Crawlers.ipynb new file mode 100644 index 0000000..5422f4d --- /dev/null +++ b/Chapter06_Web-Crawlers.ipynb @@ -0,0 +1,2055 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#bodyContent\n", + "/wiki/Main_Page\n", + "/wiki/Wikipedia:Contents\n", + "/wiki/Portal:Current_events\n", + "/wiki/Special:Random\n", + "/wiki/Wikipedia:About\n", + "//en.wikipedia.org/wiki/Wikipedia:Contact_us\n", + "https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en\n", + "/wiki/Help:Contents\n", + "/wiki/Help:Introduction\n", + "/wiki/Wikipedia:Community_portal\n", + "/wiki/Special:RecentChanges\n", + "/wiki/Wikipedia:File_upload_wizard\n", + "/wiki/Main_Page\n", + "/wiki/Special:Search\n", + "/w/index.php?title=Special:CreateAccount&returnto=Kevin+Bacon\n", + "/w/index.php?title=Special:UserLogin&returnto=Kevin+Bacon\n", + "/w/index.php?title=Special:CreateAccount&returnto=Kevin+Bacon\n", + "/w/index.php?title=Special:UserLogin&returnto=Kevin+Bacon\n", + "/wiki/Help:Introduction\n", + "/wiki/Special:MyContributions\n", + "/wiki/Special:MyTalk\n", + "#\n", + "#Early_life_and_education\n", + "#Acting_career\n", + "#Early_work\n", + "#1980s\n", + "#1990s\n", + "#2000s\n", + "#2010s\n", + "#Advertising_work\n", + "#Six_Degrees_of_Kevin_Bacon\n", + "#Music\n", + "#Personal_life\n", + "#Accolades\n", + "#Awards_and_nominations\n", + "#Other_honors\n", + "#See_also\n", + "#References\n", + "#External_links\n", + "https://af.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ar.wikipedia.org/wiki/%D9%83%D9%8A%D9%81%D9%8A%D9%86_%D8%A8%D9%8A%D9%83%D9%86\n", + "https://an.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ast.wikipedia.org/wiki/Kevin_Bacon\n", + "https://azb.wikipedia.org/wiki/%DA%A9%D9%88%DB%8C%D9%86_%D8%A8%DB%8C%DA%A9%D9%86\n", + "https://zh-min-nan.wikipedia.org/wiki/Kevin_Bacon\n", + "https://bi.wikipedia.org/wiki/Kevin_Bacon\n", + "https://bg.wikipedia.org/wiki/%D0%9A%D0%B5%D0%B2%D0%B8%D0%BD_%D0%91%D0%B5%D0%B9%D0%BA%D1%8A%D0%BD\n", + "https://bs.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ca.wikipedia.org/wiki/Kevin_Bacon\n", + "https://cs.wikipedia.org/wiki/Kevin_Bacon\n", + "https://da.wikipedia.org/wiki/Kevin_Bacon\n", + "https://de.wikipedia.org/wiki/Kevin_Bacon\n", + "https://el.wikipedia.org/wiki/%CE%9A%CE%AD%CE%B2%CE%B9%CE%BD_%CE%9C%CF%80%CE%AD%CE%B9%CE%BA%CE%BF%CE%BD\n", + "https://eml.wikipedia.org/wiki/Kevin_Bacon\n", + "https://es.wikipedia.org/wiki/Kevin_Bacon\n", + "https://eo.wikipedia.org/wiki/Kevin_Bacon\n", + "https://eu.wikipedia.org/wiki/Kevin_Bacon\n", + "https://fa.wikipedia.org/wiki/%DA%A9%D9%88%DB%8C%D9%86_%D8%A8%DB%8C%DA%A9%D9%86\n", + "https://fr.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ga.wikipedia.org/wiki/Kevin_Bacon\n", + "https://gl.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ko.wikipedia.org/wiki/%EC%BC%80%EB%B9%88_%EB%B2%A0%EC%9D%B4%EC%BB%A8\n", + "https://hy.wikipedia.org/wiki/%D5%94%D6%87%D5%AB%D5%B6_%D4%B2%D5%A5%D5%B5%D6%84%D5%B8%D5%B6\n", + "https://hr.wikipedia.org/wiki/Kevin_Bacon\n", + "https://io.wikipedia.org/wiki/Kevin_Bacon\n", + "https://id.wikipedia.org/wiki/Kevin_Bacon\n", + "https://it.wikipedia.org/wiki/Kevin_Bacon\n", + "https://he.wikipedia.org/wiki/%D7%A7%D7%95%D7%95%D7%99%D7%9F_%D7%91%D7%99%D7%99%D7%A7%D7%95%D7%9F\n", + "https://ka.wikipedia.org/wiki/%E1%83%99%E1%83%94%E1%83%95%E1%83%98%E1%83%9C_%E1%83%91%E1%83%94%E1%83%98%E1%83%99%E1%83%9D%E1%83%9C%E1%83%98\n", + "https://kk.wikipedia.org/wiki/%D0%9A%D0%B5%D0%B2%D0%B8%D0%BD_%D0%91%D1%8D%D0%B9%D0%BA%D0%BE%D0%BD\n", + "https://lv.wikipedia.org/wiki/Kevins_Beikons\n", + "https://hu.wikipedia.org/wiki/Kevin_Bacon\n", + "https://xmf.wikipedia.org/wiki/%E1%83%99%E1%83%94%E1%83%95%E1%83%98%E1%83%9C_%E1%83%91%E1%83%94%E1%83%98%E1%83%99%E1%83%9D%E1%83%9C%E1%83%98\n", + "https://arz.wikipedia.org/wiki/%D9%83%D9%8A%D9%81%D9%8A%D9%86_%D8%A8%D9%8A%D9%83%D9%86\n", + "https://ms.wikipedia.org/wiki/Kevin_Bacon\n", + "https://mn.wikipedia.org/wiki/%D0%9A%D0%B5%D0%B2%D0%B8%D0%BD_%D0%91%D1%8D%D0%B9%D0%BA%D0%BE%D0%BD\n", + "https://nl.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ja.wikipedia.org/wiki/%E3%82%B1%E3%83%B4%E3%82%A3%E3%83%B3%E3%83%BB%E3%83%99%E3%83%BC%E3%82%B3%E3%83%B3\n", + "https://no.wikipedia.org/wiki/Kevin_Bacon\n", + "https://oc.wikipedia.org/wiki/Kevin_Bacon\n", + "https://uz.wikipedia.org/wiki/Kevin_Bacon\n", + "https://pl.wikipedia.org/wiki/Kevin_Bacon\n", + "https://pt.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ro.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D0%B9%D0%BA%D0%BE%D0%BD,_%D0%9A%D0%B5%D0%B2%D0%B8%D0%BD\n", + "https://sco.wikipedia.org/wiki/Kevin_Bacon\n", + "https://simple.wikipedia.org/wiki/Kevin_Bacon\n", + "https://sk.wikipedia.org/wiki/Kevin_Bacon\n", + "https://ckb.wikipedia.org/wiki/%DA%A9%DB%8E%DA%A4%D9%86_%D8%A8%DB%95%DB%8C%DA%A9%D9%86\n", + "https://sr.wikipedia.org/wiki/%D0%9A%D0%B5%D0%B2%D0%B8%D0%BD_%D0%91%D0%B5%D1%98%D0%BA%D0%BE%D0%BD\n", + "https://sh.wikipedia.org/wiki/Kevin_Bacon\n", + "https://fi.wikipedia.org/wiki/Kevin_Bacon\n", + "https://sv.wikipedia.org/wiki/Kevin_Bacon\n", + "https://th.wikipedia.org/wiki/%E0%B9%80%E0%B8%84%E0%B8%A7%E0%B8%B4%E0%B8%99_%E0%B9%80%E0%B8%9A%E0%B8%84%E0%B8%AD%E0%B8%99\n", + "https://tr.wikipedia.org/wiki/Kevin_Bacon\n", + "https://uk.wikipedia.org/wiki/%D0%9A%D0%B5%D0%B2%D1%96%D0%BD_%D0%91%D0%B5%D0%B9%D0%BA%D0%BE%D0%BD\n", + "https://vi.wikipedia.org/wiki/Kevin_Bacon\n", + "https://wuu.wikipedia.org/wiki/%E5%87%AF%E6%96%87%C2%B7%E8%B4%9D%E8%82%AF\n", + "https://zh-yue.wikipedia.org/wiki/%E5%A5%87%E9%9B%B2%E8%B2%9D%E6%A0%B9\n", + "https://zh.wikipedia.org/wiki/%E5%87%AF%E6%96%87%C2%B7%E8%B4%9D%E8%82%AF\n", + "https://www.wikidata.org/wiki/Special:EntityPage/Q3454165#sitelinks-wikipedia\n", + "/wiki/Kevin_Bacon\n", + "/wiki/Talk:Kevin_Bacon\n", + "/wiki/Kevin_Bacon\n", + "/w/index.php?title=Kevin_Bacon&action=edit\n", + "/w/index.php?title=Kevin_Bacon&action=history\n", + "/wiki/Kevin_Bacon\n", + "/w/index.php?title=Kevin_Bacon&action=edit\n", + "/w/index.php?title=Kevin_Bacon&action=history\n", + "/wiki/Special:WhatLinksHere/Kevin_Bacon\n", + "/wiki/Special:RecentChangesLinked/Kevin_Bacon\n", + "/wiki/Wikipedia:File_Upload_Wizard\n", + "/wiki/Special:SpecialPages\n", + "/w/index.php?title=Kevin_Bacon&oldid=1146341850\n", + "/w/index.php?title=Kevin_Bacon&action=info\n", + "/w/index.php?title=Special:CiteThisPage&page=Kevin_Bacon&id=1146341850&wpFormIdentifier=titleform\n", + "https://www.wikidata.org/wiki/Special:EntityPage/Q3454165\n", + "/w/index.php?title=Special:DownloadAsPdf&page=Kevin_Bacon&action=show-download-screen\n", + "/w/index.php?title=Kevin_Bacon&printable=yes\n", + "https://commons.wikimedia.org/wiki/Kevin_Bacon\n", + "/wiki/Wikipedia:Protection_policy#semi\n", + "/wiki/Kevin_Bacon_(disambiguation)\n", + "/wiki/File:Kevin_Bacon_SDCC_2014.jpg\n", + "/wiki/Philadelphia\n", + "/wiki/Kevin_Bacon_filmography\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/Sosie_Bacon\n", + "#cite_note-1\n", + "/wiki/Edmund_Bacon_(architect)\n", + "/wiki/Michael_Bacon_(musician)\n", + "/wiki/Holly_Near\n", + "/wiki/Wikipedia:Citation_needed\n", + "http://baconbros.com/\n", + "#cite_note-2\n", + "#cite_note-actor-3\n", + "/wiki/Leading_man\n", + "/wiki/Character_actor\n", + "/wiki/Golden_Globe_Award\n", + "/wiki/Screen_Actors_Guild_Award\n", + "/wiki/Primetime_Emmy_Award\n", + "/wiki/The_Guardian\n", + "/wiki/Academy_Award\n", + "#cite_note-4\n", + "/wiki/Hollywood_Walk_of_Fame\n", + "#cite_note-5\n", + "/wiki/National_Lampoon%27s_Animal_House\n", + "/wiki/Footloose_(1984_film)\n", + "/wiki/Diner_(1982_film)\n", + "/wiki/JFK_(film)\n", + "/wiki/A_Few_Good_Men\n", + "/wiki/Apollo_13_(film)\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Frost/Nixon_(film)\n", + "/wiki/Friday_the_13th_(1980_film)\n", + "/wiki/The_River_Wild\n", + "/wiki/Sleepers_(film)\n", + "/wiki/Wild_Things_(film)\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Flatliners\n", + "/wiki/Crazy,_Stupid,_Love\n", + "/wiki/X-Men:_First_Class\n", + "/wiki/Black_Mass_(film)\n", + "/wiki/Patriots_Day_(film)\n", + "/wiki/Losing_Chase\n", + "/wiki/Loverboy_(2005_film)\n", + "/wiki/Fox_Broadcasting_Company\n", + "/wiki/The_Following\n", + "/wiki/Michael_Strobl\n", + "/wiki/HBO\n", + "/wiki/Taking_Chance\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Amazon_Prime_Video\n", + "/wiki/I_Love_Dick_(TV_series)\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Television_Series_Musical_or_Comedy\n", + "/wiki/Showtime_(TV_network)\n", + "/wiki/City_on_a_Hill_(TV_series)\n", + "#cite_note-6\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/SixDegrees.org\n", + "#cite_note-walk-7\n", + "/wiki/EE_Limited\n", + "#cite_note-8\n", + "/wiki/Philadelphia\n", + "#cite_note-actor-3\n", + "#cite_note-actor-3\n", + "/wiki/Edmund_Bacon_(architect)\n", + "/wiki/Design_of_Cities\n", + "#cite_note-bacon-9\n", + "/wiki/Julia_R._Masterman_High_School\n", + "#cite_note-10\n", + "/wiki/Pennsylvania_Governor%27s_School_for_the_Arts\n", + "/wiki/Bucknell_University\n", + "#cite_note-11\n", + "/wiki/Glory_Van_Scott\n", + "#cite_note-walk-7\n", + "#cite_note-bacon-9\n", + "/wiki/Kevin_Bacon_filmography\n", + "/wiki/Circle_in_the_Square\n", + "/wiki/Nancy_Mills\n", + "/wiki/Cosmopolitan_(magazine)\n", + "#cite_note-cosmo91-12\n", + "/wiki/Fraternities_and_sororities\n", + "/wiki/Animal_House\n", + "#cite_note-bacon-9\n", + "/wiki/Search_for_Tomorrow\n", + "/wiki/Guiding_Light\n", + "/wiki/Friday_the_13th_(1980_film)\n", + "#cite_note-13\n", + "/wiki/Getting_Out\n", + "/wiki/Phoenix_Theater\n", + "/wiki/Flux\n", + "/wiki/Second_Stage_Theatre\n", + "#cite_note-bio-14\n", + "/wiki/Obie_Award\n", + "/wiki/Forty_Deuce\n", + "#cite_note-kevin-15\n", + "/wiki/Slab_Boys\n", + "/wiki/Sean_Penn\n", + "/wiki/Val_Kilmer\n", + "/wiki/Barry_Levinson\n", + "/wiki/Diner_(1982_film)\n", + "/wiki/Steve_Guttenberg\n", + "/wiki/Daniel_Stern_(actor)\n", + "/wiki/Mickey_Rourke\n", + "/wiki/Tim_Daly\n", + "/wiki/Ellen_Barkin\n", + "#cite_note-16\n", + "/wiki/Footloose_(1984_film)\n", + "#cite_note-bio-14\n", + "/wiki/James_Dean\n", + "/wiki/Rebel_Without_a_Cause\n", + "/wiki/Mickey_Rooney\n", + "/wiki/Judy_Garland\n", + "#cite_note-time84-17\n", + "#cite_note-bacon-9\n", + "#cite_note-18\n", + "#cite_note-19\n", + "/wiki/Typecasting_(acting)\n", + "/wiki/John_Hughes_(filmmaker)\n", + "/wiki/Planes,_Trains_and_Automobiles\n", + "#cite_note-20\n", + "/wiki/She%27s_Having_a_Baby\n", + "#cite_note-bio-14\n", + "/wiki/The_Big_Picture_(1989_film)\n", + "#cite_note-21\n", + "/wiki/Tremors_(1990_film)\n", + "#cite_note-22\n", + "/wiki/Joel_Schumacher\n", + "/wiki/Flatliners\n", + "#cite_note-bio-14\n", + "/wiki/Elizabeth_Perkins\n", + "/wiki/He_Said,_She_Said_(film)\n", + "#cite_note-bio-14\n", + "/wiki/The_New_York_Times\n", + "#cite_note-nyt94-23\n", + "/wiki/Oliver_Stone\n", + "/wiki/JFK_(film)\n", + "#cite_note-24\n", + "/wiki/A_Few_Good_Men_(film)\n", + "#cite_note-25\n", + "/wiki/Michael_Greif\n", + "#cite_note-bio-14\n", + "/wiki/Golden_Globe_Award\n", + "/wiki/The_River_Wild\n", + "#cite_note-bio-14\n", + "/wiki/Meryl_Streep\n", + "/wiki/Murder_in_the_First_(film)\n", + "#cite_note-bio-14\n", + "/wiki/Blockbuster_(entertainment)\n", + "/wiki/Apollo_13_(film)\n", + "#cite_note-26\n", + "/wiki/Sleepers_(film)\n", + "#cite_note-27\n", + "/wiki/Picture_Perfect_(1997_film)\n", + "#cite_note-bio-14\n", + "/wiki/Losing_Chase\n", + "#cite_note-austin-28\n", + "/wiki/Digging_to_China\n", + "#cite_note-bio-14\n", + "/wiki/Payola\n", + "/wiki/Telling_Lies_in_America_(film)\n", + "#cite_note-bio-14\n", + "/wiki/Wild_Things_(film)\n", + "/wiki/Stir_of_Echoes\n", + "/wiki/David_Koepp\n", + "#cite_note-29\n", + "/wiki/File:Kevin_Bacon_Cannes_2004.jpg\n", + "/wiki/File:Kevin_Bacon_Cannes_2004.jpg\n", + "/wiki/Cannes_Film_Festival\n", + "/wiki/Paul_Verhoeven\n", + "/wiki/Hollow_Man\n", + "#cite_note-30\n", + "/wiki/Colin_Firth\n", + "/wiki/Rachel_Blanchard\n", + "/wiki/M%C3%A9nage_%C3%A0_trois\n", + "/wiki/Where_the_Truth_Lies\n", + "#cite_note-31\n", + "/wiki/Atom_Egoyan\n", + "/wiki/MPAA\n", + "/wiki/MPAA_film_rating_system\n", + "#cite_note-32\n", + "/wiki/Sean_Penn\n", + "/wiki/Tim_Robbins\n", + "/wiki/Clint_Eastwood\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/The_Woodsman_(2004_film)\n", + "#cite_note-33\n", + "/wiki/HBO_Films\n", + "/wiki/Taking_Chance\n", + "/wiki/Michael_Strobl\n", + "/wiki/Desert_Storm\n", + "#cite_note-34\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/File:Black_Mass_PC_04_(21429102646).jpg\n", + "/wiki/File:Black_Mass_PC_04_(21429102646).jpg\n", + "/wiki/Toronto_Film_Festival\n", + "/wiki/Matthew_Vaughn\n", + "/wiki/X-Men:_First_Class\n", + "/wiki/Sebastian_Shaw_(comics)\n", + "#cite_note-35\n", + "#cite_note-36\n", + "/wiki/Dustin_Lance_Black\n", + "/wiki/8_(play)\n", + "/wiki/Perry_v._Brown\n", + "/wiki/Proposition_8\n", + "/wiki/Charles_J._Cooper\n", + "#cite_note-8_the_play-37\n", + "/wiki/Wilshire_Ebell_Theatre\n", + "/wiki/American_Foundation_for_Equal_Rights\n", + "#cite_note-8_play_video-38\n", + "#cite_note-39\n", + "/wiki/The_Following\n", + "#cite_note-40\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "#cite_note-41\n", + "/wiki/Huffington_Post\n", + "/wiki/Tremors_(1990_film)\n", + "#cite_note-42\n", + "/wiki/Tremors_5:_Bloodline\n", + "/wiki/EE_(telecommunications_company)\n", + "#cite_note-43\n", + "#cite_note-44\n", + "#cite_note-45\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/Trivia\n", + "/wiki/Big_screen\n", + "/wiki/Six_degrees_of_separation\n", + "/wiki/Internet_meme\n", + "/wiki/SixDegrees.org\n", + "/wiki/Social_networking_service\n", + "#cite_note-46\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/IMDb\n", + "#cite_note-47\n", + "/wiki/Paul_Erd%C5%91s\n", + "/wiki/Erd%C5%91s_number\n", + "/wiki/Paul_Erd%C5%91s\n", + "/wiki/Erd%C5%91s_number\n", + "/wiki/Erd%C5%91s%E2%80%93Bacon_number\n", + "#cite_note-48\n", + "/wiki/The_Bacon_Brothers\n", + "/wiki/Michael_Bacon_(musician)\n", + "#cite_note-49\n", + "/wiki/Instagram\n", + "#cite_note-50\n", + "/wiki/Old_97%27s\n", + "/wiki/The_Guardians_of_the_Galaxy_Holiday_Special\n", + "#cite_note-51\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/PBS\n", + "/wiki/Lanford_Wilson\n", + "/wiki/Lemon_Sky\n", + "#cite_note-cosmo91-12\n", + "/wiki/Pyrates\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Loverboy_(2005_film)\n", + "/wiki/Sosie_Bacon\n", + "/wiki/Upper_West_Side\n", + "/wiki/Manhattan\n", + "#cite_note-52\n", + "/wiki/Tracy_Pollan\n", + "#cite_note-53\n", + "/wiki/Separation_of_church_and_state_in_the_United_States\n", + "#cite_note-54\n", + "#cite_note-55\n", + "/wiki/The_Times\n", + "/wiki/Atheism\n", + "#cite_note-56\n", + "/wiki/Antireligion\n", + "#cite_note-57\n", + "/wiki/Will.i.am\n", + "/wiki/It%27s_a_New_Day_(Will.i.am_song)\n", + "/wiki/Barack_Obama\n", + "/wiki/Ponzi_scheme\n", + "/wiki/Bernie_Madoff\n", + "#cite_note-financialpost-58\n", + "#cite_note-59\n", + "/wiki/Finding_Your_Roots\n", + "/wiki/Henry_Louis_Gates\n", + "#cite_note-60\n", + "#cite_note-61\n", + "#cite_note-62\n", + "#cite_note-63\n", + "/wiki/Apollo_13_(film)\n", + "#cite_note-64\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Blockbuster_Entertainment_Awards\n", + "/wiki/Blockbuster_Entertainment_Awards\n", + "#cite_note-65\n", + "/wiki/Hollow_Man\n", + "/wiki/Boston_Society_of_Film_Critics\n", + "/wiki/Boston_Society_of_Film_Critics_Award_for_Best_Cast\n", + "#cite_note-66\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Bravo_Otto\n", + "/wiki/Bravo_Otto\n", + "/wiki/Footloose_(1984_film)\n", + "/wiki/CableACE_Award\n", + "/wiki/CableACE_Award\n", + "/wiki/Losing_Chase\n", + "/wiki/Chlotrudis_Awards\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Critics%27_Choice_Movie_Awards\n", + "/wiki/Critics%27_Choice_Movie_Award_for_Best_Actor\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/Ghent_International_Film_Festival\n", + "/wiki/Ghent_International_Film_Festival\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Giffoni_Film_Festival\n", + "/wiki/Giffoni_Film_Festival\n", + "/wiki/Digging_to_China\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Golden_Globe_Award\n", + "/wiki/Golden_Globe_Award_for_Best_Supporting_Actor_%E2%80%93_Motion_Picture\n", + "/wiki/The_River_Wild\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Taking_Chance\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Television_Series_Musical_or_Comedy\n", + "/wiki/I_Love_Dick_(TV_series)\n", + "/wiki/Independent_Spirit_Awards\n", + "/wiki/Independent_Spirit_Award_for_Best_Male_Lead\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/MTV_Movie_%26_TV_Awards\n", + "/wiki/MTV_Movie_Award_for_Best_Villain\n", + "/wiki/Hollow_Man\n", + "/wiki/Taking_Chance\n", + "/wiki/The_Following\n", + "/wiki/E!_People%27s_Choice_Awards\n", + "/wiki/E!_People%27s_Choice_Awards\n", + "/wiki/The_Following\n", + "/wiki/E!_People%27s_Choice_Awards\n", + "/wiki/The_Following\n", + "/wiki/Primetime_Emmy_Award\n", + "/wiki/Primetime_Emmy_Award_for_Outstanding_Lead_Actor_in_a_Limited_Series_or_Movie\n", + "/wiki/Taking_Chance\n", + "/wiki/Satellite_Awards\n", + "/wiki/Satellite_Award_for_Best_Actor_%E2%80%93_Motion_Picture\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Satellite_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Taking_Chance\n", + "/wiki/Saturn_Award\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/The_Following\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/The_Following\n", + "/wiki/Scream_Awards\n", + "/wiki/Scream_Awards\n", + "/wiki/X-Men:_First_Class\n", + "/wiki/Screen_Actors_Guild_Award\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Supporting_Role\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Cast_in_a_Motion_Picture\n", + "/wiki/Apollo_13_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Cast_in_a_Motion_Picture\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Cast_in_a_Motion_Picture\n", + "/wiki/Frost/Nixon_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Taking_Chance\n", + "/wiki/Teen_Choice_Awards\n", + "/wiki/Teen_Choice_Award_for_Choice_Movie_Villain\n", + "/wiki/Beauty_Shop\n", + "/wiki/Teen_Choice_Award_for_Choice_Movie_Villain\n", + "/wiki/X-Men:_First_Class\n", + "/wiki/TV_Guide_Award\n", + "/wiki/TV_Guide_Award\n", + "/wiki/The_Following\n", + "/wiki/File:Kevin_Bacon%27s_Star_Walk_of_Fame.jpg\n", + "/wiki/File:Kevin_Bacon%27s_Star_Walk_of_Fame.jpg\n", + "/wiki/Hollywood_Walk_of_Fame\n", + "/wiki/Hollywood_Walk_of_Fame\n", + "#cite_note-67\n", + "/wiki/Denver_Film_Festival\n", + "#cite_note-68\n", + "/wiki/Phoenix_Film_Festival\n", + "#cite_note-69\n", + "/wiki/Santa_Barbara_International_Film_Festival\n", + "#cite_note-70\n", + "/wiki/Broadcast_Film_Critics_Association\n", + "#cite_note-71\n", + "/wiki/Seattle_International_Film_Festival\n", + "#cite_note-72\n", + "/wiki/List_of_actors_with_Hollywood_Walk_of_Fame_motion_picture_stars\n", + "#cite_ref-1\n", + "http://www.geneall.net/U/per_page.php?id=1014399\n", + "#cite_ref-2\n", + "https://web.archive.org/web/20090113222205/http://www.newenglandancestors.org/research/services/articles_gbr78.asp\n", + "http://www.newenglandancestors.org/research/services/articles_gbr78.asp\n", + "#cite_ref-actor_3-0\n", + "#cite_ref-actor_3-1\n", + "#cite_ref-actor_3-2\n", + "http://www.biography.com/people/kevin-bacon-9542173\n", + "#cite_ref-4\n", + "https://www.theguardian.com/film/filmblog/2009/feb/19/best-actors-never-nominated-for-oscars\n", + "#cite_ref-5\n", + "http://www.walkoffame.com/kevin-bacon\n", + "#cite_ref-6\n", + "https://www.hollywoodreporter.com/tv/tv-news/showtime-cancels-city-on-a-hill-3-seasons-1235250089/\n", + "/wiki/The_Hollywood_Reporter\n", + "#cite_ref-walk_7-0\n", + "#cite_ref-walk_7-1\n", + "https://web.archive.org/web/20141016202657/http://www.thebiographychannel.co.uk/biographies/kevin-bacon.html\n", + "http://www.thebiographychannel.co.uk/biographies/kevin-bacon.html\n", + "#cite_ref-8\n", + "https://www.marketingweek.com/ee-unveils-six-degrees-of-bacon-launch-ads/\n", + "#cite_ref-bacon_9-0\n", + "#cite_ref-bacon_9-1\n", + "#cite_ref-bacon_9-2\n", + "#cite_ref-bacon_9-3\n", + "https://web.archive.org/web/20190403203113/https://www.biography.com/news/kevin-bacon-biography-facts\n", + "http://www.biography.com/news/kevin-bacon-biography-facts\n", + "#cite_ref-10\n", + "https://philadelphia.cbslocal.com/top-lists/stars-from-philly-to-hollywood/\n", + "#cite_ref-11\n", + "https://movies.yahoo.com/person/kevin-bacon/biography.html\n", + "#cite_ref-cosmo91_12-0\n", + "#cite_ref-cosmo91_12-1\n", + "#cite_ref-13\n", + "http://www.nydailynews.com/entertainment/happy-halloween-superstars-start-horror-flick-gallery-1.98345\n", + "#cite_ref-bio_14-0\n", + "#cite_ref-bio_14-1\n", + "#cite_ref-bio_14-2\n", + "#cite_ref-bio_14-3\n", + "#cite_ref-bio_14-4\n", + "#cite_ref-bio_14-5\n", + "#cite_ref-bio_14-6\n", + "#cite_ref-bio_14-7\n", + "#cite_ref-bio_14-8\n", + "#cite_ref-bio_14-9\n", + "#cite_ref-bio_14-10\n", + "https://web.archive.org/web/20160530033240/http://www.pbs.org/weta/finding-your-roots/profiles/kevin-bacon%c2%a0/\n", + "https://www.pbs.org/wnet/finding-your-roots/profiles/kevin-bacon%C2%A0/\n", + "#cite_ref-kevin_15-0\n", + "https://www.tvguide.com/celebrities/kevin-bacon/bio/160550\n", + "#cite_ref-16\n", + "https://web.archive.org/web/20141021030336/http://news.moviefone.com/2012/03/02/diner-30th-anniversary/\n", + "http://news.moviefone.com/2012/03/02/diner-30th-anniversary/\n", + "#cite_ref-time84_17-0\n", + "https://web.archive.org/web/20080830035710/http://www.time.com/time/magazine/article/0,9171,950019,00.html\n", + "http://www.time.com/time/magazine/article/0,9171,950019,00.html\n", + "#cite_ref-18\n", + "http://www.huffingtonpost.com/2014/08/25/kevin-bacon-footloose_n_5710413.html\n", + "#cite_ref-19\n", + "https://web.archive.org/web/20090109152125/http://www.thebiographychannel.co.uk/biography_story/522%3A492/1/Kevin_Bacon.htm\n", + "http://www.thebiographychannel.co.uk/biography_story/522:492/1/Kevin_Bacon.htm\n", + "#cite_ref-20\n", + "https://www.mentalfloss.com/article/71594/14-moving-facts-about-planes-trains-and-automobiles\n", + "#cite_ref-21\n", + "https://www.nytimes.com/1994/09/25/movies/a-second-wind-is-blowing-for-kevin-bacon.html\n", + "#cite_ref-22\n", + "https://www.nytimes.com/movie/review?res=9C0CE2DE1631F93AA25752C0A966958260\n", + "#cite_ref-nyt94_23-0\n", + "https://query.nytimes.com/gst/fullpage.html?res=9C07E6D91F3BF936A1575AC0A962958260\n", + "#cite_ref-24\n", + "http://www.jfk-online.com/jfkbacon.html\n", + "#cite_ref-25\n", + "http://www.tcm.com/this-month/article/143158%7C0/A-Few-Good-Men.html\n", + "#cite_ref-26\n", + "http://collider.com/kevin-bacon-commercials-footloose/\n", + "#cite_ref-27\n", + "http://www.rogerebert.com/reviews/sleepers-1996\n", + "#cite_ref-austin_28-0\n", + "http://www.austinchronicle.com/calendar/film/1997-02-07/283342/\n", + "/wiki/The_Austin_Chronicle\n", + "#cite_ref-29\n", + "http://www.criminalelement.com/blogs/2013/09/under-the-raderhorror-movies-you-may-have-missed-stir-of-echoes\n", + "#cite_ref-30\n", + "http://www.rogerebert.com/reviews/hollow-man-2000\n", + "#cite_ref-31\n", + "https://web.archive.org/web/20141017080013/http://movies.about.com/od/wherethetruthlies/a/truthkb101305.htm\n", + "http://movies.about.com/od/wherethetruthlies/a/truthkb101305.htm\n", + "#cite_ref-32\n", + "https://archive.today/20120604150801/http://jam.canoe.ca/Movies/2005/09/14/1216527.html\n", + "http://jam.canoe.ca/Movies/2005/09/14/1216527.html\n", + "#cite_ref-33\n", + "https://web.archive.org/web/20140802203026/http://www.latimes.com/entertainment/la-et-kevin-bacon-photo6-photo.html\n", + "http://www.latimes.com/entertainment/la-et-kevin-bacon-photo6-photo.html\n", + "#cite_ref-34\n", + "http://www.nydailynews.com/entertainment/tv-movies/kevin-bacon-chance-body-fallen-marine-home-article-1.392226\n", + "#cite_ref-35\n", + "https://web.archive.org/web/20100722010545/http://heatvision.hollywoodreporter.com/2010/07/winters-bone-star-cast-as-mystique-in-xmen-first-class.html\n", + "http://heatvision.hollywoodreporter.com/2010/07/winters-bone-star-cast-as-mystique-in-xmen-first-class.html\n", + "#cite_ref-36\n", + "https://web.archive.org/web/20100720060214/http://www.forcesofgeek.com/2010/07/kevin-bacon-playing-sebastian-shaw-in-x.html\n", + "http://www.forcesofgeek.com/2010/07/kevin-bacon-playing-sebastian-shaw-in-x.html\n", + "#cite_ref-8_the_play_37-0\n", + "http://www.accesshollywood.com/jesse-tyler-ferguson/glee-stars-touched-by-brad-pitt-and-george-clooneys-support-of-8_article_61543\n", + "/wiki/Access_Hollywood\n", + "#cite_ref-8_play_video_38-0\n", + "https://www.youtube.com/watch?v=qlUG8F9uVgM\n", + "https://ghostarchive.org/varchive/youtube/20211211/qlUG8F9uVgM\n", + "#cite_ref-39\n", + "http://www.pinknews.co.uk/2012/03/01/youtube-to-broadcast-proposition-8-play-live/\n", + "#cite_ref-40\n", + "http://www.fox.com/the-following/\n", + "#cite_ref-41\n", + "https://news.yahoo.com/blogs/trending-now/kevin-bacon-gives-millennials-a-history-lesson-about-the--80s-162525915.html\n", + "#cite_ref-42\n", + "http://www.huffingtonpost.com.au/entry/kevin-bacon-tremors-tv-reboot_us_5655b651e4b072e9d1c13a11\n", + "#cite_ref-43\n", + "http://www.campaignlive.co.uk/news/1294856/\n", + "#cite_ref-44\n", + "http://parade.condenast.com/269380/ashleighschmitz/kevin-bacon-reprises-his-most-iconic-film-roles-in-british-commercial/\n", + "#cite_ref-45\n", + "https://money.cnn.com/2015/03/13/media/kevin-bacon-eggs/index.html\n", + "#cite_ref-46\n", + "http://www.sixdegrees.org/\n", + "#cite_ref-47\n", + "http://www.webmonkey.com/2012/09/easter-egg-google-connects-the-dots-for-bacon-number-search/\n", + "#cite_ref-48\n", + "https://web.archive.org/web/20121112081753/http://www.telegraph.co.uk/science/science-news/4768389/And-the-winner-tonight-is.html\n", + "https://www.telegraph.co.uk/science/science-news/4768389/And-the-winner-tonight-is.html\n", + "#cite_ref-49\n", + "http://baconbros.com/\n", + "#cite_ref-50\n", + "https://www.instagram.com/p/ClUvj92p4Qn/?hl=en\n", + "#cite_ref-51\n", + "https://www.marvel.com/articles/tv-shows/guardians-of-the-galaxy-holiday-special-soundtrack\n", + "#cite_ref-52\n", + "http://www.nydailynews.com/entertainment/tv-movies/kevin-bacon-loyalty-nyc-philly-origins-peace-bustling-city-article-1.147197\n", + "#cite_ref-53\n", + "http://www.people.com/people/archive/article/0,,20093025,00.html\n", + "#cite_ref-54\n", + "https://web.archive.org/web/20141023014658/https://www.au.org/media/church-and-state/archives/2008/05/two-thumbs-up.html\n", + "http://www.au.org/media/church-and-state/archives/2008/05/two-thumbs-up.html\n", + "#cite_ref-55\n", + "https://www.washingtonpost.com/wp-dyn/content/article/2008/03/25/AR2008032503852.html\n", + "#cite_ref-56\n", + "#cite_ref-57\n", + "http://www.foxnews.com/story/0,2933,343589,00.html\n", + "#cite_ref-financialpost_58-0\n", + "https://web.archive.org/web/20140314085857/http://economiccrisis.us/2009/06/may-god-spare-mercy-victim-tells-madoff/\n", + "http://economiccrisis.us/2009/06/may-god-spare-mercy-victim-tells-madoff/\n", + "#cite_ref-59\n", + "#cite_ref-60\n", + "http://www.huffingtonpost.com/megan-smolenyak-smolenyak/6-degrees-of-separation-k_b_900707.html\n", + "#cite_ref-61\n", + "https://web.archive.org/web/20130405182304/http://www.drawtheline.org/watch-stuff/\n", + "http://www.drawtheline.org/watch-stuff\n", + "#cite_ref-62\n", + "http://www.drawtheline.org/sign-now/\n", + "#cite_ref-63\n", + "http://www.awardscircuit.com/2015/07/01/pixars-toy-story-wins-top-prize-for-1995-awards-circuit-community-awards/\n", + "#cite_ref-64\n", + "http://www.awardscircuit.com/acca/the-acca-nominations-2003/\n", + "#cite_ref-65\n", + "https://idobi.com/news/nsync-takes-home-three-blockbuster-entertainment-awards/\n", + "#cite_ref-66\n", + "https://www.upi.com/Boston-critics-pick-Mystic-River/24961071506935/\n", + "#cite_ref-67\n", + "http://www.walkoffame.com/kevin-bacon\n", + "#cite_ref-68\n", + "https://www.imdb.com/event/ev0000209/2004/1/\n", + "#cite_ref-69\n", + "https://www.imdb.com/event/ev0000536/2005/1/\n", + "#cite_ref-70\n", + "https://www.imdb.com/event/ev0000589/2005/1/\n", + "#cite_ref-71\n", + "http://www.criticschoice.com/movie-awards/critics%E2%80%99-choice-movie-awards-winners-archive/\n", + "#cite_ref-72\n", + "https://www.imdb.com/event/ev0000600/2015/1/\n", + "https://commons.wikimedia.org/wiki/Category:Kevin_Bacon\n", + "https://www.imdb.com/name/nm0000102/\n", + "/wiki/IMDb\n", + "https://www.ibdb.com/broadway-cast-staff/90569\n", + "/wiki/Internet_Broadway_Database\n", + "https://www.wikidata.org/wiki/Q3454165#P1220\n", + "http://www.iobdb.com/CreditableEntity/5597\n", + "/wiki/Internet_Off-Broadway_Database\n", + "https://www.allmovie.com/artist/p3164\n", + "/wiki/AllMovie\n", + "http://oracleofbacon.org\n", + "/wiki/Template:Kevin_Bacon\n", + "/wiki/Template_talk:Kevin_Bacon\n", + "https://en.wikipedia.org/w/index.php?title=Template:Kevin_Bacon&action=edit\n", + "/wiki/Kevin_Bacon_filmography\n", + "/wiki/Losing_Chase\n", + "/wiki/Loverboy_(2005_film)\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/Sosie_Bacon\n", + "/wiki/Edmund_Bacon_(architect)\n", + "/wiki/Michael_Bacon_(musician)\n", + "/wiki/The_Bacon_Brothers\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/Erd%C5%91s%E2%80%93Bacon_number\n", + "/wiki/SixDegrees.org\n", + "/wiki/Template:Critics%27_Choice_Movie_Award_for_Best_Actor\n", + "/wiki/Template_talk:Critics%27_Choice_Movie_Award_for_Best_Actor\n", + "https://en.wikipedia.org/w/index.php?title=Template:Critics%27_Choice_Movie_Award_for_Best_Actor&action=edit\n", + "/wiki/Critics%27_Choice_Movie_Award_for_Best_Actor\n", + "/wiki/Geoffrey_Rush\n", + "/wiki/Jack_Nicholson\n", + "/wiki/Ian_McKellen\n", + "/wiki/Russell_Crowe\n", + "/wiki/Russell_Crowe\n", + "/wiki/Russell_Crowe\n", + "/wiki/Daniel_Day-Lewis\n", + "/wiki/Jack_Nicholson\n", + "/wiki/Sean_Penn\n", + "/wiki/Jamie_Foxx\n", + "/wiki/Philip_Seymour_Hoffman\n", + "/wiki/Forest_Whitaker\n", + "/wiki/Daniel_Day-Lewis\n", + "/wiki/Sean_Penn\n", + "/wiki/Jeff_Bridges\n", + "/wiki/Colin_Firth\n", + "/wiki/George_Clooney\n", + "/wiki/Daniel_Day-Lewis\n", + "/wiki/Matthew_McConaughey\n", + "/wiki/Michael_Keaton\n", + "/wiki/Leonardo_DiCaprio\n", + "/wiki/Casey_Affleck\n", + "/wiki/Gary_Oldman\n", + "/wiki/Christian_Bale\n", + "/wiki/Joaquin_Phoenix\n", + "/wiki/Chadwick_Boseman\n", + "/wiki/Will_Smith\n", + "/wiki/Brendan_Fraser\n", + "/wiki/Template:Golden_Globe_Best_Actor_TV_Miniseries_Film\n", + "/wiki/Template_talk:Golden_Globe_Best_Actor_TV_Miniseries_Film\n", + "https://en.wikipedia.org/w/index.php?title=Template:Golden_Globe_Best_Actor_TV_Miniseries_Film&action=edit\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Mickey_Rooney\n", + "/wiki/Anthony_Andrews\n", + "/wiki/Richard_Chamberlain\n", + "/wiki/Ted_Danson\n", + "/wiki/Dustin_Hoffman\n", + "/wiki/James_Woods\n", + "/wiki/Randy_Quaid\n", + "/wiki/Michael_Caine\n", + "/wiki/Stacy_Keach\n", + "/wiki/Robert_Duvall\n", + "/wiki/James_Garner\n", + "/wiki/Beau_Bridges\n", + "/wiki/Robert_Duvall\n", + "/wiki/James_Garner\n", + "/wiki/Raul_Julia\n", + "/wiki/Gary_Sinise\n", + "/wiki/Alan_Rickman\n", + "/wiki/Ving_Rhames\n", + "/wiki/Stanley_Tucci\n", + "/wiki/Jack_Lemmon\n", + "/wiki/Brian_Dennehy\n", + "/wiki/James_Franco\n", + "/wiki/Albert_Finney\n", + "/wiki/Al_Pacino\n", + "/wiki/Geoffrey_Rush\n", + "/wiki/Jonathan_Rhys_Meyers\n", + "/wiki/Bill_Nighy\n", + "/wiki/Jim_Broadbent\n", + "/wiki/Paul_Giamatti\n", + "/wiki/Al_Pacino\n", + "/wiki/Idris_Elba\n", + "/wiki/Kevin_Costner\n", + "/wiki/Michael_Douglas\n", + "/wiki/Billy_Bob_Thornton\n", + "/wiki/Oscar_Isaac\n", + "/wiki/Tom_Hiddleston\n", + "/wiki/Ewan_McGregor\n", + "/wiki/Darren_Criss\n", + "/wiki/Russell_Crowe\n", + "/wiki/Mark_Ruffalo\n", + "/wiki/Michael_Keaton\n", + "/wiki/Evan_Peters\n", + "/wiki/Template:Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/Template_talk:Saturn_Award_for_Best_Actor_on_Television\n", + "https://en.wikipedia.org/w/index.php?title=Template:Saturn_Award_for_Best_Actor_on_Television&action=edit\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/Kyle_Chandler\n", + "/wiki/Steven_Weber_(actor)\n", + "/wiki/Richard_Dean_Anderson\n", + "/wiki/David_Boreanaz\n", + "/wiki/Robert_Patrick\n", + "/wiki/Ben_Browder\n", + "/wiki/David_Boreanaz\n", + "/wiki/David_Boreanaz\n", + "/wiki/Ben_Browder\n", + "/wiki/Matthew_Fox\n", + "/wiki/Michael_C._Hall\n", + "/wiki/Matthew_Fox\n", + "/wiki/Edward_James_Olmos\n", + "/wiki/Josh_Holloway\n", + "/wiki/Stephen_Moyer\n", + "/wiki/Bryan_Cranston\n", + "/wiki/Bryan_Cranston\n", + "/wiki/Mads_Mikkelsen\n", + "/wiki/Hugh_Dancy\n", + "/wiki/Andrew_Lincoln\n", + "/wiki/Bruce_Campbell\n", + "/wiki/Andrew_Lincoln\n", + "/wiki/Kyle_MacLachlan\n", + "/wiki/Patrick_Stewart\n", + "/wiki/Saturn_Award_for_Best_Actor_in_a_Network_or_Cable_Television_Series\n", + "/wiki/Sam_Heughan\n", + "/wiki/Bob_Odenkirk\n", + "/wiki/Saturn_Award_for_Best_Actor_in_a_Streaming_Television_Series\n", + "/wiki/Henry_Thomas\n", + "/wiki/Oscar_Isaac\n", + "/wiki/Template:ScreenActorsGuildAward_MaleTVMiniseriesMovie\n", + "/wiki/Template_talk:ScreenActorsGuildAward_MaleTVMiniseriesMovie\n", + "https://en.wikipedia.org/w/index.php?title=Template:ScreenActorsGuildAward_MaleTVMiniseriesMovie&action=edit\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Raul_Julia\n", + "/wiki/Gary_Sinise\n", + "/wiki/Alan_Rickman\n", + "/wiki/Gary_Sinise\n", + "/wiki/Christopher_Reeve\n", + "/wiki/Jack_Lemmon\n", + "/wiki/Brian_Dennehy\n", + "/wiki/Ben_Kingsley\n", + "/wiki/William_H._Macy\n", + "/wiki/Al_Pacino\n", + "/wiki/Geoffrey_Rush\n", + "/wiki/Paul_Newman\n", + "/wiki/Jeremy_Irons\n", + "/wiki/Kevin_Kline\n", + "/wiki/Paul_Giamatti\n", + "/wiki/Al_Pacino\n", + "/wiki/Paul_Giamatti\n", + "/wiki/Kevin_Costner\n", + "/wiki/Michael_Douglas\n", + "/wiki/Mark_Ruffalo\n", + "/wiki/Idris_Elba\n", + "/wiki/Bryan_Cranston\n", + "/wiki/Alexander_Skarsg%C3%A5rd\n", + "/wiki/Darren_Criss\n", + "/wiki/Sam_Rockwell\n", + "/wiki/Mark_Ruffalo\n", + "/wiki/Michael_Keaton\n", + "/wiki/Sam_Elliott\n", + "/wiki/Help:Authority_control\n", + "https://www.wikidata.org/wiki/Q3454165#identifiers\n", + "http://id.worldcat.org/fast/242183/\n", + "https://isni.org/isni/0000000121291300\n", + "https://viaf.org/viaf/39570812\n", + "https://www.worldcat.org/identities/lccn-n88034930/\n", + "https://authority.bibsys.no/authority/rest/authorities/html/98015093\n", + "http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=XX1298810\n", + "https://catalogue.bnf.fr/ark:/12148/cb139817766\n", + "https://data.bnf.fr/ark:/12148/cb139817766\n", + "https://d-nb.info/gnd/124109659\n", + "http://uli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007454685905171\n", + "https://id.loc.gov/authorities/names/n88034930\n", + "https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number=000249798&P_CON_LNG=ENG\n", + "https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=xx0025279&CON_LNG=ENG\n", + "https://nla.gov.au/anbd.aut-an36021861\n", + "https://lod.nl.go.kr/resource/KAC2020K8226\n", + "http://data.bibliotheken.nl/id/thes/p147880998\n", + "http://mak.bn.org.pl/cgi-bin/KHW/makwww.exe?BM=1&NU=1&IM=4&WI=9810630778405606\n", + "https://musicbrainz.org/artist/cc0dbdfc-9b2c-4e31-8448-808412388406\n", + "https://trove.nla.gov.au/people/1189569\n", + "https://snaccooperative.org/ark:/99166/w6w67gw2\n", + "https://www.idref.fr/067287832\n", + "https://en.wikipedia.org/w/index.php?title=Kevin_Bacon&oldid=1146341850\n", + "/wiki/Help:Category\n", + "/wiki/Category:1958_births\n", + "/wiki/Category:20th-century_American_male_actors\n", + "/wiki/Category:21st-century_American_male_actors\n", + "/wiki/Category:American_atheists\n", + "/wiki/Category:American_male_film_actors\n", + "/wiki/Category:American_male_soap_opera_actors\n", + "/wiki/Category:American_male_television_actors\n", + "/wiki/Category:American_male_voice_actors\n", + "/wiki/Category:The_Bacon_Brothers_members\n", + "/wiki/Category:Best_Miniseries_or_Television_Movie_Actor_Golden_Globe_winners\n", + "/wiki/Category:Circle_in_the_Square_Theatre_School_alumni\n", + "/wiki/Category:Living_people\n", + "/wiki/Category:Male_actors_from_Philadelphia\n", + "/wiki/Category:Obie_Award_recipients\n", + "/wiki/Category:Outstanding_Performance_by_a_Cast_in_a_Motion_Picture_Screen_Actors_Guild_Award_winners\n", + "/wiki/Category:Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie_Screen_Actors_Guild_Award_winners\n", + "/wiki/Category:Sedgwick_family\n", + "/wiki/Category:People_from_the_Upper_West_Side\n", + "/wiki/Category:Articles_with_short_description\n", + "/wiki/Category:Short_description_is_different_from_Wikidata\n", + "/wiki/Category:Wikipedia_indefinitely_semi-protected_biographies_of_living_people\n", + "/wiki/Category:Use_mdy_dates_from_October_2022\n", + "/wiki/Category:All_articles_with_unsourced_statements\n", + "/wiki/Category:Articles_with_unsourced_statements_from_October_2021\n", + "/wiki/Category:Articles_with_hCards\n", + "/wiki/Category:Commons_category_link_from_Wikidata\n", + "/wiki/Category:IBDB_name_template_using_Wikidata\n", + "/wiki/Category:Internet_Off-Broadway_Database_person_ID_same_as_Wikidata\n", + "/wiki/Category:Articles_with_FAST_identifiers\n", + "/wiki/Category:Articles_with_ISNI_identifiers\n", + "/wiki/Category:Articles_with_VIAF_identifiers\n", + "/wiki/Category:Articles_with_WorldCat_identifiers\n", + "/wiki/Category:Articles_with_BIBSYS_identifiers\n", + "/wiki/Category:Articles_with_BNE_identifiers\n", + "/wiki/Category:Articles_with_BNF_identifiers\n", + "/wiki/Category:Articles_with_BNFdata_identifiers\n", + "/wiki/Category:Articles_with_GND_identifiers\n", + "/wiki/Category:Articles_with_J9U_identifiers\n", + "/wiki/Category:Articles_with_LCCN_identifiers\n", + "/wiki/Category:Articles_with_LNB_identifiers\n", + "/wiki/Category:Articles_with_NKC_identifiers\n", + "/wiki/Category:Articles_with_NLA_identifiers\n", + "/wiki/Category:Articles_with_NLK_identifiers\n", + "/wiki/Category:Articles_with_NTA_identifiers\n", + "/wiki/Category:Articles_with_PLWABN_identifiers\n", + "/wiki/Category:Articles_with_MusicBrainz_identifiers\n", + "/wiki/Category:Articles_with_Trove_identifiers\n", + "/wiki/Category:Articles_with_SNAC-ID_identifiers\n", + "/wiki/Category:Articles_with_SUDOC_identifiers\n", + "//en.wikipedia.org/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License\n", + "//creativecommons.org/licenses/by-sa/3.0/\n", + "//foundation.wikimedia.org/wiki/Terms_of_Use\n", + "//foundation.wikimedia.org/wiki/Privacy_policy\n", + "//www.wikimediafoundation.org/\n", + "https://foundation.wikimedia.org/wiki/Privacy_policy\n", + "/wiki/Wikipedia:About\n", + "/wiki/Wikipedia:General_disclaimer\n", + "//en.wikipedia.org/wiki/Wikipedia:Contact_us\n", + "//en.m.wikipedia.org/w/index.php?title=Kevin_Bacon&mobileaction=toggle_view_mobile\n", + "https://developer.wikimedia.org\n", + "https://stats.wikimedia.org/#/en.wikipedia.org\n", + "https://foundation.wikimedia.org/wiki/Cookie_statement\n", + "https://wikimediafoundation.org/\n", + "https://www.mediawiki.org/\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup \n", + "\n", + "html = urlopen('http://en.wikipedia.org/wiki/Kevin_Bacon')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "for link in bs.find_all('a'):\n", + " if 'href' in link.attrs:\n", + " print(link.attrs['href'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Retrieving Articles Only" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/wiki/Kevin_Bacon_(disambiguation)\n", + "/wiki/Philadelphia\n", + "/wiki/Kevin_Bacon_filmography\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/Sosie_Bacon\n", + "/wiki/Edmund_Bacon_(architect)\n", + "/wiki/Michael_Bacon_(musician)\n", + "/wiki/Leading_man\n", + "/wiki/Character_actor\n", + "/wiki/Golden_Globe_Award\n", + "/wiki/Screen_Actors_Guild_Award\n", + "/wiki/Primetime_Emmy_Award\n", + "/wiki/National_Lampoon%27s_Animal_House\n", + "/wiki/Footloose_(1984_film)\n", + "/wiki/Diner_(1982_film)\n", + "/wiki/JFK_(film)\n", + "/wiki/A_Few_Good_Men\n", + "/wiki/Apollo_13_(film)\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Frost/Nixon_(film)\n", + "/wiki/Friday_the_13th_(1980_film)\n", + "/wiki/Tremors_(1990_film)\n", + "/wiki/The_River_Wild\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Crazy,_Stupid,_Love\n", + "/wiki/Patriots_Day_(film)\n", + "/wiki/Losing_Chase\n", + "/wiki/Loverboy_(2005_film)\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Michael_Strobl\n", + "/wiki/HBO\n", + "/wiki/Taking_Chance\n", + "/wiki/Fox_Broadcasting_Company\n", + "/wiki/The_Following\n", + "/wiki/Amazon_Prime_Video\n", + "/wiki/I_Love_Dick_(TV_series)\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Television_Series_Musical_or_Comedy\n", + "/wiki/Showtime_(TV_network)\n", + "/wiki/City_on_a_Hill_(TV_series)\n", + "/wiki/The_Guardian\n", + "/wiki/Academy_Award\n", + "/wiki/Hollywood_Walk_of_Fame\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/EE_Limited\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/Philadelphia\n", + "/wiki/Edmund_Bacon_(architect)\n", + "/wiki/Urban_planning\n", + "/wiki/Design_of_Cities\n", + "/wiki/Julia_R._Masterman_School\n", + "/wiki/Spring_Garden,_Philadelphia\n", + "/wiki/Pennsylvania_Governor%27s_School_for_the_Arts\n", + "/wiki/Bucknell_University\n", + "/wiki/Lewisburg,_Pennsylvania\n", + "/wiki/Glory_Van_Scott\n", + "/wiki/Kevin_Bacon_filmography\n", + "/wiki/Circle_in_the_Square\n", + "/wiki/Nancy_Mills\n", + "/wiki/Cosmopolitan_(magazine)\n", + "/wiki/Fraternities_and_sororities\n", + "/wiki/Animal_House\n", + "/wiki/Search_for_Tomorrow\n", + "/wiki/Guiding_Light\n", + "/wiki/Friday_the_13th_(1980_film)\n", + "/wiki/Getting_Out\n", + "/wiki/Phoenix_Theater\n", + "/wiki/Flux\n", + "/wiki/Second_Stage_Theatre\n", + "/wiki/Obie_Award\n", + "/wiki/Forty_Deuce\n", + "/wiki/Slab_Boys\n", + "/wiki/Sean_Penn\n", + "/wiki/Val_Kilmer\n", + "/wiki/Barry_Levinson\n", + "/wiki/Diner_(1982_film)\n", + "/wiki/Steve_Guttenberg\n", + "/wiki/Daniel_Stern_(actor)\n", + "/wiki/Mickey_Rourke\n", + "/wiki/Tim_Daly\n", + "/wiki/Ellen_Barkin\n", + "/wiki/Footloose_(1984_film)\n", + "/wiki/James_Dean\n", + "/wiki/Rebel_Without_a_Cause\n", + "/wiki/Mickey_Rooney\n", + "/wiki/Judy_Garland\n", + "/wiki/Typecasting_(acting)\n", + "/wiki/John_Hughes_(filmmaker)\n", + "/wiki/Planes,_Trains_and_Automobiles\n", + "/wiki/She%27s_Having_a_Baby\n", + "/wiki/The_Big_Picture_(1989_film)\n", + "/wiki/Tremors_(1990_film)\n", + "/wiki/Joel_Schumacher\n", + "/wiki/Flatliners\n", + "/wiki/Elizabeth_Perkins\n", + "/wiki/He_Said,_She_Said_(film)\n", + "/wiki/The_New_York_Times\n", + "/wiki/Oliver_Stone\n", + "/wiki/JFK_(film)\n", + "/wiki/A_Few_Good_Men_(film)\n", + "/wiki/Michael_Greif\n", + "/wiki/Golden_Globe_Award\n", + "/wiki/The_River_Wild\n", + "/wiki/Meryl_Streep\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/Blockbuster_(entertainment)\n", + "/wiki/Apollo_13_(film)\n", + "/wiki/Sleepers_(film)\n", + "/wiki/Picture_Perfect_(1997_film)\n", + "/wiki/Losing_Chase\n", + "/wiki/Digging_to_China\n", + "/wiki/Payola\n", + "/wiki/Telling_Lies_in_America_(film)\n", + "/wiki/Wild_Things_(film)\n", + "/wiki/Stir_of_Echoes\n", + "/wiki/David_Koepp\n", + "/wiki/Cannes_Film_Festival\n", + "/wiki/Paul_Verhoeven\n", + "/wiki/Hollow_Man\n", + "/wiki/Colin_Firth\n", + "/wiki/Rachel_Blanchard\n", + "/wiki/M%C3%A9nage_%C3%A0_trois\n", + "/wiki/Where_the_Truth_Lies\n", + "/wiki/Atom_Egoyan\n", + "/wiki/MPAA\n", + "/wiki/MPAA_film_rating_system\n", + "/wiki/Sean_Penn\n", + "/wiki/Tim_Robbins\n", + "/wiki/Clint_Eastwood\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/HBO_Films\n", + "/wiki/Taking_Chance\n", + "/wiki/Michael_Strobl\n", + "/wiki/Desert_Storm\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Toronto_Film_Festival\n", + "/wiki/Matthew_Vaughn\n", + "/wiki/Sebastian_Shaw_(comics)\n", + "/wiki/Dustin_Lance_Black\n", + "/wiki/8_(play)\n", + "/wiki/Perry_v._Brown\n", + "/wiki/Proposition_8\n", + "/wiki/Charles_J._Cooper\n", + "/wiki/Wilshire_Ebell_Theatre\n", + "/wiki/American_Foundation_for_Equal_Rights\n", + "/wiki/The_Following\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/Huffington_Post\n", + "/wiki/Tremors_(1990_film)\n", + "/wiki/The_Bacon_Brothers\n", + "/wiki/Michael_Bacon_(musician)\n", + "/wiki/Instagram\n", + "/wiki/Old_97%27s\n", + "/wiki/The_Guardians_of_the_Galaxy_Holiday_Special\n", + "/wiki/EE_(telecommunications_company)\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/Trivia\n", + "/wiki/Big_screen\n", + "/wiki/Six_degrees_of_separation\n", + "/wiki/Internet_meme\n", + "/wiki/SixDegrees.org\n", + "/wiki/Social_networking_service\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/IMDb\n", + "/wiki/Paul_Erd%C5%91s\n", + "/wiki/Erd%C5%91s_number\n", + "/wiki/Paul_Erd%C5%91s\n", + "/wiki/Erd%C5%91s_number\n", + "/wiki/Erd%C5%91s%E2%80%93Bacon_number\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/PBS\n", + "/wiki/Lanford_Wilson\n", + "/wiki/Lemon_Sky\n", + "/wiki/Pyrates\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Loverboy_(2005_film)\n", + "/wiki/Sosie_Bacon\n", + "/wiki/Upper_West_Side\n", + "/wiki/Manhattan\n", + "/wiki/Tracy_Pollan\n", + "/wiki/Separation_of_church_and_state_in_the_United_States\n", + "/wiki/The_Times\n", + "/wiki/Atheism\n", + "/wiki/Antireligion\n", + "/wiki/Will.i.am\n", + "/wiki/It%27s_a_New_Day_(Will.i.am_song)\n", + "/wiki/Barack_Obama\n", + "/wiki/Ponzi_scheme\n", + "/wiki/Bernie_Madoff\n", + "/wiki/Finding_Your_Roots\n", + "/wiki/Henry_Louis_Gates\n", + "/wiki/Apollo_13_(film)\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Blockbuster_Entertainment_Awards\n", + "/wiki/Blockbuster_Entertainment_Awards\n", + "/wiki/Hollow_Man\n", + "/wiki/Boston_Society_of_Film_Critics\n", + "/wiki/Boston_Society_of_Film_Critics_Award_for_Best_Cast\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Bravo_Otto\n", + "/wiki/Bravo_Otto\n", + "/wiki/Footloose_(1984_film)\n", + "/wiki/CableACE_Award\n", + "/wiki/CableACE_Award\n", + "/wiki/Losing_Chase\n", + "/wiki/Chlotrudis_Awards\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Critics%27_Choice_Movie_Awards\n", + "/wiki/Critics%27_Choice_Movie_Award_for_Best_Actor\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/Ghent_International_Film_Festival\n", + "/wiki/Ghent_International_Film_Festival\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Giffoni_Film_Festival\n", + "/wiki/Giffoni_Film_Festival\n", + "/wiki/Digging_to_China\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Golden_Globe_Award\n", + "/wiki/Golden_Globe_Award_for_Best_Supporting_Actor_%E2%80%93_Motion_Picture\n", + "/wiki/The_River_Wild\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Taking_Chance\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Television_Series_Musical_or_Comedy\n", + "/wiki/I_Love_Dick_(TV_series)\n", + "/wiki/Independent_Spirit_Awards\n", + "/wiki/Independent_Spirit_Award_for_Best_Male_Lead\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/MTV_Movie_%26_TV_Awards\n", + "/wiki/MTV_Movie_Award_for_Best_Villain\n", + "/wiki/Hollow_Man\n", + "/wiki/Taking_Chance\n", + "/wiki/The_Following\n", + "/wiki/E!_People%27s_Choice_Awards\n", + "/wiki/E!_People%27s_Choice_Awards\n", + "/wiki/The_Following\n", + "/wiki/E!_People%27s_Choice_Awards\n", + "/wiki/The_Following\n", + "/wiki/Primetime_Emmy_Award\n", + "/wiki/Primetime_Emmy_Award_for_Outstanding_Lead_Actor_in_a_Limited_Series_or_Movie\n", + "/wiki/Taking_Chance\n", + "/wiki/Satellite_Awards\n", + "/wiki/Satellite_Award_for_Best_Actor_%E2%80%93_Motion_Picture\n", + "/wiki/The_Woodsman_(2004_film)\n", + "/wiki/Satellite_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Taking_Chance\n", + "/wiki/Saturn_Award\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/The_Following\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/The_Following\n", + "/wiki/Scream_Awards\n", + "/wiki/Scream_Awards\n", + "/wiki/Screen_Actors_Guild_Award\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Supporting_Role\n", + "/wiki/Murder_in_the_First_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Cast_in_a_Motion_Picture\n", + "/wiki/Apollo_13_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Cast_in_a_Motion_Picture\n", + "/wiki/Mystic_River_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Cast_in_a_Motion_Picture\n", + "/wiki/Frost/Nixon_(film)\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Taking_Chance\n", + "/wiki/Teen_Choice_Awards\n", + "/wiki/Teen_Choice_Award_for_Choice_Movie_Villain\n", + "/wiki/Beauty_Shop\n", + "/wiki/Teen_Choice_Award_for_Choice_Movie_Villain\n", + "/wiki/TV_Guide_Award\n", + "/wiki/TV_Guide_Award\n", + "/wiki/The_Following\n", + "/wiki/Hollywood_Walk_of_Fame\n", + "/wiki/Hollywood_Walk_of_Fame\n", + "/wiki/Denver_Film_Festival\n", + "/wiki/Phoenix_Film_Festival\n", + "/wiki/Santa_Barbara_International_Film_Festival\n", + "/wiki/Broadcast_Film_Critics_Association\n", + "/wiki/Seattle_International_Film_Festival\n", + "/wiki/List_of_actors_with_Hollywood_Walk_of_Fame_motion_picture_stars\n", + "/wiki/The_Hollywood_Reporter\n", + "/wiki/The_Austin_Chronicle\n", + "/wiki/Access_Hollywood\n", + "/wiki/CNN\n", + "/wiki/IMDb_(identifier)\n", + "/wiki/Internet_Broadway_Database\n", + "/wiki/Internet_Off-Broadway_Database\n", + "/wiki/AllMovie\n", + "/wiki/Kevin_Bacon_filmography\n", + "/wiki/Losing_Chase\n", + "/wiki/Loverboy_(2005_film)\n", + "/wiki/Kyra_Sedgwick\n", + "/wiki/Sosie_Bacon\n", + "/wiki/Edmund_Bacon_(architect)\n", + "/wiki/Michael_Bacon_(musician)\n", + "/wiki/The_Bacon_Brothers\n", + "/wiki/Six_Degrees_of_Kevin_Bacon\n", + "/wiki/Erd%C5%91s%E2%80%93Bacon_number\n", + "/wiki/SixDegrees.org\n", + "/wiki/Critics%27_Choice_Movie_Award_for_Best_Actor\n", + "/wiki/Geoffrey_Rush\n", + "/wiki/Jack_Nicholson\n", + "/wiki/Ian_McKellen\n", + "/wiki/Russell_Crowe\n", + "/wiki/Russell_Crowe\n", + "/wiki/Russell_Crowe\n", + "/wiki/Daniel_Day-Lewis\n", + "/wiki/Jack_Nicholson\n", + "/wiki/Sean_Penn\n", + "/wiki/Jamie_Foxx\n", + "/wiki/Philip_Seymour_Hoffman\n", + "/wiki/Forest_Whitaker\n", + "/wiki/Daniel_Day-Lewis\n", + "/wiki/Sean_Penn\n", + "/wiki/Jeff_Bridges\n", + "/wiki/Colin_Firth\n", + "/wiki/George_Clooney\n", + "/wiki/Daniel_Day-Lewis\n", + "/wiki/Matthew_McConaughey\n", + "/wiki/Michael_Keaton\n", + "/wiki/Leonardo_DiCaprio\n", + "/wiki/Casey_Affleck\n", + "/wiki/Gary_Oldman\n", + "/wiki/Christian_Bale\n", + "/wiki/Joaquin_Phoenix\n", + "/wiki/Chadwick_Boseman\n", + "/wiki/Will_Smith\n", + "/wiki/Brendan_Fraser\n", + "/wiki/Golden_Globe_Award_for_Best_Actor_%E2%80%93_Miniseries_or_Television_Film\n", + "/wiki/Mickey_Rooney\n", + "/wiki/Anthony_Andrews\n", + "/wiki/Richard_Chamberlain\n", + "/wiki/Ted_Danson\n", + "/wiki/Dustin_Hoffman\n", + "/wiki/James_Woods\n", + "/wiki/Randy_Quaid\n", + "/wiki/Michael_Caine\n", + "/wiki/Stacy_Keach\n", + "/wiki/Robert_Duvall\n", + "/wiki/James_Garner\n", + "/wiki/Beau_Bridges\n", + "/wiki/Robert_Duvall\n", + "/wiki/James_Garner\n", + "/wiki/Raul_Julia\n", + "/wiki/Gary_Sinise\n", + "/wiki/Alan_Rickman\n", + "/wiki/Ving_Rhames\n", + "/wiki/Stanley_Tucci\n", + "/wiki/Jack_Lemmon\n", + "/wiki/Brian_Dennehy\n", + "/wiki/James_Franco\n", + "/wiki/Albert_Finney\n", + "/wiki/Al_Pacino\n", + "/wiki/Geoffrey_Rush\n", + "/wiki/Jonathan_Rhys_Meyers\n", + "/wiki/Bill_Nighy\n", + "/wiki/Jim_Broadbent\n", + "/wiki/Paul_Giamatti\n", + "/wiki/Al_Pacino\n", + "/wiki/Idris_Elba\n", + "/wiki/Kevin_Costner\n", + "/wiki/Michael_Douglas\n", + "/wiki/Billy_Bob_Thornton\n", + "/wiki/Oscar_Isaac\n", + "/wiki/Tom_Hiddleston\n", + "/wiki/Ewan_McGregor\n", + "/wiki/Darren_Criss\n", + "/wiki/Russell_Crowe\n", + "/wiki/Mark_Ruffalo\n", + "/wiki/Michael_Keaton\n", + "/wiki/Evan_Peters\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/Saturn_Award_for_Best_Actor_on_Television\n", + "/wiki/Kyle_Chandler\n", + "/wiki/Steven_Weber_(actor)\n", + "/wiki/Richard_Dean_Anderson\n", + "/wiki/David_Boreanaz\n", + "/wiki/Robert_Patrick\n", + "/wiki/Ben_Browder\n", + "/wiki/David_Boreanaz\n", + "/wiki/David_Boreanaz\n", + "/wiki/Ben_Browder\n", + "/wiki/Matthew_Fox\n", + "/wiki/Michael_C._Hall\n", + "/wiki/Matthew_Fox\n", + "/wiki/Edward_James_Olmos\n", + "/wiki/Josh_Holloway\n", + "/wiki/Stephen_Moyer\n", + "/wiki/Bryan_Cranston\n", + "/wiki/Bryan_Cranston\n", + "/wiki/Mads_Mikkelsen\n", + "/wiki/Hugh_Dancy\n", + "/wiki/Andrew_Lincoln\n", + "/wiki/Bruce_Campbell\n", + "/wiki/Andrew_Lincoln\n", + "/wiki/Kyle_MacLachlan\n", + "/wiki/Patrick_Stewart\n", + "/wiki/Saturn_Award_for_Best_Actor_in_a_Network_or_Cable_Television_Series\n", + "/wiki/Sam_Heughan\n", + "/wiki/Bob_Odenkirk\n", + "/wiki/Saturn_Award_for_Best_Actor_in_a_Streaming_Television_Series\n", + "/wiki/Henry_Thomas\n", + "/wiki/Oscar_Isaac\n", + "/wiki/Screen_Actors_Guild_Award_for_Outstanding_Performance_by_a_Male_Actor_in_a_Miniseries_or_Television_Movie\n", + "/wiki/Raul_Julia\n", + "/wiki/Gary_Sinise\n", + "/wiki/Alan_Rickman\n", + "/wiki/Gary_Sinise\n", + "/wiki/Christopher_Reeve\n", + "/wiki/Jack_Lemmon\n", + "/wiki/Brian_Dennehy\n", + "/wiki/Ben_Kingsley\n", + "/wiki/William_H._Macy\n", + "/wiki/Al_Pacino\n", + "/wiki/Geoffrey_Rush\n", + "/wiki/Paul_Newman\n", + "/wiki/Jeremy_Irons\n", + "/wiki/Kevin_Kline\n", + "/wiki/Paul_Giamatti\n", + "/wiki/Al_Pacino\n", + "/wiki/Paul_Giamatti\n", + "/wiki/Kevin_Costner\n", + "/wiki/Michael_Douglas\n", + "/wiki/Mark_Ruffalo\n", + "/wiki/Idris_Elba\n", + "/wiki/Bryan_Cranston\n", + "/wiki/Alexander_Skarsg%C3%A5rd\n", + "/wiki/Darren_Criss\n", + "/wiki/Sam_Rockwell\n", + "/wiki/Mark_Ruffalo\n", + "/wiki/Michael_Keaton\n", + "/wiki/Sam_Elliott\n" + ] + } + ], + "source": [ + "from urllib.request import urlopen \n", + "from bs4 import BeautifulSoup \n", + "import re\n", + "\n", + "html = urlopen('http://en.wikipedia.org/wiki/Kevin_Bacon')\n", + "bs = BeautifulSoup(html, 'html.parser')\n", + "for link in bs.find('div', {'id':'bodyContent'}).find_all(\n", + " 'a', href=re.compile('^(/wiki/)((?!:).)*$')):\n", + " print(link.attrs['href'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Random Walk" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/wiki/Julia_R._Masterman_High_School\n", + "/wiki/Edwin_M._Stanton_School_(Philadelphia)\n", + "/wiki/Robert_Ralston_School\n", + "/wiki/Thaddeus_Stevens_School_of_Observation\n", + "/wiki/Delaplaine_McDaniel_School\n", + "/wiki/National_Register_of_Historic_Places_listings_in_Greene_County,_Pennsylvania\n", + "/wiki/National_Register_of_Historic_Places_listings_in_Fayette_County,_Pennsylvania\n", + "/wiki/National_Register_of_Historic_Places_listings_in_Blair_County,_Pennsylvania\n", + "/wiki/National_Register_of_Historic_Places_listings_in_Montour_County,_Pennsylvania\n", + "/wiki/National_Register_of_Historic_Places_listings_in_Pittsburgh,_Pennsylvania\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [4]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 15\u001b[0m newArticle \u001b[38;5;241m=\u001b[39m links[random\u001b[38;5;241m.\u001b[39mrandint(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;28mlen\u001b[39m(links)\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)]\u001b[38;5;241m.\u001b[39mattrs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhref\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28mprint\u001b[39m(newArticle)\n\u001b[0;32m---> 17\u001b[0m links \u001b[38;5;241m=\u001b[39m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewArticle\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [4]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(articleUrl)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetLinks\u001b[39m(articleUrl):\n\u001b[1;32m 9\u001b[0m html \u001b[38;5;241m=\u001b[39m urlopen(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttp://en.wikipedia.org\u001b[39m\u001b[38;5;132;01m{\u001b[39;00marticleUrl\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 10\u001b[0m bs \u001b[38;5;241m=\u001b[39m \u001b[43mBeautifulSoup\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhtml\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhtml.parser\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m bs\u001b[38;5;241m.\u001b[39mfind(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiv\u001b[39m\u001b[38;5;124m'\u001b[39m, {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mid\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbodyContent\u001b[39m\u001b[38;5;124m'\u001b[39m})\u001b[38;5;241m.\u001b[39mfind_all(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m, href\u001b[38;5;241m=\u001b[39mre\u001b[38;5;241m.\u001b[39mcompile(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m^(/wiki/)((?!:).)*$\u001b[39m\u001b[38;5;124m'\u001b[39m))\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/bs4/__init__.py:312\u001b[0m, in \u001b[0;36mBeautifulSoup.__init__\u001b[0;34m(self, markup, features, builder, parse_only, from_encoding, exclude_encodings, element_classes, **kwargs)\u001b[0m\n\u001b[1;32m 309\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparse_only \u001b[38;5;241m=\u001b[39m parse_only\n\u001b[1;32m 311\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(markup, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mread\u001b[39m\u001b[38;5;124m'\u001b[39m): \u001b[38;5;66;03m# It's a file-type object.\u001b[39;00m\n\u001b[0;32m--> 312\u001b[0m markup \u001b[38;5;241m=\u001b[39m \u001b[43mmarkup\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 313\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(markup) \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m256\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m (\n\u001b[1;32m 314\u001b[0m (\u001b[38;5;28misinstance\u001b[39m(markup, \u001b[38;5;28mbytes\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m markup)\n\u001b[1;32m 315\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m (\u001b[38;5;28misinstance\u001b[39m(markup, \u001b[38;5;28mstr\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m markup)\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;66;03m# Beautiful Soup will still parse the input as markup,\u001b[39;00m\n\u001b[1;32m 320\u001b[0m \u001b[38;5;66;03m# since that is sometimes the intended behavior.\u001b[39;00m\n\u001b[1;32m 321\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_markup_is_url(markup):\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:470\u001b[0m, in \u001b[0;36mHTTPResponse.read\u001b[0;34m(self, amt)\u001b[0m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 466\u001b[0m \u001b[38;5;66;03m# Amount is not given (unbounded read) so we must check self.length\u001b[39;00m\n\u001b[1;32m 467\u001b[0m \u001b[38;5;66;03m# and self.chunked\u001b[39;00m\n\u001b[1;32m 469\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunked:\n\u001b[0;32m--> 470\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_readall_chunked\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 472\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlength \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 473\u001b[0m s \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfp\u001b[38;5;241m.\u001b[39mread()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:577\u001b[0m, in \u001b[0;36mHTTPResponse._readall_chunked\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 575\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 576\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 577\u001b[0m chunk_left \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_chunk_left\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunk_left \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:560\u001b[0m, in \u001b[0;36mHTTPResponse._get_chunk_left\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 558\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_safe_read(\u001b[38;5;241m2\u001b[39m) \u001b[38;5;66;03m# toss the CRLF at the end of the chunk\u001b[39;00m\n\u001b[1;32m 559\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 560\u001b[0m chunk_left \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_read_next_chunk_size\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m:\n\u001b[1;32m 562\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m IncompleteRead(\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:520\u001b[0m, in \u001b[0;36mHTTPResponse._read_next_chunk_size\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_read_next_chunk_size\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 519\u001b[0m \u001b[38;5;66;03m# Read the next chunk size from the file\u001b[39;00m\n\u001b[0;32m--> 520\u001b[0m line \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreadline\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_MAXLINE\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(line) \u001b[38;5;241m>\u001b[39m _MAXLINE:\n\u001b[1;32m 522\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LineTooLong(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchunk size\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/socket.py:704\u001b[0m, in \u001b[0;36mSocketIO.readinto\u001b[0;34m(self, b)\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_into\u001b[49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m timeout:\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_timeout_occurred \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/ssl.py:1241\u001b[0m, in \u001b[0;36mSSLSocket.recv_into\u001b[0;34m(self, buffer, nbytes, flags)\u001b[0m\n\u001b[1;32m 1237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m flags \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 1238\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 1239\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnon-zero flags not allowed in calls to recv_into() on \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m\n\u001b[1;32m 1240\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m)\n\u001b[0;32m-> 1241\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnbytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1242\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mrecv_into(buffer, nbytes, flags)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/ssl.py:1099\u001b[0m, in \u001b[0;36mSSLSocket.read\u001b[0;34m(self, len, buffer)\u001b[0m\n\u001b[1;32m 1097\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1098\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m buffer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1099\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sslobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1100\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1101\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sslobj\u001b[38;5;241m.\u001b[39mread(\u001b[38;5;28mlen\u001b[39m)\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "import datetime\n", + "import random\n", + "import re\n", + "\n", + "random.seed(datetime.datetime.now().strftime('%s'))\n", + "def getLinks(articleUrl):\n", + " html = urlopen(f'http://en.wikipedia.org{articleUrl}')\n", + " bs = BeautifulSoup(html, 'html.parser')\n", + " return bs.find('div', {'id':'bodyContent'}).find_all('a', href=re.compile('^(/wiki/)((?!:).)*$'))\n", + "\n", + "links = getLinks('/wiki/Kevin_Bacon')\n", + "while len(links) > 0:\n", + " newArticle = links[random.randint(0, len(links)-1)].attrs['href']\n", + " print(newArticle)\n", + " links = getLinks(newArticle)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursively crawling an entire site" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/wiki/Main_Page\n", + "/wiki/Special:Search\n", + "/wiki/Help:Introduction\n", + "/wiki/Special:MyTalk\n", + "/wiki/Special:MyContributions\n", + "/wiki/Wikipedia:Contents\n", + "/wiki/Portal:Current_events\n", + "/wiki/Special:Random\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [7]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 16\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[1;32m 17\u001b[0m getLinks(newPage)\n\u001b[0;32m---> 18\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [7]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(newPage)\n\u001b[1;32m 16\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[0;32m---> 17\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewPage\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [7]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(newPage)\n\u001b[1;32m 16\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[0;32m---> 17\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewPage\u001b[49m\u001b[43m)\u001b[49m\n", + " \u001b[0;31m[... skipping similar frames: getLinks at line 17 (5 times)]\u001b[0m\n", + "Input \u001b[0;32mIn [7]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(newPage)\n\u001b[1;32m 16\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[0;32m---> 17\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewPage\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [7]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetLinks\u001b[39m(pageUrl):\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mglobal\u001b[39;00m pages\n\u001b[0;32m----> 8\u001b[0m html \u001b[38;5;241m=\u001b[39m \u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp://en.wikipedia.org\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mpageUrl\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m bs \u001b[38;5;241m=\u001b[39m BeautifulSoup(html, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhtml.parser\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m link \u001b[38;5;129;01min\u001b[39;00m bs\u001b[38;5;241m.\u001b[39mfind_all(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m, href\u001b[38;5;241m=\u001b[39mre\u001b[38;5;241m.\u001b[39mcompile(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m^(/wiki/)\u001b[39m\u001b[38;5;124m'\u001b[39m)):\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:214\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 213\u001b[0m opener \u001b[38;5;241m=\u001b[39m _opener\n\u001b[0;32m--> 214\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopener\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:523\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m processor \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprocess_response\u001b[38;5;241m.\u001b[39mget(protocol, []):\n\u001b[1;32m 522\u001b[0m meth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[0;32m--> 523\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 525\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:632\u001b[0m, in \u001b[0;36mHTTPErrorProcessor.http_response\u001b[0;34m(self, request, response)\u001b[0m\n\u001b[1;32m 629\u001b[0m \u001b[38;5;66;03m# According to RFC 2616, \"2xx\" code indicates that the client's\u001b[39;00m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;66;03m# request was successfully received, understood, and accepted.\u001b[39;00m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m):\n\u001b[0;32m--> 632\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43merror\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 633\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhdrs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:555\u001b[0m, in \u001b[0;36mOpenerDirector.error\u001b[0;34m(self, proto, *args)\u001b[0m\n\u001b[1;32m 553\u001b[0m http_err \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 554\u001b[0m args \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28mdict\u001b[39m, proto, meth_name) \u001b[38;5;241m+\u001b[39m args\n\u001b[0;32m--> 555\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 556\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result:\n\u001b[1;32m 557\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:747\u001b[0m, in \u001b[0;36mHTTPRedirectHandler.http_error_302\u001b[0;34m(self, req, fp, code, msg, headers)\u001b[0m\n\u001b[1;32m 744\u001b[0m fp\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m 745\u001b[0m fp\u001b[38;5;241m.\u001b[39mclose()\n\u001b[0;32m--> 747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnew\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:517\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 514\u001b[0m req \u001b[38;5;241m=\u001b[39m meth(req)\n\u001b[1;32m 516\u001b[0m sys\u001b[38;5;241m.\u001b[39maudit(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124murllib.Request\u001b[39m\u001b[38;5;124m'\u001b[39m, req\u001b[38;5;241m.\u001b[39mfull_url, req\u001b[38;5;241m.\u001b[39mdata, req\u001b[38;5;241m.\u001b[39mheaders, req\u001b[38;5;241m.\u001b[39mget_method())\n\u001b[0;32m--> 517\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 519\u001b[0m \u001b[38;5;66;03m# post-process response\u001b[39;00m\n\u001b[1;32m 520\u001b[0m meth_name \u001b[38;5;241m=\u001b[39m protocol\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_response\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:534\u001b[0m, in \u001b[0;36mOpenerDirector._open\u001b[0;34m(self, req, data)\u001b[0m\n\u001b[1;32m 531\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n\u001b[1;32m 533\u001b[0m protocol \u001b[38;5;241m=\u001b[39m req\u001b[38;5;241m.\u001b[39mtype\n\u001b[0;32m--> 534\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_open\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\n\u001b[1;32m 535\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_open\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 536\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result:\n\u001b[1;32m 537\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:1389\u001b[0m, in \u001b[0;36mHTTPSHandler.https_open\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m 1388\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhttps_open\u001b[39m(\u001b[38;5;28mself\u001b[39m, req):\n\u001b[0;32m-> 1389\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdo_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhttp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mHTTPSConnection\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1390\u001b[0m \u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_context\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcheck_hostname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_check_hostname\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:1350\u001b[0m, in \u001b[0;36mAbstractHTTPHandler.do_open\u001b[0;34m(self, http_class, req, **http_conn_args)\u001b[0m\n\u001b[1;32m 1348\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err: \u001b[38;5;66;03m# timeout error\u001b[39;00m\n\u001b[1;32m 1349\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m URLError(err)\n\u001b[0;32m-> 1350\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43mh\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetresponse\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1351\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[1;32m 1352\u001b[0m h\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1377\u001b[0m, in \u001b[0;36mHTTPConnection.getresponse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1375\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1376\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1377\u001b[0m \u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbegin\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1378\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m:\n\u001b[1;32m 1379\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:320\u001b[0m, in \u001b[0;36mHTTPResponse.begin\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;66;03m# read until we get a non-100 response\u001b[39;00m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 320\u001b[0m version, status, reason \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_read_status\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 321\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;241m!=\u001b[39m CONTINUE:\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:281\u001b[0m, in \u001b[0;36mHTTPResponse._read_status\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_read_status\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 281\u001b[0m line \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreadline\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_MAXLINE\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miso-8859-1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(line) \u001b[38;5;241m>\u001b[39m _MAXLINE:\n\u001b[1;32m 283\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LineTooLong(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatus line\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/socket.py:704\u001b[0m, in \u001b[0;36mSocketIO.readinto\u001b[0;34m(self, b)\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_into\u001b[49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m timeout:\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_timeout_occurred \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/ssl.py:1241\u001b[0m, in \u001b[0;36mSSLSocket.recv_into\u001b[0;34m(self, buffer, nbytes, flags)\u001b[0m\n\u001b[1;32m 1237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m flags \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 1238\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 1239\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnon-zero flags not allowed in calls to recv_into() on \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m\n\u001b[1;32m 1240\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m)\n\u001b[0;32m-> 1241\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnbytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1242\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mrecv_into(buffer, nbytes, flags)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/ssl.py:1099\u001b[0m, in \u001b[0;36mSSLSocket.read\u001b[0;34m(self, len, buffer)\u001b[0m\n\u001b[1;32m 1097\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1098\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m buffer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1099\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sslobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1100\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1101\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sslobj\u001b[38;5;241m.\u001b[39mread(\u001b[38;5;28mlen\u001b[39m)\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "import re\n", + "\n", + "pages = set()\n", + "def getLinks(pageUrl):\n", + " html = urlopen(f'http://en.wikipedia.org{pageUrl}')\n", + " bs = BeautifulSoup(html, 'html.parser')\n", + " for link in bs.find_all('a', href=re.compile('^(/wiki/)')):\n", + " if 'href' in link.attrs:\n", + " if link.attrs['href'] not in pages:\n", + " #We have encountered a new page\n", + " newPage = link.attrs['href']\n", + " print(newPage)\n", + " pages.add(newPage)\n", + " getLinks(newPage)\n", + "getLinks('')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Collecting Data Across an Entire Site" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "General-purpose programming language\n", + "

In computer software, a general-purpose programming language (GPL) is a programming language for building software in a wide variety of application domains. Conversely, a domain-specific programming language is used within a specific area. For example, SQL was specifically designed for querying relational databases.\n", + "

\n", + "/w/index.php?title=General-purpose_programming_language&action=edit\n", + "--------------------\n", + "/wiki/Main_Page\n", + "Main Page\n", + "

\"I Need You\" is a song recorded by American socialite Paris Hilton (pictured). Michael Green produced the song and co-wrote it with Hilton and Simon Wilcox. Heiress Records released it as a digital download on February 14, 2018. A version of the song leaked in 2010, but Hilton said she re-recorded portions of the vocals and instrumental as a dedication to her then-fiancé Chris Zylka. It is a doo-wop and pop ballad with holiday-related puns about love. Green based the ballad's style on 1950s music. Critics praised \"I Need You\", partially as a departure from Hilton's dance and EDM songs. The single peaked at number 32 on the Dance Club Songs chart, Hilton's fifth appearance on it. A music video, directed by Zylka, features Hilton wearing lingerie, posing in a bed covered with red rose petals, and popping out of a cake. It was inspired by Marilyn Monroe's performance of \"I Wanna Be Loved by You\" and Jessica Rabbit. Critics described the bed scene as an homage to the 1999 film American Beauty. (Full article...)\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Special:Search\n", + "Search\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Help:Introduction\n", + "Help:Introduction\n", + "

\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Special:MyTalk\n", + "User talk:72.93.95.254\n", + "

People on Wikipedia can use this talk page to post a public message about edits made from the IP address you are currently using.\n", + "

\n", + "/w/index.php?title=User_talk:72.93.95.254&action=edit\n", + "--------------------\n", + "/wiki/Special:MyContributions\n", + "User contributions for 72.93.95.254\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Wikipedia:Contents\n", + "Wikipedia:Contents\n", + "

\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Portal:Current_events\n", + "Portal:Current events\n", + "

Edit instructions\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Special:Random\n", + "1995 Missouri Valley Conference men's basketball tournament\n", + "

The 1995 Missouri Valley Conference men's basketball tournament was played after the conclusion of the 1994–1995 regular season at the Kiel Center in St. Louis, Missouri.\n", + "

\n", + "/w/index.php?title=1995_Missouri_Valley_Conference_men%27s_basketball_tournament&action=edit\n", + "--------------------\n", + "/wiki/Wikipedia:About\n", + "Wikipedia:About\n", + "

\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Help:Contents\n", + "Help:Contents\n", + "


\n", + "\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Wikipedia:Community_portal\n", + "Wikipedia:Community portal\n", + "

\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Special:RecentChanges\n", + "Recent changes\n", + "

This is a list of recent changes to Wikipedia.\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Wikipedia:File_upload_wizard\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wikipedia:File upload wizard\n", + "

Thank you for offering to contribute an image or other media file for use on Wikipedia. This wizard will guide you through a questionnaire prompting you for the appropriate copyright and sourcing information for each file. Please ensure you understand copyright and the image use policy before proceeding.\n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Special:WhatLinksHere/Wikipedia:File_upload_wizard\n", + "Pages that link to \"Wikipedia:File upload wizard\"\n", + "

The following pages link to Wikipedia:File upload wizard \n", + "

\n", + "This page is missing something! Continuing.\n", + "--------------------\n", + "/wiki/Wikipedia:File_Upload_Wizard\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 27\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[1;32m 28\u001b[0m getLinks(newPage)\n\u001b[0;32m---> 29\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m/wiki/General-purpose_programming_language\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28mprint\u001b[39m(newPage)\n\u001b[1;32m 27\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[0;32m---> 28\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewPage\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28mprint\u001b[39m(newPage)\n\u001b[1;32m 27\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[0;32m---> 28\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewPage\u001b[49m\u001b[43m)\u001b[49m\n", + " \u001b[0;31m[... skipping similar frames: getLinks at line 28 (12 times)]\u001b[0m\n", + "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28mprint\u001b[39m(newPage)\n\u001b[1;32m 27\u001b[0m pages\u001b[38;5;241m.\u001b[39madd(newPage)\n\u001b[0;32m---> 28\u001b[0m \u001b[43mgetLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnewPage\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36mgetLinks\u001b[0;34m(pageUrl)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetLinks\u001b[39m(pageUrl):\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mglobal\u001b[39;00m pages\n\u001b[0;32m----> 8\u001b[0m html \u001b[38;5;241m=\u001b[39m \u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp://en.wikipedia.org\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mpageUrl\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m bs \u001b[38;5;241m=\u001b[39m BeautifulSoup(html, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhtml.parser\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:214\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 213\u001b[0m opener \u001b[38;5;241m=\u001b[39m _opener\n\u001b[0;32m--> 214\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopener\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:523\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m processor \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprocess_response\u001b[38;5;241m.\u001b[39mget(protocol, []):\n\u001b[1;32m 522\u001b[0m meth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[0;32m--> 523\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 525\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:632\u001b[0m, in \u001b[0;36mHTTPErrorProcessor.http_response\u001b[0;34m(self, request, response)\u001b[0m\n\u001b[1;32m 629\u001b[0m \u001b[38;5;66;03m# According to RFC 2616, \"2xx\" code indicates that the client's\u001b[39;00m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;66;03m# request was successfully received, understood, and accepted.\u001b[39;00m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m):\n\u001b[0;32m--> 632\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43merror\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 633\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhdrs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:555\u001b[0m, in \u001b[0;36mOpenerDirector.error\u001b[0;34m(self, proto, *args)\u001b[0m\n\u001b[1;32m 553\u001b[0m http_err \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 554\u001b[0m args \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28mdict\u001b[39m, proto, meth_name) \u001b[38;5;241m+\u001b[39m args\n\u001b[0;32m--> 555\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 556\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result:\n\u001b[1;32m 557\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:747\u001b[0m, in \u001b[0;36mHTTPRedirectHandler.http_error_302\u001b[0;34m(self, req, fp, code, msg, headers)\u001b[0m\n\u001b[1;32m 744\u001b[0m fp\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m 745\u001b[0m fp\u001b[38;5;241m.\u001b[39mclose()\n\u001b[0;32m--> 747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnew\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:517\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 514\u001b[0m req \u001b[38;5;241m=\u001b[39m meth(req)\n\u001b[1;32m 516\u001b[0m sys\u001b[38;5;241m.\u001b[39maudit(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124murllib.Request\u001b[39m\u001b[38;5;124m'\u001b[39m, req\u001b[38;5;241m.\u001b[39mfull_url, req\u001b[38;5;241m.\u001b[39mdata, req\u001b[38;5;241m.\u001b[39mheaders, req\u001b[38;5;241m.\u001b[39mget_method())\n\u001b[0;32m--> 517\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 519\u001b[0m \u001b[38;5;66;03m# post-process response\u001b[39;00m\n\u001b[1;32m 520\u001b[0m meth_name \u001b[38;5;241m=\u001b[39m protocol\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_response\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:534\u001b[0m, in \u001b[0;36mOpenerDirector._open\u001b[0;34m(self, req, data)\u001b[0m\n\u001b[1;32m 531\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n\u001b[1;32m 533\u001b[0m protocol \u001b[38;5;241m=\u001b[39m req\u001b[38;5;241m.\u001b[39mtype\n\u001b[0;32m--> 534\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_open\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\n\u001b[1;32m 535\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_open\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 536\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result:\n\u001b[1;32m 537\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:1389\u001b[0m, in \u001b[0;36mHTTPSHandler.https_open\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m 1388\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhttps_open\u001b[39m(\u001b[38;5;28mself\u001b[39m, req):\n\u001b[0;32m-> 1389\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdo_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhttp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mHTTPSConnection\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1390\u001b[0m \u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_context\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcheck_hostname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_check_hostname\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:1346\u001b[0m, in \u001b[0;36mAbstractHTTPHandler.do_open\u001b[0;34m(self, http_class, req, **http_conn_args)\u001b[0m\n\u001b[1;32m 1344\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1345\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1346\u001b[0m \u001b[43mh\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselector\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1347\u001b[0m \u001b[43m \u001b[49m\u001b[43mencode_chunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhas_header\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mTransfer-encoding\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1348\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err: \u001b[38;5;66;03m# timeout error\u001b[39;00m\n\u001b[1;32m 1349\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m URLError(err)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1285\u001b[0m, in \u001b[0;36mHTTPConnection.request\u001b[0;34m(self, method, url, body, headers, encode_chunked)\u001b[0m\n\u001b[1;32m 1282\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrequest\u001b[39m(\u001b[38;5;28mself\u001b[39m, method, url, body\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, headers\u001b[38;5;241m=\u001b[39m{}, \u001b[38;5;241m*\u001b[39m,\n\u001b[1;32m 1283\u001b[0m encode_chunked\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 1284\u001b[0m \u001b[38;5;124;03m\"\"\"Send a complete request to the server.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1285\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencode_chunked\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1331\u001b[0m, in \u001b[0;36mHTTPConnection._send_request\u001b[0;34m(self, method, url, body, headers, encode_chunked)\u001b[0m\n\u001b[1;32m 1327\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(body, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m 1328\u001b[0m \u001b[38;5;66;03m# RFC 2616 Section 3.7.1 says that text default has a\u001b[39;00m\n\u001b[1;32m 1329\u001b[0m \u001b[38;5;66;03m# default charset of iso-8859-1.\u001b[39;00m\n\u001b[1;32m 1330\u001b[0m body \u001b[38;5;241m=\u001b[39m _encode(body, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbody\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m-> 1331\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mendheaders\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencode_chunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencode_chunked\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1280\u001b[0m, in \u001b[0;36mHTTPConnection.endheaders\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1278\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1279\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m CannotSendHeader()\n\u001b[0;32m-> 1280\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_output\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmessage_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencode_chunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencode_chunked\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1040\u001b[0m, in \u001b[0;36mHTTPConnection._send_output\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1038\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\r\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer)\n\u001b[1;32m 1039\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer[:]\n\u001b[0;32m-> 1040\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1042\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m message_body \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1043\u001b[0m \n\u001b[1;32m 1044\u001b[0m \u001b[38;5;66;03m# create a consistent interface to message_body\u001b[39;00m\n\u001b[1;32m 1045\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(message_body, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mread\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;66;03m# Let file-like take precedence over byte-like. This\u001b[39;00m\n\u001b[1;32m 1047\u001b[0m \u001b[38;5;66;03m# is needed to allow the current position of mmap'ed\u001b[39;00m\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;66;03m# files to be taken into account.\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:980\u001b[0m, in \u001b[0;36mHTTPConnection.send\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m 978\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 979\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mauto_open:\n\u001b[0;32m--> 980\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 981\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 982\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NotConnected()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1447\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1444\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconnect\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1445\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnect to a host on a given (SSL) port.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m-> 1447\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1449\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tunnel_host:\n\u001b[1;32m 1450\u001b[0m server_hostname \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tunnel_host\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:946\u001b[0m, in \u001b[0;36mHTTPConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconnect\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 945\u001b[0m \u001b[38;5;124;03m\"\"\"Connect to the host and port specified in __init__.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 946\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_create_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 947\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 948\u001b[0m \u001b[38;5;66;03m# Might fail in OSs that don't implement TCP_NODELAY\u001b[39;00m\n\u001b[1;32m 949\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/socket.py:832\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address)\u001b[0m\n\u001b[1;32m 830\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m source_address:\n\u001b[1;32m 831\u001b[0m sock\u001b[38;5;241m.\u001b[39mbind(source_address)\n\u001b[0;32m--> 832\u001b[0m \u001b[43msock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43msa\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 833\u001b[0m \u001b[38;5;66;03m# Break explicitly a reference cycle\u001b[39;00m\n\u001b[1;32m 834\u001b[0m err \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from bs4 import BeautifulSoup\n", + "import re\n", + "\n", + "pages = set()\n", + "def getLinks(pageUrl):\n", + " html = urlopen(f'http://en.wikipedia.org{pageUrl}')\n", + " bs = BeautifulSoup(html, 'html.parser')\n", + " try:\n", + " print(bs.h1.get_text())\n", + " #mw-parser-output\n", + " bodyContent = bs.find('div', {'id':'bodyContent'}).find_all('p')\n", + " if len(bodyContent):\n", + " print(bodyContent[0])\n", + " print(bs.find(id='ca-edit').find('a').attrs['href'])\n", + " except AttributeError:\n", + " print('This page is missing something! Continuing.')\n", + " \n", + " for link in bs.find_all('a', href=re.compile('^(/wiki/)')):\n", + " if 'href' in link.attrs:\n", + " if link.attrs['href'] not in pages:\n", + " #We have encountered a new page\n", + " newPage = link.attrs['href']\n", + " print('-'*20)\n", + " print(newPage)\n", + " pages.add(newPage)\n", + " getLinks(newPage)\n", + "getLinks('/wiki/General-purpose_programming_language') " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Crawling across the Internet" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random external link is: https://learning.oreilly.com/search/?query=author%3A%22Kelsey%20Hightower%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "Random external link is: https://play.google.com/store/apps/details?id=com.safariflow.queue\n", + "Random external link is: https://maps.google.com/?q=1005%20Gravenstein%20Highway%20North%0ASebastopol,%20CA%2095472%0AUSA\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [37]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRandom external link is: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mexternalLink\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 48\u001b[0m followExternalOnly(externalLink)\n\u001b[0;32m---> 51\u001b[0m \u001b[43mfollowExternalOnly\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttps://www.oreilly.com/\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [37]\u001b[0m, in \u001b[0;36mfollowExternalOnly\u001b[0;34m(startingSite)\u001b[0m\n\u001b[1;32m 46\u001b[0m externalLink \u001b[38;5;241m=\u001b[39m getRandomExternalLink(startingSite)\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRandom external link is: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mexternalLink\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 48\u001b[0m \u001b[43mfollowExternalOnly\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexternalLink\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [37]\u001b[0m, in \u001b[0;36mfollowExternalOnly\u001b[0;34m(startingSite)\u001b[0m\n\u001b[1;32m 46\u001b[0m externalLink \u001b[38;5;241m=\u001b[39m getRandomExternalLink(startingSite)\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRandom external link is: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mexternalLink\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 48\u001b[0m \u001b[43mfollowExternalOnly\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexternalLink\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [37]\u001b[0m, in \u001b[0;36mfollowExternalOnly\u001b[0;34m(startingSite)\u001b[0m\n\u001b[1;32m 46\u001b[0m externalLink \u001b[38;5;241m=\u001b[39m getRandomExternalLink(startingSite)\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRandom external link is: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mexternalLink\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 48\u001b[0m \u001b[43mfollowExternalOnly\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexternalLink\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [37]\u001b[0m, in \u001b[0;36mfollowExternalOnly\u001b[0;34m(startingSite)\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfollowExternalOnly\u001b[39m(startingSite):\n\u001b[0;32m---> 46\u001b[0m externalLink \u001b[38;5;241m=\u001b[39m \u001b[43mgetRandomExternalLink\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstartingSite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRandom external link is: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mexternalLink\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 48\u001b[0m followExternalOnly(externalLink)\n", + "Input \u001b[0;32mIn [37]\u001b[0m, in \u001b[0;36mgetRandomExternalLink\u001b[0;34m(startingPage)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetRandomExternalLink\u001b[39m(startingPage):\n\u001b[0;32m---> 36\u001b[0m bs \u001b[38;5;241m=\u001b[39m BeautifulSoup(\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstartingPage\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhtml.parser\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 37\u001b[0m externalLinks \u001b[38;5;241m=\u001b[39m getExternalLinks(bs, startingPage)\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(externalLinks):\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:214\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 213\u001b[0m opener \u001b[38;5;241m=\u001b[39m _opener\n\u001b[0;32m--> 214\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopener\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:517\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 514\u001b[0m req \u001b[38;5;241m=\u001b[39m meth(req)\n\u001b[1;32m 516\u001b[0m sys\u001b[38;5;241m.\u001b[39maudit(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124murllib.Request\u001b[39m\u001b[38;5;124m'\u001b[39m, req\u001b[38;5;241m.\u001b[39mfull_url, req\u001b[38;5;241m.\u001b[39mdata, req\u001b[38;5;241m.\u001b[39mheaders, req\u001b[38;5;241m.\u001b[39mget_method())\n\u001b[0;32m--> 517\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 519\u001b[0m \u001b[38;5;66;03m# post-process response\u001b[39;00m\n\u001b[1;32m 520\u001b[0m meth_name \u001b[38;5;241m=\u001b[39m protocol\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_response\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:534\u001b[0m, in \u001b[0;36mOpenerDirector._open\u001b[0;34m(self, req, data)\u001b[0m\n\u001b[1;32m 531\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n\u001b[1;32m 533\u001b[0m protocol \u001b[38;5;241m=\u001b[39m req\u001b[38;5;241m.\u001b[39mtype\n\u001b[0;32m--> 534\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_open\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprotocol\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\n\u001b[1;32m 535\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_open\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 536\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result:\n\u001b[1;32m 537\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:1389\u001b[0m, in \u001b[0;36mHTTPSHandler.https_open\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m 1388\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhttps_open\u001b[39m(\u001b[38;5;28mself\u001b[39m, req):\n\u001b[0;32m-> 1389\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdo_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhttp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mHTTPSConnection\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1390\u001b[0m \u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_context\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcheck_hostname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_check_hostname\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:1350\u001b[0m, in \u001b[0;36mAbstractHTTPHandler.do_open\u001b[0;34m(self, http_class, req, **http_conn_args)\u001b[0m\n\u001b[1;32m 1348\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err: \u001b[38;5;66;03m# timeout error\u001b[39;00m\n\u001b[1;32m 1349\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m URLError(err)\n\u001b[0;32m-> 1350\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43mh\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetresponse\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1351\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[1;32m 1352\u001b[0m h\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:1377\u001b[0m, in \u001b[0;36mHTTPConnection.getresponse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1375\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1376\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1377\u001b[0m \u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbegin\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1378\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m:\n\u001b[1;32m 1379\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:320\u001b[0m, in \u001b[0;36mHTTPResponse.begin\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;66;03m# read until we get a non-100 response\u001b[39;00m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 320\u001b[0m version, status, reason \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_read_status\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 321\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;241m!=\u001b[39m CONTINUE:\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/http/client.py:281\u001b[0m, in \u001b[0;36mHTTPResponse._read_status\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_read_status\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 281\u001b[0m line \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreadline\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_MAXLINE\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miso-8859-1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(line) \u001b[38;5;241m>\u001b[39m _MAXLINE:\n\u001b[1;32m 283\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LineTooLong(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatus line\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/socket.py:704\u001b[0m, in \u001b[0;36mSocketIO.readinto\u001b[0;34m(self, b)\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_into\u001b[49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m timeout:\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_timeout_occurred \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/ssl.py:1241\u001b[0m, in \u001b[0;36mSSLSocket.recv_into\u001b[0;34m(self, buffer, nbytes, flags)\u001b[0m\n\u001b[1;32m 1237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m flags \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 1238\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 1239\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnon-zero flags not allowed in calls to recv_into() on \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m\n\u001b[1;32m 1240\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m)\n\u001b[0;32m-> 1241\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnbytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1242\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1243\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mrecv_into(buffer, nbytes, flags)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/ssl.py:1099\u001b[0m, in \u001b[0;36mSSLSocket.read\u001b[0;34m(self, len, buffer)\u001b[0m\n\u001b[1;32m 1097\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1098\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m buffer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1099\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sslobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1100\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1101\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sslobj\u001b[38;5;241m.\u001b[39mread(\u001b[38;5;28mlen\u001b[39m)\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "from urllib.request import urlopen\n", + "from urllib.parse import urlparse\n", + "from bs4 import BeautifulSoup\n", + "import re\n", + "import datetime\n", + "import random\n", + "\n", + "#Retrieves a list of all Internal links found on a page\n", + "def getInternalLinks(bs, url):\n", + " netloc = urlparse(url).netloc\n", + " scheme = urlparse(url).scheme\n", + " internalLinks = set()\n", + " for link in bs.find_all('a'):\n", + " if not link.attrs.get('href'):\n", + " continue\n", + " parsed = urlparse(link.attrs['href'])\n", + " if parsed.netloc == '':\n", + " internalLinks.add(f'{scheme}://{netloc}/{link.attrs[\"href\"].strip(\"/\")}')\n", + " elif parsed.netloc == netloc:\n", + " internalLinks.add(link.attrs['href'])\n", + " return list(internalLinks)\n", + " \n", + "#Retrieves a list of all external links found on a page\n", + "def getExternalLinks(bs, url):\n", + " netloc = urlparse(url).netloc\n", + " externalLinks = set()\n", + " for link in bs.find_all('a'):\n", + " if not link.attrs.get('href'):\n", + " continue\n", + " parsed = urlparse(link.attrs['href'])\n", + " if parsed.netloc != '' and parsed.netloc != netloc:\n", + " externalLinks.add(link.attrs['href'])\n", + " return list(externalLinks)\n", + "\n", + "def getRandomExternalLink(startingPage):\n", + " bs = BeautifulSoup(urlopen(startingPage), 'html.parser')\n", + " externalLinks = getExternalLinks(bs, startingPage)\n", + " if not len(externalLinks):\n", + " print('No external links, looking around the site for one')\n", + " internalLinks = getInternalLinks(bs, startingPage)\n", + " return getRandomExternalLink(random.choice(internalLinks))\n", + " else:\n", + " return random.choice(externalLinks)\n", + " \n", + "def followExternalOnly(startingSite):\n", + " externalLink = getRandomExternalLink(startingSite)\n", + " print(f'Random external link is: {externalLink}')\n", + " followExternalOnly(externalLink)\n", + "\n", + "\n", + "followExternalOnly('https://www.oreilly.com/')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Collect all External Links from a Site" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://itunes.apple.com/us/app/safari-to-go/id881697395\n", + "https://learning.oreilly.com/search/?query=author%3A%22Sari%20Greene%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "https://twitter.com/oreillymedia\n", + "https://www.linkedin.com/company/oreilly-media\n", + "https://oreilly.hk/\n", + "https://oreilly.id/\n", + "https://learning.oreilly.com/search/?query=author%3A%22Neal%20Ford%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "https://learning.oreilly.com/search/?query=author%3A%22Kelsey%20Hightower%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "https://play.google.com/store/apps/details?id=com.safariflow.queue\n", + "https://www.youtube.com/user/OreillyMedia\n", + "https://learning.oreilly.com/search/?query=author%3A%22Bruno%20Gon%C3%A7alves%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "https://www.oreilly.co.jp/index.shtml\n", + "https://channelstore.roku.com/details/c8a2d0096693eb9455f6ac165003ee06/oreilly\n", + "https://learning.oreilly.com/search/?query=author%3A%22Arianne%20Dee%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=suggestion&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "https://www.amazon.com/OReilly-Media-Inc/dp/B087YYHL5C/ref=sr_1_2?dchild=1&keywords=oreilly&qid=1604964116&s=mobile-apps&sr=1-2\n", + "https://learning.oreilly.com/start-trial/\n", + "https://oreillylearning.in/\n", + "https://learning.oreilly.com/search/?query=author%3A%22Ken%20Kousen%22&extended_publisher_data=true&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_playlists=true&include_collections=true&include_notebooks=true&include_sandboxes=true&include_scenarios=true&is_academic_institution_account=false&source=user&sort=date_added&facet_json=true&json_facets=true&page=0&include_facets=false\n", + "http://twitter.com/timoreilly\n", + "http://www.oreillynet.com/pub/au/27\n", + "http://oreilly.com/oreilly/tim_bio.csp\n", + "http://www.web2expo.com/\n", + "http://toccon.com\n", + "http://www.oreillynet.com/pub/au/1242\n", + "http://missingmanuals.com\n", + "http://twitter.com/sarahm\n", + "http://tim.oreilly.com\n", + "http://shop.oreilly.com/product/0636920022336.do\n", + "https://www.applytosupply.digitalmarketplace.service.gov.uk/g-cloud/services/460643971613582\n", + "https://www.gsaelibrary.gsa.gov/ElibMain/contractorInfo.do?contractNumber=47QTCA19D0022&contractorName=O%27REILLY+MEDIA%2C+INC&executeQuery=YES\n", + "https://cdn.oreillystatic.com/pdf/OReilly_Capabilities_Statement.pdf\n", + "https://apps.apple.com/app/apple-store/id881697395?pt=206943&ct=oreilly-apps-page&mt=8\n", + "https://chrome.google.com/webstore/detail/oreilly/honddgdnobfcbldlmimekbmphjnehbbb?hl=en\n", + "https://learning.oreilly.com/signup/\n", + "https://learning.oreilly.com/interactive/\n", + "https://www.amazon.com/OReilly-Media-Inc/dp/B087YYHL5C/ref=sr_1_2?dchild=1&keywords=oreilly&qid=1604964116&s=mobile-apps&sr=1-2\n", + "https://members.oreilly.com/\n", + "https://www.facebook.com/OReilly\n", + "https://learning.oreilly.com/register/\n", + "https://oreillymedia.zoom.us/webinar/register/WN_BcLRmUGUTVWGRa-LvcxqHg\n", + "https://oreillymedia.zoom.us/webinar/register/WN_MBTdQH-PTtyRLIuRa7eHYA\n", + "https://oreillymedia.zoom.us/webinar/register/WN_hOecnEtERj-d5rMmw2feOQ\n", + "https://oreillymedia.zoom.us/webinar/register/WN_sT5HhW89R4aaRTaKaMYxGQ\n", + "https://oreillymedia.zoom.us/webinar/register/WN_9-GFj1gbQ66hZCenhisXKA\n", + "https://learning.oreilly.com/team-setup/\n", + "https://oreillymedia.zoom.us/webinar/register/WN_h8bJNEN4TsC54uo0o-zu4g\n", + "https://learning.oreilly.com/live-events/first-steps-in-machine-learning-misfit-models-and-fixes/0636920087879/0636920087877/\n", + "https://learning.oreilly.com/live-events/explainable-machine-learning-models-with-interactivity/0636920061943/0636920085001/\n", + "https://learning.oreilly.com/live-events/ai-superstream-designing-machine-learning-systems/0636920086385/0636920086384/\n", + "https://learning.oreilly.com/live-events/machine-learning-interviews-in-3-weeks/0636920080937/0636920085271/\n", + "https://learning.oreilly.com/scenarios/regularization-in-regression/9781492091424/\n", + "https://learning.oreilly.com/live-events/scaling-machine-learning-in-three-weeks/0636920081997/0636920087562/\n", + "https://learning.oreilly.com/scenarios/serve-machine-learning/9781492080725/\n", + "https://learning.oreilly.com/attend/\n", + "https://learning.oreilly.com/scenarios/multiple-linear-regression/9781492091400/\n", + "https://learning.oreilly.com/library/view/introduction-to-machine/9781449369880/\n", + "https://learning.oreilly.com/search/?query=&extended_publisher_data=true&formats=book&highlight=true&include_assessments=false&include_case_studies=true&include_courses=true&include_orioles=true&include_playlists=true&is_academic_institution_account=false&publishers=O%27Reilly%20Media%2C%20Inc.&topics=Machine%20Learning&sort=popularity\n", + "https://learning.oreilly.com/library/view/hands-on-machine-learning/9781098125967/\n", + "https://learning.oreilly.com/live-events/machine-learning-algorithms-for-trading-bootcamp/0636920082023/0636920088138/\n", + "https://learning.oreilly.com/scenarios/challenge-make-a/9781098113933/\n", + "https://learning.oreilly.com/library/view/hands-on-machine-learning/9781492032632/\n", + "https://learning.oreilly.com/scenarios/deploy-machine-learning/9781492080732/\n", + "https://learning.oreilly.com/library/view/designing-machine-learning/9781098107956/\n", + "https://learning.oreilly.com/scenarios/machine-learning-with/9781098142582/\n", + "http://archive.oreilly.com/oreillyschool/privacy-policy/\n", + "https://www.privacyshield.gov/article?id=ANNEX-I-introduction\n", + "https://www.privacyshield.gov\n", + "https://www.edoeb.admin.ch/edoeb/en/home/the-fdpic/task.html\n", + "https://www.safaribooksonline.com/membership-agreement/\n", + "https://ico.org.uk/\n", + "https://www.safaribooksonline.com/static/legal/SafariPrivacyPolicy_v3.3_13June2017.a4d9478408f5.pdf\n", + "http://archive.oreilly.com/oreillyschool/privacy-policy-version2/\n", + "https://ec.europa.eu/info/law/law-topic/data-protection/data-transfers-outside-eu/model-contracts-transfer-personal-data-third-countries_en\n", + "https://ec.europa.eu/info/law/law-topic/data-protection/data-transfers-outside-eu/adequacy-protection-personal-data-non-eu-countries_en\n", + "https://edpo.com/gdpr-data-request/\n", + "https://www.safaribooksonline.com/terms/\n", + "https://tools.google.com/dlpage/gaoptout/\n", + "https://learning.oreilly.com/membership-agreement/\n", + "https://cdn.oreillystatic.com/pdf/SafariPrivacyPolicy_v3.4_23October2017.pdf\n", + "https://www.privacyshield.gov/article?id=How-to-Submit-a-Complaint\n", + "https://edpb.europa.eu/about-edpb/about-edpb/members_en\n", + "//privacy.truste.com/privacy-seal/validation?rid=b1a9b95e-186e-4498-aaa0-2a7b98c52af0\n", + "https://ec.europa.eu/info/law/law-topic/data-protection/data-transfers-outside-eu/eu-us-privacy-shield_en\n", + "https://feedback-form.truste.com/watchdog/request\n", + "//privacy.truste.com/privacy-seal/validation?rid=0bdead8c-1d9c-429d-ae6a-5ee92e15a471\n", + "https://smetrics.oreilly.com/optout.html?optout=1&confirm_change=1\n", + "http://www.oreilly.com.cn/\n", + "http://www.oreilly.co.jp\n" + ] + }, + { + "ename": "HTTPError", + "evalue": "HTTP Error 404: Not Found", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mHTTPError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [38]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 18\u001b[0m getAllExternalLinks(link)\n\u001b[1;32m 21\u001b[0m allIntLinks\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://oreilly.com\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 22\u001b[0m \u001b[43mgetAllExternalLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttps://www.oreilly.com/\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [38]\u001b[0m, in \u001b[0;36mgetAllExternalLinks\u001b[0;34m(url)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m link \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m allIntLinks:\n\u001b[1;32m 17\u001b[0m allIntLinks\u001b[38;5;241m.\u001b[39mappend(link)\n\u001b[0;32m---> 18\u001b[0m \u001b[43mgetAllExternalLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlink\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [38]\u001b[0m, in \u001b[0;36mgetAllExternalLinks\u001b[0;34m(url)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m link \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m allIntLinks:\n\u001b[1;32m 17\u001b[0m allIntLinks\u001b[38;5;241m.\u001b[39mappend(link)\n\u001b[0;32m---> 18\u001b[0m \u001b[43mgetAllExternalLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlink\u001b[49m\u001b[43m)\u001b[49m\n", + " \u001b[0;31m[... skipping similar frames: getAllExternalLinks at line 18 (20 times)]\u001b[0m\n", + "Input \u001b[0;32mIn [38]\u001b[0m, in \u001b[0;36mgetAllExternalLinks\u001b[0;34m(url)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m link \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m allIntLinks:\n\u001b[1;32m 17\u001b[0m allIntLinks\u001b[38;5;241m.\u001b[39mappend(link)\n\u001b[0;32m---> 18\u001b[0m \u001b[43mgetAllExternalLinks\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlink\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [38]\u001b[0m, in \u001b[0;36mgetAllExternalLinks\u001b[0;34m(url)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetAllExternalLinks\u001b[39m(url):\n\u001b[0;32m----> 7\u001b[0m bs \u001b[38;5;241m=\u001b[39m BeautifulSoup(\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhtml.parser\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 8\u001b[0m internalLinks \u001b[38;5;241m=\u001b[39m getInternalLinks(bs, url)\n\u001b[1;32m 9\u001b[0m externalLinks \u001b[38;5;241m=\u001b[39m getExternalLinks(bs, url)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:214\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 213\u001b[0m opener \u001b[38;5;241m=\u001b[39m _opener\n\u001b[0;32m--> 214\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopener\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:523\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m processor \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprocess_response\u001b[38;5;241m.\u001b[39mget(protocol, []):\n\u001b[1;32m 522\u001b[0m meth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[0;32m--> 523\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 525\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:632\u001b[0m, in \u001b[0;36mHTTPErrorProcessor.http_response\u001b[0;34m(self, request, response)\u001b[0m\n\u001b[1;32m 629\u001b[0m \u001b[38;5;66;03m# According to RFC 2616, \"2xx\" code indicates that the client's\u001b[39;00m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;66;03m# request was successfully received, understood, and accepted.\u001b[39;00m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m):\n\u001b[0;32m--> 632\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43merror\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 633\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhdrs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:555\u001b[0m, in \u001b[0;36mOpenerDirector.error\u001b[0;34m(self, proto, *args)\u001b[0m\n\u001b[1;32m 553\u001b[0m http_err \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 554\u001b[0m args \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28mdict\u001b[39m, proto, meth_name) \u001b[38;5;241m+\u001b[39m args\n\u001b[0;32m--> 555\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 556\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result:\n\u001b[1;32m 557\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:747\u001b[0m, in \u001b[0;36mHTTPRedirectHandler.http_error_302\u001b[0;34m(self, req, fp, code, msg, headers)\u001b[0m\n\u001b[1;32m 744\u001b[0m fp\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m 745\u001b[0m fp\u001b[38;5;241m.\u001b[39mclose()\n\u001b[0;32m--> 747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnew\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:523\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m processor \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprocess_response\u001b[38;5;241m.\u001b[39mget(protocol, []):\n\u001b[1;32m 522\u001b[0m meth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[0;32m--> 523\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 525\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:632\u001b[0m, in \u001b[0;36mHTTPErrorProcessor.http_response\u001b[0;34m(self, request, response)\u001b[0m\n\u001b[1;32m 629\u001b[0m \u001b[38;5;66;03m# According to RFC 2616, \"2xx\" code indicates that the client's\u001b[39;00m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;66;03m# request was successfully received, understood, and accepted.\u001b[39;00m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m):\n\u001b[0;32m--> 632\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43merror\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 633\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhdrs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:561\u001b[0m, in \u001b[0;36mOpenerDirector.error\u001b[0;34m(self, proto, *args)\u001b[0m\n\u001b[1;32m 559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m http_err:\n\u001b[1;32m 560\u001b[0m args \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28mdict\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdefault\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttp_error_default\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;241m+\u001b[39m orig_args\n\u001b[0;32m--> 561\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/urllib/request.py:641\u001b[0m, in \u001b[0;36mHTTPDefaultErrorHandler.http_error_default\u001b[0;34m(self, req, fp, code, msg, hdrs)\u001b[0m\n\u001b[1;32m 640\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhttp_error_default\u001b[39m(\u001b[38;5;28mself\u001b[39m, req, fp, code, msg, hdrs):\n\u001b[0;32m--> 641\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HTTPError(req\u001b[38;5;241m.\u001b[39mfull_url, code, msg, hdrs, fp)\n", + "\u001b[0;31mHTTPError\u001b[0m: HTTP Error 404: Not Found" + ] + } + ], + "source": [ + "# Collects a list of all external URLs found on the site\n", + "allExtLinks = []\n", + "allIntLinks = []\n", + "\n", + "\n", + "def getAllExternalLinks(url):\n", + " bs = BeautifulSoup(urlopen(url), 'html.parser')\n", + " internalLinks = getInternalLinks(bs, url)\n", + " externalLinks = getExternalLinks(bs, url)\n", + " for link in externalLinks:\n", + " if link not in allExtLinks:\n", + " allExtLinks.append(link)\n", + " print(link)\n", + "\n", + " for link in internalLinks:\n", + " if link not in allIntLinks:\n", + " allIntLinks.append(link)\n", + " getAllExternalLinks(link)\n", + "\n", + "\n", + "allIntLinks.append('https://oreilly.com')\n", + "getAllExternalLinks('https://www.oreilly.com/')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Chapter07_CrawlingModels.ipynb b/Chapter07_CrawlingModels.ipynb new file mode 100644 index 0000000..b28d345 --- /dev/null +++ b/Chapter07_CrawlingModels.ipynb @@ -0,0 +1,3158 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dealing with different website layouts" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TITLE: Robotic rulemaking\n", + "URL: https://www.brookings.edu/research/robotic-rulemaking/\n", + "BODY: \n", + "As it has rocketed to some 100 million active users in record time, ChatGPT is provoking conversations about the role of artificial intelligence (AI) in drafting written materials such as student exams, news articles, legal pleadings, poems, and more. The chatbot, developed by OpenAI, relies on a large language model (LLM) to respond to user-submitted requests, or “prompts” as they are known. It is an example of generative AI, a technology that upends our understanding of who creates written materials and how they do it, challenging what it means to create, analyze, and express ideas.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Bridget C. E. Dooling\n", + "\n", + "\t\t\t\t\tResearch Professor - The George Washington University Regulatory Studies Center \n", + "\n", + " Twitter\n", + "BridgetDooling\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Mark Febrizio\n", + "\n", + "\t\t\t\t\tSenior Policy Analyst - The George Washington University Regulatory Studies Center \n", + "\n", + " Twitter\n", + "markfebrizio\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Rulemaking by federal agencies is a very text-intensive process, both in terms of writing the rules themselves, which express not only the law but also the agencies’ rationales for their regulatory choices, as well as public comments which arrive almost exclusively in the form of text. How might generative AI intersect with rulemaking? In this essay, we work through some use cases for generative AI in the rulemaking process, for better and for worse, both for the public and federal agencies.\n", + "Public comments and generative AI\n", + "For the public, generative AI might help people structure their information and views into public comments that have a better chance of influencing agency decisions. While agencies usually permit commenters to send in whatever text they want, more sophisticated comments tend to follow a professional format that contains substantive and sometimes highly technical information. A fairly constant worry with respect to public participation in rulemaking is that special interests overtake diffuse interests due to collective action problems. While readers of this series likely follow rulemaking closely, regulation remains esoteric for most people. Even for those aware of the rulemaking process, figuring out the style and content of a comment might seem out of reach. (Brookings published a helpful guide to commenting, by the way.) Scholars and policymakers disagree about the extent to which the public’s awareness of and participation in rulemaking is a problem that needs to be remedied, but at a minimum a tool that helps interested people compose a persuasive comment could be useful.\n", + "Someone could, for example, prompt a generative AI tool to summarize that person’s position on a proposal and knit it into a comment that looks organized and clear. The prompt could be something like: “Write a comment to the Consumer Product Safety Commission telling them that I support their proposed rule on fireworks.” Even better, the prompt could guide the AI to emphasize specific concepts or reasons for the person’s views: “Write a comment to the Consumer Product Safety Commission telling them that I support their proposed rule on fireworks because fireworks can be traumatic for little kids and pets.” In our experience, ChatGPT can readily create convincing public submissions based on such straightforward prompts. For one Department of Labor proposal, simply requesting that the chatbot produce several paragraphs objecting to the rule resulted in text comparable to a mass comment campaign submission, and the content was quickly inverted by asking for a supportive comment.\n", + "Generative AI also takes the possibility of “mass” and “malattributed” comments to the next level. Mass comments are “identical and near-duplicate comments” that are often “sponsored by organizations and submitted by group members and supporters to government agencies in response to proposed rules.” A team of researchers from The George Washington University and the Israel Democracy Institute wrote about the political reasons why groups organize these campaigns, likening them to the kind of lobbying activity that happens in Congress and other venues. Whether these mass comment campaigns actually influence agencies is the subject of some debate. The laws governing regulatory decisions generally do not call upon, or allow, the agencies to factor in public opinion; rather, agencies seek substantive and technical information from public comments. And the number of comments received is not a reliable proxy for general public opinion anyway because such submissions are not made by a representative sample of the population—even setting aside the possibility that some of the comments were not sent by real people, a possibility that generative AI increases. So most observers (with Professor Nina Mendelson a notable exception) have been dismissive of the role of mass comment campaigns in agency rulemaking decisions. Yet mass comment campaigns persist, for reasons that political scientists like Devin Judge-Lord are exploring in ongoing research. The reality is that generative AI arrives at a time when mass comment campaigns are a regular, if not frequent, component of rulemaking, so we can expect the two to intersect.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Technology & Innovation\n", + "Exploring the impact of language models on cognitive automation\n", + "\n", + "Anton Korinek\n", + "Monday, March 6, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Climate Change\n", + "Debt-for-adaptation swaps\n", + "\n", + "Chetan Hebbale and Johannes Urpelainen\n", + "Tuesday, March 21, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Courts & Law\n", + "Judicial deference and the future of regulation\n", + "\n", + "James Kunhardt and Anne Joseph O’Connell\n", + "Thursday, August 18, 2022\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Combining generative AI with mass comment campaigns could lead to mass comments that look less duplicative in nature, as the same idea could be expressed in many different ways with some support from an AI tool. Agencies currently have access to language processing tools that allow them to group comments based on the similarity of their text. This helps agencies meet their burden under the law to consider and respond to all significant comments. More varied comments will strain the current set of tools and likely lead to increased agency resources dedicated to comment analysis. That could further slow the already cumbersome rulemaking process, as agencies figure out how to cope with large and overwhelming volumes of differentiated and ostensibly substantive comments. For advocates looking to gum up the works, this could be an appealing tactic.\n", + "In response, and following the approach they took in response to mass comment campaigns, agencies might be tempted to spend resources to develop tools to help identify which comments were generated by an AI rather than a human. Such tools are already in production for other purposes. While these tools are not “fully reliable,” they could alert agency staff that a comment they’re reviewing is likely generated by AI. It is not immediately clear how an agency would make use of such information, however, because the Administrative Procedure Act only requires that the commenter is a “person,” and a person could have submitted the comment, no matter who or what drafted it. Perhaps the alert could encourage agency staff to read the comment with some skepticism, but it’s not obvious at this point that such an approach would be reasoned or fair.\n", + "Generative AI can be viewed as part of an ongoing tit-for-tat for public participation, with commenters deploying more sophisticated commenting methods and agencies attempting to respond with their own technology. Such an arms race is a waste of resources, though, if the end result is a large body of comments that neither represent the views of the general public nor offer novel and reliable information to the agency. More comments do not necessarily lead to better regulatory choices. The “arms race” frame is also troubling as applied to public input in a process intended to welcome it. Whether the type of participation that generative AI facilitates is the right kind of participation is part of what makes it such a provocative development.\n", + "If generative AI adds to the richness of mass comments, that could be an improvement over many mass comment campaigns which tend to express up-or-down sentiment. Personal stories woven into comments can sometimes shed light on problems that agencies did not anticipate—the question is whether generative AI is poised to actually elucidate such richness or simply fake it. If regulators end up altering rules because of convincing but made-up “facts,” that would certainly be a step backward. In our experience, agency staff work hard to substantiate the information provided to them by public comments rather than accepting them at face value, but it is not implausible to imagine such safeguards breaking down. In that case, the potential for review in the courts offers an important backstop.\n", + "Generative AI arrives at a time when mass comment campaigns are a regular, if not frequent, component of rulemaking, so we can expect the two to intersect.\n", + "Taking this analysis one step further, Professor Michael Herz coined the term “malattributed comments” after the spectacle that accompanied the Federal Communication Commission’s (FCC) Net Neutrality rulemaking, in which millions of public comments claimed to be from people who either did not exist or who did not actually send comments. In a study commissioned by the Administrative Conference of the United States (ACUS), researchers (including one of us) concluded that the risks of an agency being misled by malattributed comments are lower than might be expected because of the way agencies evaluate comments.1 Generative AI disturbs this equilibrium because it may help bad actors generate comments that look more persuasive, i.e., comments that seemingly present evidence beyond mere sentiment.\n", + "By reducing the costs of producing “malattributed” comments, generative AI could lead to a pooling equilibrium—to borrow a concept from game theory that is often applied to insurance markets—where agencies can no longer meaningfully distinguish between valid and malicious comments. Agencies could then be inclined to assume all comments might be “fake” and discount their relevance, weakening public commenting as an avenue for meaningful public input and the formulation of improved policies and, ultimately, making people worse off. That need not come to pass, however. The Administrative Procedure Act does not permit agencies to entirely dismiss all public comments in this manner, nor does it categorically prohibit the public from using AI to aid in comment creation. Agencies also have a track record of collaborating to address novel issues, such as mass comment campaigns, via the eRulemaking program, and we expect that work to continue. Overall, as commenters reach for ways to use generative AI, agencies would be wise to lean on this existing governance structure as they consider potential responses.\n", + "Agency workflows and generative AI\n", + "Generative AI also offers some promises and perils for internal agency processes. Beyond malattributed comments, one worry is that flooding rulemaking dockets with a virtually unlimited supply of unique comments would incapacitate government systems and prevent other users from submitting public input. While these fears are alarming, the rulemaking system is fairly robust to a torrent of bot-generated comments. More specifically, Regulations.gov—the site that a majority of agencies use to accept public submissions on rules—already implements several techniques to manage large volumes of comments.\n", + "First, Regulations.gov employs a CAPTCHA system developed by Google to distinguish between humans and bots. This prevents a computer program from automating comment submissions through the web interface, meaning that bad actors who want to spam the system would need to do so manually. In fact, one paper warning against the risk of bot submissions to rulemakings suggested this very solution. Second, the Regulations.gov Application Programming Interface (API) provides a way for organizations to submit multiple comments in an automated fashion—within certain limits. The API, which is managed by the General Services Administration (GSA), requires adherence to terms of service and uses a key to authenticate post submissions. Accordingly, GSA can also revoke access when it detects malicious activity. Further, submissions are constrained by a limit of 50 per minute or 500 per hour (whichever is reached first). This throttling inhibits malicious users from overwhelming the system before being identified and could be made stricter if necessary. While these safeguards are not foolproof, they provide meaningful protections against incapacitating the comment system with AI-generated text.\n", + "Another worry is that the government could be misled by AI-generated comments. The text from generative AI can be very convincing, even if it is entirely untrue. This is because LLMs draw from voluminous writings by humans. They are essentially extremely big text prediction models that select the next word, phrase, or punctuation according to sample texts that they have been trained on (i.e., the texts fed to the model as examples for it to learn from); they are not a lookup table or encyclopedia. ChatGPT is not connected to the internet and its training data stop in 2021, but it can still generate plausible analyses of current articles based on information gleaned from prompts and its training data. Even LLMs connected to the internet, such as Bing AI, have a tendency to make up or “hallucinate” information, especially in contexts lacking training data.2 Relatedly, they offer more tailored answers in areas where they have received more training. In this context, public comments on rules are available on Regulations.gov going back many years, making them a rich source of training data.\n", + "Given the likely pace of development for generative AI, the federal government needs to be prepared to adapt to this intriguing new set of tools.\n", + "Given this backdrop, someone could prompt a generative AI tool to write a comment that supports or criticizes a rule based on fake scientific data or other technical information.3 Interestingly, the public can already submit fake information to an agency.4 It is currently the agency’s responsibility to wade through public comments and discern which information is or is not reliable; this is part of why it can take agencies months or years to finalize rules once they have been proposed. While the rulemaking process can be criticized for its length, taking time to discern the weight of public comments helps protect against challenges to the rulemaking process’ integrity, whether they come from generative AI or other sources. The possibility raised above of a large number of authentic, substantive, and varied comments does give us some pause because such comments would not violate the terms of service and could therefore spike agency workloads. It may be a challenge to balance the policy goal of a notice-and-comment process that is open to all with the reality of limited agency resources to consider so much information. This could be an area ripe for enhancing executive branch and congressional oversight of agency rulemaking.\n", + "Generative AI could also help agency staff summarize and respond to comments received on the rules. A strength of LLMs is their ability to process and compose information based on their training data; regulators could use this to their advantage, especially if agencies had access to a model trained on public comments or texts related to the content of a rulemaking. Further, LLMs are most useful when combined with expertise because the information produced by the AI can be verified and supplemented by those with subject matter or “topic” knowledge. For example, an LLM could help regulators summarize comments on the proposal, classify feedback based on predefined categories, and cluster information based on similarities in content, style, or other features. Then, agency staff could provide a rough outline of responses to comments and prompt a generative AI to format them in the style of a rulemaking published in the Federal Register. This workflow would incorporate a more sophisticated set of tools than what agencies currently use to analyze and respond to public comments. While we are not in a position to say whether the federal government will actually invest in generative AI technologies, the capability is there. One pathway would be to fine-tune existing models like OpenAI’s GPT 3.5 (the basis for ChatGPT) for the rulemaking context.5 This could entail an agency customizing an existing LLM to better apply to its rulemaking activity by conducting additional training with relevant texts. For instance, the Environmental Protection Agency (EPA) could fine-tune GPT 3.5 for use by its Office of Air and Radiation by feeding it examples of its responses to comments from prior rules and topic-specific materials on the Clean Air Act.\n", + "Using AI to support agency workflows, including analyzing public comments, sits in tension with current notions of who is supposed to do the “thinking work” of the government. One of us has written about this recently (with co-author Professor Rachel A. Potter) in the context of regulations that are drafted by government contractors, exploring whether drafting rules should be considered an “inherently governmental function” that is off-limits to contractors. While contractors can serve as vital supplements to agency capacity or expertise, overreliance on contractors can introduce conflicts of interest and other risks into the process. Generative AI offers an interesting twist on this concern. Might generative AI be more conflicted or biased than an outside contractor, less conflicted or biased, or might it simply present entirely different considerations? Because an LLM’s training data inform the way it generates text, using it to draft regulatory material could therefore reinforce the status quo in some circumstances and, in others, help create new connections in human knowledge. Of course, existing approaches to crafting rules are not without their own biases, nor are other tools (e.g., Google searches) that have become commonplace in policymaking. We are only at the beginning of working through these issues as they apply to this essential form of executive branch lawmaking.\n", + "We limited this essay to generative AI, one of many technologies that intersect with rulemaking comments. Other tools could, for example, help alert people to rules that interest them and help the government catch errors and omissions in their analyses. The technology of rulemaking evolves along with the rest of society, and regulators should consider how to take advantage of the upside of tools like generative AI while minimizing their risks. One thing is sure: Given the likely pace of development for generative AI, the federal government needs to be prepared to adapt to this intriguing new set of tools.\n", + "\n", + "body: \n", + "\n", + "\n", + "\n", + "New York\n", + "CNN\n", + "  — \n", + " \n", + "\n", + "\n", + " Twitter’s traditional bird icon was booted and replaced with an image of a Shiba Inu, an apparent nod to dogecoin, the joke cryptocurrency that CEO Elon Musk is being sued over. \n", + " \n", + "\n", + " Musk addressed the change Monday afternoon, tweeting, “as promised” above an image of a year-old conversation in which another user suggested that Musk “just buy Twitter” and “change the bird logo to a doge.” \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CNN/Adobe Stock\n", + "\n", + "\n", + "\n", + "\n", + "Elon Musk's Twitter promised a purge of blue check marks. Instead he singled out one account\n", + "\n", + "\n", + "\n", + "\n", + " The doge logo appeared on the site two days after Musk asked a judge to throw out a $258 billion racketeering lawsuit accusing him of running a pyramid scheme to support the dogecoin, according to Reuters.\n", + "\n", + "\n", + " Lawyers for Musk and Tesla called the lawsuit by dogecoin investors a “fanciful work of fiction” over Musk’s “innocuous and often silly tweets.”\n", + " \n", + "\n", + " It wasn’t clear whether the logo change was permanent. Musk has been known to use Twitter to troll both his fans and his critics. \n", + " \n", + "\n", + " The price of dogecoin, which is typically volatile, was up more than 20% over the past 24 hours, to about 9 cents. It was trading just under 8 cents Monday morning.\n", + " \n", + "\n", + "Dogecoin was created December 6, 2013, by a pair of software engineers — as a joke. The name is a nod to the “doge” meme that became popular a decade ago. Its Shiba Inu mascot mimicks that meme: a dog surrounded by a bunch of Comic Sans text in broken English.\n", + " \n", + "\n", + "TITLE: \n", + " Dogecoin jumps after Elon Musk replaces Twitter bird with Shiba Inu\n", + " \n", + "URL: https://www.cnn.com/2023/04/03/investing/dogecoin-elon-musk-twitter/index.html\n", + "BODY: \n", + "\n", + "\n", + "New York\n", + "CNN\n", + "  — \n", + " \n", + "\n", + "\n", + " Twitter’s traditional bird icon was booted and replaced with an image of a Shiba Inu, an apparent nod to dogecoin, the joke cryptocurrency that CEO Elon Musk is being sued over. \n", + " \n", + "\n", + " Musk addressed the change Monday afternoon, tweeting, “as promised” above an image of a year-old conversation in which another user suggested that Musk “just buy Twitter” and “change the bird logo to a doge.” \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CNN/Adobe Stock\n", + "\n", + "\n", + "\n", + "\n", + "Elon Musk's Twitter promised a purge of blue check marks. Instead he singled out one account\n", + "\n", + "\n", + "\n", + "\n", + " The doge logo appeared on the site two days after Musk asked a judge to throw out a $258 billion racketeering lawsuit accusing him of running a pyramid scheme to support the dogecoin, according to Reuters.\n", + "\n", + "\n", + " Lawyers for Musk and Tesla called the lawsuit by dogecoin investors a “fanciful work of fiction” over Musk’s “innocuous and often silly tweets.”\n", + " \n", + "\n", + " It wasn’t clear whether the logo change was permanent. Musk has been known to use Twitter to troll both his fans and his critics. \n", + " \n", + "\n", + " The price of dogecoin, which is typically volatile, was up more than 20% over the past 24 hours, to about 9 cents. It was trading just under 8 cents Monday morning.\n", + " \n", + "\n", + "Dogecoin was created December 6, 2013, by a pair of software engineers — as a joke. The name is a nod to the “doge” meme that became popular a decade ago. Its Shiba Inu mascot mimicks that meme: a dog surrounded by a bunch of Comic Sans text in broken English.\n", + " \n", + "\n" + ] + } + ], + "source": [ + "from bs4 import BeautifulSoup\n", + "from urllib.request import urlopen\n", + "\n", + "class Content:\n", + " def __init__(self, url, title, body):\n", + " self.url = url\n", + " self.title = title\n", + " self.body = body\n", + " \n", + " def print(self):\n", + " print(f'TITLE: {self.title}')\n", + " print(f'URL: {self.url}')\n", + " print(f'BODY:\\n {self.body}')\n", + "\n", + "def scrapeCNN(url):\n", + " bs = BeautifulSoup(urlopen(url))\n", + " title = bs.find('h1').text\n", + " body = bs.find('div', {'class': 'article__content'}).text\n", + " print('body: ')\n", + " print(body)\n", + " return Content(url, title, body)\n", + "\n", + "def scrapeBrookings(url):\n", + " bs = BeautifulSoup(urlopen(url))\n", + " title = bs.find('h1').text\n", + " body = bs.find('div', {'class': 'post-body'}).text\n", + " return Content(url, title, body)\n", + "\n", + "url = 'https://www.brookings.edu/research/robotic-rulemaking/'\n", + "content = scrapeBrookings(url)\n", + "content.print()\n", + "\n", + "url = 'https://www.cnn.com/2023/04/03/investing/dogecoin-elon-musk-twitter/index.html'\n", + "content = scrapeCNN(url)\n", + "content.print()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "class Content:\n", + " \"\"\"\n", + " Common base class for all articles/pages\n", + " \"\"\"\n", + " def __init__(self, url, title, body):\n", + " self.url = url\n", + " self.title = title\n", + " self.body = body\n", + "\n", + " def print(self):\n", + " \"\"\"\n", + " Flexible printing function controls output\n", + " \"\"\"\n", + " print(f'URL: {self.url}')\n", + " print(f'TITLE: {self.title}')\n", + " print(f'BODY:\\n{self.body}')\n", + "\n", + "class Website:\n", + " \"\"\" \n", + " Contains information about website structure\n", + " \"\"\"\n", + " def __init__(self, name, url, titleTag, bodyTag):\n", + " self.name = name\n", + " self.url = url\n", + " self.titleTag = titleTag\n", + " self.bodyTag = bodyTag" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "from bs4 import BeautifulSoup\n", + "\n", + "\n", + "class Crawler:\n", + " def getPage(url):\n", + " try:\n", + " html = urlopen(url)\n", + " except Exception:\n", + " return None\n", + " return BeautifulSoup(html, 'html.parser')\n", + "\n", + " def safeGet(bs, selector):\n", + " \"\"\"\n", + " Utilty function used to get a content string from a Beautiful Soup\n", + " object and a selector. Returns an empty string if no object\n", + " is found for the given selector\n", + " \"\"\"\n", + " selectedElems = bs.select(selector)\n", + " if selectedElems is not None and len(selectedElems) > 0:\n", + " return '\\n'.join([elem.get_text() for elem in selectedElems])\n", + " return ''\n", + "\n", + " def getContent(website, path):\n", + " \"\"\"\n", + " Extract content from a given page URL\n", + " \"\"\"\n", + " url = website.url+path\n", + " bs = Crawler.getPage(url)\n", + " if bs is not None:\n", + " title = Crawler.safeGet(bs, website.titleTag)\n", + " body = Crawler.safeGet(bs, website.bodyTag)\n", + " return Content(url, title, body)\n", + " return Content(url, '', '')" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.oreilly.com/library/view/web-scraping-with/9781491910283\n", + "TITLE: Web Scraping with Python\n", + "BODY:\n", + "\n", + "\n", + "Book description\n", + "Learn web scraping and crawling techniques to access unlimited data from any web source in any format. With this practical guide, you’ll learn how to use Python scripts and web APIs to gather and process data from thousands—or even millions—of web pages at once.Ideal for programmers, security professionals, and web administrators familiar with Python, this book not only teaches basic web scraping mechanics, but also delves into more advanced topics, such as analyzing raw data or using scrapers for frontend website testing. Code samples are available to help you understand the concepts in practice.\n", + "Show and hide more\n", + "\n", + "Publisher resources\n", + "View/Submit Errata\n", + "Download Example Code\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "siteData = [\n", + " ['O\\'Reilly Media', 'https://www.oreilly.com', 'h1', 'div.title-description'],\n", + " ['Reuters', 'https://www.reuters.com', 'h1', 'div.ArticleBodyWrapper'],\n", + " ['Brookings', 'https://www.brookings.edu', 'h1', 'div.post-body'],\n", + " ['CNN', 'https://www.cnn.com', 'h1', 'div.article__content']\n", + "]\n", + "websites = []\n", + "for name, url, title, body in siteData:\n", + " websites.append(Website(name, url, title, body))\n", + "\n", + "Crawler.getContent(websites[0], '/library/view/web-scraping-with/9781491910283').print()\n", + "Crawler.getContent(\n", + " websites[1], '/article/us-usa-epa-pruitt-idUSKBN19W2D0').print()\n", + "Crawler.getContent(\n", + " websites[2],\n", + " '/blog/techtank/2016/03/01/idea-to-retire-old-methods-of-policy-education/').print()\n", + "Crawler.getContent(\n", + " websites[3], \n", + " '/2023/04/03/investing/dogecoin-elon-musk-twitter/index.html').print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Crawling through sites with search" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "class Content:\n", + " \"\"\"Common base class for all articles/pages\"\"\"\n", + "\n", + " def __init__(self, topic, url, title, body):\n", + " self.topic = topic\n", + " self.title = title\n", + " self.body = body\n", + " self.url = url\n", + "\n", + " def print(self):\n", + " \"\"\"\n", + " Flexible printing function controls output\n", + " \"\"\"\n", + " print(f'New article found for topic: {self.topic}')\n", + " print(f'URL: {self.url}')\n", + " print(f'TITLE: {self.title}')\n", + " print(f'BODY:\\n{self.body}')" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "class Website:\n", + " \"\"\"Contains information about website structure\"\"\"\n", + "\n", + " def __init__(self, name, url, searchUrl, resultListing, resultUrl, absoluteUrl, titleTag, bodyTag):\n", + " self.name = name\n", + " self.url = url\n", + " self.searchUrl = searchUrl\n", + " self.resultListing = resultListing\n", + " self.resultUrl = resultUrl\n", + " self.absoluteUrl = absoluteUrl\n", + " self.titleTag = titleTag\n", + " self.bodyTag = bodyTag" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://www.reuters.com/search/news?blob=python\n", + "http://reuters.com/article/idUSKCN11S04G\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSKCN11S04G\n", + "TITLE: Python in India demonstrates huge appetite\n", + "BODY:\n", + "By 1 Min ReadA 20 feet rock python was caught on camera in Junagadh district of India’s western Gujarat state with a swollen stomach after it consumed an antelope on Tuesday (September 20).Residents informed authorities at Girnar Wildlife Sanctuary after they spotted the reptile lying in discomfort in a field.In view of the massive swelling of the python’s stomach, the forest authorities suspect that it gobbled up a full-grown ‘nilgai’ or blue bull.The python - unable to move now - was rescued by the forest personnel and has been put under observation.“We will keep it (python) under observation. We will release it back in the wild once it digests the antelope and the swelling subsides,” said Assistant Conservator of Forest, S.D. Tilala.A blue bull is far larger than an ideal prey for pythons and digesting the mammal could prove to be a great struggle for the reptile.When unable to digest an unusually large prey, pythons are known to regurgitate them.\n", + "http://reuters.com/article/idUSKBN0L31PS20150130\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSKBN0L31PS20150130\n", + "TITLE: Zimbabwean jailed for nine years for eating python meat\n", + "BODY:\n", + "By Reuters Staff1 Min ReadJOHANNESBURG (Reuters) - A Zimbabwean man has been jailed for nine years for eating python, a protected species, a Zimbabwean daily reported on Friday.Archwell Maramba said he had been eating the snake meat for its medicinal value.“I wanted to eat the python to cure my spine and since I ate my first python I have seen remarkable improvement,” NewsDay quoted Maramba as saying during his court case.Acting on a tipoff, police found the 58-year-old drying snakeskin and python meat stashed in his house.Reporting by Helen Nyambura-Mwaura; Editing by Andrew RocheOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSBRE9081CL20130110\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSBRE9081CL20130110\n", + "TITLE: Florida python hunting contest draws hundreds\n", + "BODY:\n", + "By Barbara Liston4 Min ReadORLANDO, Florida (Reuters) - A python hunting competition starting on Saturday is drawing hundreds of amateurs armed with clubs, machetes and guns to the Florida Everglades, where captured Burmese pythons have exceeded the length of minivans and weighed as much as grown men.Researchers at the Florida Museum of Natural History in Gainesville, Florida examine a 17-foot-7-inch Burmese python which was captured in Everglades National Park in this handout picture taken on August 10, 2012 and released on August 14, 2012. A python hunting competition starting January 12, 2013 is drawing hundreds of amateurs armed with clubs, machetes and guns to the Florida Everglades, where captured Burmese pythons have exceeded the length of minivans and weighed as much as grown men. REUTERS/Kristen Grace/Florida Museum of Natural History at University of Florida/HandoutPython Challenge 2013, a month-long event sponsored by the Florida Fish and Wildlife Conservation Commission, is open to hunters and non-hunters alike.But the idea of luring weapon-wielding amateurs into the harsh environment of the Everglades has raised some alarms.“I just thought it was as exciting as could be. It’s a once- in-a-lifetime opportunity,” said contestant Ron Polster, a retired salesman from Ohio whose closest encounter with the swamp has been from the highway heading south for the winter.Participants pay a $25 entry fee and take an online training course, which consists mostly of looking at photographs of both the targeted pythons and protected native snakes to learn the difference.The state wildlife agency is offering prizes of $1,500 for the most pythons captured and $1,000 for the longest python.A Burmese python found in Florida last year set records as the largest ever captured in the state at 17-feet, 7-inches. The snake weighed nearly 165 pounds (75 kg).FWC spokeswoman Carli Segelson said the number of registered contestants reached about 500 this week and was growing, with people coming from 32 states.The stated goal of the competition is to raise awareness of the threat Burmese pythons pose to the Everglades ecosystem. The snakes are native to Southeast Asia and have no known predators in Florida.The contest also serves as a pilot program to determine whether regular hunting competitions can cull the growing population of the invasive species, said Frank Mazzotti, a wildlife expert from the University of Florida who helped create the competition.Python Challenge rules require contestants to kill specimens on the spot in a humane fashion, recommending shooting the snakes precisely through the brain.“I was hoping there would be a lot of machetes and not a lot of guns,” said Polster, the retired salesman. He said he worries “these idiots will be firing all over the place.”Shawn Heflick, star of the National Geographic “Wild” television show “Python Hunters,” told Reuters that despite the formidable size of the snakes, he expects the swamp itself, with its alligators, crocodiles and venomous snakes, to pose a greater threat to the contestants.“You get these people going down there, they’ll get lost, they’ll get dehydrated, they’ll get sucked dry by mosquitoes,” Heflick said.Segelson said the wildlife agency will provide training on the use of GPS devices and on identifying venomous snakes at the kick-off event. In the meantime, she said, contestants should be familiarizing themselves with the Everglades environment, just as they should before entering any other strange territory.Heflick said most of the contestants likely were drawn to the Python Challenge by the romantic mystique of bagging a giant predator. He expects few will last long in the hunt.“The vast majority of them will never see a python. The vast majority of them will probably curtail their hunting very quickly when they figure out there’s a lot of mosquitoes, it’s hot, it’s rather boring sometimes - most of the time really, and I think a lot of them will go home,” Heflick said.Editing by Tom Brown and Dan GreblerOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSBRE9081CL20130109\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSBRE9081CL20130109\n", + "TITLE: Florida python hunting contest draws hundreds\n", + "BODY:\n", + "By Barbara Liston4 Min ReadORLANDO, Florida (Reuters) - A python hunting competition starting on Saturday is drawing hundreds of amateurs armed with clubs, machetes and guns to the Florida Everglades, where captured Burmese pythons have exceeded the length of minivans and weighed as much as grown men.Python Challenge 2013, a month-long event sponsored by the Florida Fish and Wildlife Conservation Commission, is open to hunters and non-hunters alike.But the idea of luring weapon-wielding amateurs into the harsh environment of the Everglades has raised some alarms.“I just thought it was as exciting as could be. It’s a once- in-a-lifetime opportunity,” said contestant Ron Polster, a retired salesman from Ohio whose closest encounter with the swamp has been from the highway heading south for the winter.Participants pay a $25 entry fee and take an online training course, which consists mostly of looking at photographs of both the targeted pythons and protected native snakes to learn the difference.The state wildlife agency is offering prizes of $1,500 for the most pythons captured and $1,000 for the longest python.A Burmese python found in Florida last year set records as the largest ever captured in the state at 17-feet, 7-inches. The snake weighed nearly 165 pounds (75 kg).FWC spokeswoman Carli Segelson said the number of registered contestants reached about 500 this week and was growing, with people coming from 32 states.The stated goal of the competition is to raise awareness of the threat Burmese pythons pose to the Everglades ecosystem. The snakes are native to Southeast Asia and have no known predators in Florida.The contest also serves as a pilot program to determine whether regular hunting competitions can cull the growing population of the invasive species, said Frank Mazzotti, a wildlife expert from the University of Florida who helped create the competition.Python Challenge rules require contestants to kill specimens on the spot in a humane fashion, recommending shooting the snakes precisely through the brain.“I was hoping there would be a lot of machetes and not a lot of guns,” said Polster, the retired salesman. He said he worries “these idiots will be firing all over the place.”Shawn Heflick, star of the National Geographic “Wild” television show “Python Hunters,” told Reuters that despite the formidable size of the snakes, he expects the swamp itself, with its alligators, crocodiles and venomous snakes, to pose a greater threat to the contestants.“You get these people going down there, they’ll get lost, they’ll get dehydrated, they’ll get sucked dry by mosquitoes,” Heflick said.Segelson said the wildlife agency will provide training on the use of GPS devices and on identifying venomous snakes at the kick-off event. In the meantime, she said, contestants should be familiarizing themselves with the Everglades environment, just as they should before entering any other strange territory.Heflick said most of the contestants likely were drawn to the Python Challenge by the romantic mystique of bagging a giant predator. He expects few will last long in the hunt.“The vast majority of them will never see a python. The vast majority of them will probably curtail their hunting very quickly when they figure out there’s a lot of mosquitoes, it’s hot, it’s rather boring sometimes - most of the time really, and I think a lot of them will go home,” Heflick said.Editing by Tom Brown and Dan GreblerOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSKBN1OD2CM\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSKBN1OD2CM\n", + "TITLE: UK woman illegally imported python-skin products\n", + "BODY:\n", + "By Reuters Staff2 Min ReadLONDON (Reuters) - A British woman who illegally imported and sold fashion accessories made from python skin was convicted on Friday, London police said.Stephanie Scolaro, 26, was involved in the illegal import of a parcel containing 10 python-skin hats and two bags which was seized by customs in 2016 at Leipzig airport in Germany, Southwark Crown Court had heard.An investigation began after London police’s Wildlife Crime Unit was alerted to the incident.The enquiry found that Scolaro operated an online company named ‘SS-Python.com’, where she sold python-skin hats, bags, chokers and mobile phone covers.More illicit python snake products were subsequently found in Scolaro’s central London home, and for sale at three shops in London.“Pythons are one of many species protected under CITES, an international treaty to protect endangered plants and animals,” said Sarah Bailey of the Wildlife Crime Unit.“Any trade outside of the legal framework could threaten the conservation status of the remaining wild population and contribute to its decline in the wild,” she added in a statement.Scolaro, who pleaded guilty, will be sentenced on Jan. 21.Reporting by Amy O’Brien; editing by Stephen AddisonOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSBRE9640KE20130705\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSBRE9640KE20130705\n", + "TITLE: Monty Python lose 'Spamalot' court battle\n", + "BODY:\n", + "By Li-mei Hoang4 Min ReadLONDON (Reuters) - The surviving members of the British comedy troupe Monty Python lost a High Court battle on Friday over tens of thousands of pounds in royalties from their hit Broadway musical “Spamalot”.Monty Python members Eric Idle (R) and Terry Jones return to the High Court after a lunch break in central London December 4, 2012. REUTERS/Andrew WinningMark Forstater, who helped produce the 1975 film “Monty Python and the Holy Grail” on which the stage show was based, said he had not received his fair share of the profits from the spin-off.Despite hearing evidence from three Pythons - Eric Idle, Michael Palin and Terry Jones - the judge, Justice Alastair Norris, sided with the producer.“I have always been adamant I was correct. I have been proved right - justice has prevailed,” Forstater said.Inspired by the film, the musical opened on Broadway in 2005 and has also enjoyed a successful run in Britain. Idle wrote the lyrics and collaborated on most of the music.Forstater, an American based in Britain, argued that he was entitled to one-seventh of the profits from the “Holy Grail” film and any merchandise or spin-offs.His lawyer told the court that for the purposes of profit-sharing, it had been agreed in 1974 that Forstater was “the seventh Python”.However Palin, along with Jones and Idle, who formed Monty Python with John Cleese, Terry Gilliam and Graham Chapman, dismissed this suggestion.“The idea of a seventh Python just doesn’t happen ... I don’t think there was ever any suggestion this man was going to be a ‘seventh Python’,” said Palin, giving evidence in December.In his judgment, Norris said Palin had been a “balanced and trustworthy” witness but had admitted his recollection was “hazy”, while evidence from Jones had been “suffused with a sense that Mr Forstater had done very well out of his brief connection with the Pythons”.“Eric Idle was frank enough to acknowledge that he now disliked Mr Forstater, but he expressed the hope that, in his evidence, he was being honest and that his dislike did not affect his honesty,” Norris said.“He undoubtedly regarded Mr Forstater as ungrateful.”“SOFT LOT”His ruling also made reference to the Pythons’ lack of business acumen, highlighting a diary entry from Palin in 1975.“As we are a soft lot and not at all businesslike, I think it would be in the finest traditions of Python irrationality if we gave Mark an extra 1,000 pounds and a silver tray with some cut-glass sherry glasses and told him to stop writing to us for more money,” Palin wrote.“Beyond that even I am not prepared to go. Oh, all right, some cheese straws to go with the sherry glasses.”The judge added: “As I assess the evidence, the Pythons continued at that point to be ‘a soft lot and not at all businesslike’.”No members of the Python group were present in court to hear the ruling.Final figures will be worked out at later hearings but Forstater told reporters he was entitled to more than 200,000 pounds ($300,000) including interest, the Press Association reported.“There is a sadness, though, about having to face people who were my friends in court,” he said. “The friendship has gone.”Forstater said he did not think the litigation would damage the Pythons’ reputation. “They’re an institution,” he said. “I still think they are very funny.”Editing by Michael Holden and Janet LawrenceOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSBREA141OP20140205\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSBREA141OP20140205\n", + "TITLE: 18-foot Burmese python found in Florida Everglades\n", + "BODY:\n", + "By Reuters Staff2 Min ReadSlideshow ( 2 images )MIAMI (Reuters) - Engineers in the Everglades stumbled upon a near-record-breaking Burmese python measuring more than 18 feet long during a routine inspection of levees on Tuesday, a water management district spokesman said.The snake, measuring at 18 feet 2 inches, fell short of the state record by 6 inches, according to the Florida Fish and Wildlife Conservation Commission.Last year, a snake collector in the state discovered the largest python on record there, measuring 18 feet 8 inches, commission spokeswoman Katie Johnson said.The pythons, which can grow to more than 20 feet in their native habitat in Southeast Asia, are one of the most problematic invaders of Florida’s sprawling Everglades wetlands.They eat indigenous species and their food sources, fueling concerns that the predator snakes will fundamentally change the ecosystem.The python found on Tuesday was killed, and its corpse was taken to the University of Florida, where it will be measured and studied by scientists trying to combat the species, according to South Florida Water Management District spokesman Gabe Margasak.Officials have said the python population is believed to have grown to as many as 150,000 in the Everglades. The cold-blooded reptiles are often found atop levees, where they lie for hours at a time to warm up under the Florida sun.The snakes, one of the largest species in the world, found a home to their liking in the Everglades when pet owners started using the wetlands as a convenient dumping ground.Reporting by Zachary Fagenson; Editing by Colleen Jenkins and Lisa Von AhnOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSKCN11W1LT\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSKCN11W1LT\n", + "TITLE: Indian man bitten by python whilst posing for selfie\n", + "BODY:\n", + "By 2 Min ReadForest department officials on Saturday (September 24) promised strict action after a python attacked a man when a group was trying to click a photo with it.The incident took place on Friday (September 23) after forest department officials removed the python from the premises of a school in northwestern Rajasthan state. They were posing for pictures with it after successfully capturing it.Deputy Conservator of Forests, K.G.Shrivastav, said the incident was unexpected as all officers were highly trained.“I wanted the snake to be released in my presence, but the officials released it before I could reach the spot. I had no clue that civilians were also present at the spot and something could go wrong as all the officials are highly trained. Clicking selfies with the snake and releasing the photos publicly is an offense under the Wildlife Act and we will issue notice to all involved in this incident,” Shrivastav said.The victim, Ashok Bishnoi, accepted the incident happened due to carelessness on his part.“The moment I received the news I reached the location. I did not realize how close I was to the python and it attacked me. This is entirely my fault,” said the victim, Ashok Bishnoi.Vishnoi added that the mishap happened in a short span of time in spite of the fact that the rescue officials had a strong grip on the reptile.The snake was later released in a forest.\n", + "http://reuters.com/article/idUSKBN1711E3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSKBN1711E3\n", + "TITLE: Indonesian found dead after being swallowed by python\n", + "BODY:\n", + "By Reuters Staff2 Min ReadSlideshow ( 2 images )JAKARTA (Reuters) - An Indonesian farmer has been found dead inside a 7-meter (23-foot) python after being reported missing on his failure to return home from work on a palm plantation.Village officials cut open the swollen body of the snake in a graphic video taken by a resident of Mamuju, on the eastern island of Sulawesi, the site of the incident. The victim’s legs, encased in rubber boots, emerge as the snake is pulled apart.Family members and neighbors of the 26-year-old victim, Akbar, had launched a search when he failed to come home for more than 24 hours, a resident of the area told Reuters.“We saw a python that couldn’t move properly and it’s belly was swollen,” said Asdin Rudi Fathir, 43. “Residents and officials decided to kill the python and were shocked to find a human body inside.”Relatives identified the victim, who went by only one name, as do many Indonesians.While large snakes and other animals are common in that part of Sulawesi, attacks on humans are rare, Fathir added.Reporting by Kanupriya Kapoor; Editing by Clarence FernandezOur Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSL5N0J50QB20131120\n", + "New article found for topic: python\n", + "URL: http://reuters.com/article/idUSL5N0J50QB20131120\n", + "TITLE: Monty Python not dead after all - stage show planned\n", + "BODY:\n", + "By Reuters Staff2 Min ReadLONDON, Nov 20 (Reuters) - The comic team Monty Python, whose BBC TV series from the 1970s and feature films took their subversive humour and “Dead Parrot” routine around the world, are to reunite for a stage show, British media reported on Wednesday.A news release issued on behalf of the five surviving Pythons, Eric Idle, John Cleese, Terry Gilliam, Michael Palin and Terry Jones, all in their 70s, said that an official announcement would be made on Thursday.But several British newspapers and media outlets reported that the five would be appearing on stage for the first time together since the 1980s.The group was famed for its skits about a man trying to return a dead parrot to a shopkeeper who claimed the bird was “resting” and for poking fun at the establishment, the military and religion.“We’re getting together and putting on a show - it’s real,” Jones told the BBC.“I’m quite excited about it. I hope it makes us a lot of money. I hope to be able to pay off my mortgage!”On his Twitter account, Palin wrote: “The Python rides again...?” while Idle on Tuesday tweeted: “Only three days to go till the Python Press Conference. Make sure Python fans are alerted to the big forthcoming news event.”The BBC programme “Monty Python’s Flying Circus” was made for television between 1969 and 1974.The Pythons went on to make films including “Monty Python And The Holy Grail” (1975) and “Monty Python’s Life of Brian” (1979).They last performed live together in Monty Python Live At The Hollywood Bowl in 1982. The sixth Python, Graham Chapman, died of cancer at age 48 in 1989. (Writing by Michael Roddy; Editing by Doina Chiacu)Our Standards: The Thomson Reuters Trust Principles.\n", + "https://www.reuters.com/search/news?blob=data%20science\n", + "http://reuters.com/article/idUSL4N33D1H6\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL4N33D1H6\n", + "TITLE: CORRECTED-Data science firm Tredence raises $175 mln from PE firm Advent\n", + "BODY:\n", + "By Reuters Staff2 Min Read(Corrects paragraph 3 to add dropped word “not”)BENGALURU, Dec 23 (Reuters) - Tredence, a data science and artificial intelligence company, has raised $175 million from private equity firm Advent International, the company said on Friday.The Series B round values Tredence, which has Indian founders but is headquartered in San Jose, at $500 million, the Economic Times newspaper reported, citing Tredence chief executive and co-founder, Shub Bhowmick.Tredence, which gets 80% of its revenue from North America, did not immediately respond to Reuters’ request for comment.Advent will take a minority stake in Tredence and join its board, while Chicago Pacific Founders, a PE firm that invested in Tredence in December 2020, will remain a shareholder, Tredence said in a statement.The company was started by Bhowmick, Sumit Mehra and Shashank Dubey in 2013 and raised $30 million in its Series A funding round in late 2020.It has over 1,800 employees and offices in San Jose, Foster City, Chicago, London, Toronto and Bengaluru. (Reporting by Nandan Mandayam in Bengaluru; Editing by Savio D’Souza)Our Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSL1N36702Q\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL1N36702Q\n", + "TITLE: Biden to discuss risks of AI in Tuesday meeting with science advisers\n", + "BODY:\n", + "By Jeff Mason2 Min ReadWASHINGTON, April 4 (Reuters) - U.S. President Joe Biden will discuss the “risks and opportunities” that artificial intelligence poses for people, society and national security during a meeting with science and technology advisers at the White House on Tuesday, an official said.Biden, a Democrat, is scheduled to meet with the President’s Council of Advisors on Science and Technology (PCAST) on the same day that his predecessor, former President Donald Trump, surrenders in New York over charges stemming from a probe into hush money paid to a porn star.Biden has declined to comment on Trump’s legal woes, and Democratic strategists say his focus on governing will create a politically advantageous split screen of sorts as his former rival, a Republican, deals with his legal challenges.“The president will discuss the importance of protecting rights and safety to ensure responsible innovation and appropriate safeguards,” a White House official said in a statement ahead of Biden’s meeting.“He will call on Congress to pass bipartisan privacy legislation to protect kids and limit personal data tech companies collect on all of us.”Artificial intelligence or AI is becoming a hot topic for policy makers.The tech ethics group Center for Artificial Intelligence and Digital Policy has asked the U.S. Federal Trade Commission month to stop OpenAI from issuing new commercial releases of GPT-4, which has wowed and appalled users with its human-like abilities to generate written responses to requests.Democratic U.S. Senator Chris Murphy has urged society to pause as it considers the ramifications of AI.Last year the Biden administration released a blueprint “Bill of Rights” to help ensure users’ rights are protected as technology companies design and develop AI systems. (Reporting by Jeff Mason; Editing by Stephen Coates)Our Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSL1N33A11T\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL1N33A11T\n", + "TITLE: SPECIAL REPORT-Why detransitioners are crucial to the science of gender care\n", + "BODY:\n", + "By Robin Respaut, Chad Terhune, Michelle Conlin39 Min Read(Takes sidebar USA-TRANSYOUTH/STUDIES)TORONTO, Dec 22 (Reuters) - For years, Dr Kinnon MacKinnon, like many people in the transgender community, considered the word “regret” to be taboo.MacKinnon, a 37-year-old transgender man and assistant professor of social work at York University here, thought it was offensive to talk about people who transitioned, later regretted their decision, and detransitioned. They were too few in number, he figured, and any attention they got reinforced to the public the false impression that transgender people were incapable of making sound decisions about their treatment.“This doesn’t even really happen,” MacKinnon recalled thinking as he listened to an academic presentation on detransitioners in 2017. “We’re not supposed to be talking about this.”MacKinnon, whose academic career has focused on sexual and gender minority health, assumed that nearly everyone who detransitioned did so because they lacked family support or couldn’t bear the discrimination and hostility they encountered – nothing to do with their own regret. To learn more about this group for a new study, he started interviewing people.In the past year, MacKinnon and his team of researchers have talked to 40 detransitioners in the United States, Canada and Europe, many of them having first received gender-affirming medical treatment in their 20s or younger. Their stories have upended his assumptions.Many have said their gender identity remained fluid well after the start of treatment, and a third of them expressed regret about their decision to transition from the gender they were assigned at birth. Some said they avoided telling their doctors about detransitioning out of embarrassment or shame. Others said their doctors were ill-equipped to help them with the process. Most often, they talked about how transitioning did not address their mental health problems.In his continuing search for detransitioners, MacKinnon spent hours scrolling through TikTok and sifting through online forums where people shared their experiences and found comfort from each other. These forays opened his eyes to the online abuse detransitioners receive – not just the usual anti-transgender attacks, but members of the transgender community telling them to “shut up” and even sending death threats.“I can’t think of any other examples where you’re not allowed to speak about your own healthcare experiences if you didn’t have a good outcome,” MacKinnon told Reuters.The stories he heard convinced him that doctors need to provide detransitioners the same supportive care they give to young people to transition, and that they need to inform their patients, especially minors, that detransitioning can occur because gender identity may change. A few months ago, he decided to organize a symposium to share his findings and new perspective with other researchers, clinicians, and patients and their families.Not everyone was willing to join the discussion. A Canadian health provider said it couldn’t participate, citing recent threats to hospitals offering youth gender care. An LGBTQ advocacy group refused to promote the event. MacKinnon declined to identify either, telling Reuters he didn’t want to single them out. Later, after he shared his findings on Twitter, a transgender person denounced his work as “transphobia.”He expected his research would be a hard sell even to many of the 100 or so people from Canada, the United States and elsewhere who accepted his invitation. “I need your help,” he told the crowd that assembled in November in a York University conference room for the daylong session. “My perspectives have changed significantly. But I recognize that for many of you, you may find yourselves feeling much like I did back in 2017 – challenged, apprehensive, maybe fearful.”FIGHTING WORDSIn the world of gender-affirming care, as well as in the broader transgender community, few words cause more discomfort and outright anger than “detransition” and “regret.” That’s particularly true among medical practitioners in the United States and other countries who provide treatment to rising numbers of minors seeking to transition.They insist, as MacKinnon once did, that detransitioning is too rare to warrant much attention, citing their own experiences with patients and extant research to support their view. When someone does detransition, they say, it’s almost never because of regret, but rather, a response to the hardship of living in a society where transphobia still runs rampant.“These patients are not returning in droves” to detransition, said Dr Marci Bowers, a transgender woman, gender surgeon and president of the World Professional Association for Transgender Health (WPATH), an international group that sets guidelines for transgender care. Patients with regret “are very rare,” she told Reuters. “Highest you’ll find is 1% or 1.5% of any kind of regret.”Doctors and many transgender people say that focusing on isolated cases of detransitioning and regret endangers hard-won gains for broader recognition of transgender identity and a rapid increase in the availability of gender care that has helped thousands of minors. They argue that as youth gender care has become highly politicized in the United States and other countries, opponents of that care are able to weaponize rare cases of detransition in their efforts to limit or end it altogether, even though major medical groups deem it safe and potentially life-saving.“Stories with people who have a lot of anger and regret” about transitioning are over-represented in the media, and they don’t reflect “what we are seeing in the clinics,” said Dr Jason Rafferty, a pediatrician and child psychiatrist at Hasbro Children’s Hospital in Providence, Rhode Island. He also helped write the American Academy of Pediatrics’ policy statement in support of gender-affirming care. Detransitioning is a “very invalidating term for a lot of people who are trans and gender-diverse,” Rafferty said.Some people do detransition, however, and some do so because of regret. The incidence of regret could be as low as clinicians like Bowers say, or it could be much higher. But as Reuters found, hard evidence on long-term outcomes for the rising numbers of people who received gender treatment as minors is very weak.Dr Laura Edwards-Leeper, a clinical psychologist in Oregon who treats transgender youths and a co-author of WPATH’s new Standards of Care for adolescents and children, said MacKinnon’s work represents some of the most extensive research to date on the reasons for detransitioning and the obstacles patients face. She said the vitriol he has encountered illustrates one reason so few clinicians and researchers are willing to broach the subject.“People are terrified to do this research,” she said.For this article, Reuters spoke to 17 people who began medical transition as minors and said they now regretted some or all of their transition. Many said they realized only after transitioning that they were homosexual, or they always knew they were lesbian or gay but felt, as adolescents, that it was safer or more desirable to transition to a gender that made them heterosexual. Others said sexual abuse or assault made them want to leave the gender associated with that trauma. Many also said they had autism or mental health issues such as bipolar disorder that complicated their search for identity as teenagers.Echoing what MacKinnon has found in his work, nearly all of these young people told Reuters that they wished their doctors or therapists had more fully discussed these complicating factors before allowing them to medically transition.No large-scale studies have tracked people who received gender care as adolescents to determine how many remained satisfied with their treatment as they aged and how many eventually regretted transitioning. The studies that have been done have yielded a wide range of findings, and even the most rigorous of them have severe limitations. Some focus on people who began treatment as adults, not adolescents. Some follow patients for only a short period of time, while others lose track of a significant number of patients.“There’s a real need for more long-term studies that track patients for five years or longer,” MacKinnon said. “Many detransitioners talk about feeling good during the first few years of their transition. After that, they may experience regret.”In October, Dutch researchers reported results of what they billed as the largest study to date of continuation of care among transgender youths. In a review of prescription drug records, they found that 704, or 98%, of 720 adolescents who started on puberty blockers before taking hormones had continued with treatment after four years on average. The researchers couldn’t tell from the records why the 16 had discontinued treatment.Gender-care professionals and transgender-rights advocates hailed the 98% figure as evidence that regret is rare. However, the authors cautioned that the result may not be replicated elsewhere because the adolescents studied had undergone comprehensive assessments, lasting a year on average, before being recommended for treatment. This slower, methodical approach is uncommon at many U.S. gender clinics, where patient evaluations are typically done much faster and any delay in treatment, or “gatekeeping,” is often believed to put youth at risk of self-harm because of their distress from gender dysphoria.Dr Marianne van der Loos, the Dutch study’s lead author, is a physician at Amsterdam University Medical Center’s Center for Expertise on Gender Dysphoria, a pioneer in gender care for adolescents. “It’s important to have evidence-based medicine instead of expert opinion or just opinion at all,” van der Loos said.Reliable evidence of the frequency of detransition and regret is important because, as MacKinnon, van der Loos and other researchers say, it could be used to help ensure that adolescent patients receive the best possible care.A basic tenet of modern medical science is to examine outcomes, identify potential mistakes, and, when deemed necessary, adjust treatment protocols to improve results for patients. For example, only after large international studies analyzing outcomes for thousands of patients did researchers establish that implanted coronary artery stents were no better than medication for treating most cases of heart disease.Stronger data on outcomes, including the circumstances that make regret more likely, would also help transgender teens and their parents make better-informed decisions as they weigh the benefits and risks of treatments with potentially irreversible effects.“We cannot carry on in this field that involves permanently changing young people’s bodies if we don’t fully understand what we’re doing and learn from those we fail,” said Edwards-Leeper, the clinical psychologist and WPATH member. “We need to take responsibility as a medical and mental-health community to see all the outcomes,” she said in an interview.As Reuters reported in October, thousands of families in the U.S. have been weighing these difficult choices amid soaring numbers of children diagnosed with gender dysphoria, the distress experienced when a person’s gender identity doesn’t align with their gender assigned at birth. They have had to do so based on scant scientific evidence of the long-term safety and efficacy of gender-affirming treatment for minors.Concern about how to cope with the growing waiting lists at gender clinics that treat minors has divided experts. Some urge caution to ensure that only adolescents deemed well-suited to treatment after thorough evaluation receive it. Others argue that any delay in treatment prolongs a child’s distress and puts them at risk of self-harm.DETRANSITION DEFINEDDetransitioning can mean many things. For those who transitioned socially, it may entail another change in name, preferred pronouns, and dress and other forms of identity expression. For those who also received medical treatment, detransitioning typically includes halting the hormone therapy they otherwise would receive for years.Nor do all people who stop treatment regret transitioning, according to interviews with detransitioners, doctors and researchers. Some end hormone therapy when they have achieved physical changes with which they are comfortable. Some are unhappy with the side effects of hormones, such as male pattern baldness, acne or weight gain. And some are unable to cope with the longstanding social stigma and discrimination of being transgender.Doctors and detransitioners also described the challenging physical and emotional consequences of the process. For example, patients who had their ovaries or testes removed no longer produce the hormones that match their gender assigned at birth, risking bone-density loss and other effects unless they take those hormones the rest of their lives. Some may undergo years of painful and expensive procedures to undo changes to their bodies caused by the hormones they took to transition. Those who had mastectomies may later undergo breast reconstruction surgery. As parents, they may regret losing the ability to lactate. Detransitioners also may need counseling to cope with the process and any lingering regret.The impact can be social, too. In a study published last year in the Journal of Homosexuality, a researcher in Germany surveyed 237 people who had socially or medically transitioned and later detransitioned, half of them having transitioned as minors. Many respondents reported a loss of support from the LGBTQ community and friends, negative experiences with medical professionals, difficulty in finding a therapist familiar with detransition and the overall isolation after detransition.“Many respondents described experiences of outright rejection from LGBT+ spaces due to their decision to detransition,” wrote Elie Vandenbussche, the study’s author, a detransitioner and at the time a student at Rhine-Waal University of Applied Sciences. “It seems reasonable to suspect that this loss of support experienced by detransitioners must have serious implications on their psychological well-being.”In its new Standards of Care, released in September, WPATH cited Vandenbussche’s paper and a few others on detransitioning and continuation of care among younger patients. “Some adolescents may regret the steps they have taken,” the WPATH guidelines say. “Therefore, it is important to present the full range of possible outcomes when assisting transgender adolescents.”However, Bowers, WPATH’s president, is among several gender-care specialists who say patients are ultimately responsible for choices they make about treatment, even as minors. They should not be “blaming the clinician or the people who helped guide them,” she said. “They need to own that final step.”WPATH’s guidelines acknowledge the lack of research on long-term outcomes for youth who didn’t undergo comprehensive assessments, saying that the “emerging evidence base indicates a general improvement in the lives of transgender adolescents” who receive treatment after careful evaluation. “Further, rates of reported regret during the study monitoring periods are low,” the guidelines say.Specific treatment protocols for detransitioning are hard to find. WPATH’s guidelines don’t provide detailed advice to clinicians on treating patients who detransition. The Endocrine Society’s guidelines for gender-affirming care, published in 2017, don’t address the issue, either. The “question of discontinuing hormone treatment is beyond the scope covered by the current guideline,” an Endocrine Society spokeswoman said.Some doctors think they – and patients – would benefit from more guidance. “We have guidelines to guide us in providing transition-related care, initiating hormones and managing them long-term. Equally as important would be having guidelines in deprescribing hormones in the safest way possible,” said Dr Mari-Lynne Sinnott, a doctor who attended MacKinnon’s symposium. She runs one of the only family medical practices in Newfoundland focused on gender-diverse people, who make up about half of her 1,500 patients.“SURE OF MY IDENTITY”Max Lazzara’s childhood in Minneapolis, Minnesota, was chaotic, with divorce, “moving around a lot, some emotionally abusive stuff at home,” she said. Her mother worked full-time, so Lazzara did most of the cooking, cleaning and caring for her little brother. She began to cut and burn herself as a means of coping and had tried to commit suicide three times before she entered high school, according to Lazzara and her medical records, which cite a history of bipolar disorder.“The life of a woman was bleak to me,” Lazzara told Reuters. “I worried that I would have to get married to a man someday and have a baby. I wanted to run far away from that.”In early 2011, when Lazzara was 14, she started questioning her gender identity. After discovering forums on Tumblr where young people described their transitions, she felt like something snapped into place. “I thought, ‘Wow, this could explain why my whole life felt wrong.’”During the summer of that year, Lazzara changed her name and began experimenting with presenting as more masculine. It felt good to cut her hair and wear gender-neutral or men’s clothing. She took medications and received therapy to treat bipolar disorder. But it wasn’t enough to alleviate her distress. In April 2012, Lazzara was admitted to the hospital at the University of Minnesota after a fourth suicide attempt.Three weeks later, she sought care at the university’s Center for Sexual Health, where she was diagnosed with gender identity disorder. Lazzara told the clinic she was “sure of my identity,” according to her medical records. She wanted hormones and surgeries, the records show, including a mastectomy, a hysterectomy, and liposuction to slim her legs and hips. She was horrified at her body, could not look down in the shower and felt “absolute dread at the time of menstrual cycle,” the records note.“I felt so strongly. I thought nothing would change my mind,” Lazzara told Reuters.Clinicians at the university warned families that their children were suicidal “because they are born in the wrong bodies,” Lazzara’s mother, Lisa Lind, told Reuters. “I thought, ‘I’ll do whatever it takes, so she doesn’t kill herself.’”Lazzara started taking testosterone in the fall of 2012, at age 16. She was still binding her breasts – so tightly, she said, that her ribs deformed. After a man groped her on the street, she decided to have breast-removal surgery, tapping the college fund her grandmother had left for her to cover the nearly $10,000 cost.Initially, Lazzara was happy with her transition. She liked the changes from taking testosterone – the redistribution of fat away from her hips, the lower voice, the facial hair – and she was spared the sexist cat-calling that her female friends endured. “I felt like I was growing into something I wanted to be,” Lazzara said.But her mental health continued to deteriorate. She attempted suicide twice more, at ages 17 and 20, landing in the hospital both times. Her depression worsened after a friend sexually abused her. She became dependent on prescription anti-anxiety medication and developed a severe eating disorder.During the summer of 2020, Lazzara was spiraling. She realized she no longer believed in her gender identity, but “I didn’t see a way forward.”That October, Lazzara was working as a janitor in an office building in the Seattle area when she caught her reflection in a bathroom mirror. For the first time, she said, she saw herself as a woman. “I had not allowed myself to have that thought before,” she said. It was shocking but also clarifying, she said, and “a peaceful feeling came over me.”Then she began to ponder her sexuality. In middle school, she had crushes on girls. After her transition, she identified as a transgender man who was bisexual. Now, she realized, she was a lesbian.Lazzara stopped taking testosterone. She later asked her doctor in the Seattle area for advice, but he seemed unsure about how to proceed. She found a new doctor and recently sought laser hair removal on her face.Lazzara told Reuters she now realizes that gender treatment was not appropriate for her and that it took a toll on her physical and mental health. “I do wish my doctors had said to me, ‘It’s OK to feel disconnected from your body. It’s OK to like girls. It’s OK to be gender non-conforming.’”Her original gender-care providers at the University of Minnesota declined to comment. In a statement, the university’s medical school said “gender-affirming care involves a carefully thought-out care plan between a patient and their multidisciplinary team of providers.”Lazzara recently found the before-and-after pictures of her torso on the website of the surgeon who performed her mastectomy in 2013. She had given him permission to post the images because he was proud of the outcome. Seeing her body as it once was stunned her. “I saw my breasts before I got them removed. That’s my 16-year-old body,” she said. “I had no ability at that age to be in my own body in my own way.”Since revealing she detransitioned, Lazzara said, many in the online transgender community who embraced her a decade ago have distanced themselves from her, and she has received hateful messages on social media. Now, when she sees someone come out online as detransitioned, she sends them a private message of support. “I know how lonely and alienating it can be,” she said.“SHUT UP,” DETRANSITIONERTransgender people are frequently subjected to harassment, abuse and threats online. And as Lazzara’s experience shows, so are detransitioners. In recent posts on TikTok, users took turns telling detransitioners to “shut up,” and mocked, attacked and blamed them for perpetuating harm on the transgender community. Diana Salameh, a transgender woman, film director and comedian from Mississippi, posted a TikTok video on Oct. 1 to “all the so-called transgender detransitioners out there.”Detransitioners “are just giving fuel to the fire to the people who think that no trans person should exist,” she said in the video. “You people who jumped the gun, made wrong decisions that you should actually feel embarrassed for, but you want to blame somebody else.” In closing, she said, “I think you all need to sit down and shut the fuck up!”Salameh told Reuters she posted the video because detransitioners spread the false idea “that nobody can be happy after transition,” and right-wing opponents of youth gender care are using their stories “to fuel their agendas.”Earlier this year, K.C. Miller, a 22-year-old in Pennsylvania who was assigned female at birth, began wrestling with how she felt about her medical transition.Miller initially sought treatment for gender dysphoria when she was 16 from the adolescent gender clinic at Children’s Hospital of Philadelphia. In September 2017, Miller met with Dr Linda Hawkins, a counselor and co-founder of the hospital’s gender clinic, for the first of two 90-minute visits. During that session, Miller told Hawkins she had wanted to be a Boy Scout as a kid and “always felt like a tomboy,” according to Hawkins’ notes in Miller’s medical records, reviewed by Reuters. Miller also told Reuters that as a young girl she was attracted to other girls, but didn’t feel she could pursue those relationships because her family’s church didn’t accept homosexuality.Miller’s case had further complications. Hawkins noted that Miller had an extensive history of sexual abuse by a family member starting at age 4, and that as a result, Miller had already been diagnosed with anxiety and post-traumatic stress disorder. Miller had been admitted to a psychiatric hospital for 10 days because of suicidal thoughts in late 2016.While in the hospital, Miller told her mother she wished she wasn’t a girl “because then the abuse would not have happened,” Hawkins wrote. Elsewhere in the records, Hawkins noted that “Mom expresses concern that the desire to be male and not female may be a trauma response.”Miller, her mother and Hawkins met again seven weeks later. Miller had continued to have suicidal thoughts. She had taken medication for depression and anxiety and was working with a therapist, Hawkins noted. By the end of that second visit, Hawkins concluded that, “in spite of” Miller’s trauma from abuse, the 16-year-old “has been insistent, persistent and consistent” in thinking of herself as male.Hawkins referred Miller to a local gender clinic to receive testosterone. Miller got a mastectomy about six months later.But medical treatment didn’t offer the relief she sought. Her body started to change due to the hormones, yet Miller didn’t feel better. Instead, she cycled through bouts of depression. She passed as a young man, but “something felt off. It felt like I was putting on an act.”Then Miller began reading the stories posted online by young detransitioners. Parts of their experiences resonated with her. “I absolutely would not have done this if I could go back and do it again,” Miller told Reuters. “I would have worked through therapy and would be living my life as a lesbian.”Miller said Hawkins should have done a more thorough evaluation of all of Miller’s mental health issues and shouldn’t have recommended treatment so quickly.Her mother, who asked not to be identified to protect her privacy, told Reuters that providers assured her that Miller’s distress was related to her gender identity and that gender-affirming care would reduce the risk of suicide.A spokesman for Children’s Hospital of Philadelphia declined to comment, citing patient privacy.Sitting in her car in early October, Miller let out years of frustration in a video posted on Twitter. She told viewers she felt she looked too masculine to detransition. She described how testosterone thinned her hair. “I don’t see me personally being able to come back from what’s happened,” she said in the video.The video went viral, registering nearly four million views within days and igniting an avalanche of comments. Two days after Miller’s post, Alejandra Caraballo, a transgender woman, LGBTQ-rights advocate and clinical instructor at Harvard Law School’s Cyberlaw Clinic, wrote on Twitter: “The detransition grift where you complain about transitioning not making you look like a greek god but you also aren’t actually detransitioning yet because you don’t feel like your birth gender and you follow a bunch of anti-trans reactionaries that want all trans people gone.”Caraballo told Reuters she reacted to Miller’s video because those types of detransition stories are “outlier examples being used by many on the anti-trans side to undermine access to gender-affirming care. They aren’t representative of detransitioners on the whole.”In other posts and direct messages, some transgender people Miller had once idolized made fun of her appearance and criticized her decisions. One person made a death threat.A few weeks later, Miller said she stopped taking testosterone, began to feel suicidal and sought psychiatric care. She uses female pronouns among friends, but still presents as a man in public.In its Standards of Care, WPATH says many detransitioners “expressed difficulties finding help during their detransition process and reported their detransition was an isolating experience during which they did not receive either sufficient or appropriate support.”In May, Dr Jamison Green, a transgender man, author and former president of WPATH, said he was encouraged when about 30 medical professionals attended an online WPATH seminar he and other gender-care specialists helped lead. The session was intended to help providers better serve detransitioners and other patients with an evolving gender identity.“I wish people in the transgender community would be less judgmental about people who change their mind,” Green said. “Transgender people, especially when they are newer to the community, can be really brutal to people for not conforming. I really think it’s harmful for everybody.”WORD SEARCH PITFALLSEver since the first clinic to offer gender care to minors in the United States opened in Boston 15 years ago, none of the leading providers have published any systematic, long-term studies tracking outcomes for all patients.In 2015, the National Institutes of Health funded a study to examine outcomes for about 400 transgender youth treated at four U.S. children’s hospitals, including the gender clinic at Boston Children’s Hospital. Researchers have said they are looking at “continuation of care.” However, long-term results are years away.That has left a small assortment of studies to guide clinicians in this emerging field of medicine. The results of these studies suggest a wide range of possibilities for rates of detransitioning, from less than 1% to 25%. The research provides even less certainty about the incidence of regret among patients who received medical treatment as minors. And the studies have serious drawbacks.Two of the largest ones, which found that 2% or less of people who transitioned experienced regret, focused on Europeans who primarily initiated treatment as adults. Experts caution that the results, because of the differences in maturity and life experiences between adults and adolescents, may have limited relevance as an indicator of outcomes for minors.Researchers acknowledge that studies that follow patients for only a short time may underestimate detransition and regret because evidence indicates some people may not reach that point until as long as a decade after treatment began. Some studies also lose track of patients – a recurring challenge as minors age out of pediatric clinics and have to seek care elsewhere.Even the choice of search terms can trip up researchers, as apparently happened in a study published in May by Kaiser Permanente, a large integrated health system based in Oakland, California.That study examined 209 patients who underwent gender-affirming mastectomies as minors between 2013 and 2020 in Kaiser’s northern California region. Its authors searched the patients’ medical records for words such as “regret,” “dissatisfaction,” “unsatisfied” and “unhappy” as indicators of regret. They didn’t look for the term “detransition,” according to the study.Their search yielded two patients who had expressed regret, or less than 1% of the group studied. The two patients, identified as nonbinary, had top surgery at age 16, and expressed regret within a year and a half.Reuters found two other patients in the region covered by the study who don’t match those characteristics and whom the Kaiser researchers apparently missed. Both have been outspoken about their detransitions.One is Max Robinson, who was 16 when she sought gender care at Kaiser in 2012. Her pediatric endocrinologist prescribed a puberty blocker and later testosterone.The doctor monitored Robinson’s hormone levels, wrote numerous letters to help Robinson change her legal gender from female to male, and recommended a plastic surgeon in San Francisco, Robinson’s medical records show. “I have no reservations recommending Max as a well adjusted candidate for breast reduction,” the Kaiser endocrinologist wrote to the surgeon in May 2013. Max had the surgery six weeks later, when she was 17.After the surgery, Robinson felt better. But within a year, her mental health issues, including anxiety and depression, had escalated, medical records show.In November 2015, three years after starting testosterone and two years after her surgery, Robinson told the Kaiser physician she was now seeing that she wasn’t interested in taking hormones any longer. “I’m no longer going to be using testosterone, so I don’t need further appointments or for those prescriptions to be active,” she wrote to the doctor. Two months later, she asked Kaiser to provide a letter confirming her detransition so she could change her legal records back to female. Kaiser obliged.“The whole experience alienated me from my doctors,” she told Reuters.Robinson began to speak publicly about her decision to detransition and in 2021 published “Detransition: Beyond Before and After,” a book in which she details her own process of medical transition and detransition.The other patient was Chloe Cole. According to a letter of intent to sue that her lawyers sent to Kaiser in November, Cole was 13 when a Kaiser doctor in 2018 put her on a puberty blocker, followed a few weeks later by testosterone, for her gender-affirming treatment.At 15, Cole told Reuters, she also wanted top surgery. In an interview, she and her father said the doctors at Kaiser readily agreed, though he wanted to wait until she was older.“They were so adamant,” he said. He recalled the doctors telling him: “‘At this age, they definitely know what their gender is.’” The father asked not to be named out of concern that speaking publicly might jeopardize his employment. Detransition, he said, “wasn’t really discussed as a possibility.”In June 2020, a Kaiser surgeon performed a mastectomy on Cole, according to the letter of intent to sue. That was a month before her 16th birthday. Less than a year later, Cole said, she began to realize she regretted her surgery and medically transitioning in general after a discussion in school about breastfeeding and pregnancy.Cole said that when she discussed her decision to detransition with her gender-care specialist at Kaiser, “I could tell that I made her upset that I was so regretful,” Cole said in an interview. Eventually, the doctor offered to recommend a surgeon for breast reconstruction, Cole said, “but that’s something I’ve decided to not go through with.”Cole has begun speaking out publicly in support of measures to end gender-affirming care for minors, appearing often on conservative media and with politicians who back such bans.In the letter of intent, Cole’s lawyers said Kaiser’s treatment “represents gross negligence and an egregious breach of the standard of care.”Steve Shivinsky, a spokesman for Kaiser Permanente, declined to comment on the care provided to Cole and Robinson or whether they were included in the study, citing patient privacy.In a statement, he said Kaiser’s “clinicians are deeply interested in the outcomes of the care we provide and the individual’s state of health and wellbeing before, during and beyond their gender transition.” For adolescents seeking gender-affirming care, he said, “the decision always rests with the patient and their parents and, in every case, we respect the patients’ and their families’ informed decision to choose one form of care over another.”The Kaiser researchers followed up with patients in their study an average of 2.1 years after surgery. “The time to develop postoperative regret and/or dissatisfaction remains unknown and may be difficult to discern given that regret is quite rare,” the researchers wrote.A CHANGE OF PERSPECTIVEMacKinnon, the assistant professor of social work, grew up as what he calls “a gender-nonconforming tomboy” in a small Nova Scotia town. After getting his degree in social work, he medically transitioned at 24 when he started taking testosterone. “It was a very slow build,” MacKinnon said of his transition. He didn’t identify as transgender as a child.As a young researcher in Toronto, MacKinnon was drawn to work that exposed the barriers transgender people face in getting medical care and navigating daily life, interviewing clinicians and patients about their experiences. More recently, he turned his attention to detransition and regret.In August 2021, MacKinnon published a paper in which he and his co-authors wrote that there was “scant evidence that detransition is a negative phenomenon” for patients that would justify limiting access to gender-affirming treatment. That conclusion angered many of the detransitioners he would later need to win over.Michelle Alleva, a 34-year-old detransitioner in Canada, criticized MacKinnon’s study in a blog post as another effort by gender-care supporters to whitewash the pain of regret and assuage clinicians’ fears of malpractice lawsuits. Another detransitioner complained on Twitter that the word “regret” was put in quotes in the paper, undermining its legitimacy in her opinion.Still skeptical that regret was a significant issue, MacKinnon in the autumn of 2021 embarked on his latest study and began talking to more people about their decisions to detransition. In July, he published a paper based on formal interviews with 28 of the more than 200 detransitioners he and his colleagues have found.A third expressed either strong or partial regret about their transition. Some said their transitions should have proceeded more slowly, with more therapy. Others expressed regret about the lasting impact on their bodies. Some said their mental health needs weren’t adequately addressed before transitioning. “They felt like their consent wasn’t informed because they didn’t initially understand what was going on that might have explained their feelings and suffering,” MacKinnon told Reuters.The patients’ stories brought MacKinnon round to the view that the gender-care community needs to address regret, adjust treatment to reduce its incidence, and provide better support for detransitioners. “Some of what I’ve learned about detransitioners is identifying cracks in the gender-affirming care system, particularly for young people,” he said.In September, MacKinnon presented his findings to a small but attentive crowd at WPATH’s annual conference in Montreal. A few weeks later, he shared his research more widely on Twitter. “We need to listen to and learn from the experiences of detransitioners, not silence them,” he wrote.Some people applauded his work. Others criticized it. Robyn D., who identified as “quietly trans,” replied on Twitter: “Transphobia disguised as academic opinion is the most poisonous of them all.” She didn’t respond to requests for comment from Reuters.At his November symposium, MacKinnon didn’t encounter the blowback from clinicians that he had expected. In fact, he accepted an invitation from one to speak about detransition at her medical practice.Alleva, who had criticized MacKinnon’s earlier study, was also there, one of the scores of detransitioners MacKinnon and his colleagues have talked to. She medically transitioned 12 years ago and then detransitioned in 2020 after a mastectomy, a hysterectomy and years of testosterone. She had refused to participate in his research because she didn’t trust MacKinnon, but over the summer, they began talking.“He reminded me of my old trans friends who I don’t speak with anymore,” Alleva said. “He actually listened to me.”Edited by Michele Gershberg and John Blanton.Our Standards: The Thomson Reuters Trust Principles.\n", + "http://reuters.com/article/idUSL8N2YT2PB\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL8N2YT2PB\n", + "TITLE: Science offers basis for national climate damage claims -study\n", + "BODY:\n", + "\n", + "http://reuters.com/article/idUSKBN2ON108\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSKBN2ON108\n", + "TITLE: Science offers basis for national climate damage claims -study\n", + "BODY:\n", + "\n", + "http://reuters.com/article/idUSKBN2P20SJ\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSKBN2P20SJ\n", + "TITLE: Exclusive: Cassava Sciences faces U.S. criminal probe tied to Alzheimer's drug, sources say\n", + "BODY:\n", + "\n", + "http://reuters.com/article/idUSL1N2ZN2GC\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL1N2ZN2GC\n", + "TITLE: Long COVID risk up for unvaccinated children; at-home antibody test shows promise\n", + "BODY:\n", + "\n", + "http://reuters.com/article/idUSL1N2Z61E5\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL1N2Z61E5\n", + "TITLE: Exclusive: Cassava Sciences faces U.S. criminal probe tied to Alzheimer's drug, sources say\n", + "BODY:\n", + "\n", + "http://reuters.com/article/idUSL1N2ZE21A\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL1N2ZE21A\n", + "TITLE: Omicron better at invading young noses than other variants; smell loss may predict memory issues\n", + "BODY:\n", + "\n", + "http://reuters.com/article/idUSL1N2Z71GW\n", + "New article found for topic: data%20science\n", + "URL: http://reuters.com/article/idUSL1N2Z71GW\n", + "TITLE: Experimental chewing gum reduces Omicron in saliva; sexual dysfunction, hair loss among long COVID symptoms\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/search/?s=python\n", + "https://www.brookings.edu/blog/up-front/2022/03/17/housing-finance-reform-the-path-forward-gets-rolling/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/blog/up-front/2022/03/17/housing-finance-reform-the-path-forward-gets-rolling/\n", + "TITLE: Housing finance reform: The path forward gets rolling\n", + "Housing finance reform: The path forward gets rolling\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/blog/techtank/2023/02/07/building-guardrails-for-chatgpt/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/blog/techtank/2023/02/07/building-guardrails-for-chatgpt/\n", + "TITLE: Building guardrails for ChatGPT\n", + "Building guardrails for ChatGPT\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/how-open-source-software-shapes-ai-policy/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/research/how-open-source-software-shapes-ai-policy/\n", + "TITLE: How open-source software shapes AI policy\n", + "How open-source software shapes AI policy\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/techstream/how-generative-ai-impacts-democratic-engagement/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/techstream/how-generative-ai-impacts-democratic-engagement/\n", + "TITLE: How generative AI impacts democratic engagement\n", + "BODY:\n", + "\n", + "The exterior of the U.S. Capitol is seen at sunset on January 22, 2020. (REUTERS/Sarah Silbiger)\n", + "\n", + "\n", + "Within two months of its launch last fall, the popular chatbot ChatGPT had reached an estimated 100 million monthly users—making it the fastest growing consumer application in history. Now that its parent company OpenAI has released a new version of the chatbot’s underlying language model, anyone with access to the app will soon be able not only to write poetry and practice journalism, but even ace the LSAT and GRE. Like most leading-edge language applications today, ChatGPT relies on a machine learning algorithm known as a transformer to generate probability distributions over words and then recognize, translate, predict, or generate text. The quality of that text is often deeply impressive—so much so that even relatively restrained tech publications have concluded ChatGPT may be “coming for your job.”\n", + "\n", + "\n", + "Yet large language models may disrupt far more than just the economy. They also appear poised to challenge democracy too. At issue is not just the risk of automated misinformation campaigns, but the threat to traditional forms of democratic engagement. Democracy depends in part on how responsive those who govern are to the preferences of the governed: from public comments on proposed agency rules (“submit your comments and let your voice be heard,” exhorts regulations.gov) to legislators’ refashioned electronic mail boxes, citizens have long offered feedback to policymakers via the written word. By making it trivial to produce large quantities of credible text, language models threaten to weaken the signal those words provide. As the New Yorker recently observed, ChatGPT “will strain a political system in peril.”\n", + "\n", + "\n", + "The threat is far from an idle one. In 2017, the Federal Communications Commission (FCC) invited public commentary regarding its proposed changes to net neutrality regulations. An orchestrated astroturf campaign opposed to net neutrality soon flooded the comment line, generating more than 8 million comments, while a single college student in favor of net neutrality used an automated script to generate seven million comments of his own. The government foiled the attempt only because of the inadequacy of the technology: since only 6% of the 21.7 million comments were unique and seven comments alone accounted for 38% of all submissions, the manipulation was easy to detect. By contrast, language models capable of automating unique submissions at scale will not be as easy to uncover.\n", + "\n", + "\n", + "To gauge the extent of the problem, we ran an experiment on the impact of language models on the efficacy of congressional correspondence. More specifically, we examined whether language models could distort the legislative agenda by drafting limitless original emails to members of Congress. Using both human writers and GPT-3, OpenAI’s predecessor to the GPT-4 system it announced last week, we randomly sent email to over 7,000 state legislators around the country and then compared response rates. The difference in response rates, which scholars use as a proxy for government responsiveness to constituent concerns, was just 2% overall, with no differences in response rates for three of the policy issues we analyzed. The findings suggest that legislators are potentially susceptible to the misuse of these technologies.\n", + "\n", + "\n", + "Research design and methodology\n", + "\n", + "\n", + "To investigate the possible misuse of language models like ChatGPT, we conducted a field experiment in 2020 using OpenAI’s then-state-of-the-art language model, GPT-3. We selected six policy issues—gun control, reproductive rights, education, health care, policing, and taxes—and asked a number of undergraduate research assistants to write right and left-leaning advocacy letters. We then trained GPT-3 on the student letters and asked GPT-3 to write new letters advancing a right-wing and left-wing position on each issue. For example, here’s the first paragraph of a right-wing gun control letter that one of our research assistants wrote:\n", + "\n", + "\n", + "\n", + "I was recently appalled by an interview on the News with the co-founder of Students for Safer Schools. He insisted that it was a natural consequence of our current gun control laws to allow active shooters to commit mass murder in schools. I am writing this letter in order to implore you to oppose any bill to ban or curtail the rights of gun owners in America.\n", + "\n", + "\n", + "\n", + "I was recently appalled by an interview on the News with the co-founder of Students for Safer Schools. He insisted that it was a natural consequence of our current gun control laws to allow active shooters to commit mass murder in schools. I am writing this letter in order to implore you to oppose any bill to ban or curtail the rights of gun owners in America.\n", + "\n", + "\n", + "Based on this student sample, we asked GPT-3 to “write a right-wing letter on gun control.”  Here’s the first paragraph of the AI-written letter:\n", + "\n", + "\n", + "\n", + "I hope this letter finds you well. I would first like to thank you for the job you’ve done in representing us in this time of national turmoil. The pandemic and social unrest sweeping the nation right now have made life difficult for all, and many citizens, myself included, fear that our Second Amendment right to firearm ownership may become more and more of a necessity in daily life.\n", + "\n", + "\n", + "\n", + "I hope this letter finds you well. I would first like to thank you for the job you’ve done in representing us in this time of national turmoil. The pandemic and social unrest sweeping the nation right now have made life difficult for all, and many citizens, myself included, fear that our Second Amendment right to firearm ownership may become more and more of a necessity in daily life.\n", + "\n", + "\n", + "Next, we created a program on Python to alternately send either human or AI-written emails to roughly 7,200 state legislators. All told, we sent a total of 32,398 emails or approximately 5 per legislator.\n", + "\n", + "\n", + "We then compared response rates to human and AI-generated emails as a measure of how credible each type of email was. Given the competing demands on a legislator’s time, the decision to answer a constituent letter implies a calculus about the importance of responsiveness to that individual or issue. Previous studies seeking to understand whether legislators discriminate on the basis of constituent race or ethnicity have sent emails from Hispanic, Black, or Muslim aliases and looked for differential response rates as evidence of discrimination. In our case, we judged that a busy legislator would not respond to a message that was clearly robotic or nonsensical, but rather would reply preferentially to real constituents.\n", + "\n", + "\n", + "Our analysis suggested that legislators found the AI-generated text almost as credible as the human-written messages. On two issues – gun control and health policy – we found virtually identical response rates for human versus machine emails (See Figure 1). And on a third, education policy, we observed a higher response rate for the machine-generated emails, though the difference is not statistically significant. This suggests that on these issues GPT-3 succeeded in producing content that was almost indistinguishable in the eyes of state legislative offices from human content. By contrast, legislators were less responsive to machine-generated communications on three issues: policing; reproductive rights; and taxes. However, even on these issues legislators responded to GPT-3-generated emails at rates only 4% lower than to hand-written emails.\n", + "\n", + "\n", + "Figure 1: Differential Response Rates (GPT-3 – Human Emails) by Policy Area\n", + "\n", + "\n", + "Note: I-bars present 95% confidence intervals around each difference in means.\n", + "\n", + "\n", + "While our findings suggest legislators routinely failed to distinguish real from AI-manufactured communications, follow-up exchanges with legislators surfaced some helpful tips for guarding against manipulation. Even the best language models can produce bland, generic, or sometimes factually inaccurate content, or can “hallucinate” and become repetitive. For example, one email started, “My name is Rebecca Johnson, and I am a single father raising a daughter.” This raised a red flag for at least one legislator in our sample. Further, the machine sometimes struggled to write ideologically consistent letters, particularly from a right-wing perspective on the issue of gun control. For instance, one AI-generated letter began, “I am a rifle owner and hunter”—but then suggested that the author took a turn and argued that owning a firearm was a constitutional right.\n", + "\n", + "\n", + "Even if these inconsistencies occur in a small fraction of the outputs, avoiding them requires a human-in-the-loop that is at odds with a nefarious actor’s goal of automating malice. The same antidote to these low-quality outputs also undermines the potential misuse of these tools. Of course, as the technology improves—such as through reinforcement learning from human feedback, or RLHF—those types of outputs will become less prevalent. Nevertheless, for now legislators or staffers should look for these hallmarks—or even better, the absence of telltale residency markers like specifics about the district or state.\n", + "\n", + "\n", + "Policy implications of generative AI\n", + "\n", + "\n", + "What then is a legislator to do?  Mail has always been an important way that politicians from local representatives to presidents have kept tabs on public opinion. Even in an era of ubiquitous polling, many have viewed mail as informative of the concerned public on a given issue—the effort it takes to compose a letter or note has historically served as a strong signal of the salience of a given issue or policy proposal, particularly when multiple constituents touch on the same points. However, language models threaten to weaken that signal. As malicious actors leverage them in a bid to influence the behavior of policymakers and regulators, elected and non-elected officials alike will have strong incentives to be skeptical of the information they can glean about public preferences from both constituent feedback and correspondence.\n", + "\n", + "\n", + "Fortunately, legislators have other means of keeping their finger on the pulse of public opinion. With enough resources, they can obtain district polling data on key issues; alternately, they can hold more frequent and more targeted town meetings to get a direct earful from those most animated about an issue. As the capacity for astroturfing increases, legislators may have to rely more heavily on these other sources of information about constituency preferences—and discount the sheer volume of text that they previously took as a signal of public attitudes.\n", + "\n", + "\n", + "In addition, regulators and legislators may also soon be able to more readily detect auto-generated text. For one, the same algorithms underlying models like GPT-3 can also be adapted to identify machine-generated text; researchers have shown that the accuracy of machine-based detection of generated text can reach accuracy rates of close to 90%. For another, OpenAI, Anthropic, and other labs responsible for leading-edge language models are all now experimenting with statistically watermarking the text they produce. As consensus standards and tools around watermarking emerge, legislators and regulators may be able to filter their correspondence through software that identifies auto-generated content. Finally, as language models improve, agency and congressional staff will need to rely on greater digital literacy to understand the risks they pose.\n", + "\n", + "\n", + "Recent election cycles have made it clear that malicious actors are both willing and able to leverage digital applications to subvert American democracy. With the advent of powerful new language models, those actors now have a potent new weapon in their arsenal. Lawmakers and regulators will need to work proactively to guard against the risks they introduce.\n", + "\n", + "\n", + "Sarah Kreps is a Non-Resident Senior Fellow in the Brookings Foreign Policy Program and the Brookings Artificial Intelligence and Emerging Technology Initiative, as well as the Director of the Tech Policy Institute at Cornell University.\n", + "\n", + "\n", + "Douglas Kriner is the Clinton Rossiter Professor in American Institutions and faculty director of the Institute of Politics and Global Affairs at Cornell University.\n", + "\n", + "\n", + "Microsoft, a major partner and investor in OpenAI, provides financial support to the Brookings Institution. The findings, interpretations, and conclusions posted in this piece are solely those of the authors and are not influenced by any donation.\n", + "\n", + "https://www.brookings.edu/techstream/lessons-from-the-meme-war-in-ukraine/\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: python\n", + "URL: https://www.brookings.edu/techstream/lessons-from-the-meme-war-in-ukraine/\n", + "TITLE: Lessons from the meme war in Ukraine\n", + "BODY:\n", + "\n", + "Illustration of a mini replica of tanks and soldiers, seen in front of the Ukrainian flag in Krakow, Poland. (Photo by Artur Widak/NurPhoto)\n", + "\n", + "\n", + "In 1927, the political scientist Harold Lasswell wrote about political propaganda as “the management of collective attitudes by the manipulation of significant symbols.” Underlying Lasswell’s work were two sets of insights. One is that the mass public played a key role in political outcomes, such as success and failure in war. Second, that those public attitudes could also be manipulated. Scaling to the mass-level, however, required simplicity. This included the use of symbols and slogans that were memorable, such that they could frame “pictures”—or, cognitive shortcuts—that the public recalled when engaging elected officials to shape certain policies.\n", + "\n", + "\n", + "Nowhere has the use of propaganda been more ubiquitous than in war, especially because acquiescence or resistance is based on public sentiment and behavior. In World War II, Hollywood produced films that “created a communal viewing experience unlike any during World War I” intended to maintain resolve for the war. These films capitalized on the public’s predisposition to understand social life in terms of in- and out-groups, which shapes how people often interpret foreign policies, including the use of force.\n", + "\n", + "\n", + "In contemporary conflict, those symbols have increasingly taken the form of memes, defined as a “piece of media that is repurposed to deliver a cultural, social, or political expression, mainly through humor.” Online users have attempted to counter the Islamic State by creating memes satirizing the group’s barbarism, especially on specific “Troll ISIS Days.” Lebanese Internet-users have ruthlessly mocked Hezbollah’s leader, Hassan Nasrallah, with memes.\n", + "\n", + "\n", + "Memes have also been a staple of the war in Ukraine, providing a valuable window into key questions about how actors use memes for political purposes in war. Who is the audience, what is the message, and what events drive the production of these memes?\n", + "\n", + "\n", + "To explore these and related questions, we compiled an original dataset of memes posted by Ukrainians throughout the war. The memes were all taken from Reddit, a popular social media website that allows users to comment in discussion forums based on shared interests. Overall, our analysis of Ukrainians’ use of memes points to several findings that shed new light on how other countries may use memes during conflict. First, memes are not used in isolation from a particular military operation on the battlefield, such as an offensive or counter-offensive. Rather, they are concurrent and complementary to these military efforts, suggesting that they are meant to play a supporting role. Second, memes do not seem intended to directly influence diplomacy, but may further diplomatic efforts indirectly by bolstering popular support for the war. Third, memes target a diverse array of audiences, including Ukrainian citizens, expatriate audiences abroad, and Russians, especially soldiers’ families. This suggests that those creating and posting memes assume that success is a function of both domestic resolve as well as foreign material support.\n", + "\n", + "\n", + "Our empirical approach: Data, method, and descriptive trends\n", + "\n", + "\n", + "We analyzed Ukraine-related memes generated between the beginning of the war on February 24, 2022, and January 14, 2023. Although the Internet is rife with memes, we focused on Reddit, using the PRAW library in Python, which uses Reddit’s Application Programming Interface to request data from the website. To optimize the library, we used it against a handful of subreddits, which limited our scraping to three subreddits used almost exclusively by Ukrainians: (1) /r/ukrmemes, (2) /r/UkraineMem, and (3) /r/ukraine22memes. This approach yielded 1,365 visual memes, along with metadata for each meme, including its title, author’s screen name, date and time of dissemination, and popularity. The latter is a score that Reddit publishes with every post to help users gauge how much attention it is getting, and is the difference between the number of “upvotes” and “downvotes” a post receives. A greater number of upvotes, therefore, indicates the post is more popular with Reddit users. Finally, we also randomly sampled from our data to confirm that our machine-coding process was reliable.1 \n", + "\n", + "\n", + "The graph below illustrates how the Ukrainian meme war has evolved over time. By plotting meme frequency and popularity against The New York Times’ key monthly developments in the war, we are able to show how the intensity and public uptake of memes correlates with political and military milestones throughout the war.\n", + "\n", + "\n", + "This figure, made from data provided by Reddit, reflects the meme score (left y-axis) and frequency (right y-axis) from February 24, 2022, to January 14, 2023. For ease of interpretation, we put dates in a day/month/year format (click to expand).\n", + "\n", + "\n", + "The graph above reveals several patterns. First, the use of memes surged during Russia’s invasion of Ukraine and has steadily declined throughout the war. This trend suggests that the meme campaign is likely more informal or crowd-sourced than centralized among Ukrainian officials and leaders. If this were a coordinated, top-down effort, we would expect to see more continuity over time, especially in terms of frequency. As a bottom-up effort, the declines point to the possibility of war fatigue among the population.\n", + "\n", + "\n", + "Second, the frequency and popularity of memes correspond to major ebbs and flows in the Ukraine war, with spikes that clearly relate to major offensives and battles. More specifically, memes seem to play a supporting role designed to amplify tactical effects on the battlefield rather than precede them as a separate form of psychological operations. This finding is in line with what U.S. Army General Christopher Cavoli, the Supreme Allied Commander-Europe, observed at a recent security forum in Sweden: “hard power is a reality.” In short, memes are meant not to replace hard power on the battlefield but instead to provide a psychological dividend to the successful application of hard power.\n", + "\n", + "\n", + "Third, even as memes mirror major milestones in the war, they do not seem to correspond closely with important diplomatic and political events. Among these include the announcement on May 18, 2022, that Sweden and Finland submitted accession documents to join the North Atlantic Treaty Organization, as well as Ukrainian President Volodymyr Zelenskyy’s visit to the White House in late December 2022. This may suggest that memes are hitched to some immediately observable effects, which are typically more pronounced on the battlefield rather than diplomacy, considering negotiations often occur over a longer time horizon.\n", + "\n", + "\n", + "A typology of memes\n", + "\n", + "\n", + "Given the visually evocative nature of an image, fully understanding the role played by memes in the Ukrainian conflict requires more than just empirical analysis. Examining a subset of specific memes tells a more complete story of what some analysts have referred to as “memetic warfare,” or the use of memes to control the narrative. Accordingly, we randomly selected a handful of memes that piece together a story about messages and audiences. \n", + "\n", + "\n", + "Our analysis suggests that a rich typology of memes has emerged during the war. For instance, expatriates in places like the United States often generate memes to establish a sense of solidarity and support abroad. The meme below illustrates this purpose while capitalizing on a clear reference to the popular U.S. television show, “The Office.”  Published on December 14, 2022, the Ukrainian is translated as “Glory to Ukraine!” suggesting a pro-Ukrainian sentiment. Such sentiment may be important to sustain public support for the war, especially in the United States where Congress passed the “Ukraine Democracy Defense Lend-Lease Act of 2022” on May 9. Following the precedent of World War II, this act facilitates the transfer of arms and equipment to the Ukrainian government to enable its military operations against Russia.\n", + "\n", + "\n", + "\n", + " I live in DC, so this was from a while ago when I went for a walk around the national mall. The couple were going to a small solidarity demonstration outside the White House from ukrainememes \n", + "\n", + "\n", + "\n", + "Memes can also serve as a commentary on a military operation. The meme below shows a Russian billboard that reads “Kherson—Forever Russia.” The bottom panel then mocks this claim with a SpongeBob SquarePants cartoon, suggesting that Ukrainians believe Russia’s attempt to occupy Kherson is as ridiculous as a childrens’ cartoon. This meme was posted on November 9, 2022, just as the Ukrainians were in the process of recapturing Kherson, which culminated several days later.\n", + "\n", + "\n", + "\n", + " „Kherson, forever Russia!“ from ukrainememes \n", + "\n", + "\n", + "\n", + "Similarly, the meme below is from April 20, 2022, days after the Ukrainians had used a drone to sink the Russian warship Moskva, the flagship ship of the Russian Navy’s Black Sea Fleet. It portrays a tough-looking Putin on a ship at the bottom of the sea. The artist appears to be Hajo de Reijger, a freelance illustrator who writes for Dutch newspapers and is based in Amsterdam, but the meme clearly has universal accessibility in highlighting how damaging the sinking of the Moskva was to Russian President Vladimir Putin’s image as a competent military leader.\n", + "\n", + "\n", + "\n", + " Battleship Moskva – Amsterdam (Netherlands), Hajo de Reijger (20/4/2022) from UkrainianMemes \n", + "\n", + "\n", + "\n", + "Lastly, some memes are in both Ukrainian and English, suggesting they are designed to shape the attitudes of domestic and international audiences. The following meme, also posted on June 11, 2022, carries the following title: “Putin lacks imagination—У Путина нет воображения.” This statement highlights Putin’s targeting of civilians during the war, contrasting this immoral and illegal use of force with other countries’ investment in children, a message that could be intended for an audience in Russia, for example soldiers’ parents.\n", + "\n", + "\n", + "\n", + " Putin lacks imagination -У Путина нет воображения from memes \n", + "\n", + "\n", + "\n", + "The implications\n", + "\n", + "\n", + "What insights can we draw from this early analysis of memes in Ukraine? In a sense, the most powerful argument that can be made in defense of memes is theoretical. Countries have always relied on psychological operations conducted through visual expression. They do so because they think that the visual medium is effective for persuasion. In a domestic context, the supporters of political candidates place yard signs around communities because they think people can be persuaded by these visual insinuations, and research suggests that those resources are not wasted. These signs influence vote shares.\n", + "\n", + "\n", + "Our initial investigation suggests that memes can play a similar role. They offer a simple and digestible way to communicate with supporters, both at home and abroad. Propping up support among citizens is important, if not integral, to the war effort in Ukraine. Ukrainians are at the literal tip of the spear; if they do not resist, the country will fail. The psychological persuasion and support of expatriates is also crucial because they live in countries that materially support the Ukrainian military.\n", + "\n", + "\n", + "Though our research reflects a mix of memes intended to connect with these audiences, we also find that memes, at least in Ukraine, also play a supporting role to combat operations. As we show, the frequency and popularity of memes track closely with key military milestones in the war and mostly function informally as a way to highlight battlefield successes. To best capitalize on the psychological dividends that memes promise, however, officials should better integrate them into their overall wartime strategies, perhaps through a “Meme Warfare Center,” as recommended by other analysts. The relative decline of memes throughout the Ukrainian war raises another set of questions. Why, if their messages have such powerful potential, have memes declined over time? Do memes operate in a similar fashion as the news cycle where internet-users simply move on to the next viral social issue after a matter of time? Have meme creators concluded that the images are not effective? Has another form of online persuasion, if any, taken their place? Does the use of different social media platforms, including Facebook, LinkedIn, Telegram, and Twitter, shape the frequency and popularity of memes, as well as the anticipated effects? Scholars should study these and related questions to better understand if—and how—memes can play a role in the psychology, and perhaps even outcomes, of war.\n", + "\n", + "\n", + "Sarah Kreps is the John L. Wetherill Professor of Government at Cornell University and the director of the Cornell Brooks School Tech Policy Institute.\n", + "\n", + "\n", + "Paul Lushenko is a lieutenant colonel in the U.S. Army and deputy director of the Cornell Brooks School Tech Policy Institute.\n", + "\n", + "\n", + "Keith Carter is a lieutenant colonel in the U.S. Army and director of the defense and strategic studies program at the United States Military Academy.\n", + "\n", + "\n", + "Acknowledgments: The authors would like to thank Alexey Elkin for excellent research assistance, as well as Matthew Evangelista, Bryn Rosenfeld, Aleksandar Vladicic, and an anonymous reviewer for feedback on this research.\n", + "\n", + "\n", + "The views expressed in this article are those of the authors and do not necessarily reflect the official policy or position of the United States Department of the Army, Department of Defense, or Government.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Note 1. We manually reviewed a cross-section of the memes to check the accuracy of our scraping technique. Specifically, we built an algorithm to randomly select a percentage of memes from our database. This process resulted in a subset of 34 memes—approximately 3% of our database—from which we ensured they were, in fact, memes. Our hand-coding recorded an 85% fidelity rate on the machine-coding, suggesting that the volume of memes may be somewhat lower than the overall number of hits we gathered but we have no reason to think that this affects the broader patterns we observe.\n", + "\n", + "https://www.brookings.edu/research/preventing-pandemics-through-biodiversity-conservation-and-smart-wildlife-trade-regulation/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/research/preventing-pandemics-through-biodiversity-conservation-and-smart-wildlife-trade-regulation/\n", + "TITLE: Preventing pandemics through biodiversity conservation and smart wildlife trade regulation\n", + "Preventing pandemics through biodiversity conservation and smart wildlife trade regulation\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/blog/techtank/2017/11/16/leveraging-the-disruptive-power-of-artificial-intelligence-for-fairer-opportunities/\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: python\n", + "URL: https://www.brookings.edu/blog/techtank/2017/11/16/leveraging-the-disruptive-power-of-artificial-intelligence-for-fairer-opportunities/\n", + "TITLE: Leveraging the disruptive power of artificial intelligence for fairer opportunities\n", + "Leveraging the disruptive power of artificial intelligence for fairer opportunities\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/blog/up-front/2015/12/21/the-hutchins-center-explains-budgeting-for-aging-america/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/blog/up-front/2015/12/21/the-hutchins-center-explains-budgeting-for-aging-america/\n", + "TITLE: The Hutchins Center Explains: Budgeting for aging America\n", + "The Hutchins Center Explains: Budgeting for aging America\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/an-atlanta-organizations-mission-to-bring-racial-equity-to-the-tech-ecosystem/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/research/an-atlanta-organizations-mission-to-bring-racial-equity-to-the-tech-ecosystem/\n", + "TITLE: An Atlanta organization’s mission to bring racial equity to the tech ecosystem\n", + "An Atlanta organization’s mission to bring racial equity to the tech ecosystem\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/blog/the-avenue/2014/08/06/the-silicon-valley-wage-premium/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/blog/the-avenue/2014/08/06/the-silicon-valley-wage-premium/\n", + "TITLE: The Silicon Valley Wage Premium\n", + "The Silicon Valley Wage Premium\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/blog/techtank/2016/03/01/idea-to-retire-old-methods-of-policy-education/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/blog/techtank/2016/03/01/idea-to-retire-old-methods-of-policy-education/\n", + "TITLE: Idea to Retire: Old methods of policy education\n", + "Idea to Retire: Old methods of policy education\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/institutionalizing-data-analysis-in-german-federal-governance/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/research/institutionalizing-data-analysis-in-german-federal-governance/\n", + "TITLE: Institutionalizing Data Analysis in German Federal Governance\n", + "Institutionalizing Data Analysis in German Federal Governance\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/opinions/skills-success-and-why-your-choice-of-college-matters/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/opinions/skills-success-and-why-your-choice-of-college-matters/\n", + "TITLE: Skills, success, and why your choice of college matters\n", + "Skills, success, and why your choice of college matters\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/making-waves-in-india-media-and-the-covid-19-pandemic/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/research/making-waves-in-india-media-and-the-covid-19-pandemic/\n", + "TITLE: Making waves in India: Media and the COVID-19 pandemic\n", + "Making waves in India: Media and the COVID-19 pandemic\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/essay/building-skills-for-life-how-to-expand-and-improve-computer-science-education-around-the-world/\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/essay/building-skills-for-life-how-to-expand-and-improve-computer-science-education-around-the-world/\n", + "TITLE: \n", + "\t\t\t\tBUILDING SKILLS FOR LIFE\t\t\t\n", + "BODY:\n", + "\n", + "This report makes the case for expanding computer science education in primary and secondary schools around the world, and outlines the key challenges standing in the way. Through analysis of regional and national education systems at various stages of progress in implementing computer science education programs, the report offers transferable lessons learned across a wide range of settings with the aim that all students—regardless of income level, race, or sex—can one day build foundational skills necessary for thriving in the 21st century.\n", + "\n", + "\n", + "Download the full report\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Introduction\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Access to education has expanded around the world since the late 1990s through the combined efforts of governments, bilateral and multilateral agencies, donors, civil society, and the private sector, yet education quality has not kept pace. Even before the COVID-19 pandemic led to school closures around the world, all young people were not developing the broad suite of skills they need to thrive in work, life, and citizenship (Filmer, Langthaler, Stehrer, & Vogel, 2018).\n", + "\n", + "\n", + "The impact of the pandemic on education investment, student learning, and longer-term economic outcomes threatens not only to dial back progress to date in addressing this learning crisis in skills development but also to further widen learning gaps within and between countries. Beyond the immediate and disparate impacts of COVID-19 on students’ access to quality learning, the global economic crisis it has precipitated will shrink government budgets, potentially resulting in lower education investment and impacting the ability to provide quality education (Vegas, 2020). There is also a concern that as governments struggle to reopen schools and/or provide sufficient distance-learning opportunities, many education systems will focus on foundational skills, such as literacy and numeracy, neglecting a broader set of skills needed to thrive in a rapidly changing, technologically-advanced world.\n", + "\n", + "\n", + "Among these broader skills, knowledge of computer science (CS) is increasingly relevant. CS is defined as “the study of computers and algorithmic processes, including their principles, their hardware and software designs, their [implementation], and their impact on society” (Tucker, 2003).1 CS skills enable individuals to understand how technology works, and how best to harness its potential to improve lives. The goal of CS education is to develop computational thinking skills, which refer to the “thought processes involved in expressing solutions as computational steps or algorithms that can be carried out by a computer” (K-12 Computer Science Framework Steering Committee, 2016). CS education is also distinct from computer or digital literacy, in that it is more concerned with computer design than with computer use. For example, coding is a skill one would learn in a CS course, while creating a document or slideshow presentation using an existing program is a skill one would learn in a computer or digital literacy course.\n", + "\n", + "\n", + "Research has shown that students benefit from CS education by increasing college enrollment rates and developing problem-solving abilities (Brown & Brown, 2020; Salehi et al., 2020). Research has also shown that lessons in computational thinking improve student response inhibition, planning, and coding skills (Arfé et al., 2020). Importantly, CS skills pay off in the labor market through higher likelihood of employment and better wages (Hanson & Slaughter, 2016; Nager & Atkinson, 2016). As these skills take preeminence in the rapidly changing 21st century, CS education promises to significantly enhance student preparedness for the future of work and active citizenship.\n", + "\n", + "\n", + "The benefits of CS education extend beyond economic motivations. Given the increasing integration of technology into many aspects of daily life in the 21st century, a functional knowledge of how computers work—beyond the simple use of applications—will help all students.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Why expand CS education?\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "By this point, many countries have begun making progress toward offering CS education more universally for their students. The specific reasons for offering it will be as varied as the countries themselves, though economic arguments often top the list of motivations. Other considerations beyond economics, however, are also relevant, and we account for the most common of these varied motives here.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The economic argument\n", + "\n", + "\n", + "At the macroeconomic level, previous research has suggested that countries with more workers with ICT (information, communications, and technology) skills will have higher economic growth through increases in productivity (Maryska, Doucek, & Kunstova, 2012; Jorgenson & Vu, 2016). Recent global data indicate that there is a positive relationship between the share of a country’s workforce with ICT skills and its economic growth. For example, using data from the Organisation for Economic Cooperation and Development (OECD), we find that countries with a higher share of graduates from an ICT field tend to have higher rates of per capita GDP (Figure 1). The strength of the estimated relationship here is noteworthy: A one percentage point increase in the share of ICT graduates correlates with nearly a quarter percentage point increase in recent economic growth, though we cannot determine the causal nature of this relationship (if any). Nonetheless, this figure supports the common view that economic growth follows from greater levels of investment in technological education.\n", + "\n", + "\n", + "FIGURE 1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "At the microeconomic level, CS skills pay off for individuals—both for those who later choose to specialize in CS and those who do not. Focusing first on the majority of students who pursue careers outside of CS, foundational training in CS is still beneficial. Technology is becoming more heavily integrated across many industrial endeavors and academic disciplines—not just those typically included under the umbrella of science, technology, engineering, and mathematics (STEM) occupations. Careers from law to manufacturing to retail to health sciences all use computing and data more intensively now than in decades past (Lemieux, 2014). For example, using data from Germany, researchers showed that higher education programs in CS compared favorably against many other fields of study, producing a relatively high return on investment for lower risk (Glocker and Storck, 2014). Notably, completing advanced training in CS is not necessary to attain these benefits; rather, even short introductions to foundational skills in CS can increase young students’ executive functions (Arfe et al., 2020). Further, those with CS training develop better problem-solving abilities compared to those with more general training in math and sciences, suggesting that CS education offers unique skills not readily developed in other more common subjects (Salehi et al., 2020).\n", + "\n", + "\n", + "For those who choose to pursue advanced CS studies, specializing in CS pays off both in employment opportunities and earnings. For example, data from the U.S. show workers with CS skills are less likely to be unemployed than workers in other occupations (Figure 2). Moreover, the average earnings for workers with CS skills are higher than for workers in other occupations (Figure 3). These results are consistent across multiple studies using U.S. data (Carnevale et al., 2013; Altonji et al., 2012) and international data (Belfield et al., 2019; Hastings et al., 2013; Kirkeboen et al., 2016). Further, the U.S. Bureau of Labor Statistics has projected that the market for CS professionals will continue to grow at twice the speed of the rest of the labor market between 2014 and 2024 (National Academies of Sciences, 2018).\n", + "\n", + "\n", + "FIGURE 2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "FIGURE 3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "A common, though inaccurate, perception about the CS field is that anybody with a passion for technology can succeed without formal training. There is a nugget of truth in this view, as many leaders of major technology companies including Bill Gates, Elon Musk, Mark Zuckerberg, and many others have famously risen to the top of the field despite not having bachelor’s degrees in CS. Yet, it is a fallacy to assume that these outliers are representative of most who are successful in the field. This misconception could lead observers to conclude that investments in universal CS education are, at best, ineffective: providing skills to people who would learn them on their own regardless, and spending resources on developing skills in people who will not use them. However, such conclusions are not supported by empirical evidence. Rather, across STEM disciplines, including CS, higher levels of training and educational attainment lead to stronger employment outcomes, on average, than those with lesser levels of training in the same fields (Altonji et al., 2016; Altonji and Zhong, 2021).\n", + "\n", + "\n", + "The inequality argument\n", + "\n", + "\n", + "Technology—and particularly unequal access to its benefits—has been a key driver of social and economic inequality within countries. That is, those with elite social status or higher wealth have historically gotten access to technology first for their private advantages, which tends to reinforce preexisting social and economic inequalities. Conversely, providing universal access to CS education and computing technologies can enable those with lower access to technological resources the opportunity to catch up and, consequently, mitigate these inequalities. Empirical studies have shown how technological skills or occupations, in particular, have reduced inequalities between groups or accelerated the assimilation of immigrants (Hanson and Slaughter, 2017; DeVol, 2016).\n", + "\n", + "\n", + "Technology and CS education are likewise frequently considered critical in narrowing income gaps between developed and developing countries. This argument can be particularly compelling for low-income countries, as global development gaps will only be expected to widen if low-income countries’ investments in these domains falter while high-income countries continue to move ahead. Rather, strategic and intensive technological investment is frequently seen as a key strategy for less-developed countries to leapfrog stages of economic development to quickly catch up to more advanced countries (Fong, 2009; Lee, 2019).\n", + "\n", + "\n", + "CS skills enable adaptation in a quickly changing world, and adaptability is critical to progress in society and the economy. Perhaps there is no better illustration of the ability to thrive and adapt than from the COVID-19 pandemic. The pandemic has forced closures of many public spaces across the globe, though those closures’ impacts have been disproportionately felt across workers and sectors. Workers with the skills and abilities to move their job functions online have generally endured the pandemic more comfortably than those without those skills. And even more importantly, the organizations and private companies that had the human capacity to identify how technology could be utilized and applied to their operations could adapt in the face of the pandemic, while those without the resources to pivot their operations have frequently been forced to close in the wake of pandemic-induced restrictions. Thus, the pandemic bestowed comparative benefits on those with access to technology, the skills to use it, and the vision to recognize and implement novel applications quickly, while often punishing those with the least access and resources (OECD, 2021).\n", + "\n", + "\n", + "Failing to invest in technology and CS education may result in constrained global competitiveness, leaving governments less able to support its citizens. We recognize that efforts to expand CS education will demand time and money of public officials and school leaders, often in the face of other worthy competing demands. Though the contemporary costs may even seem prohibitive in some cases, the costs of inaction (while less immediately visible) are also real and meaningful in most contexts.\n", + "\n", + "\n", + "Beyond economics\n", + "\n", + "\n", + "We expect the benefits of CS education to extend beyond economic motivations, as well. Many household activities that were previously performed in real life are now often performed digitally, ranging from banking, shopping, travel planning, and socializing. A functional knowledge of how computers work—beyond the simple use of applications—should benefit all students as they mature into adults given the increasing integration of technology into many aspects of daily life in the 21st century. For example, whether a person wants to find a job or a romantic partner, these activities frequently occur through the use of technology, and understanding how matching algorithms work make for more sophisticated technology users in the future. Familiarity with CS basic principles can provide users more flexibility in the face of constant innovation and make them less vulnerable to digital security threats or predators (Livingstone et al., 2011). Many school systems now provide lessons in online safety for children, and those lessons will presumably be more effective if children have a foundational understanding of how the internet works.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Global advances in expanding CS education\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "To better understand what is needed to expand CS education, we first took stock of the extent to which countries around the world have integrated CS education into primary and secondary schools, and how this varied by region and income level. We also reviewed the existing literature on integrating CS into K-12 education to gain a deeper understanding of the key barriers and challenges to expanding CS education globally. Then, we selected jurisdictions at various stages of progress in implementing CS education programs in from multiple regions of the world and income levels, and drafted in-depth case studies on the origins, key milestones, barriers, and challenges of CS expansion.\n", + "\n", + "\n", + "Progress in expanding CS education across the globe\n", + "\n", + "\n", + "As shown in Figure 4, the extent to which CS education is offered in primary and secondary schools varies across the globe. Countries with mandatory CS education are geographically clustered in Eastern Europe and East Asia. Most states and provinces in the U.S. and Canada offer CS on a school-to-school basis or as an elective course. Multiple countries in Western Europe offer CS education as a cross-curricular topic integrated into other subjects. Latin America and Central and Southeast Asia have the most countries that have announced CS education programs or pilot projects. Countries in Africa and the Middle East have integrated the least amount of CS education into school curricula. Nevertheless, the number of countries piloting programs or adopting CS curricula indicate a global trend of more education systems integrating the subject into their curriculum.\n", + "\n", + "\n", + "FIGURE 4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "As expected, students living in higher-income countries generally have better access to CS education. As Figure 5 shows, 43 percent of high-income countries require students to learn CS education in primary and/or secondary schools. Additionally, high-income countries also offer CS as an elective course to the largest share of the population. A further 35 percent of high-income countries offer CS on a school-to-school basis while not making it mandatory for all schools. Interestingly, upper-middle income countries host the largest share of students (62 percent) who are required to learn CS at any point in primary or secondary schools. Presumably, many upper-middle income countries likely have national economic development strategies focused on expanding tech-related jobs, and thus see the need to expand the labor force with CS skills. By contrast, only 5 percent of lower-middle income countries require CS during primary or secondary school, while 58 percent may offer CS education on a school-to-school basis.\n", + "\n", + "\n", + "FIGURE 5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Key barriers and challenges to expand CS education globally\n", + "\n", + "\n", + "To expand quality CS education, education systems must overcome enormous challenges. Many countries do not have enough teachers who are qualified to teach CS, and even though there is growing interest among students to pursue CS, relatively few students pursue more advanced training like CS testing certifications (Department for Education, 2019) or CS undergraduate majors compared to other STEM fields like engineering or biology (Hendrickson, 2019). This is especially true for girls and underrepresented minorities, who generally have fewer opportunities to develop an interest in CS and STEM more broadly (Code.org & CSTA, 2018). Our review of the literature identified four key challenges to expanding CS education.:\n", + "\n", + "\n", + "1. Providing access to ICT infrastructure to students and educators\n", + "\n", + "\n", + "Student access to ICT infrastructure, including both personal access to computing devices and an internet connection, is critical to a robust CS education. Without this infrastructure, students cannot easily integrate CS skills into their daily lives, and they will have few opportunities to experiment with new approaches on their own.\n", + "\n", + "\n", + "However, some initiatives have succeeded by introducing elements of CS education in settings without adequate ICT infrastructure. For example, many educators use alternative learning strategies like CS Unplugged to teach CS and computational thinking when computers are unavailable (Bell & Vahrenhold, 2018). One study shows that analog lessons can help primary school students develop computational thinking skills (Harris, 2018). Even without laptops or desktop computers, it is still possible for teachers to use digital tools for computational thinking. In South Africa, Professor Jean Greyling of Nelson Mandela University Computing Sciences co-created Tanks, a game that uses puzzle pieces and a mobile application to teach coding to children (Ellis, 2021). This is an especially useful concept, as many households and schools in South Africa and other developing countries have smartphones and access to analog materials but do not have access to personal computers or broadband connectivity (McCrocklin, 2021).\n", + "\n", + "\n", + "Taking a full CS curriculum to scale, however, requires investing in adequate access to ICT infrastructure for educators and students (Lockwood & Cornell, 2013). Indeed, as discussed in Section 3, our analysis of numerous case studies indicates that ICT infrastructure in schools provides a critical foundation to expand CS education.\n", + "\n", + "\n", + "2. Ensuring qualified teachers through teacher preparation and professional development\n", + "\n", + "\n", + "Many education systems encounter shortages of qualified CS teachers, contributing to a major bottleneck in CS expansion. A well-prepared and knowledgeable teacher is the most important component for instruction in commonly taught subjects (Chetty et al. 2014 a,b; Rivkin et al., 2005). We suspect this is no different for CS, though major deficiencies in the necessary CS skills among the teacher workforce are evident. For example, in a survey of preservice elementary school teachers in the United States, only 10 percent responded that they understood the concept of computational thinking (Campbell & Heller, 2019). Until six years ago, 75 percent of teachers in the U.S. incorrectly considered “creating documents or presentations on the computer” as a topic one would learn in a CS course (Google & Gallup, 2015), demonstrating a poor understanding of the distinction between CS and computer literacy. Other case studies, surveys, and interviews have found that teachers in India, Saudi Arabia, the U.K., and Turkey self-report low confidence in their understanding of CS (Ramen et al., 2015; Alfayez & Lambert, 2019; Royal Society, 2017; Gülbahar & Kalelioğlu, 2017). Indeed, developing the necessary skills and confidence levels for teachers to offer effective CS instruction remains challenging.\n", + "\n", + "\n", + "To address these challenges, school systems have introduced continuous professional development (PD), postgraduate certification programs, and CS credentials issued by teacher education degree programs. PD programs are common approaches, as they utilize the existing teacher workforce to fill the needs for special skills, rather than recruiting specialized teachers from outside the school system. For example, the British Computing Society created 10 regional university-based hubs to lead training activities, including lectures and meetings, to facilitate collaboration as part of the network of excellence (Dickens, 2016; Heintz et al., 2016; Royal Society, 2017). Most hubs involve multi-day seminars and workshops meant to familiarize teachers with CS concepts and provide ongoing support to help teachers as they encounter new challenges in the classroom. Cutts et al. (2017) further recommend teacher-led PD groups so that CS teachers can form collaborative professional networks. Various teacher surveys have found these PD programs in CS helpful (Alkaria & Alhassan, 2017; Goode et al., 2014). Still, more evidence is needed on the effectiveness of PD programs in CS education specifically (Hill, 2009).\n", + "\n", + "\n", + "Less commonly, some education systems have worked with teacher training institutions to introduce certification schemes so teachers can signal their unique qualifications in CS to employers. This signal can make teacher recruitment more transparent and incentivize more teachers to pursue training. This approach does require, though, an investment in developing CS education faculty at the teacher training institution, which may be a critical bottleneck in many places (Delyser et al., 2018). Advocates of the approach have recommended that school systems initiate certification schemes quickly and with a low bar at first, followed by improvement over time (Code.org, 2017; Lang et al., 2013; Sentance & Csizmadia, 2017). Short-term recommendations include giving temporary licenses to teachers who meet minimum content and knowledge requirements. Long-term recommendations, on the other hand, encourage preservice teachers to take CS courses as part of their teaching degree programs or in-service teachers to take CS courses as part of their graduate studies to augment their skillset.2 Upon completing these courses, teachers would earn a full CS endorsement or certificate.\n", + "\n", + "\n", + "3. Fostering student engagement and interest in CS education\n", + "\n", + "\n", + "Surveys from various countries suggest that despite a clear economic incentive, relatively few K-12 students express interest in pursuing advanced CS education. For example, 3 out of 4 U.S. students in a recent survey declared no interest in pursuing a career in computer science. And the differences by gender are notable: Nearly three times as many male students (33 percent) compared to female students (12 percent) expressed interest in pursuing a computer science career in the future (Google & Gallup, 2020).\n", + "\n", + "\n", + "Generally, parents view CS education favorably but also hold distinct misconceptions. For instance, more than 80 percent of U.S. parents surveyed in a Google and Gallup (2016) study reported that they think CS is as important as any other discipline. Nevertheless, the same parents indicated biases around who should take CS courses: 57 percent of parents think that one needs to be “very smart” to learn CS (Google & Gallup, 2015). Researchers have equated this kind of thinking to the idea that some people could be inherently gifted or inept at CS, a belief that could discourage some students from developing an interest or talent in CS (McCartney, 2017). Contrary to this belief, Patitsas et al. (2019) found that only 5.8 percent of university-level exam distributions were multimodal, indicating that most classes did not have a measurable divide between those who were inherently gifted and those who were not. This signals that CS is no more specialized to specific groups of students than any other subject.\n", + "\n", + "\n", + "Fostering student engagement, however, does not equate to developing a generation of programmers. Employment projections suggest the future demand for workers with CS skills will likely outpace supply in the absence of promoting students’ interest in the field. Yet, no countries expand access to CS education with the expectation of turning all students into computer programmers. Forcing students into career paths that are unnatural fits for their interests and skill levels result in worse outcomes for students at the decision margins (Kirkeboen et al., 2016). Rather, current engagement efforts both expose students to foundational skills that help navigate technology in 21st century life and provide opportunities for students to explore technical fields.\n", + "\n", + "\n", + "A lack of diversity in CS education not only excludes some people from accessing high-paying jobs, but it also reduces the number of students who would enter and succeed in the field (Du & Wimmer, 2019). Girls and racial minorities have been historically underrepresented in CS education (Sax et al., 2016). Research indicates that the diversity gap is not due to innate talent differences among demographic groups (Sullivan & Bers, 2012; Cussó-Calabuig et al., 2017), but rather a disparity of access to CS content (Google & Gallup 2016; Code.org & CSTA, 2018; Du & Wimmer, 2019), widely held cultural perceptions, and poor representation of women and underrepresented minorities (URMs) among industry leaders and in media depictions (Google & Gallup, 2015; Ayebi-Arthur, 2011; Downes & Looker, 2011).\n", + "\n", + "\n", + "To help meet the demand for CS professionals, government and philanthropic organizations have implemented programs that familiarize students with CS. By increasing student interest among K-12 students who may eventually pursue CS professions, these strategies have the potential to address the well documented lack of diversity in the tech industry (Harrison, 2019; Ioannou, 2018).For example, some have used short, one-time lessons in coding to reduce student anxiety around CS. Of these lessons, perhaps the best known is Hour of Code, designed by Code.org. In multiple surveys, students indicated more confidence after exposure to this program (Phillips & Brooks, 2017; Doukaki et al., 2013; Lang et al., 2016). It is not clear, however, whether these programs make students more likely to consider semester-long CS courses (Phillips & Brooks, 2017; Lang et al., 2016).\n", + "\n", + "\n", + "Other initiatives create more time-intensive programs for students. The U.S. state of Georgia, for example, implemented a program involving after-school, weekend, and summer workshops over a six-year period. Georgia saw an increase in participation in the Advanced Placement (AP) CS exam during the duration of the program, especially among girls and URMs (Guzdial et al., 2014). Other states have offered similar programs, setting up summer camps and weekend workshops in universities to help high school students become familiar with CS (Best College Reviews, 2021). These initiatives, whether one-off introductions to CS or time-intensive programs, typically share the explicit goal of encouraging participation in CS education among all students, and especially girls and URMs.\n", + "\n", + "\n", + "Yet, while studies indicate that Hour of Code and summer camps might improve student enthusiasm for CS, they do not provide the kind of rigorous impact assessment one would need to make a definitive conclusion of their effectiveness. They do not use a valid control group, meaning that there is no like-for-like comparison to students who are similar except for no exposure to the program. It is not clear that the increase in girls and URMs taking CS would not have happened if it were not for Georgia’s after-school clubs.\n", + "\n", + "\n", + "4. Generating and using evidence on curriculum and core competencies, instructional methods, and assessment\n", + "\n", + "\n", + "There is no one-size-fits-all CS curriculum for all education systems, schools, or classrooms. Regional contexts, school infrastructure, prior access, and exposure to CS need to be considered when developing CS curricula and competencies (Ackovska et al., 2015). Some CS skills, such as programming language, require access to computer infrastructure that may be absent in some contexts (Lockwood & Cornell, 2013). Rather than prescribing a curriculum, the U.S. K-12 Computer Science Framework Steering Committee (2016) recommends foundational CS concepts and competencies for education systems to consider. This framework encourages curriculum developers and educators to create learning experiences that extend beyond the framework to encompass student interests and abilities.\n", + "\n", + "\n", + "There is increasing consensus around what core CS competencies students should master when they complete primary and secondary education. Core competencies that students may learn by the end of primary school include:\n", + "\n", + "\n", + "abstraction—creating a model to solve a problem;generalization—remixing and reusing resources that were previously created;decomposition—breaking a complex task into simpler subtasks;algorithmic thinking—defining a series of steps for a solution, putting instructions in the correct sequence, and formulating mathematical and logical expressions;programming—understanding how to code a solution using the available features and syntax of a programming language or environment; anddebugging—recognizing when instructions do not correspond to actions and then removing or fixing errors (Angeli, 2016).\n", + "\n", + "\n", + "Competencies that secondary school students may learn in CS courses include:\n", + "\n", + "\n", + "logical and abstract thinking;representations of data, including various kinds of data structures;problem-solving by designing and programming algorithms using digital devices;performing calculations and executing programs;collaboration; and,ethics such as privacy and data security (Syslo & Kwiatkowska, 2015).\n", + "\n", + "\n", + "Several studies have described various methods for teaching CS core competencies. Integrated development environments are recommended especially for teaching coding skills (Florez et al., 2017; Saez-Lopez et al., 2016).2 These environments include block-based programming languages that encourage novice programmers to engage with programming, in part by alleviating the burden of syntax on learners (Weintrop & Wilensky, 2017; Repenning, 1993). Others recommended a variety of teaching methods that blend computerized lessons with offline activities (Taub et al. 2009; Curzon et al., 2009, Ackovska et al., 2015). This approach is meant to teach core concepts of computational thinking while keeping students engaged in physical, as well as digital, environments (Nishida et al., 2009). CS Unplugged, for example, provides kinesthetic lesson plans that include games and puzzles that teach core CS concepts like decomposition and algorithmic thinking.\n", + "\n", + "\n", + "Various studies have also attempted to measure traditional lecture-based instruction for CS (Alhassan 2017; Cicek & Taspinar, 2016).3 These studies, however, rely on small sample sizes wherein the experiment and control group each comprised of individual classes. More rigorous research is required to understand the effectiveness of teaching strategies for CS.\n", + "\n", + "\n", + "No consensus has emerged on the best ways to assess student competency in core CS concepts (So et al., 2019; Djambong & Freiman, 2016). Though various approaches to assessment are widely available—including classical cognitive tests, standardized tests in digital environments, and CS Unplugged activity tests—too many countries have yet to introduce regular assessments that may evaluate various curricula or instructional methods in CS. While several assessments have been developed for CS and CT at various grade levels as part of various research studies, there have been challenges to broader use. This is due to either a lack of large-scale studies using these assessments or diversity in programming environments used to teach programming and CS or simply a lack of interest in using objective tests of learning (as opposed to student projects and portfolios).\n", + "\n", + "\n", + "Fortunately, a growing number of organizations are developing standardized tests in CS and computational thinking. For example, the International Computer and Information Literacy Study included examinations in computational thinking in 2018 that had two 25-minute modules, where students were asked to develop a sequence of tasks in a program that related to a unified theme (Fraillon et al., 2020). The OECD’s PISA will also include questions in 2021 to assess computational thinking across countries (Schleicher & Partovi, 2019). The AP CS exam has also yielded useful comparisons that have indirectly evaluated CS teacher PD programs (Brown & Brown, 2019).\n", + "\n", + "\n", + "In summary, the current evidence base provides little consensus on the specific means of scaling a high-quality CS education and leaves wide latitude for experimentation. Consequently, in this report we do not offer prescriptions on how to expand CS education, even while arguing that expanding access to it generally is beneficial for students and the societies that invest in it. Given the current (uneven) distribution of ICT infrastructure and CS education resources, high-quality CS education may be at odds with expanded access. While we focus on ensuring universal access first, it is important to recognize that as CS education scales both locally and globally, the issues of curricula, pedagogies, instructor quality, and evaluation naturally become more pressing.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Lessons from education systems that have introduced CS education\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Based on the available literature discussed in the previous section, we selected education systems that have implemented CS education programs and reviewed their progress through in-depth case studies. Intentionally, we selected jurisdictions at various levels of economic development, at different levels of progress in expanding CS education, and from different regions of the world. They include Arkansas (U.S.), British Columbia (Canada), Chile, England, Italy, New Brunswick (Canada), Poland, South Africa, South Korea, Thailand, and Uruguay. For each case, we reviewed the historical origins for introducing CS education and the institutional arrangements involved in CS education’s expansion. We also analyzed how the jurisdictions addressed the common challenges of ensuring CS teacher preparation and qualification, fostering student demand for CS education (especially among girls and URMs), and how they developed curriculum, identified core competencies, promoted effective instruction, and assessed students’ CS skills. In this section, we draw lessons from these case studies, which can be downloaded and read in full at the bottom of this page.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Figure 6 presents a graphical representation summarizing the trajectories of the case study jurisdictions as they expanded CS education. Together, the elements in the figure provide a rough approximation of how CS education has expanded in recent years in each case. For example, when South Korea focused its efforts on universal CS education in 2015, basic ICT infrastructure and broadband connectivity were already available in all schools and two CS education expansion policies had been previously implemented. Its movement since 2015 is represented purely in the vertical policy action space, as it moved up four intervals on the index. Uruguay, conversely, started expanding its CS education program t a lower level both in terms of ICT infrastructure (x-axis) and existing CS policies (y-axis). Since starting CS expansion efforts in 2007, though, it has built a robust ICT infrastructure in its school systems and implemented 4 of 7 possible policy actions.\n", + "\n", + "\n", + "FIGURE 6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Figure 6 suggests that first securing access to ICT infrastructure and broadband connectivity allows systems to dramatically improve access to and the quality of CS education. Examples include England, British Columbia, South Korea, and Arkansas. At the same time, Figure 6 suggests that systems that face the dual challenge of expanding ICT infrastructure and broadband connectivity and scaling the delivery of quality CS education, such as Chile, South Africa, Thailand, and Uruguay, may require more time and/or substantial investment to expand quality CS education to match the former cases. Even though Chile, Thailand, and especially Uruguay have made impressive progress since their CS education expansion efforts began, they continue to lag a few steps behind those countries that started with established ICT infrastructure in place.\n", + "\n", + "\n", + "Our analysis of these case studies surfaced six key lessons (Figure 7) for governments wishing to take CS education to scale in primary and secondary schools, which we discuss in further detail below.\n", + "\n", + "\n", + "FIGURE 7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1. Expanding tech-based jobs is a powerful lever for expanding CS education\n", + "\n", + "\n", + "In several of the case studies, economic development strategies were the underlying motivation to introduce or expand CS education. For example, Thailand’s 2017 20-year Strategic Plan marked the beginning of CS education in that country. The 72-page document, approved by the Thai Cabinet and Parliament, explained how Thailand could become a more “stable, prosperous, and sustainable” country and proposed to reform the education curriculum to prepare students for future labor demands (20-year National Strategy comes into effect, 2018). Similarly, Arkansas’s Governor Hutchinson made CS education a key part of his first campaign in 2014 (CS for All, n.d.), stating that “Through encouraging computer science and technology as a meaningful career path, we will produce more graduates prepared for the information-based economy that represents a wide-open job market for our young people” (Arkansas Department of Education, 2019).\n", + "\n", + "\n", + "Uruguay’s Plan Ceibal, named after the country’s national flowering tree, was likewise introduced in 2007 as a presidential initiative to incorporate technology in education and help close a gaping digital divide in the country. The initiative’s main objectives were to promote digital inclusion, graduate employability, a national digital culture, higher-order thinking skills, gender equity, and student motivation (Jara, Hepp, & Rodriguez, 2018)\n", + "\n", + "\n", + "Last, in 2018, the European Commission issued the Digital Education Action Plan that enumerated key digital skills for European citizens and students, including CS and computational thinking (European Commission, 2018). The plan encouraged young Europeans to understand the algorithms that underpin the technologies they use on a regular basis. In response to the plan, Italy’s 2018 National Indications and New Scenarios report included a discussion on the importance of computational thinking and the potential role of educational gaming and robotics in enhancing learning outcomes (Giacalone, 2019). Then, in 2019, the Italian Ministry of Education and the Parliament approved a legislative motion to include CS and computational thinking in primary school curricula by 2022 (Orizzontescuola, 2019).\n", + "\n", + "\n", + "In some cases, the impetus to expand CS education came more directly from demands from key stakeholders, including industry and parents. For example, British Columbia’s CS education program traces back to calls from a growing technology industry (Doucette, 2016). In 2016, the province’s technology sector employed 86,000 people—more than the mining, forestry, and oil and gas sectors combined, with high growth projections (Silcoff, 2016). The same year, leaders of the province’s technology companies revealed in interviews that access to talent had become their biggest concern (KPMG, 2016). According to a 2016 B.C. Technology Association report, the province needed 12,500 more graduates in CS from tertiary institutions between 2015 and 2021 to fill unmet demand in the labor market (Orton, 2018). The economic justification for improving CS education in the province was clear.\n", + "\n", + "\n", + "Growing parental demand helped create the impetus for changes to the CS curriculum in Poland. According to Kozlowski (2016), Polish parents perceive CS professions as some of the most desirable options for their children. And given the lack of options for CS education in schools, parents often seek out extracurricular workshops for their children to encourage them to develop their CS skills (Panskyi, Rowinska, & Biedron, 2019). The lack of in-school CS options for students created the push for curricular reforms to expand CS in primary and secondary schools. As former Minister of Education Anna Zalewska declared, Polish students “cannot afford to waste time on [the] slow, arduous task of building digital skills outside school [ and] only school education can offer systematic teaching of digital skills” (Szymański, 2016).\n", + "\n", + "\n", + "2. ICT in schools provides the foundation to expand CS education\n", + "\n", + "\n", + "Previous efforts to expand access to devices, connectivity, or basic computer literacy in schools provided a starting point in several jurisdictions to expand CS education. For example, the Uruguayan government built its CS education program after implementing expansive one-to-one computing projects, which made CS education affordable and accessible. In England, an ICT course was implemented in schools in the mid-1990s. These dedicated hours during the school day for ICT facilitated the expansion of CS education in the country.\n", + "\n", + "\n", + "The Chilean Enlaces program, developed in 1992 as a network of 24 universities, technology companies, and other organizations (Jara, Hepp, & Rodriguez, 2018; Sánchez & Salinas, 2008) sought to equip schools with digital tools and train teachers in their use (Severin, 2016). It provided internet connectivity and digital devices that enabled ICT education to take place in virtually all of Chile’s 10,000 public and subsidized private schools by 2008 (Santiago, Fiszbein, Jaramillo, & Radinger, 2017; Severin et al., 2016). Though Enlaces yielded few observable effects on classroom learning or ICT competencies (Sánchez & Salinas, 2008), the program provided the infrastructure needed to begin CS education initiatives years later.\n", + "\n", + "\n", + "While a history of ICT expansion can serve as a base for CS education, institutional flexibility to transform traditional ICT projects into CS education is crucial. The Chilean Enlaces program’s broader institutional reach resulted in a larger bureaucracy, slower implementation of new programs, and greater dependence on high-level political agendas (Severin, 2016). As a result, the program’s inflexibility prevented it from taking on new projects, placing the onus on the Ministry of Education to take the lead in initiating CS education. In Uruguay, Plan Ceibal’s initial top-down organizational structure enabled relatively fast implementation of the One Laptop per Child program, but closer coordination with educators and education authorities may have helped to better integrate education technology into teaching and learning. More recently, Plan Ceibal has involved teachers and school leaders more closely when introducing CS activities. In England, the transition from ICT courses to a computing curriculum that prioritized CS concepts, instead of computer literacy topics that the ICT teachers typically emphasized before the change, encountered some resistance. Many former ICT teachers were not prepared to implement the new program of study as intended, which leads us to the next key lesson.\n", + "\n", + "\n", + "3. Developing qualified teachers for CS education should be a top priority\n", + "\n", + "\n", + "The case studies highlight the critical need to invest in training adequate numbers of teachers to bring CS education to scale. For example, England took a modest approach to teacher training during the first five years of expanding its CS education K-12 program and discovered that its strategy fell short of its original ambitions. In 2013, the English Department for Education (DfE) funded the BCS to establish and run the Network of Excellence to create learning hubs and train a pool of “master” CS teachers. While over 500 master teachers were trained, the numbers were insufficient to expand CS education at scale. Then, in 2018 the DfE substantially increased its funding to establish the National Center for Computing Education (NCCE) and added 23 new computing hubs throughout England. Hubs offer support to primary and secondary computing teachers in their designated areas, including teaching, resources, and PD (Snowdon, 2019). In just over two years, England has come a long way toward fulfilling its goals of training teachers at scale with over 29,500 teachers engaged in some type of training (Teach Computing, 2020).\n", + "\n", + "\n", + "Several education systems partnered with higher education institutions to integrate CS education in both preservice and in-service teacher education programs. For example, two main institutions in British Columbia, Canada—the University of British Columbia and the University of Northern British Columbia—now offer CS courses in their pre-service teacher education programs. Similarly, in Poland, the Ministry of National Education sponsored teacher training courses in university CS departments. In Arkansas, state universities offer CS certification as part of preservice teacher training while partnering with the Arkansas Department of Education to host in-service professional development.\n", + "\n", + "\n", + "Still other systems partnered with nonprofit organizations to deliver teacher education programs. For instance, New Brunswick, Canada, partnered with the nonprofit organization Brilliant Labs to implement teacher PD programs in CS (Brilliant Labs, n.d.). In Chile, the Ministry of Education partnered with several nongovernmental organizations, including Code.org and Fundación Telefónica, to expand teacher training in CS education. Microsoft Philanthropies launched the Technology Education and Literacy in Schools (TEALS) in the United States and Canada to connect high school teachers to technology industry volunteers. The volunteer experts support instructors to learn CS independently over time and develop sustainable high school CS programs (Microsoft, n.d.).\n", + "\n", + "\n", + "To encourage teachers to participate in these training programs, several systems introduced teacher certification pathways in CS education. For example, in British Columbia, teachers need at least 24 credits of postsecondary coursework in CS education to be qualified to work in public schools. The Arkansas Department of Education incentivizes in-service teachers to attain certification through teaching CS courses and participating in approved PD programs (Code.org, CSTA, ECEP, 2019). In South Korea, where the teaching profession is highly selective and enjoys high social status, teachers receive comprehensive training on high-skill computational thinking elements, such as computer architecture, operating systems, programming, algorithms, networking, and multimedia. Only after receiving the “informatics–computer” teacher’s license may a teacher apply for the informatics teacher recruitment exam (Choi et al., 2015).\n", + "\n", + "\n", + "When faced with shortages of qualified teachers, remote instruction can provide greater access to qualified teachers. For example, a dearth of qualified CS teachers has been and continues to be a challenge for Uruguay. To address this challenge, in 2017, Plan Ceibal began providing remote instruction in computational thinking lessons for public school fifth and sixth graders and integrated fourth-grade students a year later. Students work on thematic projects anchored in a curricular context where instructors integrate tools like Scratch.4 During the school year, a group of students in a class can work on three to four projects during a weekly 45-minute videoconference with a remote instructor, while another group can work on projects for the same duration led by the classroom teacher. In a typical week, the remote instructor introduces an aspect of computational thinking. The in-class teacher then facilitates activities like block-based programming, circuit board examination, or other exercises prescribed by the remote teacher (Cobo & Montaldo, 2018).5 Importantly, Plan Ceibal implements Pensamiento Computacional, providing a remote instructor and videoconferencing devices at the request of schools, rather than imposing the curriculum on all classrooms (García, 2020). With the ongoing COVID-19 pandemic forcing many school systems across the globe to adopt remote instruction, at least temporarily, we speculate that remote learning is now well poised to become more common in expanding CS education in places facing ongoing teacher shortages.\n", + "\n", + "\n", + "4. Exposing students to CS education early helps foster demand, especially among underserved populations\n", + "\n", + "\n", + "Most education systems have underserved populations who lack the opportunity to develop an interest in CS, limiting opportunities later in life. For example, low CS enrollment rates for women at Italian universities reflect the gender gap in CS education. As of 2017, 21.6 percent and 12.3 percent of students completing bachelor’s degrees in information engineering and CS, respectively, were women (Marzolla, 2019). Further, female professors and researchers in these two subjects are also underrepresented. In 2018, only 15 percent and 24 percent of professors and researchers in CS and computer engineering, respectively, were women (Marzolla, 2019). Similar representation gaps at the highest levels of CS training are common globally. Thus, continuing to offer exposure to CS only in post-secondary education will likely perpetuate similar representation gaps.\n", + "\n", + "\n", + "To address this challenge, several education systems have implemented programs to make CS education accessible to girls and other underserved populations in early grades, before secondary school. For instance, to make CS education more gender balanced, the Italian Ministry of Education partnered with civil society organizations to implement programs to spur girls’ interest in CS and encourage them to specialize in the subject later (European Commission, 2009). An Italian employment agency (ironically named Men at Work) launched a project called Girls Code It Better to extend CS learning opportunities to 1,413 middle school girls across 53 schools in 2019 (Girls Code It Better, n.d.). During the academic year, the girls attended extracurricular CS courses before developing their own technologically advanced products and showcasing their work at an event at Bocconi University in Milan (Brogi, 2019). In addition to introducing the participants to CS, the initiative provided the girls with role models and generated awareness on the gender gap in CS education in Italy.\n", + "\n", + "\n", + "In British Columbia, students are exposed to computational thinking concepts as early as primary school, where they learn how to prototype, share, and test ideas. In the early grades of primary education, the British Columbia curriculum emphasizes numeracy using technology and information technology. Students develop numeracy skills by using models and learn information technology skills to apply across subjects. In kindergarten and first grade, curricular objectives include preparing students for presenting ideas using electronic documents. In grades 2 to 3, the curricular goals specify that students should “demonstrate an awareness of ways in which people communicate, including the use of technology,” in English language arts classes, as well as find information using information technology tools. By the time students are in grades 4 and 5, the curriculum expects students to focus more on prototyping and testing new ideas to solve a problem (Gannon & Buteau, 2018).\n", + "\n", + "\n", + "Several systems have also increased participation in CS education by integrating it as a cross-curricular subject. This approach avoids the need to find time during an already-packed school day to teach CS as a standalone subject. For example, in 2015, the Arkansas legislature began requiring elementary and middle school teachers to embed computational thinking concepts in other academic courses. As a result, teachers in the state integrate five main concepts of computational thinking into their lesson plans, including (1) problem-solving, (2) data and information, (3) algorithms and programs, (4) computers and communications, and, importantly, (5) community, global, and ethical impacts (Watson-Fisher, 2019). In the years following this reform, the share of African American students taking CS in high school reached 19.6 percent, a figure that slightly exceeds the percentage of African Americans among all students—a resounding sign of progress in creating student demand for CS education (Computer science on the rise in Arkansas schools, Gov. drafts legislation to make it a requirement for graduation, 2020).\n", + "\n", + "\n", + "After-school programs and summer camps, jointly organized with external partners, have also helped promote demand for CS education through targeted outreach programs to commonly underserved populations. For example, Microsoft Thailand has been holding free coding classes, Hour of Code, in partnership with nonprofit organizations, to encourage children from underprivileged backgrounds to pursue STEM education (Microsoft celebrates Hour of Code to build future ready generations in Asia, 2017). In the past decade, Microsoft has extended opportunities for ICT and digital skills development to more than 800,000 youth from diverse backgrounds—including those with disabilities and residents of remote communities (Thongnab, 2019). Their annual #MakeWhatsNext event for young Thai women showcases STEM careers and the growing demand for those careers (Making coding fun for Thailand’s young, 2018). Also in Thailand, Redemptorist Foundation for People with Disabilities, with over 30 years of experience working with differently abled communities in that country, expanded their services to offer computer trainings and information technology vocational certificate programs for differently abled youth (Mahatai, n.d.).\n", + "\n", + "\n", + "In British Columbia, Canada, the Ministry of Education and other stakeholders have taken steps to give girls, women, and aboriginal students the opportunity to develop an interest in CS education.For example, after-school programs have taken specific steps to increase girls’ participation in CS education. The UBC Department of Computer Science runs GIRLsmarts4tech, a program that focuses on giving 7th- grade girls role models and mentors that encourage them to pursue technology-related interests (GIRLsmarts4tech, n.d.). According to the latest census, in 2016, British Columbia’s First Nations and Indigenous Peoples (FNIP) population—including First Nations, Metis, and Inuits—was 270,585, an increase of 38 percent from 2006. With 42.5 percent of the FNIP population under 25, it is critical for the province to deliver quality education to this young and growing group (Ministry of Advanced Education, Skills and Training, 2018). To this end, part of the British Columbia curriculum for CS education incorporates FNIP world views, perspectives, knowledge, and practices in CS concepts. In addition, the B.C. based ANCESTOR project (AborigiNal Computer Education through STORytelling) has organized courses and workshops to encourage FNIP students to develop computer games or animated stories related to their culture and land (Westor & Binn, 2015).\n", + "\n", + "\n", + "As these examples suggest, private sector and nongovernmental organizations can play an important role in the expansion of CS education, an issue we turn to now.\n", + "\n", + "\n", + "5. Engaging key stakeholders can help address bottlenecks\n", + "\n", + "\n", + "In most reviewed cases, the private sector and nongovernmental organizations played a role in promoting the expansion of CS education. Technology companies not only helped to lobby for expanding CS education, but often provided much-needed infrastructure and subject matter expertise in the design and rollout of CS education. For example, Microsoft Thailand has worked with the Thai government since 1998 in various capacities, including contributing to the development and implementation of coding projects, digital skills initiatives, teacher training programs, and online learning platforms (Thongnab, 2019; Coding Thailand, n.d.). Since 2002, Intel’s Teach Thailand program has trained more than 150,000 teachers. Additionally, Google Coding Teacher workshops train educators on teaching computational thinking through CS Unplugged coding activities (EduTech Thailand, 2019). The workshop is conducted by Edutech (Thailand) Co., Ltd., an educational partner of Google, which adapted the Google curriculum to the Thailand education context. Samsung has been engaged in a smart classroom project that has built futuristic classroom prototypes and provided training for 21st century competencies (OECD/UNESCO, 2016).\n", + "\n", + "\n", + "In England, nongovernmental organizations have played an important role in supporting the government’s expansion of CS education. The DfE has relied on outside organizations for help in executing its CS education responsibilities. The DfE’s NCEE, for instance, is delivered by a consortium including the British Computing Society, STEM Learning, and the Raspberry Pi Foundation—three nonprofit organizations dedicated to advancing the computing industry and CS education in the country (British Computing Society, n.d; STEM Learning, n.d.; Raspberry Pi Foundation, n.d.).\n", + "\n", + "\n", + "Chile’s Ministry of Education developed partnerships with individual NGOs and private companies to engage more students, especially girls. These initiatives offer the opportunity for hands-on learning projects and programming activities that students can perform from their home computers. Some of the same partners also provide online training platforms for teacher PD.\n", + "\n", + "\n", + "Industry advocacy organizations can also play an important role in the expansion of CS education. For example, in Arkansas, the state’s business community has long supported CS education (Nix, 2017). Accelerate Arkansas was established in 2005 as an organization of 70 private and public sector members dedicated to moving Arkansas into a more innovation- and knowledge-based economy (State of Arkansas, 2018). Similarly, in England, a network of organizations called Computing at School established a coalition of industry representatives and teachers. It played a pivotal role in rebranding the ICT education program in 2014 to the computing program that placed a greater emphasis on CS (Royal Society, 2017).\n", + "\n", + "\n", + "To ensure sustainability, one key lesson is that the government should coordinate across multiple stakeholders. The reliance on inputs from external organizations to drive CS education implies that the heavy reliance on NGO-provided training and resources in Chile have been insufficient to motivate more schools and teachers to include CS and computational thinking in classroom learning activities. By contrast, the DfE has effectively coordinated across various nongovernmental organizations to expand CS education. Similarly, Arkansas’s Department of Education is leading an effort to get half of all school districts to form partnerships with universities and business organizations to give students opportunities to participate internships and college-level CS courses while in high school (Talk Business & Politics, 2020). In sum, the experience of decades of educational policies across the education systems reviewed shows that schools require long lasting, coordinated, and multidimensional support to achieve successful implementation of CS in classrooms.\n", + "\n", + "\n", + "6. When taught in an interactive, hands-on way, CS education builds skills for life\n", + "\n", + "\n", + "Several of the cases studied introduced innovative pedagogies using makerspaces (learning spaces with customizable layouts and materials) and project-based learning to develop not only skills specific to CS but also skills that are relevant more broadly for life. For example, Uruguayan CS education features innovative concepts like robotics competitions and makerspaces that allow students to creatively apply their computational thinking lessons and that can spark interest and deepen understanding. In addition, computational thinking has been integrated across subject areas (e.g., in biology, math, and statistics) (Vázquez et al., 2019) and in interdisciplinary projects that immerse students in imaginative challenges that foster creative, challenging, and active learning (Cobo & Montaldo, 2018). For instance, students can use sensors and program circuit boards to measure their own progress in physical education (e.g., measuring how many laps they can run in a given period).\n", + "\n", + "\n", + "Similarly, in New Brunswick, Brilliant Labs provide learning materials to schools so they can offer students CS lessons using makerspaces that encourage students to develop projects, engage with technology, learn, and collaborate. These makerspaces enable students to creatively apply their CS and computational thinking lessons, sparking interest and deepening understanding of CS and computational thinking.\n", + "\n", + "\n", + "Thailand’s curricular reforms also integrated project-based learning into CS education. Thai students in grades 4-6 learn about daily life through computers, including skills such as using logic in problem-solving, searching data and assessing its correctness, and block coding (e.g., Scratch). Then, students in grades 7-9 focus on learning about primary data through objectives that include using programming to solve problems, collecting, analyzing, presenting, and assessing data and information, and textual programming such as Python. Finally, students in grades 10-12 focus on applying advanced computing technology and programming to solve real-world problems, using knowledge from other subjects and data from external sources (Piamsa-nga et al., 2020).\n", + "\n", + "\n", + "After two years of nationwide discussions from 2014 to 2016, the Polish Ministry of National Education announced the creation of a new core curriculum for CS in primary and secondary schools (Syslo, 2020). The new curriculum’s goals included students using technology to identify solutions for problems in every day and professional situations and supporting other disciplines—such as science, the arts, and the social sciences—in innovation (Panskyi, Rowinska, & Biedron, 2019).\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Conclusion\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "CS skills are increasingly necessary to function in today’s technology-advanced world and for the future. They enable individuals to understand how technology works, and how best to harness its potential to improve lives. As these skills take preeminence in the rapidly changing 21st century, CS education promises to significantly enhance student preparedness for the future of work and active citizenship.\n", + "\n", + "\n", + "Our findings suggest six recommendations for governments interested in taking CS education to scale in primary and secondary schools. First, governments should use economic development strategies focused on expanding technology-based jobs to engage all stakeholders and expand CS education in primary and secondary schools. Indeed, such a strategy helps attract and retain investors and foster CS education demand among students. Second, provide access to ICT infrastructure in primary and secondary schools to facilitate the introduction and expansion of CS education. Third, developing qualified teachers for CS should be a top priority. The evidence is clear that a qualified teacher is the most important factor in student learning, and thus preparing the teacher force needed for CS at scale is crucial. Fourth, expose students early to CS education to increase their likelihood of pursuing it. This is especially important for girls and other URM groups historically underrepresented in STEM and CS fields. Fifth, engage key stakeholders (including educators, the private sector, and civil society) to help address bottlenecks in physical and technical capacity. Finally, teach CS in an interactive, hands-on way to build skills for life.\n", + "\n", + "\n", + "Through studying the cases of regional and national governments at various levels of economic development and progress in implementing CS education programs, governments from around the globe can learn how to expand and improve CS education and help students develop a new basic skill necessary for the future of work and active citizenship.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Case studies\n", + "\n", + "\n", + "For a detailed discussion of regional and national education systems from diverse regions and circumstances that have implemented computer science education programs, download the case studies.\n", + "\n", + "\n", + " Download the full report \n", + "\n", + "https://www.brookings.edu/search/?s=data%20science\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://www.brookings.edu/blog/how-we-rise/2021/10/29/reckoning-with-science-medicine-and-scapegoating/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/blog/how-we-rise/2021/10/29/reckoning-with-science-medicine-and-scapegoating/\n", + "TITLE: Reckoning with science, medicine, and scapegoating\n", + "Reckoning with science, medicine, and scapegoating\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/the-potential-of-the-chips-and-science-act-for-rural-america/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/research/the-potential-of-the-chips-and-science-act-for-rural-america/\n", + "TITLE: The potential of the CHIPS and Science Act for rural America\n", + "The potential of the CHIPS and Science Act for rural America\n", + "BODY:\n", + "\n", + "New article found for topic: python\n", + "URL: https://www.brookings.edu/research/institutionalizing-data-analysis-in-german-federal-governance/\n", + "TITLE: Institutionalizing Data Analysis in German Federal Governance\n", + "Institutionalizing Data Analysis in German Federal Governance\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/in-central-new-york-a-test-of-the-chips-and-science-acts-promise-for-economic-revitalization/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/research/in-central-new-york-a-test-of-the-chips-and-science-acts-promise-for-economic-revitalization/\n", + "TITLE: In Central New York, a test of the CHIPS and Science Act’s promise for economic revitalization\n", + "In Central New York, a test of the CHIPS and Science Act’s promise for economic revitalization\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/news-releases/ben-bernanke-distinguished-senior-fellow-in-residence-receives-nobel-prize-in-economic-sciences/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/news-releases/ben-bernanke-distinguished-senior-fellow-in-residence-receives-nobel-prize-in-economic-sciences/\n", + "TITLE: Ben Bernanke, distinguished senior fellow in residence, receives Nobel Prize in economic sciences\n", + "Ben Bernanke, distinguished senior fellow in residence, receives Nobel Prize in economic sciences\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/techstream/how-data-science-can-ease-the-covid-19-pandemic/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/techstream/how-data-science-can-ease-the-covid-19-pandemic/\n", + "TITLE: How data science can ease the COVID-19 pandemic\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "Social distancing and stay-at-home orders in the United States have slowed the infection rate of SARS-CoV-2, the pathogen that causes COVID-19. This has halted the immediate threat to the U.S. healthcare system, but consensus on a long-term plan or solution to the crisis remains unclear.  As the reality settles in that there are no quick fixes and that therapies and vaccines will take several months if not years to invent, validate, and mass produce, this is a good time to consider another question: How can data science and technology help us endure the pandemic while we develop therapies and vaccines?\n", + "\n", + "\n", + "Before policymakers reopen their economies, they must be sure that the resulting new COVID-19 cases will not force local healthcare systems to resort to crisis standards of care. Doing so requires not just prevention and suppression of the virus, but ongoing measurement of virus activity, assessment of the efficacy of suppression measures, and forecasting of near-term demand on local health systems. This demand is highly variable given community demographics, the prevalence of pre-existing conditions, and population density and socioeconomics.\n", + "\n", + "\n", + "Data science can already provide ongoing, accurate estimates of health system demand, which is a requirement in almost all reopening plans. We need to go beyond that to a dynamic approach of data collection, analysis, and forecasting to inform policy decisions in real time and iteratively optimize public health recommendations for re-opening. While most reopening plans propose extensive testing, contact tracing, and monitoring of population mobility, almost none consider setting up such a dynamic feedback loop. Having such feedback could determine what level of virus activity can be tolerated in an area, given regional health system capacity, and adjust population distancing accordingly.\n", + "\n", + "\n", + "We propose that by using existing technology and some nifty data science, it is possible to set up that feedback loop, which would maintain healthcare demand under the threshold of what is available in a region. Just as the maker community stepped up to cover for the failures of the government to provide adequate protective gear to health workers, this is an opportunity for the data and tech community to partner with healthcare experts and provide a measure of public health planning that governments are unable to do. Therefore, the question we invite the data science community to focus on is: How can data science help forecast regional health system resource needs given measurements of virus activity and suppression measures such as population distancing?\n", + "\n", + "\n", + "For the data science effort to work, first and foremost, we need to fix delays in data collection and access introduced by existing reporting processes. Currently, most departments of public health are collecting and reporting metrics that are not helpful, and are reporting them with 48 hour delays, and often with errors. Although there are examples of regional excellence in such reporting, by and large, the recommendations from the health IT community around accurate and fast public health reporting remain ignored. For instance, consider the number of COVID-19 hospitalizations, which is the best indicator of the disease’s burden on the regional health system. At the present time, due to time lags in confirming and reporting cases and a failure to distinguish between current and cumulative hospitalizations, even regions that report hospitalization data often provide only a blurry picture of the burden on the regional health system. Regions should ideally report both suspected and confirmed hospital cases and indicate the date of admission, in addition to the date of report or confirmation.\n", + "\n", + "\n", + "Even with perfect reporting, there are fundamental delays in what such data can tell us. For example, new admissions to a hospital today reflect virus activity as of 9 to 13 days ago (which depends, in turn, on social distancing interventions from up to 17 days prior). Not factoring in such considerations have led to significant over-estimation of hospitalization needs nationwide. We therefore need to measure virus activity via proxy measures that are indicative early in the lifecycle of the virus. We must benchmark these against the number of new and total COVID-19 hospitalizations as well as ideally the number of new infections, assuming it is accurately measured through large scale testing. Available proxy measures include test positivity rates in health systems, case counts, deaths and perhaps seropositivity rates. Ongoing symptom tracking via smartphone apps, daily web or phone surveys, or cough sounds can identify potential hotspots where virus transmission rates are high. Contact tracing, which currently requires significant human effort, can also help tracking of potential cases if it can be scaled using technology under development by major American tech companies. \n", + "\n", + "\n", + "With reliable tracking and benchmarking in place, we can calculate infection prevalence as well as daily growth and transmission rates, which is essential for determining if policies are working. This is a problem not only of data collection but also data analysis. Issues of sensitivity, daily variability, time lags, and confounding need to be studied before such data can be used reliably. For instance, symptom tracking is nonspecific and may have difficulty tracking virus activity at low prevalence. Other emerging data sources such as wastewater and smart thermometer data hold similar promise but will have to grapple with these same issues.\n", + "\n", + "\n", + "We then need to estimate the regional effects of policy interventions such as shelter-in-place orders (via mobility reduction) and contact tracing (via reductions in new cases), first as simple forecasts and eventually maturing to what-if analyses. Several efforts have quantified the impact of mobility on virus transmission and some have suggested “safe” forms of mobility. While there are many potential ways to quantify population mobility — such as via traffic patterns, internet bandwidth usage by address, and location of credit card swipes — the most scalable mechanism to measure mobility appears to be via tracking of smartphones. Groups such as the COVID-19 Mobility Data Network provide such data daily in anonymized, aggregated reports.\n", + "\n", + "\n", + "Once the ability to project from mobility to transmission to health system burden is constructed, we can “close the loop” by predicting how much mobility we can afford given measured virus activity and anticipated health system resources in the next two weeks. Researchers have already attempted to calculate “tolerable transmission” in the form of maximum infection prevalence in a given geography that would not overload health systems. Coupling such tolerable transmission estimates with daily assessments of a valid sample of the population (via testing, via daily surveys, via electronic health record-based surveillance) would allow monitoring of changes in transmission which can alert us to the need to intervene, such as by reducing mobility. As new measures such as contact tracing cut transmission rates, these same monitoring systems can tell us that it is safe to increase mobility further. Continuously analyzing current mobility as well as virus activity and projected health system capacity can allow us to set up “keep the distance” alerts that trade off tolerable transmission against allowed mobility. Doing so will allow us to intelligently balance public health and economic needs in real time.\n", + "\n", + "\n", + "Concretely, then, the crucial “data science” task is to learn the counterfactual function linking last week’s population mobility and today’s transmission rates to project hospital demand two weeks later. Imagine taking past measurements of mobility around April 10 in a region (such as the Santa Clara County’s report from COVID-19 Community Mobility Reports), the April 20 virus transmission rate estimate for the region (such as from http://rt.live), and the April 25 burden on the health system (such as from the Santa Clara County Hospitalization dashboard), to learn a function that uses today’s mobility and transmission rates to anticipate needed hospital resources two weeks later. It is unclear how many days of data of each proxy measurement we need to reliably learn such a function, what mathematical form this function might take, and how we do this correctly with the observational data on hand and avoid the trap of mere function-fitting. However, this is the data science problem that needs to be tackled as a priority. \n", + "\n", + "\n", + "Adopting such technology and data science to keep anticipated healthcare needs under the threshold of availability in a region requires multiple privacy trade-offs, which will require thoughtful legislation so that the solutions invented for enduring the current pandemic do not lead to loss of privacy in perpetuity. However, given the immense economic as well as hidden medical toll of the shutdown, we urgently need to construct an early warning system that tells us to enhance suppression measures if the next COVID-19 outbreak peak might overwhelm our regional healthcare system. It is imperative that we focus our attention on using data science to anticipate, and manage, regional health system resource needs based on local measurements of virus activity and effects of population distancing.\n", + "\n", + "\n", + "Dr. Nigam Shah is an associate professor of Medicine (Biomedical Informatics) at Stanford University and Associate CIO for data science at Stanford Healthcare.Dr. Jacob Steinhardt is an assistant professor of statistics at University of California, Berkeley.\n", + "\n", + "\n", + "\n", + "\n", + "https://www.brookings.edu/blog/africa-in-focus/2022/01/26/investment-in-science-and-technology-is-key-to-an-african-economic-boom/\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/blog/africa-in-focus/2022/01/26/investment-in-science-and-technology-is-key-to-an-african-economic-boom/\n", + "TITLE: Investment in science and technology is key to an African economic boom\n", + "Investment in science and technology is key to an African economic boom\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/exploring-the-state-of-computer-science-education-amid-rapid-policy-expansion/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/research/exploring-the-state-of-computer-science-education-amid-rapid-policy-expansion/\n", + "TITLE: Exploring the state of computer science education amid rapid policy expansion\n", + "Exploring the state of computer science education amid rapid policy expansion\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/techstream/how-china-harnesses-data-fusion-to-make-sense-of-surveillance-data/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/techstream/how-china-harnesses-data-fusion-to-make-sense-of-surveillance-data/\n", + "TITLE: How China harnesses data fusion to make sense of surveillance data\n", + "BODY:\n", + "\n", + "Hikvision surveillance cameras are seen in front of a Chinese flag at a shopping area in Shanghai on May 5, 2021. (REUTERS/Aly Song)\n", + "\n", + "\n", + "Across the Chinese government’s surveillance apparatus, its many arms are busy collecting huge volumes of data. Video surveillance footage, WeChat accounts, e-commerce data, medical history, and hotel records: It’s all fair game for the government’s surveillance regime. Yet, taken individually, each of these data streams don’t tell authorities very much. That’s why the Chinese government has embarked on a massive project of data fusion, which merges disparate datasets to produce data-driven analysis. This is how Chinese surveillance systems achieve what authorities call “visualization” (可视化) and “police informatization” (警务信息化). \n", + "\n", + "\n", + "While policymakers around the world have grown increasingly aware of China’s mass surveillance regime—from its most repressive practices in Xinjiang to its exports of surveillance platforms to more than 80 countries—relatively little attention has been paid to how Chinese authorities are making use of the data it collects. As countries and companies consider how to respond to China’s surveillance regime, policymakers need to understand data fusion’s crucial role in monitoring the country’s population in order to craft effective responses.  \n", + "\n", + "\n", + "Data fusion in Chinese surveillance programs \n", + "\n", + "\n", + "As China’s population has embraced online life, the Party-state’s mass surveillance practices have evolved from relying on more manual methods—such as dānwèi (单位) work units, the hùkǒu (户口) residency registration system, and dǎng’àn (档案) secret political files—to using technologies that range from the mundane to the cutting-edge. To achieve the goal of “stability maintenance” (维稳), China’s national surveillance programs utilize varying degrees of data fusion. Data fusion is present, for example, in national defense crisis response platforms (国防动员) developed in the mid-2010s that gather data from multiple “thematic clouds,” including e-commerce, tourism, industry, courts, and law enforcement. Other recent programs that rely on data fusion include Sharp Eyes (雪亮工程), the nation-wide Police Cloud (警务云), and Xinjiang’s Integrated Joint Operations Platform (IJOP, 一体化联合作战平台).  \n", + "\n", + "\n", + "One of the Chinese government’s most prominent data fusion programs is Sharp Eyes, which was launched in 2015 by nine government bodies. The program builds on the infrastructure used by Skynet—a 2005 initiative that focused on surveillance in urban public areas—and extends it into rural areas. Sharp Eyes pulls from a wide variety of data sources. These include surveillance cameras—both privately and government-owned and with and without facial-recognition capabilities—and vehicle and license plate recognition cameras. Public and private video surveillance systems collect facial and other attributes from key locations such as hospitals, schools, entertainment venues, hotels, internet cafes, major road intersections, and storefronts. Sharp Eyes also aims to collect “virtual identities,” such as MAC addresses, phone numbers, and WeChat accounts. \n", + "\n", + "\n", + "Authorities ascertain individuals’ identities by first combining the above information with geographic information source (GIS) data and then sending this data to “societal resource integration platforms,” which exist in Xinjiang and at least four other provinces. According to analysis originally published in the journal China Digital Cable TV, a publication supervised by the Ministry of Education and the Ministry of Science and Technology, these platforms combine facial and vehicle recognition data and match it against private and public video sources. GIS data is superimposed on live video feeds to provide granular location data. Multiple companies can be involved in one platform project. For example, one local Sharp Eyes project in Fujian Province uses products from prominent (and blacklisted) AI companies such as Yitu, Huawei, and Hikvision.  \n", + "\n", + "\n", + "However, Sharp Eyes is not entirely powered by data fusion. In fact, human-centric surveillance is a key design element. In the city of Linyi, where Sharp Eyes was piloted, the local government upgraded citizens’ television cable boxes so they could view surveillance feeds and report crimes by pushing a button on their TV remotes. The Ministry of Justice even provided a patriotic slogan for the effort: “remote control in hand, safety in heart.” (This citizen-centric surveillance strategy originates from the Cultural Revolution, which inspired Sharp Eyes’ name.) As part of Sharp Eyes, mobile apps push video surveillance and public security information to citizens and allow assigned groups of households to report crimes. Command and control centers are staffed by personnel to review footage, take citizens’ reports, and dispatch police accordingly. \n", + "\n", + "\n", + "Another national program that uses data fusion is the Ministry of Public Security’s (MPS) Police Cloud, which has been active since 2015. Provincial police cloud-computing centers fuse data from public and private sources, including ID cards, CCTV footage, medical history, supermarket memberships, IP addresses, social media usernames, delivery records, residential addresses, hotel stays, petition records, and biometrics, according to a 2017 report from Human Rights Watch. In a nod to “visualizing” data, the system aims to uncover connections between individuals that would otherwise be difficult for police officers to detect on their own. It supposedly predicts future actions or threats that might cause social instability, such as protests and acts of terror.  \n", + "\n", + "\n", + "Targeting ‘focus personnel’ \n", + "\n", + "\n", + "China’s data-fusion programs allow its surveillance systems to assemble highly detailed portraits of the country’s citizens, but these systems apply particularly severe scrutiny to “focus personnel,” which includes individuals petitioning the government, those purportedly involved in terrorism, and those “undermining social stability.” China’s Uyghur ethnic minority is among those that fall under the “focus personnel” category, and in the Xinjiang region, the center of Uyghur life, this persecuted minority is subjected to intense surveillance. \n", + "\n", + "\n", + "One key tool in this surveillance regime is the Integrated Joint Operations Platform (IJOP), which monitors Xinjiang residents with unprecedented intrusiveness. The system flags mundane and otherwise legal behavior as warranting further surveillance, imprisonment, or even extralegal internment in Xinjiang’s vast network of concentration camps. The IJOP functions as a data fusion tool by tying an individual’s government-issued ID card to her physical attributes (such as facial features, blood type, and height), as well as tracking where individuals’ phones, ID cards, and vehicles go. The system collects a variety of data from afar: excessive electricity use, the use of WhatsApp and VPNs, driving someone else’s car. The system also relies on highly intrusive methods. Scattered at strategic locations such as malls and mosques around Xinjiang are what are known as “three-dimensional portrait and integrated data doors” (三维人像综合数据门). These “doors” resemble airport metal detectors and possess facial recognition capabilities, ID card verification, and tools to lift a variety of data from mobile phones, such as MAC addresses, IMEI, IMSI, and ESN numbers. The IJOP also ingests data collected by what have been dubbed “anti-terrorism swords,” which are used at police checkpoints to plug into phones and download their contents, according to an Intercept investigation. IJOP sends push notifications to officers, who can pull aside someone walking through a data door. They can then interrogate individuals and detain or imprison them. In this way, the IJOP can restrict individuals’ movements, which are limited based on what threat level the system determines they fall under.  \n", + "\n", + "\n", + "China’s military is another player using data-fusion tools in Xinjiang to build predictive policing systems. In 2019, a professor named Cui Yinglong at the People’s Armed Police Engineering University in the regional capital of Ürümqi developed a “dynamic early warning” system, known as the Tianshan Anti-terrorism Cloud (天山反恐云). It is trained on a database he helped build called the “East Turkistan terrorist activity database,” which collects and fuses data based on terrorist methods, objectives, attack dates, and organization from 1990 to the present. Although little information exists on the inner workings of the app, it purports to “accurately depict” terrorists’ “religious, organizational, and behavioral characteristics.” The cloud is designed to provide soldiers with early warning of terrorist activity and combat decision support, and is apparently in active operational use.  \n", + "\n", + "\n", + "Issues with ‘information islands’  \n", + "\n", + "\n", + "While it is tempting to conclude that China’s surveillance state is effortlessly and automatically tracking and surveilling every person in the country, its monitoring systems are plagued by human inefficiency, unreliable and incomplete basic data, and incompatible datasets and systems. These inefficiencies have resulted in data silos, also known as “government information islands” (政府信息孤岛), a phrase that refers to isolated data pools that are not adequately shared within government bureaucracies. Currently, data is shared horizontally (across departments and regions) and vertically (within the same organizational entity from the local level up). But scholars have found that horizontal integration bodies suffer from a lack of information that is stove-piped in vertical bodies. As a result, authorities are hindered by bureaucratic systems that prevent more comprehensive data access and greater insight.  \n", + "\n", + "\n", + "To better execute data fusion, Chinese authorities are now attempting to tackle longstanding issues with data silos, according to a recent ChinaFile analysis of government procurement notices. In 2019, for example, authorities in Beijing looked to build a “Sharp Eyes Video Sharing and Exchange Platform” that would make available video footage from cameras belonging to a range of different departments on a single platform. By integrating footage from approximately 200,000 cameras—and up to 1 million—the platform would improve access to footage and data re-use. To further improve data fusion, future improvements to Sharp Eyes include implementing a standard data mining approach and overcoming technical difficulties and inconsistent standards.  \n", + "\n", + "\n", + "On the legal front, authorities have also taken several steps to address data silos. While some of this reform preceded the advent of surveillance programs such as Sharp Eyes and the IJOP, scholars Huirong Chen and Sheena Chestnut Greitens note that newer reforms under Xi Jinping coincided with these programs. They include the 2017–18 reorganization of the People’s Armed Police and passing the 2017 National Intelligence Law, which aimed to integrate disparate intelligence and national security authorities. Furthermore, the 13th Five-Year Plan for National Informatization (2016–2020) detailed issues with “information islands,” and called for integrating systems across ministries and departments. In 2017, the Party asked local governments to establish comprehensive information platforms, likely similar to the ones established under Sharp Eyes. \n", + "\n", + "\n", + "Policy implications \n", + "\n", + "\n", + "Responding to the Chinese government’s use of data-fusion systems to power its surveillance systems represents a difficult challenge. Under the Trump Administration, the U.S. Department of Commerce’s Bureau of Industry and Security (BIS) blacklisted multiple Chinese companies for their human rights abuses in Xinjiang, adding them to the so-called “Entity List.” By being added to the Entity List, these firms should have been cut off from U.S. suppliers, but given the opaque nature of supply chains, it is difficult to assess whether sanctioned firms have been able to access U.S.-originating technologies via workarounds. It also difficult to assess whether homegrown R&D initiatives to develop domestic alternatives to U.S. goods have borne fruit. Furthermore, the vast majority of the companies on the Entity List do not have data fusion as their main line of business; rather, they often provide services that feed into fusion architectures. This means U.S. policy is potentially overlooking a key area of Chinese surveillance systems. (Media and nongovernmental organizations have created lists of Chinese and non-Chinese companies that enable surveillance data fusion practices. This database can aid the BIS in making determinations for its Entity List.) \n", + "\n", + "\n", + "On the technical side, governmental organizations, such as the National Science Foundation and the Defense Advanced Research Projects Agency, can fund research to thwart data fusion processes. One emerging line of research seeks to develop privacy-preserving computer vision systems that obscure individuals’ faces. Other lines of research seek to build counter-surveillance technologies, such as specialized clothing, attacking systems through adversarial examples (intentionally destructive inputs to cause model malfunctioning), or data poisoning (modifying training images). Interfering at the stage prior to fusion would not only protect the privacy of those targeted by surveillance systems, but also prevent data fusion processes from accurately functioning.  \n", + "\n", + "\n", + "It is also important to look at the role of U.S. companies. Chinese surveillance systems are heavily reliant on U.S. firms to provide the gear that powers these digital operations. U.S. suppliers such as Intel, NVIDIA, Cisco, Seagate and Western Digital have all been linked to various aspects of Chinese surveillance systems, but the U.S. government has so far been unable to write rules effectively prohibiting the sales of such equipment. In 2020, the State Department released exhaustive guidance for companies’ export considerations, but the document is nonbinding. The difficulty of imposing binding rules against U.S. companies—along with the continued synergy between the commercial sphere and surveillance states’ technical needs—makes it difficult to prevent the export of such technology. As the United States has staked out a clear policy against surveillance-enabled repression, especially in Xinjiang, it is no longer acceptable for companies to deny knowledge of involvement in supporting China’s surveillance state. One of the most viable options to decrease companies’ more problematic exports remains increased public pressure. \n", + "\n", + "\n", + "Increased attention to Chinese data fusion practices—and its supporting companies—would allow U.S. policy to target China’s surveillance state at a core level, rather than only facial and voice recognition elements that feed into fusion architectures. Taking such steps would better protect Uyghurs, “focus personnel,” and the Chinese people writ large from falling under increasingly abusive, unchecked surveillance.  \n", + "\n", + "\n", + "Dahlia Peterson is a research analyst at Georgetown’s Center for Security and Emerging Technology.  \n", + "\n", + "\n", + "Intel provides financial support to the Brookings Institution, a nonprofit organization devoted to rigorous, independent, in-depth public policy research. \n", + "\n", + "https://www.brookings.edu/research/superhuman-science-how-artificial-intelligence-may-impact-innovation/\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/research/superhuman-science-how-artificial-intelligence-may-impact-innovation/\n", + "TITLE: Superhuman science: How artificial intelligence may impact innovation\n", + "Superhuman science: How artificial intelligence may impact innovation\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/blog/future-development/2022/04/28/how-can-better-climate-data-empower-people-to-act/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/blog/future-development/2022/04/28/how-can-better-climate-data-empower-people-to-act/\n", + "TITLE: Getting people to understand climate data better\n", + "Getting people to understand climate data better\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/research/what-all-policy-analysts-need-to-know-about-data-science/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/research/what-all-policy-analysts-need-to-know-about-data-science/\n", + "TITLE: What all policy analysts need to know about data science\n", + "What all policy analysts need to know about data science\n", + "BODY:\n", + "\n", + "https://www.brookings.edu/techstream/how-satellites-and-ai-can-fix-development-data-problems/\n", + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/techstream/how-satellites-and-ai-can-fix-development-data-problems/\n", + "TITLE: How satellites and AI can fix development data problems\n", + "BODY:\n", + "\n", + "A satellite image from 2015 depicts a salt-affected water catchment area in drought-struck farmland in Australia, November 26, 2015. (REUTERS/David Gray)\n", + "\n", + "\n", + "Data drives development policy. To determine aid packages and projects, policymakers need good data on everything from population to urban sprawl to economic livelihoods. Yet policymakers creating development policies, whether in response to disasters or with an eye toward the long-term, face a core problem: measuring sustainable development variables.\n", + "\n", + "\n", + "Against the backdrop of an ever more urgent climate crisis, improving efforts to get good data has never been more important. The most recent report from the U.N. Intergovernmental Panel on Climate Change lays bare the scale of this challenge, yet even as scientists warn that time is running out to slow the warming of the planet, persistent disagreement remains about how much wealthy countries should be spending on climate assistance for lower-resourced ones.\n", + "\n", + "\n", + "These questions of how much to spend on aid and where to spend it raise a key issue with development broadly. In the past, poor forecasting and inefficient aid distribution have hindered the effectiveness of development programs, including on climate. If policymakers and researchers cannot get accurate information about a problem, it’s more difficult to forge effective solutions. But new technology for development analysis, driven by a combination of satellite imagery and machine learning, may hold the keys to progress.\n", + "\n", + "\n", + "As it stands, data can be inaccurate, costly to acquire, or hard to get all together. This is especially the case in low-resourced countries. In Africa alone, 34% of countries have gone more than 15 years since their last agricultural survey. Even then, the data that is collected is often incomplete or inaccurate. And yet the need for this high-fidelity data is pressing. When a locust plague struck East Africa in 2020, one of the key challenges in responding to that crisis was simply determining the location of locust swarms. In the absence of effective tools to monitor and respond to the locusts marauding the region, 19 million farmers across East Africa lost their crops, causing widespread food shortages in the region.\n", + "\n", + "\n", + "Our new paper introduces an elegant solution to the problem of measuring sustainable development: machine learning applied to satellite imagery. The explosion in commercial satellites and the public availability of satellite imagery opens up new opportunities to analyze sustainable development-related variables at low cost, high accuracy, and great scale. When we compared satellite imagery from 200 random sample sites across multiple continents, we observed a substantial increase in the number and quality of images captured over time. Sites once imaged a couple times a year are now captured multiple times a week, and these images detail localized activity like infrastructure growth.\n", + "\n", + "\n", + "Satellite imagery is one piece of the puzzle. Another is the growing use, and usefulness, of artificial intelligence (AI)-powered machine learning (ML) models to extract common patterns of information from available data. In the development context, researchers have built models increasingly capable of assessing sustainable development metrics from satellite images. One satellite image of arable land might tell the story of a village’s economic health—its crop yields, its agricultural diversity, and its infrastructure development.\n", + "\n", + "\n", + "In our assessment, ML models leveraging satellite imagery inputs can amplify—and possibly outperform—traditional measurement tools like ground based surveys and censuses, offering a promising path forward. These technologies are unlikely to replace ground-based surveys altogether. But their augmentation of these methods can help address the data problems in sustainable development policy. For example, researchers can use satellite-based estimates of buildings, nighttime lights, and other markers to equip policymakers with more accurate estimates of local population size instead of infrequent, traditional census methods, particularly in lower-resourced countries.\n", + "\n", + "\n", + "Techniques to “train” ML models—to teach them which patterns to extract from available data—are improving. Researchers can now build models even when training data is less readily available or low in quality, as is often the case with sustainable development data. Synthetically created training data—data that is artificially created instead of generated by real-world events, we found, is another route to addressing data shortcomings, especially useful in the development context. In the agricultural setting, for example, crop model simulations trained on synthetic data to predict crop yields have performed as well as or better than approaches that calibrate directly to limited field data.\n", + "\n", + "\n", + "In addition, transfer learning and semi-supervised learning can enable researchers to circumvent issues surrounding data quantity and quality. In the former approach, models leverage large quantities of readily available data to learn a task similar to the task of interest and then “transfer” extracted patterns to sustainable development metrics. In the latter, models extract patterns from unlabelled satellite data (sometimes combined with small amounts of labeled data) without substantial human input. While noisy training data is a persistent problem that distorts model performance and evaluation, we found that models trained on high volumes of noisy data but tested on un-degraded data were stable performers, indicating that ML models can still be robust.\n", + "\n", + "\n", + "ML-driven, satellite-derived assessments of sustainable development variables hold evident promise, but they still face significant challenges. Trust issues loom large. Many ML models are not transparent, and it is often unclear how models arrive at a given outcome—such as predicting that a field’s crop yield will be low based on a satellite image. Policymakers are understandably weary of algorithms that cannot be fully explained. In addition to trust and explainability challenges, ML-driven estimates of sustainable development variables run into issues of scope. While some variables like crop growth can be inferred through ML-based approaches, others like educational attainment cannot be derived from satellite imagery.\n", + "\n", + "\n", + "Looking forward, researchers and practitioners alike can advance the use of satellite-driven assessments by focusing on explainability in models, cultivating public-private partnerships to operationalize model usage, and better understanding how satellite imagery and AI tools can address development data gaps. Policymakers, for their part, can better understand both the potential and the limitations of this emerging technology. After all, research does not occur in a vacuum, and, especially where development is concerned, policymakers have an important role in setting state policies, prioritizing investments, and raising attention to issues.\n", + "\n", + "\n", + "By focusing on strategies, such as, the use of synthetic data, transfer learning, and testing models on a small amount of high-quality data to counter noisy data, researchers and policymakers can leverage the power of machine learning and satellite imagery to change sustainable development for the better.\n", + "\n", + "\n", + "Marshall Burke is an associate professor in the Department of Earth System Science and deputy director of the Center on Food Security and the Environment at Stanford University. Anne Driscoll is a research data analyst at the Center on Food Security and the Environment at Stanford University.David Lobell is a professor in the Department of Earth System Science and the Gloria and Richard Kushel Director of the Center on Food Security and the Environment at Stanford University.Stefano Ermon is an assistant professor in the Department of Computer Science at Stanford University. This post is adapted from the Stanford HAI’s policy brief,“Using Satellite Imagery to Understand and Promote Sustainable Development.”\n", + "\n", + "https://www.brookings.edu/blog/techtank/2021/07/22/how-the-national-science-foundation-is-taking-on-fairness-in-ai/\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New article found for topic: data%20science\n", + "URL: https://www.brookings.edu/blog/techtank/2021/07/22/how-the-national-science-foundation-is-taking-on-fairness-in-ai/\n", + "TITLE: How the National Science Foundation is taking on fairness in AI\n", + "How the National Science Foundation is taking on fairness in AI\n", + "BODY:\n", + "\n" + ] + } + ], + "source": [ + "from bs4 import BeautifulSoup\n", + "\n", + "class Crawler:\n", + " def __init__(self, website):\n", + " self.site = website\n", + " self.found = {}\n", + "\n", + " def getPage(url):\n", + " try:\n", + " html = urlopen(url)\n", + " except Exception as e:\n", + " return None\n", + " return BeautifulSoup(html, 'html.parser')\n", + "\n", + " def safeGet(bs, selector):\n", + " \"\"\"\n", + " Utilty function used to get a content string from a Beautiful Soup\n", + " object and a selector. Returns an empty string if no object\n", + " is found for the given selector\n", + " \"\"\"\n", + " selectedElems = bs.select(selector)\n", + " if selectedElems is not None and len(selectedElems) > 0:\n", + " return '\\n'.join([elem.get_text() for elem in selectedElems])\n", + " return ''\n", + "\n", + " def getContent(self, topic, url):\n", + " \"\"\"\n", + " Extract content from a given page URL\n", + " \"\"\"\n", + " bs = Crawler.getPage(url)\n", + " if bs is not None:\n", + " title = Crawler.safeGet(bs, self.site.titleTag)\n", + " body = Crawler.safeGet(bs, self.site.bodyTag)\n", + " return Content(topic, url, title, body)\n", + " return Content(topic, url, '', '')\n", + "\n", + " def search(self, topic):\n", + " \"\"\"\n", + " Searches a given website for a given topic and records all pages found\n", + " \"\"\"\n", + " bs = Crawler.getPage(self.site.searchUrl + topic)\n", + " searchResults = bs.select(self.site.resultListing)\n", + " for result in searchResults:\n", + " url = result.select(self.site.resultUrl)[0].attrs['href']\n", + " # Check to see whether it's a relative or an absolute URL\n", + " url = url if self.site.absoluteUrl else self.site.url + url\n", + " if url not in self.found:\n", + " self.found[url] = self.getContent(topic, url)\n", + " self.found[url].print()\n", + "\n", + "\n", + "\n", + "siteData = [\n", + " ['Reuters', 'http://reuters.com', 'https://www.reuters.com/search/news?blob=', 'div.search-result-indiv',\n", + " 'h3.search-result-title a', False, 'h1', 'div.ArticleBodyWrapper'],\n", + " ['Brookings', 'http://www.brookings.edu', 'https://www.brookings.edu/search/?s=',\n", + " 'div.article-info', 'h4.title a', True, 'h1', 'div.core-block']\n", + "]\n", + "sites = []\n", + "for name, url, search, rListing, rUrl, absUrl, tt, bt in siteData:\n", + " sites.append(Website(name, url, search, rListing, rUrl, absUrl, tt, bt))\n", + "\n", + "crawlers = [Crawler(site) for site in sites]\n", + "topics = ['python', 'data%20science']\n", + "\n", + "for topic in topics:\n", + " for crawler in crawlers:\n", + " crawler.search(topic)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Crawling Sites through Links" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [], + "source": [ + "class Website:\n", + "\n", + " def __init__(self, name, url, targetPattern, absoluteUrl, titleTag, bodyTag):\n", + " self.name = name\n", + " self.url = url\n", + " self.targetPattern = targetPattern\n", + " self.absoluteUrl = absoluteUrl\n", + " self.titleTag = titleTag\n", + " self.bodyTag = bodyTag\n", + "\n", + "\n", + "class Content:\n", + "\n", + " def __init__(self, url, title, body):\n", + " self.url = url\n", + " self.title = title\n", + " self.body = body\n", + "\n", + " def print(self):\n", + " print(f'URL: {self.url}')\n", + " print(f'TITLE: {self.title}')\n", + " print(f'BODY:\\n{self.body}')" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/blog/fixgov/2023/04/05/what-we-learned-from-the-chicago-mayoral-results/\n", + "TITLE: What we learned from the Chicago mayoral results\n", + "What we learned from the Chicago mayoral results\n", + "BODY:\n", + "\n", + "As Chicagoans went to the polls on Tuesday, early signs pointed to a narrow victory for Paul Vallas, the former head of the city’s public school system and noted educational reformer, over Brandon Johnson, a former social studies teacher turned organizer for the Chicago Teachers Union. Vallas led in the pre-election polls by an average of 3 percentage points, a margin that widened to 6 points when undecided voters were asked whether they leaned toward a candidate. A higher share of Vallas’s supporters said that they were certain to cast their ballots, and more of Johnson’s said that they might change their minds about their choice. Vallas enjoyed a strong lead among voters 60 and older, who are the most likely to vote of all age cohorts, while Johnson was doing best among those 30 and younger, who are typically the least likely to participate.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "William A. Galston\n", + "\n", + "\t\t\t\t\tEzra K. Zilkha Chair and Senior Fellow - Governance Studies \n", + "\n", + " Twitter\n", + "BillGalston\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The ideological battle lines were clearly drawn. Vallas ran as a moderate, Johnson as an unabashed progressive. Johnson wanted to raise taxes on businesses, visitors of Chicago, and wealthy individuals to fund new social programs, while Vallas advocated fiscal restraint. The centerpiece of Vallas’s campaign was a pledge to crack down on violent crime. By contrast, Johnson expressed early sympathy (some would say support) for the “defund the police” movement that erupted after the murder of George Floyd before moderating his position. Not surprisingly, Vallas enjoyed the fervent backing of Chicago’s police union.\n", + "When incumbent mayor Rahm Emanuel ran for reelection in 2015, he also faced a progressive candidate, Jesus “Chuy” Garcia, leading some observers to draw parallels between then and now. But these elections differ in two key respects. First: because there was no Black candidate in the 2015 race, the Black vote was up for grabs, and Emanuel won it by a margin of 58 to 42. He also won the white vote by 2 to 1 while Garcia prevailed among Hispanics by a similar margin. This year, Brandon Johnson, a Black candidate with strong community roots, is receiving more than 70 percent support in this key constituency, while Vallas is outpolling Johnson among Hispanics. (Although Vallas is of Greek extraction, his last name — which means “fences” in Spanish — has led some Hispanics to believe that he is one of them.)\n", + "The second difference between 2015 and today: eight years ago, no single issue dominated the race, and the electorate was almost equally split among the economy, city finances, education, and crime as its chief concern. This year, violent crime dwarfed all other considerations, and the outcome of the race would be seen as a referendum on the candidates’ competing plans for addressing it.\n", + "It is the centrality of voters’ concerns about crime that gave this local contest national implications. A Vallas victory would have reinforced the tough on crime message that the election of Eric Adams in New York City had sent. If Johnson prevailed, his supporters would be able to argue that only a strong progressive message could bring young people and disaffected minority voters to the polls in large enough numbers to overcome those who wanted to intensify the use of tough, racially tinged methods against street-level criminals — and more broadly, to give progressives a chance to prevail over what they regard as the defenders of the status quo.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "FixGov\n", + "Do politicians get rewarded for spending money?\n", + "\n", + "Vanessa Williamson\n", + "Wednesday, March 22, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "FixGov\n", + "Can government protect women from domestic violence? Not if states do not follow up.\n", + "\n", + "Kaitlin N. Sidorsky and Wendy J. Schiller\n", + "Tuesday, March 21, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "FixGov\n", + "The gerrymander myth\n", + "\n", + "William A. Galston\n", + "Friday, March 17, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "To the surprise of many veteran observers, this is exactly what happened. With 90,000 absentee ballots still to be counted, Johnson led by a margin of 15,000 votes out of more than 550,000 cast. And because Johnson was receiving nearly 70% of the absentee vote, Vallas already has conceded the race.\n", + "Although exit polls are not yet available, preliminary results from Chicago’s 50 wards paint a clear picture. Johnson racked up nearly 80% of the Black vote on Chicago’s South Side and ran strongly among white liberals on the Lakefront. Vallas prevailed in the mostly white working-class wards in the Northwest and Southwest sections of the city, but his margins were not large enough to overcome Johnson’s margins elsewhere. With no Hispanic candidate on the ballot, turnout in the Hispanic-majority wards was reportedly anemic. Overall turnout, though, was higher than usual, which the Johnson campaign attributes in part to a surge among younger voters. We do not yet have enough information to confirm this assessment.\n", + "With a strong boost from the Chicago Teachers Union, which has become a dynamo of progressive policies and organizing in the Windy City, Johnson has an opportunity to advance his progressive agenda and become a trendsetter for other cities. Of course, governance always is more complicated than winning elections. The former will require policy approvals from the City Council and tax increases staunchly opposed by the business community to fund his proposed boost in social spending. How he deals with crime increases, underperforming schools, shaky city finances, and a divided Democrat party will determine how successful he is. Against the backdrop of the presidential campaign and national battles for control of Congress, next year won’t be dull.\n", + "\n", + "URL: https://www.brookings.edu/blog/order-from-chaos/2023/03/27/japans-new-security-policies-a-long-road-to-full-implementation/\n", + "TITLE: Japan’s new security policies: A long road to full implementation\n", + "Japan’s new security policies: A long road to full implementation\n", + "BODY:\n", + "\n", + "On December 16, 2022, Japan’s government released a new national security strategy, national defense strategy, and defense buildup program. In mid-January, Japanese Prime Minister Fumio Kishida and key Cabinet officials visited Washington to jointly highlight these documents and discuss the next steps for the U.S.-Japan alliance with the Biden administration.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Adam P. Liff\n", + "\n", + "\t\t\t\t\tNonresident Senior Fellow - Foreign Policy, Center for East Asia Policy Studies \n", + "\n", + " Twitter\n", + "AdamPLiff\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Jeffrey W. Hornung\n", + "\n", + "\t\t\t\t\tSenior Political Scientist - RAND Corporation \n", + "\n", + "\t\t\t\t\tAdjunct Professor - Georgetown University \n", + "\n", + "\n", + "\n", + "\n", + "At the time, much commentary rightly noted the historic ambition contained within Japan’s new strategies aimed at strengthening deterrence in response to a worsening regional security environment.\n", + "In all the excitement over these historic announcements, however, much of the discourse has inappropriately treated Japan’s strategies as a done deal, as though their full realization is inevitable. The reality is that an extraordinary alignment of political, economic, fiscal, and other stars will be necessary for Japan’s government to fully implement the Kishida administration’s stated ambitions over the next 5-10 years.\n", + "To be sure, Japan may ultimately get there. But the road ahead may be bumpy.\n", + "What Japan’s “three documents” are — and what they are not\n", + "Japan’s new National Security Strategy (NSS) — the first since 2013 and only the second ever — is Tokyo’s “supreme national security policy document.” It “provides strategic guidance for Japan’s national security policy areas, including diplomacy, defense, economic security, technology, cyber, maritime, space, intelligence, official development assistance (ODA), and energy.” Japan’s new National Defense Strategy (NDS) — the first so-named and the successor to the erstwhile National Defense Program Guidelines (six versions since 1976; last revised in 2018) — is basically a ten-year guideline that is designed to clarify Japan’s defense objectives and the ways and means by which the government intends to achieve them. Its companion document, the Defense Buildup Program, provides “program guidelines” for building and maintaining the critical defense capabilities needed to support the NDS.\n", + "These documents were approved by Japan’s National Security Council and Cabinet — the members of which are appointed by Japan’s prime minister. As such, they are a clear signal of the current Kishida government’s political and policy intent.\n", + "However, these documents are not legally-binding commitments, plans, or legislation that have received the imprimatur of Japan’s National Diet, much less been fully resourced.\n", + "“The most severe and complex security environment since the end of World War II”\n", + "While Japan’s defense orientation remains fundamentally unchanged in key aspects, these new strategies, together with the outcomes from the January 2023 U.S.-Japan summit and cabinet-level security meetings in Washington, reflect a re-evaluation by Japan’s government of what it can and must do to more effectively enhance deterrence in the face of a rapidly worsening security environment, a changing balance of power in East Asia, and the arrival of a “new era of strategic competition.” They are the latest manifestation of a judgment shared across successive administrations in Japan that Tokyo must adopt a more proactive role in deterrence and regional stability amidst what the documents call Japan’s “most severe and complex security environment since the end of World War II.”\n", + "The new NSS identifies China and North Korea’s activities as posing, respectively, “an unprecedented and the greatest strategic challenge” and a “grave and imminent threat.” Meanwhile, it notes that “Russia’s aggression against Ukraine has easily breached the very foundation of the rules that shape the international order.” Critically, the NDS judges that Russia’s aggression was possible because “Ukraine’s defense capability … was insufficient” for effective deterrence. All told, the sense of urgency that Japan’s posture must adapt quickly to a changing security environment vastly exceeds that of the 2013 NSS.\n", + "In response to threats both general and specific, the new strategy calls for “fundamentally reinforcing Japan’s own capabilities.” For example, Japan’s unprecedented call for “counterstrike capabilities” results from a frank recognition that China and North Korea’s ballistic and cruise missile arsenals could overwhelm Japan’s air and missile defense systems. Meanwhile, the call for surging defense spending reflects not only a push for new, expensive capabilities (e.g., counterstrike; unmanned systems) but also an awareness that after years of under-investment in key initiatives (e.g., munitions and parts stockpiles, passive base defenses, cyber and space capabilities), vastly greater resources are needed to strengthen deterrence and resilience.\n", + "\n", + "Related Books\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "The Crisis of Liberal Internationalism\n", + "\n", + "\n", + "\t\t\t\t\t\tEdited by Yoichi Funabashi and G. John Ikenberry \n", + "2020\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Dilemmas of a Trading Nation\n", + "\n", + "\n", + "\t\t\t\t\t\tBy Mireya Solís \n", + "2017\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "P\n", + "\n", + "\n", + "\n", + "Politicians and Policymaking in Japan\n", + "\n", + "\n", + "\t\t\t\t\t\tBy Gerald L. Curtis \n", + "2002\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "From here to there: a long (and potentially bumpy) road ahead\n", + "It is one thing to map out an ambitious vision and list of program priorities, which Japan has already accomplished with the release of last December’s “three documents.” But it is something different to effectively, efficiently, and fully implement it.\n", + "Show me the money: resourcing\n", + "As the new documents clearly acknowledge, major defense budget increases are the sine qua non for realizing much of Japan’s new national security vision. Without any doubt, the planned change in the official annual defense budget from 5.4 trillion yen in 2022 ($40 billion in today’s rates) and 8.9 trillion yen in 2027 ($67 billion in today’s rates) — a roughly two-thirds increase — is a historically significant pledge.\n", + "But the ambitious new spending targets were announced before a concrete plan for how to fully finance them. Generating and sustaining this massive amount of new funding over the next several years — and beyond — may not be easy.\n", + "Parliamentary debate has so far focused on some combination of sources — including tax increases, debt spending, expenditure cuts, and moving resources around from other budgets. Yet even within Kishida’s own Liberal Democratic Party (LDP), internal fissures have already emerged publicly. Furthermore, a December 2022 poll also showed that tax hikes were opposed by a clear majority. With an approval rating hovering between 30% to 40%, it’s not clear how much political capital Kishida (or his successors) will have to push through potentially unpopular funding measures. Tax increases in Japan have long been politically precarious.\n", + "There are certainly grounds for optimism in Tokyo. The Lower House just approved the government’s FY2023 budget request, which includes a massive defense budget increase of 26%. But there is no guarantee that achieving these spending levels will be fiscally or politically sustainable in the long run, especially with other recently announced initiatives also requiring massive outlays. Indeed, it is no secret that Japan faces severe demographic, economic, and fiscal headwinds.\n", + "None of this is to suggest that Japan reaching and sustaining an 8.9 trillion yen defense budget by 2027 is impossible. Rather, the point is only that it would be a mistake to assume it’s inevitable simply because it appears in the December 2022 Defense Buildup Program.\n", + "Don’t forget the politics\n", + "Beyond appropriations, legal and other reforms will also be necessary to fully implement pledges contained within the “three documents.” Given important constitutional, political, and other constraints on Japan’s defense posture, the devil may be in the details.\n", + "Forward momentum is already clear. Some new legislation has already been proposed, including as it concerns historic new reciprocal access agreements with Australia and the United Kingdom. In the coming years, additional legislation and reforms will be needed. For example, to implement the pledge to develop “active cyber defense” or capabilities to obtain human intelligence, the Diet may need to pass legislation related to privacy to assuage concerns about government overreach.\n", + "Domestic politics will impact whether and how quickly legislation will clear the Diet. Additionally, the precise content will also be shaped by political processes. At a minimum, Kishida’s LDP will need support from Komeito, its more “dovish” junior coalition partner with a clear track record of diluting major national security-related initiatives championed by LDP conservatives.\n", + "A potpourri of other issues\n", + "Lastly, even if fully resourced and legislated, Japan’s leaders will need to effectively implement Tokyo’s new national security strategy. First and foremost, they will need to negotiate a lot of political agreements — interagency; intra-coalition; and with the United States and other major international partners.\n", + "For Japan, an assortment of important tasks remains outstanding if it is to achieve its goals, including: securing qualitatively and quantitatively sufficient manpower; reinvigorating the defense industrial base; establishing new and diverse partnerships with the private sector; developing new doctrines, concepts, and forms of command and control; accelerating technological innovation; and cooperating with other countries in technological innovation and foreign military sales.\n", + "Adapting the U.S.-Japan alliance to Tokyo’s new ambitions and capabilities could be critical, especially if both countries judge that a rethink of the traditional “shield and spear” division of labor of roles and missions is necessary.\n", + "And none of these objectives will be pursued in a vacuum. Domestic and international political vicissitudes and unexpected events may force adjustments. The massive earthquake, tsunami, and nuclear disaster that struck Japan in March 2011 and Russia’s ongoing war against Ukraine are only two examples of how unforeseen “shocks” can drastically reshape political and strategic priorities.\n", + "Final word\n", + "Pointing out the difficult road ahead is not meant to minimize the significance of the ambitions contained in Japan’s new national security and defense strategies, or to suggest achievement is unlikely. Rather, the intent is simply to highlight that despite the bold steps forward already taken by the Kishida Cabinet, there remain many unknowns about what will come next, and how bumpy the path forward is likely to be. One thing is certain: a lot of hard work — in both Tokyo and Washington — lies ahead.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Order from Chaos\n", + "South Korea-Japan rapprochement creates new opportunities in the Indo-Pacific\n", + "\n", + "Andrew Yeo\n", + "Friday, March 17, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Order from Chaos\n", + "As Kishida meets Biden, what is the state of the US-Japan alliance?\n", + "\n", + "Mireya Solís\n", + "Friday, January 20, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Order from Chaos\n", + "Will Biden’s Asia trip help the US meet its strategic objectives?\n", + "\n", + "Mireya Solís\n", + "Tuesday, May 24, 2022\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/research/addressing-the-looming-sovereign-debt-crisis-in-the-developing-world-it-is-time-to-consider-a-brady-plan/\n", + "TITLE: Addressing the looming sovereign debt crisis in the developing world: It is time to consider a ‘Brady’ plan\n", + "Addressing the looming sovereign debt crisis in the developing world: It is time to consider a ‘Brady’ plan\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Brahima Sangafowa Coulibaly\n", + "\n", + "\t\t\t\t\tVice President and Director - Global Economy and Development \n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development \n", + "\n", + " Twitter\n", + "BSangafowaCoul\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "W\n", + "\n", + "\n", + "\n", + "Wafa Abedin\n", + "\n", + "\t\t\t\t\tResearch and Administrative Assistant to the Vice President and Director - Global Economy and Development \n", + "\n", + "\n", + "\n", + "\n", + "Among the challenges facing developing countries, none is arguably more crucial than the significantly deteriorated fiscal situation that threatens to erase several years of progress on development agendas. According to some estimates, almost 60 percent of the poorest countries are either in or at high risk of debt distress, nearly doubling since 2015 (Figure 1; World Bank 2022a). Total debt service payments on public and publicly guaranteed (PPG) external debt of the poorest countries rose to over $50 billions in 2021, with repayments now representing 11.3 percent of government revenue in the poorest countries, up from 5.1 percent in 2010 (Figure 2). In most developing countries, the cost of servicing external debt now exceeds expenditures on health, education, and social protection combined (UNICEF, 2021). The current global environment characterized by higher global interest rates and exchange rate depreciations against major currencies is adding to the fiscal challenge by raising the cost of external financing and debt service. Debt service payments for the poorest countries rose 36 percent to over $70 billion last year and are projected to remain elevated through at least 2027 (Figure 3). It is increasingly evident that the Common Framework for Debt Treatments, adopted by the G-20 to help developing countries restructure their debts and address solvency issues and protracted liquidity problems, is facing serious operational challenges. Echoing widely shared concerns about the limitations of the CF, the International Monetary Fund’s Managing Director called for changes to it while the World Bank President urged for the acceleration of its implementation. Likely due to the challenges with the CF, out of the 37 countries at high risk of or in debt distress, only four countries have requested assistance under the framework so far. We need a pre-emptive and wholesale approach to restore fiscal sustainability across the developing world and avert a systemic debt crisis.\n", + "Figure 1: Low-income countries Debt Sustainability Analysis\n", + "\n", + "Source: IMF Annual Report (2022a) and author’s calculations using the IMF Debt Sustainability Analysis for Low-income Countries (2022).\n", + "Figure 2: External PPG debt servicing cost (2000-2022)\n", + "\n", + "Source: Author’s calculations using World Bank International Debt Statistics (2021) and IMF World Economic Outlook database (2022b).\n", + "Figure 3: Total external PPG debt service coming due\n", + "\n", + "Source: Author’s calculations using World Bank International Debt Statistics (2021).\n", + "In this policy brief, we propose that the G-20 adopt a Brady-like scheme to accelerate the restructuring of external private sector debt to restore debt sustainability in the affected countries with the following design features.\n", + "First, we recommend the creation of a new special purpose fund—the recovery and sustainability fund (RSF)—to be capitalized by International Financial Institutions (IFIs) and bilateral donors. Second, the funds will be used to secure collateral against new tradable bonds—Recovery and Sustainability bonds (RSBs)— issued by participating indebted countries. The guarantees attached to the RSBs will provide credit enhancement and allow countries to issue the new bonds on terms that are more favorable than those of the current stock of private external debt. As shown in Figure 4, despite holding about 27 percent of the debt, the private sector accounts for 37 percent of the debt service due to the higher cost; the median coupon rate is 7.5 percent. The new bonds would also have longer maturities, ideally 30 years. The beneficiary countries could use the proceeds from the RSBs to retire the outstanding balance on the current private external debt.\n", + "Figure 4: Share of debt versus share of debt service cost in 2021\n", + "\n", + "Source: Author’s calculations using World Bank International Debt Statistics (2021).\n", + "The lower coupon rates on the RSB along with the longer maturity will lead to sizeable reductions in the debt burden to more sustainable levels. We conduct a simple illustrative simulation, which indicates that this scheme could reduce the debt service payments as a share of government revenues by up to 4 percentage points per year for the average developing country, cutting near half the debt service burden in many cases. We further estimate a total reduction in external debt repayment of up to $100 billion over the next five years. In the remainder of the brief, we document the deterioration in sovereign debt situation, review the challenges with the CF, and outline the case for a Brady-like plan.\n", + "Download the full policy brief.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Climate Change\n", + "Debt-for-adaptation swaps\n", + "\n", + "Chetan Hebbale and Johannes Urpelainen\n", + "Tuesday, March 21, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Global Development\n", + "Social and development impact bonds by the numbers\n", + "\n", + "Emily Gustafsson-Wright and Elyse Painter\n", + "Thursday, March 9, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Africa in Focus\n", + "Managing the compounding debt and climate crises\n", + "\n", + "Gracelin Baskaran\n", + "Wednesday, March 1, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "URL: https://www.brookings.edu/research/breaking-the-urban-doom-loop-the-future-of-downtowns-is-shared-prosperity/\n", + "TITLE: Breaking the ‘urban doom loop’: The future of downtowns is shared prosperity\n", + "Breaking the ‘urban doom loop’: The future of downtowns is shared prosperity\n", + "BODY:\n", + "\n", + "In 2019, the skylines of many American downtowns were sparkling with new construction. Hudson Yards in New York, the Frost Tower in San Antonio, San Francisco’s Salesforce Tower, the futuristic Amazon Spheres and surrounding towers in Seattle, and thousands of other buildings were all part of the more than 100 million square feet of new office space built in the United States just before the onset of the COVID-19 pandemic.1 Demand for cities seemed stronger than ever.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tracy Hadden Loh\n", + "\n", + "\t\t\t\t\tFellow - Brookings Metro, Anne T. and Robert M. Bass Center for Transformative Placemaking \n", + "\n", + " Twitter\n", + "lohplaces\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Hanna Love\n", + "\n", + "\t\t\t\t\tSenior Research Associate - Brookings Metro \n", + "\n", + " Twitter\n", + "hannamlove\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Flash forward four years. By now, COVID-19 has claimed the lives of over 1 million Americans and raised new questions about another potential casualty: Is the pandemic, particularly its impact on the nature of work, taking down the American city? Nowhere is this fear more pronounced than in the nation’s “superstar” cities and their shiny downtowns.\n", + "This specter of an office real estate apocalypse, “urban doom loop,” transit death spiral, or “ghost towns” is filling some urban observers with existential dread. So too are reports of rising crime and unsheltered homelessness in downtowns. However, this fear is not new, nor is it destiny.\n", + "But this dread should prompt public and private sector leaders to reassess. In fact, they have an opportunity to seize this moment to chart a new future for American cities—one that reimagines downtowns as prosperous and inclusive places that advance shared prosperity across all neighborhoods.\n", + "A group of public and private sector leaders in some of the nation’s largest cities—New York, Chicago, Philadelphia, and Seattle—have come together at Brookings Metro to do just this. These leaders were at the forefront of inclusive growth before the pandemic, and are now working with Brookings Metro and each other to identify policy, practice, and governance solutions that can be the seeds for the next generation of shared prosperity in downtowns, cities, and regions.\n", + "Ghost-town downtowns: An old narrative with a new twist\n", + "Only a generation ago, white flight and suburban sprawl left many cities as partial ghost towns. Anti-city rhetoric around “blight” and “inner-city crime” was used to justify the most negative aspects of urban renewal and, later, the war on drugs, which had significant consequences for the economic and social fabric of American cities. Suburbanization spread the fruits of growth out over more land area and jurisdictions, while public and private sector abandonment of center cities both concentrated poverty and increased the overall cost of services—weakening city and regional economies and exacerbating racial and economic segregation.\n", + "The villainization of American city centers began to reverse in the early 2000s, as highly educated young workers and some employers returned, lured by proximity to jobs, amenities, walkability, and a sense of place that downtowns offered. For instance, in 35 of the top 45 U.S. downtowns by job count, the share of the regional population living in the commercial core (Table 1, Columns 5 and 6) grew between 2000 and 2020. And in a select few downtowns, regional job market share grew between 2011 and 2019 (Table 1, Columns 2 and 3), with Boston leading the pack.\n", + "\n", + "\n", + "\n", + "...\n", + "\n", + "\n", + "NotesCC = commercial core, AC = Activity Center\n", + "Data sources\r\n", + " 2019 U.S. Census Bureau Longitudinal Employer-Household Dynamics (LEHD) Origin-Destination Employment Statistics (LODES), available online.\n", + "\r\n", + " 2020 U.S. Census\n", + "\n", + "\n", + "\n", + "The urban “downtown resurgence” of the 21st century provided a new boost for urban cores that had been in decline, but it also created economic cleavages within cities and regions. In cities across geographic and economic spectrums—from Chattanooga, Tenn. to Detroit—subsidized development downtown ushered in newcomers while other (often predominantly Black and Latino or Hispanic) neighborhoods continued to lack basic amenities like grocery stores. At the same time, suburban poverty rates climbed. While not an entirely new phenomenon, on the eve of the COVID-19 pandemic, there was a public consensus in cities that the benefits of downtown growth weren’t extending to many other parts of the city and region.\n", + "Chicago: “The most obvious challenge that Chicago has struggled with—and has such a reputation for—is the segregation. Literally being able to draw the line from north and south, you see where it changes…You see it at the street level. All of that is just very visible. And it’s happened for so long.”   \n", + "Over the last three decades, then, city centers went from being perceived as dangerous and declining (a reason for white flight and suburbanization) to increasingly unaffordable and exclusive (a driver of urban inequality) to being “dead” once again (due to the retreat and slow return of office workers, increasing business closures and vacancies, and fear of crime and unsheltered homelessness).\n", + "This reversal is forcing local and regional leaders to ask: What does the future of downtowns look like? How can downtowns adapt to become less reliant on commuters and office space? What purpose should our downtowns fulfill? And most importantly, how can downtowns be more inclusive, safe, and productive for all residents as they evolve and recover from the pandemic? The timing of these questions—combined with a fire hose of federal relief aimed directly at cities—presents local leaders with a material opportunity to “think big.”\n", + "New York: “I think we’ve moved the conversation from ‘I’m scared of getting Covid and giving it to my loved ones’ to ‘I’m generally not feeling okay going back to the office because I’m seeing all of this crime, or what we perceive as crime, on the street and I don’t want to go back.’”\n", + "\n", + "Methods\n", + "This brief is part of a mixed-methods research project that seeks to understand the future of downtowns through interviews, spatial data analysis, and direct engagement with local leaders. To understand perceptions of downtown health and recovery, in fall 2022, we spoke with nearly 100 stakeholders in New York,2 Chicago, Seattle, and Philadelphia, including business leaders, major employers, public sector officials, residents, place governance associations, and other nonprofit and civic leaders.3\n", + " \n", + "We then juxtaposed our qualitative findings with quantitative spatial analysis of population, employment, travel, and real estate data impacting downtown recovery. To do so, we first needed to develop a definition for “downtown” that is both consistent and comparable across cities, but precise enough to distinguish downtowns from adjacent submarkets. (This is because perceptions of what “downtown” is can vary significantly, and multiple cities have distinct commercial submarkets that have varying dynamics within a single city center.)\n", + " \n", + "To define “downtown,” we began by identifying each metro area’s central business district (CBD) as the census block with both the highest job density in the region and the largest absolute number of jobs; this is similar to the approach the International Downtown Association used in prior research. We then identified all adjacent blocks with a live-work quotient (ratio of residents to jobs, shown in Table 1, Column 8) of less than 0.1.4 We defined a metro area’s “commercial core” as the broader area of contiguous census block groups characterized by moderate- to high-density development with more jobs than residents (live-work quotient < 1).5\n", + " \n", + "This essay includes an analysis based on these definitions for the 45 largest U.S. downtowns (by job count, as shown in Table 1, Column 1). It is the first in a series of research products designed to inform the conversation—and local decisionmaking—on contemporary issues impacting American downtowns, from housing and adaptive reuse to perceptions and realities of public safety. \n", + "\n", + "Downtowns’ challenges didn’t start with the pandemic\n", + "To help local leaders “think big” about center city recovery, it’s important to understand the pre-pandemic spatial distribution of cities’ jobs, opportunities, and amenities. Prior to the pandemic, the country’s economic geography was already evolving, and there was a need for downtown leaders to understand and adapt to these trends.\n", + "First, even during the “urban resurgence,” downtowns were not the only game in town. In fact, the knowledge and innovation economy’s demands on place did not favor only the urban core. With so many jobs already suburbanized and with rising demand for new, collaborative, green, and amenity-rich work environments (which some older downtowns could not adapt fast enough to supply), a constellation of activity centers both adjacent to downtowns and their suburbs emerged to meet new demand for density. As many have pointed out, even before the pandemic, office-dominated places like San Francisco’s downtown were not places residents liked to frequent unless they had to.\n", + "\n", + "For example, Figure 1 shows the Seattle region’s activity centers (areas where economic, social, and civic assets cluster), which include downtown but also other increasingly desirable neighborhoods such as University District, Bellevue, and Capitol Hill, which have witnessed population and economic growth largely driven by knowledge economy workers.\n", + "At the same time regions were witnessing the growth of new activity centers, only one-third of U.S. downtowns were gaining job market share in the years between the Great Recession and the pandemic’s arrival. Another one-third were growing only enough to hold steady, while the last third were in decline. Almost all regions were threatened by widening income inequality between neighborhoods.\n", + "Some cities were responding to their changing economic realities. For example, even prior to the pandemic, Phoenix built a downtown strategy adapted to its relatively low downtown job market share and weak office demand (Table 1) with creative placemaking and by both attracting new anchor institutions and investing in transit connections to other activity centers. Chicago’s pre-pandemic Neighborhood Opportunity Fund aimed to link the wealth generated by downtown development with small businesses in underserved commercial corridors. But others were stuck in an old mindset—overlooking the importance of placemaking, blocking new housing development, limiting the growth of anchor institutions, or failing to invest in transit.\n", + "While the pandemic did not create the origins of downtowns’ challenges, in its wake, the persistent and likely structural weakening of downtowns’ productivity could become a closed, reinforcing cycle: a doom loop. Some say that given suburbanization, the growth of activity centers, and remote work, downtowns simply no longer matter in the same way they once did (or, worse, that they are smoking craters that people should avoid). Others say downtowns have gotten all the spoils in recent decades, and it’s high time that public dollars focus on investment in neighborhoods. But it’s not that simple.\n", + "From ‘downtowns versus neighborhoods’ to downtowns supporting neighborhoods\n", + "Both the “downtowns versus neighborhoods” and “cities versus suburbs” viewpoints present false dichotomies that hold all residents of a region back.\n", + "First, downtowns are extremely important to their regional economies. As a rule, downtowns are the most intense clusters of jobs in their metro areas—concentrating both higher-wage jobs (such as those in finance, insurance, law, or public administration) and lower-wage jobs (such as those in the arts or hospitality). Drawing on our mapping of regional activity centers, we compared the pre-pandemic job density of downtown activity centers to all other activity centers in their respective regions. For all of the 45 largest U.S. downtowns, downtown activity centers concentrate more jobs than other regional activity centers by a factor ranging from a low of 1.4 in Birmingham, Ala. to a high of 27.5 in Chicago (Table 1, Column 4). With few exceptions, even if 50% of jobs did not return to U.S. downtowns and 100% of jobs returned to every other job center (an extreme and unlikely scenario), downtowns would still be the densest job centers in their relative regions. Their well-being matters to the whole economy.\n", + "Downtowns also matter to city residents, including workers and small business owners. Jobs in downtowns are generally more physically accessible to city dwellers than those in far-flung suburban areas. Beyond that, downtowns’ draw as regional job centers helps support local businesses. Every day, when suburban commuters arrive at jobs in a city center, the fiscal damage done by suburbanization is partially mitigated by their local spending. To summarize Table 1, the suburban commuter workforce increases the average city’s daytime population—and thus the market for goods and services—by an average of 19% (Table 1, Column 7). In a few notable cases, this boost is 50% or more, as in Washington, D.C. (50%); Boston (56%); and Hartford, Conn. (60%). In cities with a much higher daytime population relative to their resident population, the loss of sales tax and local employment in services and hospitality are likely acute.\n", + "Finally, downtowns matter to cities’ fiscal health. A typical U.S. downtown such as Chicago produces more than 7 times its tax assessable value relative to land area, as shown in Figure 2. In the rest of the city, this relationship is inverted, with land area producing less than three-quarters of its share of taxable value. The biggest U.S. cities with major office real estate footprints are still anticipating future revenue shortfalls as the “fiscal time bomb” of commercial real estate valuations adjusts to the new market reality and federal aid is used up. The well-being of all parts of these cities depends on maintaining a balanced budget—and an essential part of that is keeping downtowns productive.\n", + "\n", + "While the challenges facing downtowns must be addressed to ensure a prosperous future for American cities, investing in strong downtowns does not have to come at the expense of supporting disinvested neighborhoods. Past policies and practices have created a perception (or reality) that downtowns prosper while neighborhoods stagnate. There is an obvious moral and economic mandate to invest in neighborhoods, but downtowns are a critical part of this solution—for example, through the revenue they generate, which can be used to fund neighborhood improvements and create a positive loop where downtowns benefit from healthy neighborhoods as neighbors. This is shared prosperity, but as we consider the future of downtowns and cities, it is not a given.\n", + "Philadelphia: “Until you fix Kensington, Philly can never be a world-class city. Philly could be a world-class city, but only if it fixes communities like Kensington. No question. You can’t just make Center City shiny.”\n", + "Actions local leaders can take to advance both downtown and neighborhood recovery\n", + "In 2021, we wrote that to recover from COVID-19, downtowns would need to adapt by modernizing their office product, diversifying their land use mix, and prioritizing livability (such as quality public spaces, arts, traffic safety, etc.). As public and private sector leaders consider these adaptations (such as in panels like “New” New York), it is critical that all parties resist falling into false dichotomies and forced tradeoffs, and instead work together across silos to create win-win solutions.\n", + "What kinds of win-win solutions could unlock another generation of value from our most historically productive places? And how might these solutions broaden who benefits from the productivity and prosperity that downtowns produce? In the coming months, Brookings Metro will continue to work with New York, Seattle, Chicago, and Philadelphia to explore and synthesize innovative policy solutions for the future of downtowns across the following domains:\n", + "\n", + "Inclusive workforce development and job recovery, including best practices on how to support a diverse workforce pipeline that helps employers find the talent they need and connects residents of all educational backgrounds to good and accessible jobs.\n", + "Entrepreneurship and small business development, including how to maximize the survival of existing small businesses while cultivating new and diverse small business ownership downtown.\n", + "Public safety and its impact on downtown recovery, including how to address both the perceptions and realities of crime in cities, with a focus on preventative, place-based solutions and the role of economic development professionals and the business community in promoting safety.\n", + "Homelessness and its impact on downtown recovery, including understanding the costs and benefits of revising tax structures and adaptive reuse ordinances to build new housing, as well as policy changes to prevent homelessness and displacement and increase the supply of permanent affordable housing.\n", + "Play and placemaking downtown, including strategies to make downtowns 24-hour destinations through arts, events, and programming, as well as how to measure the inclusivity of such placemaking interventions.\n", + "Collaborative governance, civic partnerships, and capacity building, including identifying which partnerships are needed to sustain downtown recovery and the key public and private sector actions needed to facilitate supportive capital flows between downtowns and historically disinvested neighborhoods.\n", + "\n", + "As Brookings Metro and the four-city cohort delve into policy and practice solutions for each domain over the coming months, we will publish findings and guidance for other city and downtown leaders nationwide to learn from.\n", + "Conclusion\n", + "As we experience yet another rhetorical onslaught predicting the decline of cities and their downtowns, it is important to remember that cities have faced their share of crises before. From suburbanization and white flight to the rise of crime in urban centers in the 1990s to the 9/11 terrorist attacks on New York, cities and downtowns—and most especially, the people who activate them— have proved their resilience.\n", + "The COVID-19 pandemic is no different, except that city leaders are facing a task that is two-fold: 1) ensuring a strong downtown recovery to restore the fiscal and economic well-being of their city and region; and 2) promoting a recovery that intentionally confronts the challenges and inequities that plagued downtowns prior to the pandemic.\n", + "As the heart of our nation’s economy, downtowns have the unique potential—and imperative—to act boldly and inclusively to rebuild stronger than before. Rather than seeking to return to the pre-pandemic status quo, this is a pivotal moment for downtowns to build equity into revitalization by implementing policy solutions that connect downtown prosperity to more neighborhoods and more people. Only then can cities and regions realize their full potential.\n", + "\n", + "Related Books\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Hyperlocal\n", + "\n", + "\n", + "\t\t\t\t\t\tBy Jennifer S. Vey and Nate Storring \n", + "2022\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The authors would like to thank DW Rowlands for her excellent research assistance on this piece. They also extend their sincere gratitude to Fred Cerullo (Grand Central Partnership), David Downey (International Downtown Association), Anne Fadullon (City of Philadelphia), Paul Levy (Center City District), Julie Stein (City of New York), and Jennifer S. Vey for reviewing earlier drafts of this piece. Any errors that remain are solely the authors’.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/research/the-second-half-of-the-sustainable-development-goal-era-ideas-for-doing-things-differently/\n", + "TITLE: The ‘Second Half’ of the Sustainable Development Goal era: Ideas for doing things differently\n", + "The ‘Second Half’ of the Sustainable Development Goal era: Ideas for doing things differently\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "John W. McArthur\n", + "\n", + "\t\t\t\t\tDirector - Center for Sustainable Development \n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development \n", + "\n", + " Twitter\n", + "@mcarthur\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "This September, the U.N. will convene a midpoint summit on the Sustainable Development Goals, halfway between their 2015 launch and 2030 deadline. For many leaders gathering in the General Assembly, the mood might be somber. Stark global tensions alongside inadequate SDG progress make for a tough outlook. But a successful summit will need to focus on pragmatics more than sentiment: What has gone well, where could a burst of effort tackle gaps, and—perhaps most importantly—what needs to be done differently? \n", + "The spirit of doing things differently is central to the purpose of the SDGs. The title of the all-country agreement establishing the goals was nothing shy of “Transforming our world.” It emphasized the “universal, integrated, and interrelated nature” of the goals, which “seek to realize the human rights of all.” Societies were not signing on to cherry-pick goals here and there. A hundred and ninety-three countries committed to transformation across all the goals, everywhere.  \n", + "But how much has actually changed in the ensuing years? Or more plainly, how many changes have turned out to be for the better?   \n", + "Fortunately, there are success stories. Compared to 2015, for example, a million fewer children under five are dying every year. India has extended basic sanitation access to more than 165 million additional people. Amid the pandemic, Togo deployed frontier digital technologies to deliver rapid cash assistance to nearly a quarter of its adult population, with priority to informally employed women. Since the SDGs were adopted, more than 200 legal reforms have been enacted across more than 100 countries to address domestic violence, penalize sexual harassment, and prohibit gender discrimination in employment. The United Kingdom’s greenhouse gas emissions dropped by roughly a fifth, despite the country’s remarkable political travails. Between 2015 and early 2023, Canada jumped from protecting around 1 percent to nearly 15 percent of its marine and coastal areas.  \n", + "A growing range of constituencies are engaging on the SDGs too. More than 60 local government entities have crafted “Voluntary Local Reviews” of their SDG progress since New York City pioneered the first one in 2018. Almost three-quarters of the world’s 250 largest companies by revenue now report against some dimension of the SDGs. Times Higher Education’s “Impact rankings” have prompted huge numbers of universities to benchmark efforts against the SDGs. The Nature family of journals has intentionally expanded their range of outlets to heighten SDG-related scientific debates, most recently including Nature Water, launched earlier this year.  \n", + "But despite these successes, empirical assessments draw attention to widespread SDG shortfalls. Our own previous work shows the huge number of people’s lives and basic needs at stake around the world, in addition to the planet itself. On many measures of SDG 5 for gender equality, current trends imply waiting decades if not centuries for targets to be achieved. Too few trendlines have changed, and in several areas the world is moving in the wrong direction.  \n", + "The bottom line is that the world has not been doing enough things differently enough to be on course for SDG success. One 2022 meta-study soberly assessed that the SDGs’ impact on institutions and policies “has been largely discursive,” with limited “institutional impact, from legislative action to changing resource allocation.” Other studies have shown similar gaps in the private sector, where SDG rhetoric still doesn’t translate enough to action.  \n", + "At the Brookings Center for Sustainable Development (CSD), we confront such findings with both clear-eyed rigor and determination. Our scholars and scholar teams work within their respective domains of expertise to distill challenges into component parts and distinguish between which pieces need reinforcement, which merit targeted innovation, and which need wholesale renewal. We draw inspiration from one another’s commitment to improving understanding and recommending better paths forward. \n", + "In that spirit, this short compendium captures a cross section of SDG-focused insights and recommendations from CSD-affiliated scholars. Each brief essay describes something with the potential to be done differently during the second half of the SDG era. Across a dozen contributions, topics range from reframing media coverage of the SDGs to measuring and elevating the role of the private sector; from participatory approaches to transforming education systems to new learning paradigms for human rights; from better risk-taking in fragile countries to improving infrastructure and services for care; from fit-for-purpose multilateral development banks to a purpose-driven fund to end extreme poverty; from turbo-charged Canadian SDG approaches to renewed American SDG leadership; from breakthroughs in digital public infrastructure to innovative frontiers in the digitally empowered methods of collective behavior science.  \n", + "We hope these essays can help spark bigger, broader, and bolder public debates on things to be done better during the second half of the SDG era. The world needs to keep ramping up critical keystones to success—the policies, institutions, technology, data, business innovations, government actions, and multistakeholder consortiums that will help do things differently. Shallow either-or arguments about opportunity versus failure are of little use when many ingredients for SDG success are increasingly in place. The practical challenge lies in fostering the complementary ingredients required to achieve breakthroughs. \n", + "Over the coming months, CSD scholar teams will continue to push forward on specific challenges at the heart of the “second half” agenda for the SDGs. These vary from renewing multilateral financing for climate and development to reframing fiscal policies for gender equality to reimagining policy for rural America. Through the 17 Rooms initiative, we will continue to innovate around diverse forms of “next step” group actions, both internationally and at the community level.  \n", + "Across all 17 goals, individual countries and communities deserve to have their own debates on what they’d like to do differently. Where the evidence suggests things haven’t yet been done differently enough, the looming 2030 deadline can help renew motivation to spark change.   \n", + "The pledge of a world transformed will boil down to people coming together in groups of all scales to drive better actions together. Doing so with urgency can still deliver an inclusive world of sustainable prosperity for all. \n", + "Download the full essay.\n", + "\n", + "URL: https://www.brookings.edu/research/hey-journalists-we-have-a-story-for-you/\n", + "TITLE: Hey journalists, we have a story for you\n", + "Hey journalists, we have a story for you\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Matthew Bishop\n", + "\n", + "\t\t\t\t\tNonresident Senior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + " Twitter\n", + "mattbish\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "“Boring U.N. stuff,” the global journalistic profession seems to have collectively concluded early on about the Sustainable Development Goals (SDGs), before moving swiftly on to more interesting fare—of which, it is true, the past few years have offered a plentiful supply, what with Trump, COVID-19, Ukraine, Harry and Meghan, and other surefire headline grabbers. \n", + "Yet the media will likely have far more to say about the SDGs as the 2030 end date approaches. Any race against the clock generates tension, drama, and big decisions to report on as the deadline draws near.    \n", + "More subtly, the COVID-19 pandemic has provided tangible evidence of why taking the sort of broad approach adopted for the SDGs makes sense by highlighting how thoroughly interconnected are issues of personal and planetary health, exclusion, and inequality. Reporting on the interconnections between the various problems the world faces during this era of polycrisis should be far easier for a journalist to pitch to an editor post-pandemic. The smarter newsroom bosses are more likely to recognize that their writers should look beyond their narrow domain expertise to see the bigger picture. Asking a writer “how does your story relate to the SDGs?” could become a useful shorthand for editors wanting to encourage the use of a more panoramic reporting lens. \n", + "The smarter newsroom bosses are more likely to recognize that their writers should look beyond their narrow domain expertise to see the bigger picture. Asking a writer “how does your story relate to the SDGs?” could become a useful shorthand for editors wanting to encourage the use of a more panoramic reporting lens. \n", + "Business journalism may lead the rest of the profession in doing this kind of reporting, as the transformation demanded by the SDGs is becoming increasingly material to the companies and investors they write about.    \n", + "During last year’s 17 Rooms flagship process, hosted by the Center for Sustainable Development at the Brookings Institution and The Rockefeller Foundation, leading business media editors gathered in “Room 12,” a working group focused on actionable next steps for SDG 12 centered around responsible consumption and production. All of the editors said their organizations are now taking the SDGs—and their parallel yardstick in the business world, ESG (environment, social, governance)—far more seriously than they used to, and they expected their interest to keep growing. They also increasingly see a need to upgrade their newsrooms with the expertise needed to cover this story in a sophisticated way. \n", + "Business pressures from content consumers, advertisers, and conference sponsors are all helping push things in the right direction, but the biggest motivator is that this is no longer “boring U.N. stuff.” There is now a real story to report on, with real CEOs and successful investors wanting to talk about the profits, opportunities, and risks that abound on the road to SDG world. \n", + "Business editors first started to get it when companies started pledging to become carbon “net-zero.” What could be more natural for an editor than to have reporters look into how exactly these companies proposed to make this transformation, whether their strategy made any sense, and whether they were actually implementing it.   \n", + "As ESG now moves center stage politically in the U.S. and globally, serious media, especially those with decent business coverage, will likely do what it does best: report, inform, educate, and hold decisionmakers to account.  \n", + "However superficial the Punch-and-Judy political debate about ESG may seem compared to the seriousness of underlying environmental, social, and economic challenges of global sustainable development, it does stem from serious questions about the extent to which business should, can, and does make genuine efforts to improve the state of the world. Mobilizing the media to answer these questions is just what the SDGs need.  \n", + "Indeed, a more engaged media will increase general awareness of why the Global Goals are needed, and what will be required to get the job done. It will highlight what is working, and more painfully, highlight failures and a good deal of humbug in private-sector ESG/SDG initiatives. If that latter part hurts, it should also inspire learning and a determination to do better in future. For the SDGs, it will certainly beat being ignored. \n", + "Download the full essay.\n", + " \n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/research/caring-about-care-an-sdg-5-priority/\n", + "TITLE: Caring about Care: An SDG-5 priority\n", + "Caring about Care: An SDG-5 priority\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Caren Grown\n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\n", + "\n", + "\n", + "Goal 5 is an ambitious and expansive approach to reducing gaps between males and females and enabling women and girls to live their lives to the fullest. It proposes a multidimensional definition of, and comprehensive set of indicators for, tracking gender equality and women’s empowerment, complemented with targets and indicators across other goals. While advances have been made toward many aspects of Goal 5, the U.N. estimates that at the current rate, it will take nearly 300 years to meet all targets.  A high priority for accelerating progress is Target 5.4, which seeks to equalize the time that women and men spend on unpaid care and domestic work, including care for children, the elderly, the sick, and those with disabilities. Available data suggest this target is seriously off track.   \n", + "Even before COVID-19 exposed glaring gaps in the infrastructure, systems, and services for care, inequality between males and females in unpaid care and domestic work were stark, with women providing the bulk of care worldwide. At the same time, the need for more and better care is urgent.  Many countries will experience an increased demand for care, especially elderly care, over the next 7 years considering demographic trends and climate-related events. Fertility remains high in several countries in sub-Saharan Africa, which will require care for children, while several countries in Asia, the Middle East, and Europe face high growth rates of the elderly population, with many countries expected to turn greyer by the end of the SDGs in 2030. Conflict also increases the need for care, especially for those with physical and emotional disabilities. Unless the supply of publicly supported care for children, the elderly, and those with disabilities increases, and men take up more caring labor, women of working age will face pressure to drop out of the labor force to take on this role.  \n", + "There are currently no international legal standards for the provision of care. Nonetheless, the global community has adopted the “Five R” framework for care:  recognize, reduce, and redistribute unpaid work, and reward and represent paid caregiving. Comprehensive and coordinated policies, investments, and actions are needed to implement this framework. National governments play a key role in setting policies, including for parental leave and long-term care services1; occupational, safety, and other regulations for public and private care providers; and financing through public expenditure or tax credits.  Governments can also incorporate care as an economic sector in industrial planning and job creation strategies. As they do so, more investment and better regulation to assure the quality of care services will be critical. \n", + "Since care provision largely takes place at the local level, municipalities also play a key role—delivering or contracting out public services; issuing building codes, licensing requirements, and standards for care facilities; inspecting facilities to ensure standards are met; and providing financial support to families, to name a few functions.2 Bogota is a shining example of a municipality that has adopted a comprehensive care framework, centered around CARE blocks that currently operate in 10 areas of the city, providing a range of quality services for caregivers and recipients.   \n", + "But there is more to do. For instance, mayors, city councils, and urban planners can incorporate care services and infrastructure into city master plans. Collecting and analyzing data on the demand for care and the supply of care services is a first step. Planners can also link care diagnostics to strategies for housing, transport, land use, energy, water and sanitation, and food security. Meanwhile, cities can begin incorporating care provision into planning for climate risks and adaptation in response to climate shocks.  Employer-supported child care can be particularly impactful in low-income and post-conflict contexts where fiscal space may be constricted and publicly provided services are limited.  The needs of unpaid and informal caregivers should be at the heart of these efforts.  \n", + "All individuals require care and provide care at some point throughout their lives, many without the support they need.  Continued inaction and lack of investment is no longer an option. By 2030, there is a major opportunity to advance SDG 5.4, and ensure the world is on the way to building quality systems to support caregivers and those who receive it. National- and local-level leaders working together can help pave the way forward.    \n", + "Download the full essay.\n", + "\n", + "\n", + "URL: https://www.brookings.edu/research/participatory-policymaking-to-transform-education-systems-and-meet-sdg-4/\n", + "TITLE: Participatory policymaking to transform education systems and meet SDG 4\n", + "Participatory policymaking to transform education systems and meet SDG 4\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Rebecca Winthrop\n", + "\n", + "\t\t\t\t\tDirector - Center for Universal Education \n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development \n", + "\n", + " Twitter\n", + "RebeccaWinthrop\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Still reeling from the COVID-19 pandemic, education systems around the globe are facing a myriad of challenges. The world did not have enough teachers before the pandemic, but today the crisis is even worse. Overwhelmed, exhausted, underpaid, and unappreciated, teachers (like nurses in many places) are leaving the profession.  UNESCO estimates tens of millions more are needed globally—from roughly 9,000 more in the Netherlands to 16.5 million in sub-Saharan Africa. Children’s well-being has also suffered drastically. Child marriage is on the rise in countries in the Global South with UNICEF estimating 10 million more girls at risk of child marriage due to COVID-19. In the Global North, especially, the pandemic has created a mental health crisis with the American Academy of Pediatrics declaring it a U.S. national emergency in October 2021.   \n", + "Unsurprisingly, the pandemic’s lasting impacts also reach academic learning. Many children, especially those with learning differences and from the most marginalized communities, are being further left behind on mastering essential skills like literacy and numeracy. In low- and middle-income countries, learning poverty (the percentage of 10-year-olds not able to read a simple text) has increased due to the pandemic, rising from 57 percent pre-pandemic to an estimated 70 percent in 2022. In the high-income country context of the United States, equity gaps widened with math proficiency scores for eighth-graders falling to levels not seen since 2000.  \n", + "Given what educators and systems leaders face, many argue that dialing back our ambition and focusing on closing the learning gaps on essential academic skills, namely literacy and numeracy, should take center stage rather than maintaining our collective focus on developing the lifelong learners envisioned in SDG 4. However, dialing back ambition is not the answer. Finding new and transformative ways to tackle the suite of problems is. The risk of replacing the SDG education goal with a more focused objective on, say, literacy and numeracy is that even though it would be framed as a floor to build on, education systems will orient around it and ultimately treat it as the core objective. It will unwittingly become a ceiling. One has to look no further than the United Nations Millennium Development Goals that focused on access to primary school for boys and girls as the starting point for a quality education, assuming quality teaching and learning would follow. Instead, it became the end goal with millions of children entering new schools and no learning taking place. \n", + "What is needed is a serious attempt to meet SDG 4 not by tinkering on the margins but by transforming systems so that they address the deep gaps in equity and relevance simultaneously. One approach to doing this is to harness innovation and bring it to the center of systems as we argued in 2018 in “Leapfrogging Inequality: Remaking Education to Help Young People Thrive.” The COVID-19 pandemic showed that education systems can indeed innovate in their core business. Several important pandemic-era innovations have the potential to deeply transform systems. For example, schools meaningfully sharing power with families on how to best collaborate to educate children is one important innovation that would transform systems. As our work in the Brookings Center for Universal Education highlighted, schools with deep relational trust between families and teachers are 10 times more likely to improve students’ academic and well-being outcomes. Maintaining this shift alongside other new practices such as effectively harnessing technology and integrating a focus on student well-being and mental health can help reach more children and provide them with the support and skills they need.       \n", + "Ultimately, developing and stewarding education system transformation requires a participatory approach that puts those inside the system at the center. Government leaders, teachers, students, and communities need to develop a shared vision of the purpose of their own education systems. Too often,  essential actors feel left on the sidelines with too little space made for their involvement by those with power. Engaging in participatory policymaking approaches is essential to sustain the commitment needed to accompany transformation over time and has been done in contexts ranging from British Columbia, Canada to Bogotá, Colombia. As David Sengeh of the government of Sierra Leone and I wrote together last year, education system transformation hinges on refreshed local assessment of goals—“are they meeting the moment that we are in, are they tackling inequality and building resilience for a changing world, are they fully context aware, are they owned broadly across society”—and then aligning action around shared answers.  With common purpose, education systems can be transformed to dramatically reduce inequalities and produce lifelong learning for all.  \n", + "Download the full essay.\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/blog/brown-center-chalkboard/2023/04/05/state-of-the-states-gubernatorial-policy-priorities-in-2023/\n", + "TITLE: State of the States: Gubernatorial policy priorities in 2023\n", + "State of the States: Gubernatorial policy priorities in 2023\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Katharine Meyer\n", + "\n", + "\t\t\t\t\tFellow - Governance Studies, Brown Center on Education Policy \n", + "\n", + " Twitter\n", + "@katharinemeyer\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Rachel M. Perera\n", + "\n", + "\t\t\t\t\tFellow - Governance Studies, Brown Center on Education Policy - The Brookings Institution \n", + "\n", + " Twitter\n", + "@rachelmarisa\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The federal government plays a limited role in education policy—states and local governments are primarily responsible for educating our nation’s youth. The first federal laws about education governance weren’t introduced until 1965 with the Elementary and Secondary Education Act (ESEA) and Higher Education Act (HEA). And still, states are given broad latitude to determine how to best implement these federal laws in their states. Today, the federal government provides only about 10% of funding for K-12 public education and does not directly contribute to college operations (though the U.S. Department of Education administers a large portfolio of financial aid programs to students pursuing postsecondary education). \n", + "States are often seen as “laboratories of democracy”—individual systems with their own executive, legislative, and judicial branches that may experiment with the development and implementation of policies to inform policy adoption in other states and at the federal level. These state-level policies then tend to “diffuse” throughout the country. One example of the prominent role that states play in agenda setting when it comes to education policy is the Common Core State Standards, K-12 education standards developed by the Council of Chief State School Officers and the National Governors Association, not by the federal government.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Brown Center Chalkboard\n", + "The alarming state of the American student in 2022\n", + "\n", + "Robin Lake and Travis Pillow\n", + "Tuesday, November 1, 2022\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Brown Center Chalkboard\n", + "What if Americans sour on public education? \n", + "\n", + "Jon Valant\n", + "Monday, August 29, 2022\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Brown Center Chalkboard\n", + "Can public education return to normal after the COVID-19 pandemic?\n", + "\n", + "Paul T. Hill and Ashley Jochim\n", + "Thursday, October 29, 2020\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The present moment reveals important insights into states’ priorities on public education. Most education systems—from early childhood to K-12 to postsecondary—are still reeling from the harmful effects of the pandemic and pandemic-era political conflicts. Many systems are also grappling with the wave of censorship bills and book bans sweeping K-12 schools and colleges across the country. In this context and with so much turnover taking place in state houses across the country—36 states held gubernatorial elections last fall with nine new governors starting their terms in 2023—we aim to understand what these changes mean for education policy. \n", + "In this series, we focus on gubernatorial education priorities for 2023 to understand what state laboratories are experimenting with. Each year, many of the nation’s governors deliver their “State of the State” reports. Analogous to the President’s State of the Union, these addresses provide governors an opportunity to present their policy priorities for the year and the remainder of their terms. In this series, we first review gubernatorial priorities laid out in governors’ State of the State addresses. We then provide key contextual information about these efforts — what the research says about various proposals and lessons learned from prior attempts to implement similar policies—that we hope can guide the transition from policy priority to policy in practice. \n", + "To do so, we rely on resources developed by teams at FutureEd, the Education Commission of the States, and the National Governors Association. These teams collated governors’ State of the State videos and transcripts, coded education topics covered, and made these resources publicly available for analysis. We are grateful for their careful work which this series builds on. \n", + "\n", + "URL: https://www.brookings.edu/blog/brown-center-chalkboard/\n", + "TITLE: State of the States: Gubernatorial policy priorities in 2023\n", + "BODY:\n", + "\n", + "URL: https://www.brookings.edu/blog/fixgov/2023/04/05/the-right-to-abortion-will-be-secured-before-the-end-of-the-decade/\n", + "TITLE: The right to abortion will be secured before the end of the decade\n", + "The right to abortion will be secured before the end of the decade\n", + "BODY:\n", + "\n", + "When the right to choose an abortion is on the ballot, it wins. And it will keep winning for the rest of the decade until the right to abortion is secured state by state in all but the deepest red states and the U.S. Supreme Court’s decision is rendered moot.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Elaine Kamarck\n", + "\n", + "\t\t\t\t\tFounding Director - Center for Effective Public Management \n", + "\n", + "\t\t\t\t\tSenior Fellow - Governance Studies \n", + "\n", + " Twitter\n", + "EKamarck\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The latest evidence? On Tuesday, the liberal Milwaukee circuit court judge, Janet Protasiewicz, scored a solid victory over the conservative candidate Daniel Kelly in a race whose outcome would determine the majority on the Wisconsin Supreme Court and pave the way for overturning the 1849 law outlawing abortion.\n", + "This race is but the latest example of the power this issue has to upend American politics. It happened first in August 2022 when a referendum on the primary ballot in Kansas would have amended the state constitution to make abortion illegal. Turnout was high — more votes were cast (980,000) than in any primary election in Kansas history. In a state Donald Trump won by 15 points, the anti-abortion referendum lost 59% to 41%. The larger more urban counties rejected the referendum by large margins and in the rural counties where it won it won by narrow margins.\n", + "And now Wisconsin.\n", + "In the 2020 presidential race, Wisconsin was a battleground state where Biden won a narrow victory (just over 20,000 votes) over Trump. The race for the open Supreme Court seat broke all records for turnout and money spent. Turnout appears to be 1.8 million — over half of the turnout in the 2020 presidential election. Over $45 million was spent according to WisPolitics — “a stunning sum for a statewide, off-year, springtime election.” The campaigning was intense, complete with nearly half of the ads about abortion.\n", + "As the race went on, Dan Kelly, the conservative candidate with a pro-life record, tried to change the subject and tamp down the abortion issue; realizing as the race progressed (as did others in the 2022 midterms) — that his stance was a loser.\n", + "As in Kansas, the power of the abortion issue is evident when compared to the presidential vote county by county. In the state’s two most populous counties, Milwaukee and Dane (home to the University of Wisconsin in Madison) Protasiewicz won big, which was to be expected. However, she also exceeded Biden’s vote in those two places — by 3.6% in Milwaukee and 6.3% in Dane. In the state’s next three most populous counties Biden lost to Trump, but in each one Protasiewicz performed better than Biden. In the third largest county in the state, Wausheka, Biden won 38.9% of the vote but Protasiewicz won 42%. In Brown County Biden won 45.6% of the vote but Protasiewicz won 52%. And in Racine County Biden won 47.2% of the vote and Protasiewicz won 49%.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "FixGov\n", + "What we learned from the Chicago mayoral results\n", + "\n", + "William A. Galston\n", + "Wednesday, April 5, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "FixGov\n", + "Do politicians get rewarded for spending money?\n", + "\n", + "Vanessa Williamson\n", + "Wednesday, March 22, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "FixGov\n", + "Can government protect women from domestic violence? Not if states do not follow up.\n", + "\n", + "Kaitlin N. Sidorsky and Wendy J. Schiller\n", + "Tuesday, March 21, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "As we saw in the 2022 midterms — when the freedom to choose is on the ballot it wins — upending prior voting patterns. The issue today is more real than it was in past races where Democrats always tried to argue its importance. Not surprising. A right withdrawn will always get more attention than a right taken for granted. While we don’t have any exit polls to confirm that abortion was foremost in voters’ minds, the explicit prominence of the issue in Protasiewicz’s campaign and Kelly’s failed attempts to change the topic are evidence that there was one big issue in this race.\n", + "In the coming years pro-choice advocates will try to put as many pro-choice referenda on the ballot as possible. In 2022, six states had referenda on the ballot and the pro-choice position won in all of them. Wisconsin’s attempt at a referenda was rejected, but the recent Supreme Court race took its place and victory there will likely accomplish the same thing. In 2024 we can expect at least ten states to have citizen-led ballot initiatives enshrining abortion rights in their state constitutions.[1]\n", + "The strength of the pro-choice position goes well beyond the debate over abortion itself. Deep in the American DNA is the belief that we should have as little government and as much liberty as possible. The law’s intrusion into the complex medical and moral issues surrounding as personal a decision as abortion strikes at the heart of American’s desires to control their own destiny. All indications are that by the end of the decade the Supreme Court’s decision to return abortion rights to states will reinstate abortion across the land.\n", + "\n", + "[1] Arizona, Arkansas, Florida, Missouri, Montana, Nebraska, North Dakota, Ohio, Oklahoma and South Dakota.\n", + "\n", + "URL: https://www.brookings.edu/blog/fixgov/\n", + "TITLE: The right to abortion will be secured before the end of the decade\n", + "\n", + "\t\t\t\tFixGov\t\n", + "BODY:\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/blog/order-from-chaos/2023/04/05/when-might-us-political-support-be-unwelcome-in-taiwan/\n", + "TITLE: When might US political support be unwelcome in Taiwan?\n", + "When might US political support be unwelcome in Taiwan?\n", + "BODY:\n", + "\n", + "For a time, it looked as though House Speaker Kevin McCarthy would make a high-profile visit to Taiwan this spring. There was some suggestion that this might lead Beijing to react even more coercively than it did after the previous speaker, Nancy Pelosi, visited in August 2022. Perhaps for that reason, McCarthy will now have a meeting with Taiwanese President Tsai Ing-wen when she transits through Los Angeles, California. Depending on how McCarthy frames his support for Tsai, however, the People’s Republic of China (PRC) might still escalate its military operations around Taiwan to signal its opposition to the alleged “hollowing out” of the U.S. “One China” policy. Depending on the scale of these actions, some Taiwanese voters might again conclude that such symbolic demonstrations of support risk entrapping Taiwan in an escalating U.S.-China rivalry.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Alastair Iain Johnston\n", + "\n", + "\t\t\t\t\tGovernor James Albert Noe and Linda Noe Laine Professor of China in World Affairs - Harvard Fairbank Center for Chinese Studies \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tsai Chia-hung\n", + "\n", + "\t\t\t\t\tProfessor - National Chengchi University \n", + "\n", + "\t\t\t\t\t2022-23 Visiting Scholar - Harvard Fairbank Center for Chinese Studies \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "George Yin\n", + "\n", + "\t\t\t\t\tDistinguished Research Fellow - National Taiwan University Center for China Studies \n", + "\n", + "\t\t\t\t\tResearch Associate - Harvard Fairbank Center for Chinese Studies \n", + "\n", + "\n", + "\n", + "\n", + "According to recent surveys we conducted in Taiwan, a majority of respondents believe that Pelosi’s visit was detrimental to Taiwan’s security. At first glance, this seems surprising. In a triangular relationship between a patron state (the United States) and its client (Taiwan) on the one hand, and a shared adversary (China) on the other, one might normally expect the client to welcome visible and credible signals of support.\n", + "However, even as its security environment appears to be deteriorating, a client might not welcome signals of support from the patron if the client considers those signals to be so provocative that they undermine its security. Typically, it is the patron that worries about entrapment by its client, while the client worries about abandonment by the patron. But our surveys suggest that a considerable portion of Taiwanese voters worry about entrapment by the United States. There are, of course, partisan differences concerning fears of entrapment. Supporters of the Kuomintang (KMT) and independents worry that the convergence of Democratic Progressive Party (DPP) and U.S. preferences toward strategic competition with China makes Taiwan less secure.\n", + "This concern about entrapment appears to have increased after Pelosi’s visit. We conducted a panel survey in Taiwan with two waves, one in September 2022 and a second in January 2023, to gauge the Taiwanese public’s reaction to Pelosi’s very public demonstration of support for Taiwan. In 2022, we asked respondents, in the wake of Pelosi’s visit and the PRC’s unprecedented military exercises around Taiwan, whether Taiwan faced a serious threat. In January 2023, we followed with a slightly different question about whether Pelosi’s travel had made Taiwan more or less secure.\n", + "In September 2022, respondents overwhelmingly believed that Pelosi’s trip and the large-scale People’s Liberation Army exercises created a serious threat to Taiwan. Somewhat surprisingly, this response was similar across the political partisan divide in Taiwan. Media reports, in both Taiwan and the West, have suggested that many Taiwanese citizens did not originally seem too bothered by China’s reactions.\n", + "After the initial shock, the majority of respondents in the January 2023 survey still believed that Pelosi’s visit made Taiwan less secure. But partisan differences were clearer in the answers to this question than they had been in September. A majority of KMT supporters and independents (as well as one-third of DPP supporters) believed that Pelosi’s visit had made Taiwan less secure. By contrast, a majority of DPP supporters felt the opposite was true.\n", + "Indeed, by January 2023, 52% of our DPP respondents had shifted to the conclusion that Taiwan was more secure in the wake of the visit. In contrast, only 21% of the independent respondents and 11% of the KMT respondents had done so.\n", + "Such a shift may have resulted from reassuring U.S. policy initiatives or confirmation bias, or both. For example, by January 2023, some DPP supporters may have been responding to the U.S.-Taiwan Initiative on 21st-Century Trade and a $12 billion military aid program. Alternatively, some DPP supporters may have perceived, or wanted to perceive, a change in U.S. policy after our first survey in September 2022 and looked for evidence for their beliefs. Based on answers to other questions we asked in the 2023 survey about the likelihood of possible gestures of U.S. support for Taiwan, those DPP respondents who shifted their perception of Taiwan’s security in a more positive direction between surveys also believed that the United States would diplomatically recognize Taiwan, would send troops to defend Taiwan if attacked by the PRC, and would conclude a trade agreement with Taiwan.\n", + "A “Folk theory” of Taiwanese Security?\n", + "In addition to asking respondents about the impact of Pelosi’s visit on Taiwan’s security, we also probed the panel respondents about whether they had a “folk theory” of security — that is, intuitions about the factors influencing Taiwan’s security based on their own biases and lived experiences. We gave respondents five common explanations for cross-strait instability and asked them whether they agreed or disagreed with each.\n", + "\n", + "Related Books\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Upcoming\n", + "U.S.-Taiwan Relations\n", + "\n", + "\n", + "\t\t\t\t\t\tBy Ryan Hass, Bonnie Glaser, and Richard Bush \n", + "2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "US-China Nuclear Relations: The Impact of Strategic Triangles\n", + "\n", + "\n", + "\t\t\t\t\t\tContributions by Robert Einhorn \n", + "2021\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "China 2049\n", + "\n", + "\n", + "\t\t\t\t\t\tEdited by David Dollar, Yiping Huang, and Yang Yao \n", + "2020\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "A large portion of respondents appears to have a relatively plausible multi-causal “theory” of how Taiwan’s security is threatened. A large majority agrees that the PRC’s aggressive intentions are a source of instability. A smaller majority believes that increasing levels of support for independence in Taiwan is a source of instability. And only about 55% attribute instability to shifts in U.S. policy toward a “One China, One Taiwan policy.” On the other hand, majorities of respondents tended not to attribute instability to the neglect of defense building in Taiwan or to U.S. strategic ambiguity. Together these results suggest that many voters essentially lean toward the ideas embedded in the traditional U.S. policy of dual deterrence: Taiwan is more secure when the PRC’s aggressive intentions are countered and when the PRC is assured that U.S. policy does not encourage formal independence.\n", + "Not surprisingly there are partisan differences. DPP supporters are more likely to blame inadequate military spending as a source of instability than KMT supporters and independents. Similarly, while KMT supporters and independents do not think U.S. strategic ambiguity is a source of instability, a small majority of DPP supporters does. While all groups attribute instability to the PRC’s aggressive intentions, DPP supporters overwhelmingly do so. Interestingly, all groups also agree that greater support in Taiwan for independence is a source of instability, though a smaller majority of DPP supporters agree than others. Not surprisingly, a large majority of KMT supporters agree that the hollowing out of the U.S. “One China” policy is a source of instability, but independents and DPP supporters are relatively evenly split.\n", + "Implications\n", + "Our surveys have a couple of tentative implications for policy discussions in Washington about how to preserve Taiwan’s security.\n", + "First, our data suggests that if a substantial constituency in the client state believes such high-profile signals of support are counterproductive, this can weaken the security relationship between patron and client, making coordinated responses to the common adversary more difficult. A McCarthy-Tsai meeting, or a McCarthy visit to Taiwan, may only be prospectively reassuring to a majority of Taiwanese if they believe that the PRC response will be milder than it was after Pelosi’s visit. And if China does react less coercively after McCarthy’s symbolic actions, then it is possible that, retrospectively, at least some KMT and independent voters may conclude such actions are a useful signal of support. On the other hand, even a slightly less threatening PRC response may not be reassuring enough to KMT and independent voters, given their concerns about entrapment. Our surveys suggest that KMT supporters, and to some degree independents, do not identify culturally or politically with the United States nearly as much as DPP respondents do. Many KMT supporters and independents blame growing support for independence as a source of cross-strait instability. So, it may be unlikely that many KMT and independents will interpret a McCarthy-Tsai meeting as a useful symbol of U.S. support in the face of PRC coercion, especially if it is viewed as a partisan statement of support for the DPP government.\n", + "A second implication of our results concerns the effectiveness of deterrence. Washington’s discourse about how to deter the PRC emphasizes military tools over the synergistic effects of assuring Beijing that the United States is not encouraging or enabling formal Taiwanese independence. Proponents of dual deterrence claim that, since 1972, credible coercion and credible assurance have kept the probability of a PRC takeover of Taiwan relatively low and will likely continue to be more successful compared to alternative U.S. strategies, such as allowing and/or recognizing a de jure independent Taiwan. This may or may not be the case. There is a debate over whether dual deterrence is the best of a bad set of options for reducing the probability of conflict. But our analysis of respondents’ “folk theory” of security suggests that a considerable portion of the Taiwanese population seems to agree with the dual deterrence notion. This may be the conceptual basis for their concern about entrapment by U.S. politicians.\n", + "\n", + "\n", + "Related Content\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Order from Chaos\n", + "Australia’s caution on Taiwan may not last\n", + "\n", + "Richard McGregor\n", + "Wednesday, March 29, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Order from Chaos\n", + "Taiwan is feeling the pressure from Russian and Chinese autocracy\n", + "\n", + "Pavel K. Baev\n", + "Thursday, March 16, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "Order from Chaos\n", + "The Philippines’ evolving view on Taiwan: From passivity to active involvement\n", + "\n", + "Renato Cruz De Castro\n", + "Thursday, March 9, 2023\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Methodology\n", + "The 2022 household telephone survey was conducted between September 22 and 29, 2022, by the Election Study Center, National Chengchi University. We randomly drew samples according to the area codes of telephone books. Only respondents who were over 20 years old and registered in Taiwan were eligible for this survey. Data was weighted by gender, age, education, and residence area based on the latest census data. The sample size was 1,127. The margin of error with 95% confidence interval is 2.92%. The 2023 panel study was conducted between January 5 and 9, 2023. We successfully re-interviewed 576 respondents or about 51% of the 2022 sample. The data was also weighted by gender, age, education, and residence area. The main questions we analyze are: “In August this year, U.S. Congress Speaker Nancy Pelosi visited Taiwan, and China immediately held large-scale military exercises around Taiwan. Do you think this is a serious threat to Taiwan’s security?” (September 2022 survey); and “Do you think Pelosi’s visit to Taiwan made Taiwan more or less secure?” (January 2023 survey).\n", + "\n", + "URL: https://www.brookings.edu/blog/order-from-chaos/\n", + "TITLE: When might US political support be unwelcome in Taiwan?\n", + "\n", + "\t\t\t\tOrder from Chaos\t\n", + "BODY:\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/research/sdg-implementation-for-fragile-countries-needs-more-risk-taking/\n", + "TITLE: SDG implementation for fragile countries needs more risk-taking\n", + "SDG implementation for fragile countries needs more risk-taking\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Naheed Sarabi\n", + "\n", + "\t\t\t\t\tVisiting Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + " Twitter\n", + "Sarabinaheed\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "In 2023, concurring economic, social, and environmental crises are disproportionately affecting fragile states, creating a grim outlook for achieving the SDGs by 2030. The Global Peace Index Report for 2022 indicates deteriorating global peacefulness since 2014, with a growing gap between the most peaceful and least peaceful countries. SDG progress has been either stagnating or declining in more than half of the fragile states. Poverty and insecurity are on the rise in conflict-affected and fragile countries, where 20 percent of the global share of those in extreme poverty live; this is expected to rise to more than 50 percent by 2023. In addition, fragile countries are not on track with SDGs related to hunger, good health, and gender.  \n", + "During the second half of the SDG era, the international community must take more risks than it does in traditional development processes if conflict-affected and fragile countries are to make more SDG gains.  \n", + "A traditional economic development agenda in developing countries focuses on interdependent issues like growth, governance, poverty reduction, better services, and infrastructure. However, development is reversible and fragile in the occurrence of shocks. Resilience depends largely on the strength of the institutions. The g7+ group of conflict-affected countries advocated strongly, and successfully, for the New Deal principles, established in 2011, to be incorporated into the 2030 Agenda and the SDGs: peace-building and state-building goals (PSGs), engagement to support country-owned and -led pathways out of fragility, and commitments to results.  \n", + "What does constructive risk-taking look like in fragile countries?  Three steps can help drive better progress: \n", + "\n", + "Strengthen emphasis on SDG 16. Peace, reconciliation, and political stability—foundational elements of SDG 16—must be given stronger political weight in both international and country-level SDG discussions. In my own conversations with the g7+ secretariat, they insist that without a stronger commitment to peace, achieving SDG targets will be a challenge. Multi-year development planning needs farsighted and stable political environments that provide a smooth transition from quick response to long-term development efforts. To level the foundations, the international community must put more emphasis on both peace-building and peacemaking efforts. Addressing horizontal inequalities and keeping closer watch on drivers of internal conflict and community-level peace-building are essentials for the way forward.  \n", + "Build ownership and institutions in a more measurable manner. Donors need to channel more funds through government systems to build trust and ownership in fragile countries. The SDGs represent an enormous undertaking for fragile countries with low spending capacities. Building institutions and capacities takes time. Where the risk levels for corruption and misuse are extremely high, there is a need for joint program implementation between the government and donors. Multi-donor trust funds that channel money and decisionmaking power through government systems can be good models.  \n", + "Strengthen the basics for data, planning, financing, and expenditure. There should be an expedited effort to coordinate data systems, integrate SDGs into the national planning and budgeting process, and link plans to government and donor expenditure systems and reports. Lack of access to data is a pressing problem in fragile and conflict-affected countries. Governments are constrained by data deprivation due to the flow of funds outside government systems that in turn shape development plans. SDG targets should be translated into realistic multi-year projects through an inclusive approach. Experts in development cooperation need to undertake simple exercises to align SDGs into national data collection, planning, and budgeting cycles.  \n", + "\n", + "SDG implementation in fragile countries needs much more partnership and trust between the development partners and host countries. While the international community must harbor more risk in implementing the above actions, host countries must show the commitment to execute and take ownership.  \n", + "Download the full essay.\n", + "\n", + "URL: https://www.brookings.edu/research/a-pact-to-sustain-digital-public-infrastructure-for-the-sdgs/\n", + "TITLE: A PACT to sustain digital public infrastructure for the SDGs\n", + "A PACT to sustain digital public infrastructure for the SDGs\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Priya Vora\n", + "\n", + "\t\t\t\t\tNonresident Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "George Ingram\n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + " Twitter\n", + "@GMIngramIV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Digital technologies can accelerate achievement of the SDGs but only if governments act now to make trusted digital infrastructure universally available. For years digital capabilities have been described as enablers of progress; they are a key reason seven indicators across four SDGs relate to digital capabilities. But here at the halfway mark, meeting the SDGs remains elusive. Digital must again be put forward as an important means to fast-track progress. \n", + "With 2030 in sight, governments must find pathways to creating foundational digital infrastructure that can be repurposed for a variety of uses—therefore obviating the need to “reinvent the wheel” and massively improve the return on initial investment. \n", + "There is reason to be excited about foundational infrastructure designed for multiple uses. India is efficiently extending government services to over 93 percent of its population enrolled in the Aadhaar identity platform. That same tool is used for banks to extend financial services to millions of unbanked families. In the midst of war, the government of Ukraine is using its e-government portal to ensure displaced citizens can access proof of identity, health care records, and much more. The same underlying system is the basis for government agencies to share data to better understand the needs of citizens and identify how best to service those needs. However, the picture of digital infrastructure is not always rosy. These powerful systems are accelerators of intent, whether good or bad. Since the consensus on the SDGs was secured, the world has witnessed a range of harms resulting from digital technologies—in the form of exclusion; data misuse and abuse; and monopolistic tendencies that squash competitive markets. \n", + "The goal therefore is to expand digital infrastructure but ensure the public (state) response is strong enough to maximize participation, agency, choice, and trust (PACT). When digital assets are either publicly owned, publicly regulated, or publicly designed through open protocols–digital infrastructure can be realized for the public good. In other words, digital public infrastructure (DPI) is secured.  \n", + "While the return on investment for foundational digital infrastructure is high, foreign assistance for DPI remains inadequate. The bulk of donor digital investments are in one-off siloed solutions designed for a specific program or activity, undermining the hope of infrastructural investments that can serve many purposes. Moreover, investment in public sector institutions to regulate and oversee the digital economy is woefully low in most countries.  \n", + "This must change. Donors need to jointly commit to invest over the long term in DPI solutions—and the necessary institutional safeguards around them—that will serve nations and maximize digital participation, agency, choice, and trust in the quest to achieve the SDGs.     \n", + "This opportunity is not out of reach. As an example, India spent just over $1 per person to deploy its digital identity system. The figure could be lower for others using open code, which allows low-resource states to leverage the talents of coders around the world who contribute to open-source digital infrastructure solutions. More importantly, because DPI is relevant to most SDG goals, meeting the resource gap may not require new funds. Instead, through a strategic approach to digital public infrastructure and the institutional safeguards, funding intended for siloed technology investments could be redirected to underpin widely available digital infrastructure assets for all. \n", + "Download the full essay.\n", + " \n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/research/scaling-private-sector-engagement-in-the-sdgs/\n", + "TITLE: Scaling private sector engagement in the SDGs\n", + "Scaling private sector engagement in the SDGs\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Jane Nelson\n", + "\n", + "\t\t\t\t\tNonresident Senior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "George Ingram\n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + " Twitter\n", + "@GMIngramIV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Private sector investment and innovation are essential to achieving the Sustainable Development Goals (SDGs). A vanguard of companies is making public commitments and taking action. Yet, business engagement and impact are far from becoming mainstream. A concerted effort is required to scale the quantity, quality, and accountability of private sector activities that could have a measurable impact on supporting the SDGs.  \n", + "In the 12th U.N. Global Compact-Accenture CEO Study, released in 2023, 98 percent of more than 2,600 chief executives across 18 industries in 128 countries agreed that sustainability is now core to their role. While 87 percent warned that current levels of geopolitical and economic disruption are limiting the delivery of the SDGs, 51 percent believe they could play a critical role to help achieve the goals with increased commitment and action.  \n", + "In many cases, however, implementation is lagging behind public pledges and ambition. KPMG’s 2022 Survey of Sustainability Reporting found that 74 percent of the world’s largest 250 companies by revenue are reporting on the SDGs. Yet, only 10 percent are reporting on all 17 Goals, and only 6 percent are reporting on their negative as well as positive impacts. Another study by the Global Reporting Initiative and Support the Goals found that 83 percent of 206 companies surveyed in 2021 said they support the SDGs, but only 40 percent set measurable commitments and only 20 percent included evidence to assess their impacts.    \n", + "What needs to change? Three areas of collective action will be essential. \n", + "\n", + " Standardize and require measures of corporate accountability: The time has come to put public disclosure of a company’s material, social, and environmental risks and performance on a par with corporate financial reporting.\n", + "Among voluntary reporting initiatives, the International Sustainability Standards Board, created in 2021, is on track to issue its first two standards on General Requirements and Climate by mid-2023. Last year, the Global Reporting Initiative updated its guidance for companies to report on the SDGs. In 2022, the Task Force for Climate-related Financial Disclosure reported that more than 3,800 organizations across 99 countries have become supporters of its recommendations, including over 1,500 financial institutions responsible for assets of $217 trillion.\n", + "But beyond such voluntary efforts, it is time to make this reporting mandatory, independently audited, or assured in accordance with international auditing and assurance standards, and based on comparable, relevant, and reliable metrics. A variety of non-financial reporting requirements and directives are being spearheaded by the European Union, the U.S. Securities and Exchange Commission, and other government entities. Such policy efforts need to find efficient paths to implementation, to scale the experience and lessons of voluntary reporting by some companies to mandatory reporting for all companies.\n", + "\n", + "\n", + " Leverage investment in innovation accelerators and collaborative platforms: Companies should invest more strategically in research, development, and innovation partnerships. Individual company investments in new technologies, products, services, and business models to deliver specific SDGs are necessary but not sufficient. There is untapped potential to leverage different combinations of public, private, and philanthropic finance and undertake joint efforts to accelerate or scale progress in crucial sectors and systems. Recent alliances such as the Breakthrough Energy Network, the First Movers Coalition, the Energy Transition Accelerator, and the Zero Hunger Private Sector Pledge point the way, alongside more established platforms such as GAVI, the Vaccine Alliance. \n", + "\n", + "\n", + " Advocate for enabling policies through business coalitions: Corporations must speak out more ambitiously and transparently on the need for smart public policies and regulations. In the absence of policy reforms and market incentives, business action for the SDGs will never scale beyond the leading companies. At a global level, organizations such as the World Business Council for Sustainable Development and We Mean Business Coalition, alongside some established industry groups, are increasing their public advocacy. More needs to be done at the national level. The Keidanren in Japan, National Business Initiative in South Africa, and Confederation of Danish Industry are three examples of business associations advocating for government leadership on the SDGs.\n", + "\n", + "In summary, the first seven years of the 2030 Agenda have seen growing business engagement, but not at the speed and scale that are necessary—or possible. The second half of the SDG era needs to capture and catapult private-sector contributions to the 2030 goals.  \n", + "Download the full essay. \n", + "\n", + "URL: https://www.brookings.edu/research/paradigm-shift-creating-more-just-societies-with-the-sdgs-human-rights-and-innovations-in-higher-education/\n", + "TITLE: Paradigm shift: Creating more just societies with the SDGs, human rights, and innovations in higher education\n", + "Paradigm shift: Creating more just societies with the SDGs, human rights, and innovations in higher education\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Sarah E. Mendelson\n", + "\n", + "\t\t\t\t\tNonresident Senior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\t\t\t\t\tDistinguished Service Professor of Public Policy and Head of Heinz College in Washington, D.C. - Carnegie Mellon University \n", + "\n", + " Twitter\n", + "SarahMendelson\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "A large share of the human rights community does not yet embrace—let alone know about—the Sustainable Development Goals (SDGs). Ambivalence is driven in part by the voluntary nature of the SDG agenda, as opposed to one shaped by legal requirements. At the same time, however, a downbeat cottage industry has developed around pessimistic themes such as the “end times” of human rights and a failed, last “utopia.” The pessimism stems from what appears to be overreliance on these same legal remedies that in so many cases fail to stem impunity or address inequality.  \n", + "A new approach requires a paradigm shift in the frameworks that currently dominate human rights.   \n", + "Innovations in higher education offer a pathway to advance the closely aligned endeavors of creating peaceful, just, and inclusive communities. Universities have a critical role to play in generating a refreshed approach to human rights that includes SDG literacy, helping to grow what I call Cohort 2030.  \n", + "What would such a paradigm shift look like?  \n", + "\n", + "First, the SDG watchwords “Leave No One Behind” (LNOB) should be embedded in human rights education. LNOB is fundamentally a call for human rights to be respected universally; the SDGs apply everywhere to everyone. The SDGs help broaden attention beyond political rights and elevate socioeconomic ones, which during the Cold War, became enmeshed in East-West power struggles and were subsequently downplayed, at least in the United States. The pandemic has laid bare the urgent need to address social justice gaps and socioeconomic inequities in the Global North as well as in the Global South. In fact, these issues are bound up with tackling much of what imperils democracy in the United States today.      \n", + "Second, human rights education should focus on SDG localization and translation in specific contexts (sometimes referred to as “vernacularization” in the rights literature). The general lack of localization has been diagnosed by human rights scholars as a significant barrier to the realization of rights. When viewed as global and abstract rather than local and experienced by people, the disconnect contributes to both the need to “rescue” the SDGs and the end-times-for-human-rights zeitgeist. Localizing the SDGs, as has occurred in a number of cities around the world, has resulted in innovation and practical applications that directly and positively impact communities. \n", + "Third, related to both LNOB and localization, human rights and sustainable development research and coursework should increasingly incorporate and generate people-centered data ecosystems, including community data portals that use open-source software and are derived with the input of local community members. During the 2021 flagship 17 Rooms process, co-hosted by the Brookings Center for Sustainable Development and The Rockefeller Foundation, this was a distinct recommendation from rights experts focused on advancing SDG 16. Disaggregated data that reveal local communities’ social justice gaps are necessary (along with policies and funds) to enable more just transitions post-pandemic—which to date, based on research in several North American cities, has not occurred. In the United States, the White House executive order on equity and data that recently went into effect could be a game changer helping generate such ecosystems.  \n", + "\n", + "These three steps would link the Universal Declaration of Human Rights, now in its 75th year, with the SDGs, in addition to the numerous subsequent treaties and laws which students still need to learn.  The idea of combining the SDG and human rights agendas has already been highlighted, for example, by the United Nations in its Fourth Phase (2020-2024) of the World Programme for Human Rights, albeit with scant specificity.  It would also be fully consistent with a recent study by the U.S. National Academies of Sciences, Engineering, and Medicine on higher education and the SDGs, which recommends “field building” regarding sustainable development.1 Best of all, it would drive demand for progress not only on SDG 16 (justice) but on the other people-focused SDGs too. The second half of the SDG era needs to create a sustainable future in which rights are realized for all.   \n", + "Download the full essay.\n", + "\n", + "URL: https://www.brookings.edu/research/how-to-make-mdbs-fit-for-purpose-to-support-sdg-implementation/\n", + "TITLE: How to make MDBs fit for purpose to support SDG implementation\n", + "How to make MDBs fit for purpose to support SDG implementation\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Amar Bhattacharya\n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Homi Kharas\n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\n", + "\n", + "\n", + "“Through collective and individual actions, initiatives and additional steps to enhance extensive work already underway in our organizations, the MDBs, and the IMF will help countries, partners, investors, and the global community move from billions to trillions as we take up the challenge of achieving the SDGs.” Upon the adoption of the SDGs, the World Bank recognized that the transformative vision embodied in the SDGs would require a vastly higher level of resources to be successfully implemented. This never happened. MDB net flows averaged $25 billion in 2013-15 (in constant 2012 dollars) and $41 billion in 2021, an increase driven by the cyclical response to the COVID-19 pandemic, rather than by the structural needs for building the SDG economy. \n", + "Shareholders are again asking the MDBs to up their game. The Italian G-20 tasked an expert committee to review the capital adequacy frameworks of the banks. U.S. Treasury Secretary Janet Yellen and other shareholders called for an evolution roadmap for the World Bank. The Indian G-20 is setting up an expert group to advise on MDB reform. \n", + "Three elements of MDB reform would significantly enlarge their contributions to SDG achievement: \n", + "\n", + "The MDBs should embrace and drive the new growth story for the 21st century, one based on innovation and investment in green technologies, and on adaptation and resilience to accelerating climate change.  A number of new technologies in electricity production, light road transport, fugitive emissions, building heating, and food and agriculture are reaching a point within the next five years that would make them price-competitive on a mass-market scale. The potential for cheap power can accelerate growth and make access to modern electricity easier for the 775 million people who currently lack it. It avoids the negative local effects of fossil-fuel-sourced pollution on health and education. Yet there are holdouts among MDBs and their clients that view the green transition as potentially holding back the reduction of poverty and social progress. The MDBs should provide the empirical evidence in support of the new growth strategy that is inclusive, sustainable, and resilient, and draws lessons on how to manage the transition.\n", + "Achieving a green transformation will require investments at scale. Recent granular estimates suggest that emerging markets and developing countries other than China must increase spending on climate investments fourfold by 2030 to $2.4 trillion.  MDBs must play a much more purposive and proactive role in helping countries identify, enable, and foster green investments, moving beyond a project-by-project approach to support system change. Country-led and country-owned coordination mechanisms around priority objectives have to become the norm for scaling up investments and mobilizing the necessary support. For this MDBs have to be able to work much more effectively as a system and with the private sector.  \n", + "MDBs also have a central role to play in securing the scale and affordability of finance that will be needed.  Private capital can meet the largest share of the $1 trillion in external finance needed by 2030. In the current context of debt overhangs and rising interest rates on capital markets, however, little private capital is flowing to developing countries. MDBs can create a new highway for private finance through partnering with and reducing risks for the private sector. They can use guarantees and insurance products to take risks that the private sector cannot mitigate, such as policy risk, and reduce the cost of capital through blended finance. MDBs must also increase their own direct finance for the large complementary public investments in both the physical and social infrastructure required and where private capital may not be forthcoming. MDBs are unique in that they can scale up financing at affordable terms without relying heavily on contributions from the budgets of major shareholders, although for the poorest shareholders, it will be important to continue to provide them with concessional aid.\n", + "\n", + "In taking these steps, MDBs must take to heart the universal character of the SDGs and the spillover benefits that come from coordinated action. They must serve all clients, low-income and middle-income alike. They must pursue sustainable development as an integrated and interwoven package of economic growth, human capital development, gender equality, urbanization, jobs, nature conservation, and biodiversity preservation. Fit for purpose MDBs would provide an accelerant for the second half of the SDG period and for keeping global climate targets in reach. \n", + "Download the full essay.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "URL: https://www.brookings.edu/research/a-purpose-driven-fund-to-end-extreme-poverty-by-2030/\n", + "TITLE: A purpose-driven fund to end extreme poverty by 2030\n", + "A purpose-driven fund to end extreme poverty by 2030\n", + "BODY:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Homi Kharas\n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development, Center for Sustainable Development \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "John W. McArthur\n", + "\n", + "\t\t\t\t\tDirector - Center for Sustainable Development \n", + "\n", + "\t\t\t\t\tSenior Fellow - Global Economy and Development \n", + "\n", + " Twitter\n", + "@mcarthur\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Ending extreme poverty by 2030 is first among equals within the Sustainable Development Goals. When SDG target 1.1 was formally adopted in 2015, the number of extremely poor people was thought to be around 730 million globally and was falling by roughly 65 million a year. Continuing that trend would have cut poverty rates to zero by 2030. But progress has slowed instead. Recent projections suggest 570 million people might still be poor in 2030, far short of elimination. At the SDG midpoint, rebooting efforts to ending extreme poverty could re-energize the world like nothing else.  \n", + "First, what went wrong? Much early optimism rested on the World Bank’s prominent ownership of the poverty reduction target. In 2013, the organization adopted the end of extreme poverty as one of its two headline goals, alongside reducing inequality. It promised to operationalize the twin goals through tailored country strategies and transformational forms of engagement. Further, in the 2015 Addis Ababa Action Agenda on Financing and Development, all U.N. member states agreed to a new social compact to end poverty, with fiscally sustainable and nationally appropriate income floors. They vowed to explore funding modalities for such systems.  \n", + "Unfortunately, these promises lacked follow-through. The shortcomings culminated last October, when the World Bank admitted premature defeat on its own goal, with a statement that “the global goal of ending extreme poverty by 2030 would not be achieved.”  \n", + "The bumpiness of the path to ending extreme poverty should motivate renewal, not resignation. Fortunately, improvements in technology, policy, and evidence over the past decade make the goal more solvable today than it was in 2015, not less.  \n", + "As particular inspiration during the strains of COVID-19, widespread country breakthroughs in social protection highlight frontier opportunities for direct income support through cash transfers. Evidence of these and other cash transfer measures is reassuringly positive: A strong reduction in poverty rates and spillover benefits into other SDG areas, mostly education, health, and nutrition. Evidence of the practicalities of implementation has also accumulated. For instance, Togo, a low-income country, was able to build its Novissi digital platform to reach almost 1 million beneficiaries within a year, distributing around $20/month (30 percent of the monthly minimum wage). During the first six months, nearly two-thirds of the beneficiaries were women.  \n", + "The bumpiness of the path to ending extreme poverty should motivate renewal, not resignation. \n", + "The digital and mobile technology revolutions have transformed the speed and costs of hyper-targeted transfers to poor people. Transaction costs are now down to single-digit levels as a share of funds for beneficiaries. Dramatic advances in targeting methods, thanks to machine learning and more granular poverty data, have radically improved efficiency and efficacy. \n", + "For sure, cash transfers are a policy tool, not a panacea. They require a long-term strategy, and a majority of extremely poor people still live in rural areas, where investments in agriculture, infrastructure, and human capital are all key to long-term economic growth. Each country should be empowered with vigorous debate on how to sequence and scale such investments. But cash transfers can serve as a best alternative to a negotiated agreement in these debates. Whenever a better alternative to ending extreme poverty by 2030 cannot be found, cash transfers offer a powerful device for getting the job done—as a ladder out of poverty, not a permanent dependency.  \n", + "Embedding this logic into a purpose-driven global funding instrument could transform progress on SDG 1. One option would be to encourage the International Development Association (IDA) to orient its operations around the explicit purpose of ending extreme poverty, proactively supporting targeted cash transfer systems in every country that wishes to use them. With an incoming new World Bank president and a request from shareholders to follow through on its existing headline goal, IDA would be ripe for innovation. An alternative would be to build a new purpose-driven multilateral fund to end extreme poverty, with a technical focus on sustained cash transfer systems for extremely poor people. Such a targeted instrument would be consistent with, while much more specific than, calls for a global fund for social protection.  \n", + "The implied financing needs for such a funding instrument are substantial but realistic. At about $100 billion, the global extreme poverty gap is equivalent to only 0.1 percent of global GDP, its lowest relative size ever, and slightly more than half of total official development assistance. An initial funding modality could start where the needs are greatest, with focused support to the five countries on course to account for more than half the world’s poor in 2030: Nigeria, the Democratic Republic of Congo, Madagascar, Tanzania, and Angola.  \n", + "The time is ripe for a purpose-driven fund to end extreme poverty. The targeting can be surgical, costs are modest, and implementation is now feasible. Doing so to achieve SDG 1 within the coming seven years would mark a historic global achievement and help renew momentum for the SDGs overall.\n", + "Download the full essay.\n", + "\n" + ] + } + ], + "source": [ + "import re\n", + "\n", + "\n", + "class Crawler:\n", + " def __init__(self, site):\n", + " self.site = site\n", + " self.visited = {}\n", + "\n", + " def getPage(url):\n", + " try:\n", + " html = urlopen(url)\n", + " except Exception as e:\n", + " print(e)\n", + " return None\n", + " return BeautifulSoup(html, 'html.parser')\n", + "\n", + " def safeGet(bs, selector):\n", + " selectedElems = bs.select(selector)\n", + " if selectedElems is not None and len(selectedElems) > 0:\n", + " return '\\n'.join([elem.get_text() for elem in selectedElems])\n", + " return ''\n", + "\n", + " def getContent(self, url):\n", + " \"\"\"\n", + " Extract content from a given page URL\n", + " \"\"\"\n", + " bs = Crawler.getPage(url)\n", + " if bs is not None:\n", + " title = Crawler.safeGet(bs, self.site.titleTag)\n", + " body = Crawler.safeGet(bs, self.site.bodyTag)\n", + " return Content(url, title, body)\n", + " return Content(url, '', '')\n", + "\n", + " def crawl(self):\n", + " \"\"\"\n", + " Get pages from website home page\n", + " \"\"\"\n", + " bs = Crawler.getPage(self.site.url)\n", + " targetPages = bs.findAll('a', href=re.compile(self.site.targetPattern))\n", + " for targetPage in targetPages:\n", + " url = targetPage.attrs['href']\n", + " url = url if self.site.absoluteUrl else f'{self.site.url}{targetPage}'\n", + " if url not in self.visited:\n", + " self.visited[url] = self.getContent(url)\n", + " self.visited[url].print()\n", + "\n", + "\n", + "brookings = Website('Reuters', 'https://brookings.edu', '\\/(research|blog)\\/', True, 'h1', 'div.post-body')\n", + "crawler = Crawler(brookings)\n", + "crawler.crawl()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Crawling multiple page types" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "class Website:\n", + " \"\"\"Common base class for all articles/pages\"\"\"\n", + "\n", + " def __init__(self, name, url, titleTag, bodyTag):\n", + " self.name = name\n", + " self.url = url\n", + " self.titleTag = titleTag\n", + " self.bodyTag = bodyTag\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class Product(Website):\n", + " \"\"\"Contains information for scraping a product page\"\"\"\n", + "\n", + " def __init__(self, name, url, titleTag, productNumber, price):\n", + " Website.__init__(self, name, url, TitleTag)\n", + " self.productNumberTag = productNumberTag\n", + " self.priceTag = priceTag\n", + "\n", + "class Article(Website):\n", + " \"\"\"Contains information for scraping an article page\"\"\"\n", + "\n", + " def __init__(self, name, url, titleTag, bodyTag, dateTag):\n", + " Website.__init__(self, name, url, titleTag)\n", + " self.bodyTag = bodyTag\n", + " self.dateTag = dateTag" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__init__.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/__init__.py similarity index 100% rename from chapter3/scrapy/wikiSpider/wikiSpider/__init__.py rename to Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/__init__.py diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/items.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/items.py similarity index 50% rename from chapter3/scrapy/wikiSpider/wikiSpider/items.py rename to Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/items.py index 3c2687d..0c4a68d 100644 --- a/chapter3/scrapy/wikiSpider/wikiSpider/items.py +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/items.py @@ -5,10 +5,11 @@ # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html -from scrapy import Item, Field +import scrapy -class Article(Item): - # define the fields for your item here like: - # name = scrapy.Field() - title = Field() \ No newline at end of file +class Article(scrapy.Item): + url = scrapy.Field() + title = scrapy.Field() + text = scrapy.Field() + lastUpdated = scrapy.Field() diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/middlewares.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/middlewares.py new file mode 100644 index 0000000..7604e85 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/middlewares.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +# Define here the models for your spider middleware +# +# See documentation in: +# http://doc.scrapy.org/en/latest/topics/spider-middleware.html + +from scrapy import signals + + +class WikispiderSpiderMiddleware(object): + # Not all methods need to be defined. If a method is not defined, + # scrapy acts as if the spider middleware does not modify the + # passed objects. + + @classmethod + def from_crawler(cls, crawler): + # This method is used by Scrapy to create your spiders. + s = cls() + crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) + return s + + def process_spider_input(self, response, spider): + # Called for each response that goes through the spider + # middleware and into the spider. + + # Should return None or raise an exception. + return None + + def process_spider_output(self, response, result, spider): + # Called with the results returned from the Spider, after + # it has processed the response. + + # Must return an iterable of Request, dict or Item objects. + for i in result: + yield i + + def process_spider_exception(self, response, exception, spider): + # Called when a spider or process_spider_input() method + # (from other spider middleware) raises an exception. + + # Should return either None or an iterable of Response, dict + # or Item objects. + pass + + def process_start_requests(self, start_requests, spider): + # Called with the start requests of the spider, and works + # similarly to the process_spider_output() method, except + # that it doesn’t have a response associated. + + # Must return only requests (not items). + for r in start_requests: + yield r + + def spider_opened(self, spider): + spider.logger.info('Spider opened: %s' % spider.name) diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/pipelines.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/pipelines.py new file mode 100644 index 0000000..15b9161 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/pipelines.py @@ -0,0 +1,12 @@ +from datetime import datetime +from wikiSpider.items import Article +from string import whitespace + +class WikispiderPipeline(object): + def process_item(self, article, spider): + article['lastUpdated'] = article['lastUpdated'].replace('This page was last edited on', '') + article['lastUpdated'] = article['lastUpdated'].strip() + article['lastUpdated'] = datetime.strptime(article['lastUpdated'], '%d %B %Y, at %H:%M.') + article['text'] = [line for line in article['text'] if line not in whitespace] + article['text'] = ''.join(article['text']) + return article diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/settings.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/settings.py new file mode 100644 index 0000000..d6986ec --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/settings.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- + +# Scrapy settings for wikiSpider project +# +# For simplicity, this file contains only settings considered important or +# commonly used. You can find more settings consulting the documentation: +# +# http://doc.scrapy.org/en/latest/topics/settings.html +# http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html +# http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html + +BOT_NAME = 'wikiSpider' + +SPIDER_MODULES = ['wikiSpider.spiders'] +NEWSPIDER_MODULE = 'wikiSpider.spiders' + + +# Crawl responsibly by identifying yourself (and your website) on the user-agent +#USER_AGENT = 'wikiSpider (+http://www.yourdomain.com)' + +# Obey robots.txt rules +ROBOTSTXT_OBEY = True + +# Configure maximum concurrent requests performed by Scrapy (default: 16) +#CONCURRENT_REQUESTS = 32 + +# Configure a delay for requests for the same website (default: 0) +# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay +# See also autothrottle settings and docs +#DOWNLOAD_DELAY = 3 +# The download delay setting will honor only one of: +#CONCURRENT_REQUESTS_PER_DOMAIN = 16 +#CONCURRENT_REQUESTS_PER_IP = 16 + +# Disable cookies (enabled by default) +#COOKIES_ENABLED = False + +# Disable Telnet Console (enabled by default) +#TELNETCONSOLE_ENABLED = False + +# Override the default request headers: +#DEFAULT_REQUEST_HEADERS = { +# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', +# 'Accept-Language': 'en', +#} + +# Enable or disable spider middlewares +# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html +#SPIDER_MIDDLEWARES = { +# 'wikiSpider.middlewares.WikispiderSpiderMiddleware': 543, +#} + +# Enable or disable downloader middlewares +# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html +#DOWNLOADER_MIDDLEWARES = { +# 'wikiSpider.middlewares.MyCustomDownloaderMiddleware': 543, +#} + +# Enable or disable extensions +# See http://scrapy.readthedocs.org/en/latest/topics/extensions.html +#EXTENSIONS = { +# 'scrapy.extensions.telnet.TelnetConsole': None, +#} + +# Configure item pipelines +# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html +ITEM_PIPELINES = { + 'wikiSpider.pipelines.WikispiderPipeline': 300, +} + +# Enable and configure the AutoThrottle extension (disabled by default) +# See http://doc.scrapy.org/en/latest/topics/autothrottle.html +#AUTOTHROTTLE_ENABLED = True +# The initial download delay +#AUTOTHROTTLE_START_DELAY = 5 +# The maximum download delay to be set in case of high latencies +#AUTOTHROTTLE_MAX_DELAY = 60 +# The average number of requests Scrapy should be sending in parallel to +# each remote server +#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 +# Enable showing throttling stats for every response received: +#AUTOTHROTTLE_DEBUG = False + +# Enable and configure HTTP caching (disabled by default) +# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings +#HTTPCACHE_ENABLED = True +#HTTPCACHE_EXPIRATION_SECS = 0 +#HTTPCACHE_DIR = 'httpcache' +#HTTPCACHE_IGNORE_HTTP_CODES = [] +#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/__init__.py similarity index 100% rename from chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.py rename to Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/__init__.py diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/article.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/article.py new file mode 100644 index 0000000..a793863 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/article.py @@ -0,0 +1,18 @@ +from scrapy import Spider, Request + +class ArticleSpider(Spider): + name='article' + + def start_requests(self): + urls = [ + "http://en.wikipedia.org/wiki/Python_%28programming_language%29", + "https://en.wikipedia.org/wiki/Functional_programming", + "https://en.wikipedia.org/wiki/Monty_Python"] + return [Request(url=url, callback=self.parse) for url in urls] + + def parse(self, response): + url = response.url + title = response.css('h1::text').extract_first() + print('URL is: {}'.format(url)) + print('Title is: {}'.format(title)) + diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articleItems.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articleItems.py new file mode 100644 index 0000000..19034f8 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articleItems.py @@ -0,0 +1,20 @@ +from scrapy.linkextractors import LinkExtractor +from scrapy.spiders import CrawlSpider, Rule +from wikiSpider.items import Article + +class ArticleSpider(CrawlSpider): + name = 'articleItems' + allowed_domains = ['wikipedia.org'] + start_urls = ['https://en.wikipedia.org/wiki/Benevolent_dictator_for_life'] + rules = [ + Rule(LinkExtractor(allow='(/wiki/)((?!:).)*$'), callback='parse_items', follow=True), + ] + + def parse_items(self, response): + article = Article() + article['url'] = response.url + article['title'] = response.css('h1::text').extract_first() + article['text'] = response.xpath('//div[@id="mw-content-text"]//text()').extract() + lastUpdated = response.css('li#footer-info-lastmod::text').extract_first() + article['lastUpdated'] = lastUpdated.replace('This page was last edited on ', '') + return article \ No newline at end of file diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articlePipelines.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articlePipelines.py new file mode 100644 index 0000000..9b6d66d --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articlePipelines.py @@ -0,0 +1,19 @@ +from scrapy.linkextractors import LinkExtractor +from scrapy.spiders import CrawlSpider, Rule +from wikiSpider.items import Article + +class ArticleSpider(CrawlSpider): + name = 'articlePipelines' + allowed_domains = ['wikipedia.org'] + start_urls = ['https://en.wikipedia.org/wiki/Benevolent_dictator_for_life'] + rules = [ + Rule(LinkExtractor(allow='(/wiki/)((?!:).)*$'), callback='parse_items', follow=True), + ] + + def parse_items(self, response): + article = Article() + article['url'] = response.url + article['title'] = response.css('h1::text').extract_first() + article['text'] = response.xpath('//div[@id="mw-content-text"]//text()').extract() + article['lastUpdated'] = response.css('li#footer-info-lastmod::text').extract_first() + return article \ No newline at end of file diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articles.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articles.py new file mode 100644 index 0000000..40132c8 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articles.py @@ -0,0 +1,19 @@ +from scrapy.linkextractors import LinkExtractor +from scrapy.spiders import CrawlSpider, Rule + +class ArticleSpider(CrawlSpider): + name = 'articles' + allowed_domains = ['wikipedia.org'] + start_urls = ['https://en.wikipedia.org/wiki/Benevolent_dictator_for_life'] + rules = [Rule(LinkExtractor(allow=r'.*'), callback='parse_items', follow=True)] + + def parse_items(self, response): + url = response.url + title = response.css('h1::text').extract_first() + text = response.xpath('//div[@id="mw-content-text"]//text()').extract() + lastUpdated = response.css('li#footer-info-lastmod::text').extract_first() + lastUpdated = lastUpdated.replace('This page was last edited on ', '') + print('URL is: {}'.format(url)) + print('title is: {} '.format(title)) + print('text is: {}'.format(text)) + print('Last updated: {}'.format(lastUpdated)) diff --git a/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articlesMoreRules.py b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articlesMoreRules.py new file mode 100644 index 0000000..c611a5b --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/build/lib/wikiSpider/spiders/articlesMoreRules.py @@ -0,0 +1,26 @@ +from scrapy.linkextractors import LinkExtractor +from scrapy.spiders import CrawlSpider, Rule + +class ArticleSpider(CrawlSpider): + name = 'articles' + allowed_domains = ['wikipedia.org'] + start_urls = ['https://en.wikipedia.org/wiki/Benevolent_dictator_for_life'] + rules = [ + Rule(LinkExtractor(allow='^(/wiki/)((?!:).)*$'), callback='parse_items', follow=True, cb_kwargs={'is_article': True}), + Rule(LinkExtractor(allow='.*'), callback='parse_items', cb_kwargs={'is_article': False}) + ] + + def parse_items(self, response, is_article): + print(response.url) + title = response.css('h1::text').extract_first() + if is_article: + url = response.url + text = response.xpath('//div[@id="mw-content-text"]//text()').extract() + lastUpdated = response.css('li#footer-info-lastmod::text').extract_first() + lastUpdated = lastUpdated.replace('This page was last edited on ', '') + print('Title is: {} '.format(title)) + print('title is: {} '.format(title)) + print('text is: {}'.format(text)) + else: + print('This is not an article: {}'.format(title)) + diff --git a/Chapter08_Scrapy/wikiSpider/project.egg-info/PKG-INFO b/Chapter08_Scrapy/wikiSpider/project.egg-info/PKG-INFO new file mode 100644 index 0000000..3e6e2f5 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/project.egg-info/PKG-INFO @@ -0,0 +1,3 @@ +Metadata-Version: 2.1 +Name: project +Version: 1.0 diff --git a/Chapter08_Scrapy/wikiSpider/project.egg-info/SOURCES.txt b/Chapter08_Scrapy/wikiSpider/project.egg-info/SOURCES.txt new file mode 100644 index 0000000..7eed64e --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/project.egg-info/SOURCES.txt @@ -0,0 +1,17 @@ +setup.py +project.egg-info/PKG-INFO +project.egg-info/SOURCES.txt +project.egg-info/dependency_links.txt +project.egg-info/entry_points.txt +project.egg-info/top_level.txt +wikiSpider/__init__.py +wikiSpider/items.py +wikiSpider/middlewares.py +wikiSpider/pipelines.py +wikiSpider/settings.py +wikiSpider/spiders/__init__.py +wikiSpider/spiders/article.py +wikiSpider/spiders/articleItems.py +wikiSpider/spiders/articlePipelines.py +wikiSpider/spiders/articles.py +wikiSpider/spiders/articlesMoreRules.py \ No newline at end of file diff --git a/Chapter08_Scrapy/wikiSpider/project.egg-info/dependency_links.txt b/Chapter08_Scrapy/wikiSpider/project.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/project.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/Chapter08_Scrapy/wikiSpider/project.egg-info/entry_points.txt b/Chapter08_Scrapy/wikiSpider/project.egg-info/entry_points.txt new file mode 100644 index 0000000..8a760eb --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/project.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[scrapy] +settings = wikiSpider.settings diff --git a/Chapter08_Scrapy/wikiSpider/project.egg-info/top_level.txt b/Chapter08_Scrapy/wikiSpider/project.egg-info/top_level.txt new file mode 100644 index 0000000..a27e108 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/project.egg-info/top_level.txt @@ -0,0 +1 @@ +wikiSpider diff --git a/Chapter08_Scrapy/wikiSpider/scrapinghub.yml b/Chapter08_Scrapy/wikiSpider/scrapinghub.yml new file mode 100644 index 0000000..a2ec87d --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/scrapinghub.yml @@ -0,0 +1 @@ +project: 624829 diff --git a/chapter3/scrapy/wikiSpider/scrapy.cfg b/Chapter08_Scrapy/wikiSpider/scrapy.cfg similarity index 78% rename from chapter3/scrapy/wikiSpider/scrapy.cfg rename to Chapter08_Scrapy/wikiSpider/scrapy.cfg index 91cc886..75d6f89 100644 --- a/chapter3/scrapy/wikiSpider/scrapy.cfg +++ b/Chapter08_Scrapy/wikiSpider/scrapy.cfg @@ -1,7 +1,7 @@ # Automatically created by: scrapy startproject # # For more information about the [deploy] section see: -# http://doc.scrapy.org/en/latest/topics/scrapyd.html +# https://scrapyd.readthedocs.org/en/latest/deploy.html [settings] default = wikiSpider.settings diff --git a/Chapter08_Scrapy/wikiSpider/setup.py b/Chapter08_Scrapy/wikiSpider/setup.py new file mode 100644 index 0000000..121314f --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/setup.py @@ -0,0 +1,10 @@ +# Automatically created by: shub deploy + +from setuptools import setup, find_packages + +setup( + name = 'project', + version = '1.0', + packages = find_packages(), + entry_points = {'scrapy': ['settings = wikiSpider.settings']}, +) diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/__init__.py b/Chapter08_Scrapy/wikiSpider/wikiSpider/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-39.pyc b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..74dc46c Binary files /dev/null and b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-39.pyc differ diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-39.pyc b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-39.pyc new file mode 100644 index 0000000..bec4a7f Binary files /dev/null and b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-39.pyc differ diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/pipelines.cpython-39.pyc b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/pipelines.cpython-39.pyc new file mode 100644 index 0000000..55dd371 Binary files /dev/null and b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/pipelines.cpython-39.pyc differ diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-39.pyc b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000..f096009 Binary files /dev/null and b/Chapter08_Scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-39.pyc differ diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/articles.csv b/Chapter08_Scrapy/wikiSpider/wikiSpider/articles.csv new file mode 100644 index 0000000..2a91e82 --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/wikiSpider/articles.csv @@ -0,0 +1,16615 @@ +lastUpdated,text,title +" 13 December 2017, at 09:26.","For the political term, see ,Benevolent dictatorship,., +,Benevolent Dictator For Life, (,BDFL,) is a title given to a small number of ,open-source software development, leaders, typically project founders who retain the final say in disputes or arguments within the community. The phrase originated in 1995 with reference to ,Guido van Rossum,, creator of the ,Python programming language,.,[1],[2], Shortly after van Rossum joined the ,Corporation for National Research Initiatives,, the term appeared in a follow-up mail by ,Ken Manheimer, to a meeting trying to create a semi-formal group that would oversee Python development and workshops; this initial use included the additional joke of naming van Rossum the "",First Interim, BDFL"".,[1], +,BDFL should not be confused with the more common term for open-source leaders, "",benevolent dictator,"", which was popularized by ,Eric S. Raymond,'s essay "",Homesteading the Noosphere,"" (1999).,[3], Among other topics related to ,hacker culture,, Raymond elaborates on how the nature of open source forces the ""dictatorship"" to keep itself ,benevolent,, since a strong disagreement can lead to the ,forking, of the project under the rule of new leaders., +,Persons sometimes referred to as ""Benevolent dictators for life"",[,edit,], +, +, +,Name, +,Project, +,Type, +,Reference, +, +, +,Vitalik Buterin, +,Ethereum, +,blockchain-based cryptocurrency, +,[4], +, +, +,Dries Buytaert, +,Drupal, +,content management framework, +,[5], +, +, +,Shaun Walker, +,DotNetNuke, +,web application framework, +,[6], +, +, +,David Heinemeier Hansson, +,Ruby on Rails, +,web framework, +,[7], +, +, +,Adrian Holovaty, and Jacob Kaplan-Moss, +,Django, +,web framework, +,[8], +, +, +,Taylor Otwell, +,Laravel, +,web framework, +,[9],[10], +, +, +,Theo de Raadt, +,OpenBSD, +,Unix,-like operating system, +,[11], +, +, +,Daniel Robbins, +,Funtoo Linux, +,Linux distribution, +,[12], +, +, +,Sébastien Ros, +,Orchard Project, +,content management system, +,[13], +, +, +,Guido van Rossum, +,Python, +,programming language, +,[7],[14], +, +, +,Linus Torvalds, +,Linux, +,operating system kernel, +,[7],[15], +, +, +,Patrick Volkerding, +,Slackware, +,Linux distribution, +,[16], +, +, +,Mark Shuttleworth, +,Ubuntu Linux, +,Linux distribution, +,[17], +, +, +,Larry Wall, +,Perl, +,programming language, +,[18], +, +, +,Matt Mullenweg, +,WordPress, +,content management framework, +,[19], +, +, +,Nathan Voxland, +,Liquibase, +,database schema management, +,[20], +, +, +,Xavier Leroy, +,OCaml, +,programming language, +,[21],[22], +, +, +,Ton Roosendaal, +,Blender, +,3D computer graphics software, +,[23], +, +, +,Bram Moolenaar, +,Vim, +,text editor, +,[24], +, +, +,Don Syme, +,F#, +,programming language, +,[25], +, +, +,Rich Hickey, +,Clojure, +,programming language, +,[26], +, +, +,Wes McKinney, +,Pandas, +,Python data analysis library, +,[27], +, +, +,Martin Odersky, +,Scala, +,programming language, +,[28], +, +, +,Yukihiro Matsumoto (Matz), +,Ruby, +,programming language, +,[29], +, +, +,Evan Czaplicki, +,Elm, +,front-end web framework, +,[30],[31], +, +, +,Juan Benet, +,InterPlanetary File System, +,decentralized internet, +,[32], +, +, +,Sylvain Benner, +,Spacemacs, +,community-driven ,Emacs, distribution, +,[33], +, +, +,Pauli Virtanen, +,SciPy, +,Python, library used for scientific and technical computing, +,[34],[35], +, +, +,José Valim, +,elixir, +,programming language, +,[36], +, +, +,References,[,edit,], +, +, +,^ ,a, ,b, ,Guido van Rossum (July 31, 2008). ,""Origin of BDFL"",. Retrieved ,August 1,, 2008,., , +,^, ,""Python Creator Scripts Inside Google"",. www.eweek.com,. Retrieved ,May 13,, 2008,., , +,^, ,Eric S. Raymond. ,""Homesteading the Noosphere"",. Retrieved ,August 1,, 2008,., , +,^, ,"",Ethereum's Boy King Is Thinking About Giving Up the Mantle,"", +,^, ,Randy Fay, "",How Do Open Source Communities Govern Themselves?,"", +,^, ,Book: Building Websites with DotNetNuke 5, Michael Washington and Ian Lackey, Packt Publishing. Page 14 ""The core team comprises individuals invited to join the team by Shaun Walker, whom they affectionately call the ""Benevolent Dictator""."", +,^ ,a, ,b, ,c, ,Constine, Josh (December 7, 2012). ,""Dropbox Hires Away Google's Guido Van Rossum, The Father Of Python"",. TechCrunch,. Retrieved ,June 1,, 2015,., , +,^, ,""Adrian and Jacob retiring as Django BDFLs"",. Adrian Holovaty. January 12, 2014,. Retrieved ,June 14,, 2015,., , +,^, ,""Taylor Otwell, Twitter"",. Taylor Otwell. October 9, 2014,. Retrieved ,October 9,, 2014,., , +,^, ,""Taylor Otwell, Creator of the Laravel PHP Framework"",. August 5, 2014,. Retrieved ,August 5,, 2014,., , +,^, ,Hildebrand, Matthew (July 5, 2005). ,""Interview: Theo de Raadt on Industry and Free Software"",. ,The Epoch Times,. The Epoch Times. Archived from ,the original, on June 21, 2015,. Retrieved ,June 20,, 2015,., , +,^, ,""Welcome to Funtoo Linux"",., , +,^, ,""Orchard Project Steering Committee"",. Archived from ,the original, on August 12, 2015., , +,^, ,""The Four Hundred—Next Up on the System i: Python"",. www.itjungle.com,. Retrieved ,May 13,, 2008,., , +,^, ,Dee-Ann LeBlanc (31 July 2006). ,Linux For Dummies, (7th ed.). John Wiley & Sons. p. 15. ,ISBN, ,978-0-470-04793-4,., , +,^, ,""Stories of Linux: A Look at Slackware Linux"",. ,linux.com,., , +,^, ,""Ubuntu carves niche in Linux landscape"",. ,CNET,. Archived from ,the original, on 6 November 2015., , +,^, ,""The Art of Ballistic Programming"",. Archived from ,the original, on June 17, 2013., , +,^, ,""Thesis, Automattic, and WordPress | Post Status"",. Retrieved ,2015-07-24,., , +,^, ,""User and Developer Community | Post Status"",. Retrieved ,2015-08-13,., , +,^, ,""A History of OCaml | OCaml.org"",. Retrieved ,2015-09-18,., , +,^, ,""OCaml Infrastructure mailing list"",. Retrieved ,2015-09-18,., , +,^, ,""New Developer Info"",. Retrieved ,21 September, 2015,., , +,^, ,""Why Neovim is Better than Vim"",. Retrieved ,30 September, 2015,., , +,^, ,""Contributing to the F# Language and Compiler"",. Retrieved ,29 September, 2015,., , +,^, ,""Clojure JIRA Workflow"",. Retrieved ,3 October, 2015,., , +,^, ,""pandas 0.20.3 documentation: Tutorials"",. Retrieved ,2017-07-24,., , ""Wes McKinney’s (pandas BDFL) blog"", +,^, ,""Programming in Scala Leaps onto the World Stage!"",. Retrieved ,2015-11-25,., , +,^, ,""A Ruby Design Process"",. Retrieved ,2016-04-17,., , +,^, ,""56: Ember vs. Elm: The Showdown with Philip Poots | The Frontside Podcast"",. ,The Frontside Podcast,. Retrieved ,2017-08-14,., , +,^, ,elm-conf (2016-09-19), ,""Code is the Easy Part"" by Evan Czaplicki,, retrieved ,2017-08-14, , +,^, ,""Understanding the IPFS White Paper part 2"",. Retrieved ,2017-08-21,., , +,^, ,""Spacemacs COMMUNITY.org"",. Retrieved ,2017-08-24,., , +,^, ,""SciPy 1.0.0"",. Retrieved ,2017-10-27,., , +,^, ,""SciPy project governance"",. Retrieved ,2017-10-27,., , +,^, ,""Elixir Companies"",. Retrieved ,2017-11-01,., , +, +, + + +, +, +, +, +",Benevolent dictator for life +" 29 December 2017, at 03:58.","Not to be confused with ,Ruby (programming language),., +, +,Ruby on Rails, +, +, +, +, +,Original author(s), +,David Heinemeier Hansson, +, +, +,Initial release, +,13 December 2005,; 12 years ago, (,2005-12-13,),[1], +, +, +, +, +, +,Stable release, +,5.1.4 ,(September 7, 2017,; 4 months ago, (,2017-09-07,),[2],), ,[±], +, +, +, +, +, +,Repository, +, +, +, +,https://github.com/rails/rails, +, +, +, +, +, +,Development status, +,Active, +, +, +,Written in, +,Ruby, +, +, +,Operating system, +,Cross-platform, +, +, +,Size, +,18.2 ,MB,[3], +, +, +,Type, +,Web application framework, +, +, +,License, +,MIT License, +, +, +,Website, +,rubyonrails,.org, +, +, +,Ruby on Rails,, or ,Rails,, is a server-side ,web application framework, written in ,Ruby, under the ,MIT License,. Rails is a ,model–view–controller, (MVC) framework, providing default structures for a ,database,, a ,web service,, and ,web pages,. It encourages and facilitates the use of ,web standards, such as ,JSON, or ,XML, for data transfer, and ,HTML,, ,CSS, and ,JavaScript, for display and user interfacing. In addition to MVC, Rails emphasizes the use of other well-known ,software engineering, ,patterns, and paradigms, including ,convention over configuration, (CoC), ,don't repeat yourself, (DRY), and the ,active record pattern,.,[4], +,Ruby on Rails' emergence in the 2000s greatly influenced web app development, through innovative features such as seamless database table creations, migrations, and scaffolding of views to enable rapid application development. Ruby on Rails' influence on other web frameworks remains apparent today, with many frameworks in other languages borrowing its ideas, including ,Django, in ,Python,, ,Laravel, in ,PHP,, Phoenix in ,Elixir,, and ,Sails.js, in ,Node.js,., +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Technical overview, +, +,2.1, ,Framework structure, +,2.2, ,Deployment, +, +, +,3, ,Philosophy and design, +,4, ,Trademarks, +,5, ,Reception, +, +,5.1, ,Scalability, +,5.2, ,Security, +, +, +,6, ,References, +,7, ,Bibliography, +,8, ,External links, +, +, +, +,History,[,edit,], +,David Heinemeier Hansson, extracted Ruby on Rails from his work on the project management tool ,Basecamp, at the ,web application, company also called ,Basecamp,.,[5], Hansson first released Rails as open source in July 2004, but did not share ,commit, rights to the project until February 2005.,[,citation needed,], In August 2006, the framework reached a milestone when ,Apple, announced that it would ship Ruby on Rails with ,Mac OS X v10.5 ""Leopard"",,,[6], which was released in October 2007., +,Rails version 2.3 was released on March 15, 2009 with major new developments in templates, engines, ,Rack, and nested model forms. Templates enable the developer to generate a skeleton application with custom ,gems, and configurations. Engines give developers the ability to reuse application pieces complete with routes, view paths and models. The Rack web server interface and Metal allow one to write optimized pieces of code that route around Action Controller.,[7], +,On December 23, 2008, ,Merb,, another web application framework, was launched, and Ruby on Rails announced it would work with the Merb project to bring ""the best ideas of Merb"" into Rails 3, ending the ""unnecessary duplication"" across both communities.,[8], Merb was merged with Rails as part of the Rails 3.0 release.,[9],[10], +,Rails 3.1 was released on August 31, 2011, featuring Reversible Database Migrations, Asset Pipeline, Streaming, ,jQuery, as default ,JavaScript, library and newly introduced ,CoffeeScript, and ,Sass, into the stack.,[11], +,Rails 3.2 was released on January 20, 2012 with a faster development mode and routing engine (also known as Journey engine), Automatic Query Explain and Tagged Logging.,[12], Rails 3.2.x is the last version that supports Ruby 1.8.7.,[13], Rails 3.2.12 supports Ruby 2.0.,[14], +,Rails 4.0 was released on June 25, 2013, introducing Russian Doll Caching, Turbolinks, Live Streaming as well as making Active Resource, Active Record Observer and other components optional by splitting them as gems.,[15], +,Rails 4.1 was released on April 8, 2014, introducing Spring, Variants, Enums, Mailer previews, and secrets.yml.,[16], +,Rails 4.2 was released on December 19, 2014, introducing Active Job, asynchronous emails, Adequate Record, Web Console, and ,foreign keys,.,[17], +,Rails 5.0 was released on June 30, 2016, introducing Action Cable, API mode, and Turbolinks 5.,[18], +,Rails 5.0.0.1 was released on August 10, 2016 with Exclusive use of rails CLI over Rake and supports Ruby 2.2.2+ versions, +,Rails 5.1 was released on April 27, 2017, introducing ,JavaScript, integration changes (management of JavaScript dependencies from NPM via Yarn, optional compilation of JavaScript using ,Webpack,, and a rewrite of Rails UJS to use vanilla JavaScript instead of depending on jQuery), system tests using ,Capybara,, encrypted secrets, parameterized mailers, direct & resolved routes, and a unified form_with helper replacing the form_tag/form_for helpers.,[19], +, +,Version history, +, +,Version, +,Date, +,Notes, +, +, +,Old version, no longer supported:, 1.0,[20], +,000000002005-12-13-0000,December 13, 2005, +, +, +, +,Old version, no longer supported:, 1.2,[21], +,000000002007-01-19-0000,January 19, 2007, +, +, +, +,Old version, no longer supported:, 2.0,[22], +,000000002007-12-07-0000,December 7, 2007, +, +, +, +,Old version, no longer supported:, 2.1,[23], +,000000002008-06-01-0000,June 1, 2008, +, +, +, +,Old version, no longer supported:, 2.2,[24], +,000000002008-11-21-0000,November 21, 2008, +, +, +, +,Old version, no longer supported:, 2.3,[25], +,000000002009-03-16-0000,March 16, 2009, +, +, +, +,Old version, no longer supported:, 3.0,[26], +,000000002010-08-29-0000,August 29, 2010, +, +, +, +,Old version, no longer supported:, 3.1,[27], +,000000002011-08-31-0000,August 31, 2011, +, +, +, +,Old version, no longer supported:, 3.2,[28], +,000000002012-01-20-0000,January 20, 2012, +, +, +, +,Old version, no longer supported:, 4.0,[29], +,000000002013-06-25-0000,June 25, 2013, +, +, +, +,Old version, no longer supported:, 4.1,[16], +,000000002014-04-08-0000,April 8, 2014, +, +, +, +,Old version, no longer supported:, 4.2,[17], +,000000002014-12-19-0000,December 19, 2014, +, +, +, +,Older version, yet still supported:, 5.0,[18], +,000000002016-06-30-0000,June 30, 2016, +, +, +, +,Current stable version:, ,5.1,[19], +,000000002017-05-10-0000,May 10, 2017, +, +, +, +,Latest preview version of a future release:, 5.2, +, +, +, +, +, +, +,Legend:, +,Old version, +,Older version, still supported, +,Latest version, +,Latest preview version, +,Future release, +, +, +, +, +, +, +,Technical overview,[,edit,], +,Like many web frameworks, Ruby on Rails uses the ,model–view–controller, (MVC) pattern to organize application programming., +,In a default configuration, a ,model, in the Ruby on Rails framework maps to a table in a database and to a Ruby file. For example, a model class ,User, will usually be defined in the file 'user.rb' in the app/models directory, and linked to the table 'users' in the database. While developers are free to ignore this convention and choose differing names for their models, files, and database table, this is not common practice and is usually discouraged in accordance with the ""convention-over-configuration"" philosophy., +,A ,controller, is a server-side component of Rails that responds to external requests from the web server to the application, by determining which view file to render. The controller may also have to query one or more models for information and pass these on to the view. For example, in an airline reservation system, a controller implementing a flight-search function would need to query a model representing individual flights to find flights matching the search, and might also need to query models representing airports and airlines to find related secondary data. The controller might then pass some subset of the flight data to the corresponding view, which would contain a mixture of static HTML and logic that use the flight data to create an HTML document containing a table with one row per flight. A controller may provide one or more actions. In Ruby on Rails, an action is typically a basic unit that describes how to respond to a specific external web-browser request. Also, note that the controller/action will be accessible for external web requests only if a corresponding route is mapped to it. Rails encourages developers to use ,RESTful, routes, which include actions such as create, new, edit, update, destroy, show, and index. These mappings of incoming requests/routes to controller actions can be easily set up in the routes.rb configuration file., +,A ,view, in the default configuration of Rails is an ,erb, file, which is evaluated and converted to ,HTML, at run-time. Alternatively, many other templating systems can be used for views., +,Ruby on Rails includes tools that make common development tasks easier ""out-of-the-box"", such as ,scaffolding, that can automatically construct some of the models and views needed for a basic ,website,.,[30], Also included are ,WEBrick,, a simple Ruby web server that is distributed with Ruby, and ,Rake,, a build system, distributed as a ,gem,. Together with Ruby on Rails, these tools provide a basic development environment., +,Ruby on Rails is most commonly not connected to the Internet directly, but through some front-end ,web server,. ,Mongrel, was generally preferred,[,by whom?,], over WEBrick in the early days,,[,citation needed,], but it can also run on ,Lighttpd,, ,Apache,, ,Cherokee,, ,Hiawatha,, ,Nginx, (either as a module – ,Phusion Passenger, for example – or via ,CGI,, ,FastCGI, or ,mod_ruby,), and many others. From 2008 onward, Passenger replaced Mongrel as the most-used web server for Ruby on Rails.,[31], Ruby is also supported natively on the ,IBM i,.,[32], +,Ruby on Rails is also noteworthy for its extensive use of the ,JavaScript, libraries, ,Prototype, and ,Script.aculo.us,, for scripting ,Ajax, actions.,[33], Ruby on Rails initially utilized lightweight ,SOAP, for web services; this was later replaced by RESTful ,web services,. Ruby on Rails 3.0 uses a technique called ,Unobtrusive JavaScript, to separate the functionality (or logic) from the structure of the web page. jQuery is fully supported as a replacement for Prototype and is the default JavaScript library in Rails 3.1, reflecting an industry-wide move towards jQuery. Additionally, ,CoffeeScript, was introduced in Rails 3.1 as the default JavaScript language., +,Since version 2.0, Ruby on Rails offers both HTML and XML as standard output formats. The latter is the facility for RESTful web services., +,Rails 3.1 introduced ,Sass, as standard ,CSS, templating., +,By default, the server uses ,Embedded Ruby, in the HTML views, with files having an html.erb extension. Rails supports swapping-in alternative templating languages, such as ,HAML, and ,Mustache,., +,Ruby on Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and ,JRuby, 1.5.2+; earlier versions are not supported.,[34], +,Ruby on Rails 3.2 is the last series of releases that support Ruby 1.8.7., +,Framework structure,[,edit,], +,Ruby on Rails is separated into various packages, namely ,ActiveRecord, (an ,object-relational mapping, system for database access), Active Resource (provides web services), Action Pack, Active Support and Action Mailer. Prior to version 2.0, Ruby on Rails also included the Action Web Service package that is now replaced by Active Resource. Apart from standard packages, developers can make ,plugins, to extend existing packages. Earlier Rails supported plugins within their own custom framework; version 3.2 deprecates these in favor of standard Ruby ""gems"".,[35], +,Deployment,[,edit,], +,Ruby on Rails is often installed using ,RubyGems,, a package manager,[36], which is included with current versions of Ruby. Many free ,Unix-like systems, also support installation of Ruby on Rails and its dependencies through their native ,package management system,., +,Ruby on Rails is typically deployed with a database server such as ,MySQL, or ,PostgreSQL,, and a web server such as ,Apache, running the ,Phusion Passenger, module., +,Philosophy and design,[,edit,], +,Ruby on Rails is intended to emphasize ,Convention over Configuration, (CoC), and the ,Don't Repeat Yourself, (DRY) principle., +,""Convention over Configuration"" means a developer only needs to specify unconventional aspects of the application. For example, if there is a class ,Sales, in the model, the corresponding table in the database is called ,sales, by default. It is only if one deviates from this convention, such as calling the table ""products sold"", that the developer needs to write code regarding these names. Generally, Ruby on Rails conventions lead to less code and less repetition.,[37], +,""Don't repeat yourself"" means that information is located in a single, unambiguous place. For example, using the ,ActiveRecord, module of Rails, the developer does not need to specify database column names in class definitions. Instead, Ruby on Rails can retrieve this information from the database based on the class name., +,""Fat models, skinny controllers"" means that most of the application logic should be placed within the model while leaving the controller as light as possible., +,Trademarks,[,edit,], +,In March 2007, ,David Heinemeier Hansson, filed three Ruby on Rails-related ,trademark, applications to the ,USPTO,. These applications regard the phrase ""RUBY ON RAILS"",,[38], the word ""RAILS"",,[39], and the official Rails logo.,[40], As a consequence, in the summer of 2007, Hansson denied permission to ,Apress, to use the Ruby on Rails logo on the cover of a new Ruby on Rails book written by some authoritative community members. The episode gave rise to a polite protest in the Ruby on Rails community.,[41],[42], In response to this criticism, Hansson replied:, +, +,I only grant promotional use [of the Rails logo] for products I'm directly involved with. Such as books that I've been part of the development process for or conferences where I have a say in the execution. I would most definitely seek to enforce all the trademarks of Rails.,[41], +, +,Reception,[,edit,], +,Scalability,[,edit,], +,Rails running on ,Matz's Ruby Interpreter, (the ,de facto, reference interpreter for Ruby) had been criticized for issues with scalability.,[43], These critics often mentioned various ,Twitter, outages in 2007 and 2008, which spurred Twitter's partial transition to ,Scala, (which runs on the ,Java Virtual Machine,) for their ,queueing system, and other ,middleware,.,[44],[45], The user interface aspects of the site continued to run Ruby on Rails,[46], until 2011 when it was replaced due to concerns over performance,[47], +,In 2011, ,Gartner Research, noted that despite criticisms and comparisons to Java, many high-profile consumer web firms are using Ruby on Rails to build scalable web applications. Some of the largest sites running Ruby on Rails include ,Airbnb,, ,GitHub,, ,Scribd,, ,Shopify,, ,Hulu,, and ,Basecamp,.,[48], As of January 2016, it is estimated that more than 1.2 million web sites are running Ruby on Rails.,[49],[50], +,Security,[,edit,], +,In March 2012, security researcher Egor Homakov discovered a ""mass assignment"" vulnerability that allowed certain Rails applications to be remotely exploited, and demonstrated it by non-maliciously hacking ,GitHub, after his earlier attempts at responsible disclosure were dismissed.,[51], +,On September 24, 2013, a session cookie persistence security flaw was reported in Ruby on Rails. In a default configuration, the entire session hash is stored within a session cookie known as ,CookieStore,, allowing any authenticated session possessing the session cookie to log in as the target user at any time in the future. As a workaround, administrators are advised to configure cookies to be stored on the server using mechanisms such as ,ActiveRecordStore,.,[52], +,Researchers Daniel Jackson and Joseph Near developed a data debugger they called ""Space"" that can analyze the data access of a Rails program and determine if the program properly adheres to rules regarding access restrictions. On April 15, 2016, Near reported that an analysis of 50 popular Web applications using Space uncovered 23 previously unknown security flaws.,[53], +,References,[,edit,], +, +, +,^, ,David. ,""Rails 1.0: Party like it's one oh oh!"",. ,Ruby on Rails,. Retrieved ,2017-03-01,., , +,^, ,matthewd. ,""Rails 5.1.4 and 5.0.6 released"",. ,Ruby on Rails,. Retrieved ,2017-09-09,., , +,^, ,""Release v5.1.1 · rails/rails · GitHub"",. Retrieved ,25 June, 2017,., , +,^, ,""Getting Started with Rails: What Is Rails?"",. ,Ruby on Rails Guides,. Retrieved ,10 August, 2014,., , +,^, ,Grimmer, Lenz−− (February 2006). ,""Interview with David Heinemeier Hansson from Ruby on Rails"",. ,MySQL AB,. Archived from ,the original, on February 25, 2013,. Retrieved ,2008-06-08,., , +,^, ,Hansson, David (August 7, 2006). ,""Ruby on Rails will ship with OS X 10.5 (Leopard)"",. Retrieved ,2008-06-08,., , +,^, ,Hansson, David (March 16, 2009). ,""Rails 2.3: Templates, Engines, Rack, Metal, much more!"",., , +,^, ,""The day Merb joined Rails"",. 2008-12-27. Archived from ,the original, on 2013-02-09., , +,^, ,""Ruby on Rails 3.0 Release Notes — Ruby on Rails Guides"",. ,Edgeguides.rubyonrails.org,. Retrieved ,2017-05-24,., , +,^, ,""Ruby on Rails 3.0 goes modular"",. sdtimes.com. 2010-02-10,. Retrieved ,2010-08-06,., , +,^, ,""Ruby on Rails 3.1 Release Notes"",. 2012-09-01., , +,^, ,""Ruby on Rails 3.2 Release Notes"",. 2012-09-01., , +,^, ,""Rails/master is now 4.0.0.beta"",. 2012-09-01., , +,^, ,Rails 3.2.x is now compatible with Ruby 2.0.0 by sikachu · Pull Request #9406 · rails/rails · GitHub,. Github.com. Retrieved on 2014-05-30., +,^, ,""Rails 4.0: Final version released! | Riding Rails"",. ,Weblog.rubyonrails.org,. 2013-06-25,. Retrieved ,2017-05-24,., , +,^ ,a, ,b, ,""Rails 4.1.0: Spring, Variants, Enums, Mailer previews, secrets.yml"",. ,weblog.rubyonrails.org,., , +,^ ,a, ,b, ,""Rails 4.2: Active Job, Asynchronous Mails, Adequate Record, Web Console, Foreign Keys"",. ,Ruby on Rails,. Retrieved ,5 Dec, 2015,., , +,^ ,a, ,b, ,""Rails 5.0: Action Cable, API mode, and so much more"",. ,Ruby on Rails,. Retrieved ,19 Nov, 2016,., , +,^ ,a, ,b, ,""Rails 5.1: Loving JavaScript, System Tests, Encrypted Secrets, and more"",. ,Ruby on Rails,. Retrieved ,10 May, 2017,., , +,^, ,""Rails 1.0: Party like it's one oh oh!"",. Riding Rails. Retrieved June 9, 2010., +,^, ,""Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations"",. Riding Rails. Retrieved June 9, 2010., +,^, ,""Rails 2.0: It's done!"",. Riding Rails. Retrieved June 9, 2010., +,^, ,Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc,. Riding Rails. Retrieved June 9, 2010., +,^, ,""Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs"",. Riding Rails. Retrieved June 9, 2010., +,^, ,""Rails 2.3: Templates, Engines, Rack, Metal, much more!"",. Riding Rails. Retrieved June 9, 2010., +,^, ,""Rails 3.0: It's ready!"",. Riding Rails. Retrieved August 30, 2010., +,^, ,""bumping to 3.1.0"",. ,Github.com,., , +,^, ,""Preparing for 3.2.0 release"",. ,Github.com,., , +,^, ,""Rails 4 in 30,',"",. ,blog.wyeworks.com,., , +,^, ,Sean Lynch (2007-12-15). ,""fairleads: Rails 2.0 and Scaffolding Step by Step"",. ,Fairleads.blogspot.com,. Retrieved ,2017-05-24,., , +,^, ,""Archived copy"",. Archived from ,the original, on 2009-07-07,. Retrieved ,2012-12-03,., , +,^, ,Maxcer, Chris. ,""PowerRuby Brings Enterprise Ruby on Rails Support to IBM i"",. iPro Developer. Archived from ,the original, on 9 October 2013,. Retrieved ,9 May, 2014,., , +,^, ,Js_Escape_Map. ,""ActionView::Helpers::JavaScriptHelper"",. ,Api.rubyonrails.org,. Retrieved ,2017-05-24,., , +,^, ,""Rails 3.0: It's ready!"",. rubyonrails.org,. Retrieved ,2010-08-30,. ,Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and JRuby 1.5.2+., , +,^, ,""Rails 3.2.0.rc2 has been released!"",. ,Weblog.rubyonrails.org,. 2012-09-01., , +,^, ,""Ruby on Rails: Download"",. RubyonRails.org. Archived from ,the original, on 2009-12-12., , +,^, ,""Getting Started with Rails"",. Rubyonrails.org,. Retrieved ,2014-03-10,., , +,^, ,"","",Ruby on Rails"" Trademark Status"",. ,USPTO,. Retrieved ,2007-08-01,., , +,^, ,"","",Rails"" Trademark Status"",. ,USPTO,. Retrieved ,2007-08-01,., , +,^, ,""Rails Logo Trademark Status"",. ,USPTO,. Retrieved ,2007-08-01,., , +,^ ,a, ,b, ,Forde, Pete (2007-07-23). ,""Beginning Rails: From Novice to Professional"",. Archived from ,the original, on August 5, 2007,. Retrieved ,2007-08-01,., , +,^, ,Cooper, Peter (2007-07-24). ,""David Heinemeier Hansson says No to Use of Rails Logo"",. Retrieved ,2007-08-01,., , +,^, ,""5 Question Interview with Twitter Developer Alex Payne"",. radicalbehavior.com. 2007-03-29. Archived from ,the original, on April 23, 2009,. Retrieved ,2014-11-04,. ,By various metrics Twitter is the biggest Rails site on the net right now. Running on Rails has forced us to deal with scaling issues - issues that any growing site eventually contends with – far sooner than I think we would on another framework., , +,^, ,Steve Jenson; Alex Payne & Robey Pointer interview (2009-04-03). ,""Twitter on Scala"",. artima.com,. Retrieved ,2009-07-18,. ,We had a Ruby-based queuing system that we used for communicating between the Rails front ends and the daemons, and we ended up replacing that with one written in Scala. The Ruby one actually worked pretty decently in a normal steady state, but the startup time and the crash behavior were undesirable., , +,^, ,""Twitter jilts Ruby for Scala"",. theregister.co.uk. 2009-04-01,. Retrieved ,2009-07-18,. ,By the end of this year, Payne said, Twitter hopes to have its entire middleware infrastructure and its APIs ported to the new language. Ruby will remain, but only on the front end. ""We're still happy with Rails for building user facing features... performance-wise, it's fine for people clicking around web pages. It's the heavy lifting, asynchronous processing type of stuff that we've moved away from."", , +,^, ,ryan king (2009-09-25). ,""Twitter on Ruby"",. evan weaver,. Retrieved ,2009-09-29,. ,We use Scala for a few things at Twitter, but the majority of the site is Ruby., , +,^, ,""Twitter Search is Now 3x Faster"",. Twitter,. Retrieved ,June 6,, 2014,., , +,^, ,""Here's Why Ruby On Rails Is Hot"",. Business Insider. Archived from ,the original, on December 21, 2011,. Retrieved ,February 10,, 2012,., , +,^, ,""Ruby on Rails Usage Statistics"",. ,trends.builtwith.com,. Retrieved ,2016-01-04,., , +,^, ,""Ruby on Rails Token Usage Statistics"",. ,trends.builtwith.com,. Retrieved ,2016-01-04,., , +,^, ,Protalinski, Emil. ,""How GitHub handled getting hacked"",. ,Zdnet.com,. Retrieved ,2017-05-24,., , +,^, ,Brook, Chris (2013-09-25). ,""Security Issue in Ruby on Rails Could Expose Cookies"",. ,Threat Post,. The Kaspersky Lab Security News Service,. Retrieved ,2014-06-04,., , +,^, ,""Patching up Web applications"",. ,MIT News,. Retrieved ,2016-04-21,., , +, +, +,Bibliography,[,edit,], +, +, +,Ruby, Sam; Thomas, Dave; Hansson, David (March 28, 2009). ,""Agile Web Development with Rails"", (Third ed.). ,Pragmatic Bookshelf,: 850. ,ISBN, ,1-934356-16-6,., , +,Laurent, Simon St.; Dumbill, Edd (November 28, 2008). ,""Learning Rails"", (First ed.). ,O'Reilly Media,: 442. ,ISBN, ,0-596-51877-3,., , +,Lenz, Patrick (May 1, 2008). ,""Simply Rails 2"", (Second ed.). ,SitePoint,: 450. ,ISBN, ,0-9804552-0-0,., , +,Tate, Bruce; Hibbs, Curt (August 22, 2006). ,""Ruby on Rails: Up and Running"", (First ed.). ,O'Reilly Media,: 182. ,ISBN, ,0-596-10132-5,., , +,Holzner Ph.D., Steve (November 29, 2006). ,""Beginning Ruby on Rails"", (First ed.). ,Wrox,: 380. ,ISBN, ,0-470-06915-5,., , +,Allan Hardy, Jeffrey; Carneiro Jr, Cloves; Catlin, Hampton (July 20, 2007). ,""Beginning Ruby on Rails E-Commerce: From Novice to Professional"", (First ed.). ,Wrox,: 361. ,ISBN, ,1-59059-686-2,., , +,Clark, Mike (May 15, 2008). ,""Advanced Rails Recipes"", (First ed.). Pragmatic Bookshelf: 464. ,ISBN, ,0-9787392-2-1,., , +, +, +,External links,[,edit,], +, +, +, +,Wikibooks has more on the topic of: ,Ruby on Rails, +, +, +, +,Official website, +,The Rails Tutorial, – The Ruby on Rails Tutorial book and screencast series teach you how to develop and deploy Ruby on Rails apps, +,Rails source code, +,Rails guides, +,Rails API, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Ruby programming language, +, +, +, +,Implementations, +, +, +, +, +,Active, +, +, +, +,Ruby MRI, / ,YARV, +,mruby, +,JRuby, +,Rubinius, +,MagLev, +,RubyMotion, +, +, +, +, +, +,Discontinued, +, +, +, +,MacRuby, +,IronRuby, +,XRuby, +,RubyJS, +,HotRuby, +, +, +, +, +, +, +, +, +, +, +, +,IDE, +, +, +, +,Komodo, +,NetBeans, +,RadRails, +,RubyMine, +, +, +, +, +, +,Applications, +, +, +, +,Capistrano, +,Chef, +,Hackety Hack, +,Homebrew, +,Interactive Ruby Shell, +,Pry, +,Puppet, +,Rake, +,Redmine, +,RSpec, +,RubyGems, +,RVM, +, +, +, +, +, +,Libraries and frameworks, +, +, +, +,Adhearsion, +,Camping, +,eRuby, (RHTML), +,Merb, +,Padrino, +,RubyCocoa, +,Ruby on Rails, +,Shoes, +,Sinatra, +,QtRuby, +, +, +, +, +, +,Server software, +, +, +, +,mod_ruby, +,Mongrel, +,Phusion Passenger, (mod_rails/mod_rack), +,Rack, +,WEBrick, +, +, +, +, +, +,People, +, +, +, +,Yukihiro Matsumoto, +,David Heinemeier Hansson, +,why the lucky stiff, +, +, +, +, +, +,Other, +, +, +, +,Document format, +,why's (poignant) Guide to Ruby, +,Ruby Central, +,RubyKaigi, +,RubyForge, +,Ruby License, +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web frameworks, +, +, +, +, +, +, +,Comparison, +, +, +, +, +, +,C++, +, +, +, +,CppCMS, +,Wt, +, +, +, +, +, +,CLI, +, +, +, +,ASP.NET, +, +,Core, +,AJAX, +,Dynamic Data, +,MVC, +,Razor, +,Web Forms, +, +, +,DNN, +,BFC, +,MonoRail, +,OpenRasta, +,Umbraco, +, +, +, +, +, +,ColdFusion, +, +, +, +,CFWheels, +,ColdBox Platform, +,ColdSpring, +,Fusebox, +,Mach-II, +,Model-Glue, +, +, +, +, +, +,Common Lisp, +, +, +, +,Caveman2, +,CL-HTTP, +,UnCommon Web, +,Weblocks, +, +, +, +, +, +,Haskell, +, +, +, +,Happstack, +,Yesod, +,Snap, +, +, +, +, +, +,Java, +, +, +, +,AppFuse, +,Flexive, +,Grails, +,GWT, +,ICEfaces, +,ItsNat, +,JavaServer Faces, +,JHipster, +,Jspx, +,JWt, +,OpenXava, +,Play, +,Reasonable Server Faces, +,Remote Application Platform, +,RIFE, +,Seam, +,Sling, +,Spring, +,Stripes, +,Struts, +,Tapestry, +,Vaadin, +,Vert.x, +,WebWork, +,Wicket, +,WaveMaker, +,ZK, +, +, +, +, +, +,JavaScript, +, +, +, +,Ample SDK, +,Angular,/,AngularJS, +,Backbone.js, +,Chaplin.js, +,Closure, +,Dojo Toolkit, +,Ember.js, +,Ext JS, +,jQuery, +,Meteor, +,MooTools, +,Node.js, +,OpenUI5, +,Prototype, +,React, +,Rico, +,script.aculo.us, +,Sencha Touch, +,SproutCore, +,Wakanda, +, +, +, +, +, +,Perl, +, +, +, +,Catalyst, +,Dancer, +,Mason, +,Maypole, +,Mojolicious, +,WebGUI, +, +, +, +, +, +,PHP, +, +, +, +,CakePHP, +,CodeIgniter, +,Drupal, +,Fat-Free, +,FuelPHP, +,Flow, +,Gyroscope, +,Horde, +,Kohana, +,Laravel, +,Lithium, +,Midgard, +,MODX, +,Nette, +,Phalcon, +,Pop PHP, +,PRADO, +,ProcessWire, +,Qcodo, +,Silex, +,SilverStripe, +,Symfony, +,TYPO3, +,Xaraya, +,XOOPS, +,Yii, +,Zend Framework, +, +, +, +, +, +,Python, +, +, +, +,BlueBream, +,CherryPy, +,Django, +,Flask, +,Grok, +,Nevow, +,Pyjs, +,Pylons, +,Pyramid, +,Quixote, +,TACTIC, +,Tornado, +,TurboGears, +,web2py, +,Webware, +,Zope 2, +, +, +, +, +, +,Ruby, +, +, +, +,Camping, +,Merb, +,Padrino, +,Ruby on Rails, +,Sinatra, +, +, +, +, +, +,Scala, +, +, +, +,Lift, +,Play, +,Scalatra, +, +, +, +, +, +,Smalltalk, +, +, +, +,AIDA/Web, +,Seaside, +, +, +, +, +, +,Other languages, +, +, +, +,Vibe.d, (,D,), +,Application Express, (,PL/SQL,), +,Grails, (,Groovy,), +,Kepler, (,Lua,), +,Rocket, (,Rust,), +,OpenACS, (,Tcl,), +,Phoenix, (,Elixir,), +,SproutCore, (,JavaScript,-,Ruby,), +,Yaws, (,Erlang,), +, +, +, +, +, +, + + +, +, +, +, +",Ruby on Rails +" 7 January 2018, at 05:36.","Not to be confused with ,David Hanson (computer scientist),., +, +, +, +, +, +, +, +,This article has multiple issues., Please help ,improve it, or discuss these issues on the ,talk page,. ,(,Learn how and when to remove these template messages,), +, +, +, +, +, +, +, +,This article ,is written like a personal reflection or opinion essay, that states a Wikipedia editor's personal feelings about a topic. ,Please ,help improve it, by rewriting it in an ,encyclopedic style,., ,(July 2017), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +, +, +,This article ,reads like ,a press release, or ,a news article, or ,is entirely based on ,routine coverage,. ,Please ,expand this article, with ,properly sourced content, to meet Wikipedia's ,quality standards,, ,event notability guideline,, or ,encyclopedic content policy,., ,(July 2017), +, +, +, +, +, +, +, +, +, +,The topic of this article ,may not meet Wikipedia's ,notability guideline for biographies,. ,Please help to establish notability by citing ,reliable secondary sources, that are ,independent, of the topic and provide significant coverage of it beyond its mere trivial mention. If notability cannot be established, the article is likely to be ,merged,, ,redirected,, or ,deleted,., +,Find sources:, ,""David Heinemeier Hansson"", – ,news, ,·, ,newspapers, ,·, ,books, ,·, ,scholar, ,·, ,JSTOR, ,(July 2017), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +, +, +,Some of this article's ,listed sources, ,may not be ,reliable,. ,Please help this article by looking for better, more reliable sources. Unreliable citations may be challenged or deleted., ,(July 2017), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +,(,Learn how and when to remove this template message,), +, +, +, +, +, +,David Heinemeier Hansson, +, +, +, +,Hansson at the 2006 O'Reilly Emerging Technology Conference, +, +, +, +,Born, +,(,1979-10-15,), 15 October 1979 ,(age 38),[1], +,Copenhagen,, ,Denmark, +, +, +,Residence, +,Benahavís,, ,Spain, +, +, +,Other names, +,DHH, +, +, +,Occupation, +,Programmer,[2], +, +, +,Employer, +,Basecamp, +, +, +,Known for, +,Ruby on Rails, +, +, +,Website, +,david,.heinemeierhansson,.com, +, +, +,David Heinemeier Hansson, (born 15 October 1979; known to the ,Ruby, and car racing communities as ,DHH,) is a ,Danish, ,programmer, and the creator of the popular ,Ruby on Rails, ,web development, ,framework, and the ,Instiki wiki,.,[3], He is also a partner at the web-based software development firm ,Basecamp, (formerly ,37signals,)., +,Hansson co-wrote ,Agile Web Development with Rails, with ,Dave Thomas, in 2005 as part of ,The Facets of Ruby Series,. He also co-wrote ,Getting Real,, ,Rework,, and ,Remote, with ,Jason Fried,., +, +, +, +,Contents, +, +, +,1, ,Programming, +,2, ,Personal life, +, +,2.1, ,24 Hours of Le Mans results, +,2.2, ,Complete FIA World Endurance Championship results, +, +, +,3, ,Recognition, +,4, ,See also, +,5, ,References, +,6, ,External links, +, +, +, +,Programming,[,edit,], +,In 1999, Hansson founded and built a Danish online gaming news website and community called Daily Rush, which he ran until 2001.,[4], +,After attracting the attention of ,Jason Fried, by offering him help with PHP coding, Hansson was hired by Fried to build a web-based ,project management, tool, which ultimately became 37signals' ,Basecamp, ,software as a service, product., +,To aid the development process, Hansson used the then-obscure Ruby programming language to develop a custom ,web framework,. He released the framework separately from the project management tool in 2004 as the ,open source, project ,Ruby on Rails,. In 2005, Hansson was recognized by ,Google, and ,O'Reilly, with the ""Hacker of the Year"" award for his creation of Ruby on Rails.,[5], +,After graduating from the ,Copenhagen Business School, and receiving his ,bachelor's degree, in Computer Science and Business Administration, Hansson moved from ,Denmark, to ,Chicago,, Illinois, ,U.S., in November 2005.,[6], +,Personal life,[,edit,], +, +, +,24 Hours of Le Mans, career, +, +, +,Years, +,2012 -, +, +, +,Teams, +,OAK Racing,, ,Aston Martin Racing,, ,Extreme Speed Motorsports,, ,Proton Competition,, ,Rebellion Racing, +, +, +,Best finish, +,8th ,(,2013,), +, +, +,Class wins, +,1, +, +, +,David Heinemeier Hansson lists photography and race car driving amongst his hobbies.,[7], He took part in the ,2012 24 Hours of Le Mans, driving for ,OAK Racing,.,[8], He also drove a Morgan-Nissan P2 car for ,Conquest Racing, in the ,American Le Mans Series, (ALMS), winning two races in the season. Heinemeier Hansson joined OAK Racing full-time in 2013, taking five 2nd-place finishes to finish 2nd in the Trophy for LMP2 Drivers., +,In July 2010 it was revealed that Heinemeier Hansson was the person that had commissioned the one-off ,Pagani Zonda HH, supercar.,[9], He also owns the one-off ,Koenigsegg Agera, HH car.,[10], +,24 Hours of Le Mans results,[,edit,], +, +, +,Year, +,Team, +,Co-Drivers, +,Car, +,Class, +,Laps, +,Pos., +,Class, +Pos., +, +, +,2012, +, ,OAK Racing, +, ,Bas Leinders, +, ,Maxime Martin, +,Morgan LMP2,-,Nissan, +,LMP2, +,341, +,14th, +,7th, +, +, +,2013, +, ,OAK Racing, +, ,Olivier Pla, +, ,Alex Brundle, +,Morgan LMP2,-,Nissan, +,LMP2, +,328, +,8th, +,2nd, +, +, +,2014, +, ,Aston Martin Racing, +, ,Kristian Poulsen, +, ,Nicki Thiim, +,Aston Martin Vantage GTE, +,GTE, +Am, +,334, +,17th, +,1st, +, +, +,2015, +, ,Extreme Speed Motorsports, +, ,Scott Sharp, +, ,Ryan Dalziel, +,Ligier JS P2,-,Honda, +,LMP2, +,329, +,28th, +,10th, +, +, +,2016, +, ,Abu Dhabi-Proton Racing, +, Khaled Al Qubaisi, +, ,Patrick Long, +,Porsche 911 RSR, +,GTE, +Am, +,330, +,28th, +,3rd, +, +, +,2017, +, ,Vaillante Rebellion, +, ,Nelson Piquet Jr., +, ,Mathias Beche, +,Oreca 07,-,Gibson, +,LMP2, +,364, +,DSQ, +,DSQ, +, +, +,Complete FIA World Endurance Championship results,[,edit,], +, +, +,Year, +,Entrant, +,Class, +,Car, +,Engine, +,Tyres, +,1, +,2, +,3, +,4, +,5, +,6, +,7, +,8, +,9, +,Rank, +,Points, +, +, +,2013, +,OAK Racing, +,LMP2, +,Morgan LMP2, +,Nissan, VK45DE 4.5 L V8, +,D, +,SIL, +,2, +,SPA, +,2, +,LMS, +,2, +,SÃO, +,6, +,COA, +,6, +,FUJ, +,3, +,SHA, +,2, +,BHR, +,2, +, +,2nd, +,132.5, +, +, +,2014, +,Aston Martin Racing, +,LMGTE, +Am, +,Aston Martin Vantage V8 GTE, +,Aston Martin, 4.5 L V8, +,M, +,SIL, +,1, +,SPA, +,2, +,LMS, +,1, +,COA, +,2, +,FUJ, +,1, +,SHA, +,2, +,BHR, +,1, +,SÃO, +,2, +, +,1st, +,198, +, +, +,2015, +,Extreme Speed Motorsports, +,LMP2, +,HPD ARX-03b, +,Ligier JS P2, +,Honda, HR28TT 2.8 L Turbo V6, +,D, +,SIL, +,EX, +,SPA, +,8, +,LMS, +,5, +,NÜR, +,6, +,COA, +,4, +,FUJ, +,4, +,SHA, +,Ret, +,BHR, +,7, +, +,7th, +,62, +, +, +,2016, +,Abu Dhabi-Proton Racing, +,LMGTE, +Am, +,Porsche 911 RSR, +,Porsche, 4.0 L Flat-6, +,M, +,SIL, +,5, +,SPA, +,6, +,LMS, +,2, +,NÜR, +,4, +,MEX, +,1, +,COA, +,5, +,FUJ, +,5, +,SHA, +,4, +,BHR, +,1, +,2nd, +,151, +, +, +,2017, +,Vaillante Rebellion, +,LMP2, +,Oreca 07, +,Gibson, GK-428 4.2 litre ,V8, +,D, +,SIL, +,9, +,SPA, +4, +,LMS, +,DSQ, +,NÜR, +,4, +,MEX, +,5, +,COA, +,2, +,FUJ, +,DSQ, +,SHA, +,3, +,BHR, +,3, +,8th, +,85, +, +, +,Recognition,[,edit,], +, +,2005: Won Best Hacker of the Year 2005 at ,OSCON, from ,Google, and ,O'Reilly, for the work on Rails.,[11], +,2006: Accepted the ,Jolt Award, of product excellence for Rails 1.0.,[11], +,2012: Named ,ALMS, Rookie of the year.,[12], +, +,See also,[,edit,], +, +,Basecamp, +, +,References,[,edit,], +, +, +,^, ,David Heinemeier Hansson, ed. (October 2001). ,""Turning Another Year (Loud Thinking)"",. Archived from ,the original, on 1 November 2007,. Retrieved ,2 October, 2007,., , +,^, ,The home screens of 37signals, +,^, ,DHH, interviewed on the TV show Triangulation on the ,TWiT.tv, network, +,^, ,Daily Rush, +,^, ,""Google-O'Reilly Open Source Awards - Hall of Fame"",. Google Code,. Retrieved ,2010-09-03,. ,Best Hacker: David Heinemeier Hansson (Ruby on Rails and 37Signals), , +,^, ,Staff writer (March 9, 2014). ,""David Heinemeier Hansson: Basecamp, Remote and the next big thing"",. eTalks,. Retrieved ,April 30,, 2015,., ,[,permanent dead link,], +,^, ,""DHH weblog"",. Retrieved ,2012-07-02,., , +,^, ,Mercier, Laurent (2012-04-18). ,""L'équipage de la Morgan 2012 LMP2 #35 affiche complet"", [The crew of the #35 LMP2 2012 Morgan sold out]. ,Endurance-Info, (in French). Infomaniak Network SA,. Retrieved ,2012-04-18,., , +,^, ,""Pagani Zonda HH"",. secretentourage.com. August 2010,. Retrieved ,2011-01-02,., , +,^, ,Gary Bonanni (Oct 7, 2014). ,""One-of-a-Kind Koenigsegg Agera HH Spotted"",. ,carbuzz.com,. Retrieved ,7 October, 2014,., , +,^ ,a, ,b, ,About David Heinemeier Hansson, ,Archived, 2011-06-02 at the ,Wayback Machine,.. Loudthinking.com. Retrieved on 2014-05-30., +,^, ,""Archived copy"",. Archived from ,the original, on 2013-06-02,. Retrieved ,2013-06-23,., , +, +, +,External links,[,edit,], +, +,Loud Thinking, - Hansson's weblog, +,37signals, +,Ruby on Rails, +,Video of David Heinemeier Hansson presentation at Startup School, +,David Heinemeier Hansson - The Pareto Principle and Stoic Philosophy, on Developer on Fire, +,David Heinemeier Hansson interview, on the Inside the Net Podcast, +,Martin Fowler and David Heinemeier Hansson interview, on Hanselminutes Podcast, +,David Heinemeier Hansson interview in Danish, on Builder.dk Podcast, +,Podcast interview with David Heinemeier Hansson, on the Web 2.0 Show, +,Ruby on Rails video,[,permanent dead link,], David Heinemeier Hansson explains Ruby on Rails at the university of Roskilde, in 2004, +,Keynote 2007 - RailsConf Europe 2007 - Berlin, +,RailsConf Keynote, on REST. July 9, 2006, +,The Great Surplus - Keynote at RailsConf 2008 - Portland,[,permanent dead link,], +,Living with legacy software - Keynote at RailsConf Europe 2008 - Berlin, +,FLOSS Weekly podcast 79, and its ,transcription, +,Podcast interview with David Heinemeier Hansson, on This Developer's Life, +, +, +, +,Sporting positions, +, +, +,Preceded by, +,Jamie Campbell-Walter, +,Stuart Hall, +,FIA Endurance Trophy for LMGTE Am Drivers, +,2014, ,with:, +,Kristian Poulsen, +,Succeeded by, +,Aleksey Basov, +,Andrea Bertolini, +Viktor Shaitar, +, +, +, +, +, +,Authority control, +, +, +, +,WorldCat Identities, +,VIAF,: ,24888522, +,LCCN,: ,no2006071728, +,ISNI,: ,0000 0001 1609 5882, +,GND,: ,173789617, +,SELIBR,: ,264350, +,SUDOC,: ,097530417, +,BNF,: ,cb150608725, ,(data), +,BIBSYS,: ,5081149, +,NDL,: ,01034410, +,NKC,: ,stk2007383215, +,BNE,: ,XX4895045, +,CiNii,: ,DA1757643X, +, +, +, +, +, +, + + +, +, +, +, +",David Heinemeier Hansson +" 9 January 2018, at 10:32."," +, +, +, +, +, +, +,This article has multiple issues., Please help ,improve it, or discuss these issues on the ,talk page,. ,(,Learn how and when to remove these template messages,), +, +, +, +, +, +, +, +,This article ,relies too much on ,references, to ,primary sources,. ,Please improve this by adding ,secondary or tertiary sources,., ,(September 2015), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +, +, +,Some of this article's ,listed sources, ,may not be ,reliable,. ,Please help this article by looking for better, more reliable sources. Unreliable citations may be challenged or deleted., ,(September 2015), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +, +, +,This article ,has an unclear citation style,. ,The references used may be made clearer with a different or consistent style of ,citation,, ,footnoting,, or ,external linking,. ,Violates Wikipedia:External links: ""Wikipedia articles may include links to web pages outside Wikipedia (external links), but they should not normally be used in the body of an article.""., ,(November 2017), ,(,Learn how and when to remove this template message,), +, +, +, +, +,Laravel, +, +, +, +, +,Developer(s), +,Taylor Otwell, +, +, +,Initial release, +,June 2011,; 6 years ago, (,2011-06,),[1], +, +, +, +, +, +,Stable release, +, +,5.5.0,[2], / August 30, 2017,; 4 months ago, (,2017-08-30,), +, +, +, +, +, +, +,Repository, +, +, +, +,https://github.com/laravel/framework, +, +, +, +, +, +,Development status, +,Active, +, +, +,Written in, +,PHP, 7,[a], +, +, +,Operating system, +,Cross-platform, +, +, +,Type, +,Web framework, +, +, +,License, +,MIT License, +, +, +,Website, +,laravel,.com, +, +, +,Laravel, is a ,free,, open-source,[4], PHP ,web framework,, created by Taylor Otwell and intended for the development of web applications following the ,model–view–controller, (MVC) ,architectural pattern,. Some of the features of Laravel are a modular ,packaging system, with a dedicated dependency manager, different ways for accessing ,relational databases,, utilities that aid in ,application deployment, and maintenance, and its orientation toward ,syntactic sugar,.,[5],[6],:,2,5–9,[7],[8], +,As of March 2015,[update],, Laravel is regarded as one of the most popular ,PHP, frameworks, together with ,Symfony,, Zend, ,CodeIgniter,, ,Yii2, and others.,[6],:,1,[9], +,The ,source code, of Laravel is hosted on ,GitHub, and licensed under the terms of ,MIT License,.,[10], +, +, +, +,Contents, +, +, +,1, ,History, +, +,1.1, ,Release history, +, +, +,2, ,Features, +, +,2.1, ,Featured packages, +,2.2, ,Artisan CLI, +, +, +,3, ,Conferences, +,4, ,Laravel Partners, +,5, ,See also, +,6, ,Notes, +,7, ,References, +,8, ,Further reading, +,9, ,External links, +, +, +, +,History,[,edit,], +,Taylor Otwell created Laravel as an attempt to provide a more advanced alternative to the CodeIgniter framework, which did not provide certain features such as built-in support for user ,authentication, and ,authorization,. Laravel's first ,beta release, was made available on June 9, 2011, followed by the Laravel 1 release later in the same month. Laravel 1 included built-in support for authentication, ,localisation,, ,models,, ,views,, ,sessions,, routing and other mechanisms, but lacked support for ,controllers, that prevented it from being a true ,MVC, framework.,[1], +,Laravel 2 was released in September 2011, bringing various improvements from the author and community. Major new features included the support for controllers, which made Laravel 2 a fully MVC-compliant framework, built-in support for the ,inversion of control, (IoC) principle, and a ,templating system, called ,Blade,. As a downside, support for third-party ,packages, was removed in Laravel 2.,[1], +,Laravel 3 was released in February 2012 with a set of new features including the ,command-line interface, (CLI) named ,Artisan,, built-in support for more ,database management systems,, database migrations as a form of ,version control, for database layouts, support for handling ,events,, and a packaging system called ,Bundles,. An increase of Laravel's userbase and popularity lined up with the release of Laravel 3.,[1], +,Laravel 4, codenamed ,Illuminate,, was released in May 2013. It was made as a complete rewrite of the Laravel framework, migrating its layout into a set of separate packages distributed through ,Composer,, which serves as an ,application-level package manager,. Such a layout improved the extensibility of Laravel 4, which was paired with its official regular release schedule spanning six months between minor ,point releases,. Other new features in the Laravel 4 release include ,database seeding, for the initial population of databases, support for ,message queues,, built-in support for sending different types of email, and support for delayed deletion of database records called ,soft deletion,.,[1],[11],:,18–19, +,Laravel 5 was released in February 2015 as a result of internal changes that ended up in renumbering the then-future Laravel 4.3 release. New features in the Laravel 5 release include support for scheduling periodically executed tasks through a package called ,Scheduler,, an abstraction layer called ,Flysystem, that allows remote storage to be used in the same way as local ,file systems,, improved handling of package assets through ,Elixir,, and simplified externally handled authentication through the optional ,Socialite, package. Laravel 5 also introduced a new internal ,directory tree, structure for developed applications.,[6],:,13–14,[12], +,Laravel 5.1, released in June 2015, is the first release of Laravel to receive ,long-term support, (LTS), with planned availability of ,bug fixes, for two years and ,security patches, for three years. LTS releases of Laravel are planned to be released every two years.,[13], +,Laravel 5.3, released in August 23, 2016, The new features in 5.3 are focused on improving developer speed by adding additional out of the box improvements for common tasks.,[14], ,[15], +,Laravel 5.4, released in January 24, 2017, This release has many new features, like Laravel Dusk, Laravel Mix, Blade Components and Slots, Markdown Emails, Automatic Facades, Route Improvements, Higher Order Messaging for Collections, and many others.,[16], +,Laravel 5.5, released in August 30, 2017, +,Release history,[,edit,], +,For LTS releases, such as Laravel 5.1, bug fixes are provided for 2 years and security fixes are provided for 3 years. These releases provide the longest window of support and maintenance. For general releases, bug fixes are provided for 6 months and security fixes are provided for 1 year.,[17], +, +, +, +,Version, +,Release date, +,Notes, +, +, +,Old version, no longer supported:, 1.0, +,June 2011, +,NA, +, +, +,Old version, no longer supported:, 2.0, +,September 2011, +,NA, +, +, +,Old version, no longer supported:, 3.0, +,February 22, 2012, +,NA, +, +, +,Old version, no longer supported:, 3.1, +,March 27, 2012, +,NA, +, +, +,Old version, no longer supported:, 3.2, +,May 22, 2012, +,NA, +, +, +,Old version, no longer supported:, 4.0, +,May 28, 2013, +,NA, +, +, +,Old version, no longer supported:, 4.1, +,December 11, 2013, +,NA, +, +, +,Old version, no longer supported:, 4.2, +,June 1, 2014, +,NA, +, +, +,Old version, no longer supported:, 5.0, +,February 4, 2015, +,NA, +, +, +,Older version, yet still supported:, 5.1 LTS, +,June 9, 2015, +,NA, +, +, +,Old version, no longer supported:, 5.2, +,December 21, 2015, +,NA, +, +, +,Old version, no longer supported:, 5.3, +,August 23, 2016, +,NA, +, +, +,Older version, yet still supported:, 5.4, +,January 24, 2017, +,NA, +, +, +,Current stable version:, ,5.5 LTS, +,August 30, 2017, +,NA, +, +, +,Future release:, 5.6, +,February, 2018, +,NA, +, +, +, +, +,Legend:, +,Old version, +,Older version, still supported, +,Current stable version, +,Latest preview version, +,Future release, +, +, +,Source: GitHub,[18], +,Features,[,edit,], +,The following features serve as Laravel's key design points (where not specifically noted, descriptions refer to the features of Laravel 3):,[5],[6],:,5–9,[7],[8],[19], +, +,Bundles, provide a modular ,packaging system, since the release of Laravel 3, with bundled features already available for easy addition to applications. Furthermore, Laravel 4 uses Composer as a dependency manager to add framework-agnostic and Laravel-specific PHP packages available from the ,Packagist, repository.,[20], +,Eloquent ORM, (,object-relational mapping,) is an advanced PHP implementation of the ,active record pattern,, providing at the same time internal methods for enforcing constraints on the relationships between ,database, objects. Following the active record pattern, Eloquent ORM presents ,database tables, as ,classes,, with their ,object instances, tied to single ,table rows,.,[21],[22], +,Query builder,, available since Laravel 3, provides a more direct database access alternative to the Eloquent ORM. Instead of requiring ,SQL queries, to be written directly, Laravel's query builder provides a set of classes and ,methods, capable of building queries programmatically. It also allows selectable ,caching, of the results of executed queries.,[23], +,Application logic, is an integral part of developed applications, implemented either by using ,controllers, or as part of the route declarations. The ,syntax, used to define application logic is similar to the one used by ,Sinatra, framework., +,Reverse routing, defines a relationship between the links and routes, making it possible for later changes to routes to be automatically propagated into relevant links. When the links are created by using names of existing routes, the appropriate ,uniform resource identifiers, (URIs) are automatically created by Laravel., +,Restful controllers, provide an optional way for separating the logic behind serving ,HTTP GET, and ,POST, requests., +,Class auto loading, provides automated loading of PHP classes without the need for manual maintenance of inclusion paths. On-demand loading prevents inclusion of unnecessary components, so only the actually used components are loaded., +,View, composers, serve as customizable logical code units that can be executed when a view is loaded., +,Blade, ,templating engine, combines one or more templates with a ,data model, to produce resulting views, doing that by ,transpiling, the templates into cached PHP code for improved performance. Blade also provides a set of its own ,control structures, such as ,conditional statements, and ,loops,, which are internally mapped to their PHP counterparts. Furthermore, Laravel services may be called from Blade templates, and the templating engine itself can be extended with custom directives.,[24],[25], +,IoC containers, make it possible for new objects to be generated by following the ,inversion of control, (IoC) principle, in which the framework calls into the application- or task-specific code, with optional instantiating and referencing of new objects as ,singletons,., +,Migrations, provide a ,version control, system for ,database schemas,, making it possible to associate changes in the application's ,codebase, and required changes in the database layout. As a result, this feature simplifies the ,deployment, and updating of Laravel-based applications.,[26], +,Database seeding, provides a way to populate database tables with selected default data that can be used for application ,testing, or be performed as part of the initial application setup.,[26], +,Unit testing, is provided as an integral part of Laravel,,[11],:,61–62, which itself contains unit tests that detect and prevent ,regressions, in the framework. Unit tests can be run through the provided ,artisan, ,command-line utility,., +,Automatic pagination, simplifies the task of implementing pagination, replacing the usual manual implementation approaches with automated methods integrated into Laravel., +,Form request, is a feature of Laravel 5 that serves as the base for ,form, input validation by internally binding ,event, listeners, resulting in automated invoking of the form validation methods and generation of the actual form.,[27], +,Homestead, - a ,Vagrant, ,virtual machine, that provides Laravel developers with all the tools necessary to develop Laravel straight out of the box, including, ,Ubuntu,, ,Gulp, , Bower and other development tools that are useful in developing full scale web applications.,[28], +, +,Featured packages,[,edit,], +,Ready-to-use bundles provided by Laravel through Composer and Packagist include the following:,[3], +, +,Cashier,, introduced in Laravel 4.2, provides an interface for managing subscription billing services provided by ,Stripe,, such as handling ,coupons, and generating ,invoices,., +,SSH,, introduced in Laravel 4.1, allows programmatic execution of ,CLI, commands on remote servers using the ,Secure Shell, (SSH) as an encrypted ,network protocol,., +,Scheduler,, introduced in Laravel 5.0, is an addition to the Artisan that allows programmatic scheduling of periodically executed tasks. Internally, Scheduler relies on the ,cron, daemon to run a single Artisan job that, in turn, executes the configured tasks., +,Flysystem,, introduced in Laravel 5.0, is a ,file system, abstraction layer that allows local file systems and ,cloud,-based storage services provided by ,Amazon S3, and ,Rackspace Cloud, to be used transparently and in the same way., +,Socialite,, introduced in Laravel 5.0 as an optional package, provides simplified mechanisms for authentication with different ,OAuth, providers, including ,Facebook,, ,Twitter,, ,Google,, ,GitHub, and ,Bitbucket,.,[6],:,13, +, +,Artisan CLI,[,edit,], +,Laravel's ,command-line interface, (CLI), called ,Artisan,, was initially introduced in Laravel 3 with a limited set of capabilities. Laravel's later migration to a Composer-based architecture allowed Artisan to incorporate different components from the ,Symfony, framework, resulting in the availability of additional Artisan features in Laravel 4.,[11],:,73–83,[29], +,The features of Artisan are mapped to different subcommands of the ,artisan, command-line utility, providing functionality that aids in managing and building Laravel-based applications. Common uses of Artisan include managing database migrations and seeding, publishing package assets, and generating ,boilerplate code, for new controllers and migrations; the latter frees the developer from creating proper code ,skeletons,. The functionality and capabilities of Artisan can also be expanded by implementing new custom commands, which, for example, may be used to automate application-specific recurring tasks.,[11],:,73–83,[29], +,Server requirements, +,The Laravel framework has a few system requirements. Of course, all of these requirements are satisfied by the Laravel Homestead virtual machine, so it is highly recommended that you use Homestead as your local Laravel development environment., +,However, if you are not using Homestead, you will need to make sure your server meets the following requirements:, +, + ,• PHP >= 7.0.0, + • OpenSSL PHP Extension + • PDO PHP Extension + • Mbstring PHP Extension + • Tokenizer PHP Extension + • XML PHP Extension +, +,Conferences,[,edit,], +,Laracon, is the official Laravel conference centered around the Laravel framework, covering its development, uses, and related general ,software development, topics. Laracon has taken place in the ,United States,, ,Europe, and online in the past.,[30],[31], Typically, the conference happens in the ,United States, and ,Europe, every year. 2017 was the first year a Laracon was held as an online event only. As of March 2017, there are plans for more Laracons to be held online in the future.,[32], Each year the conference has a different variety of sponsors and organizers, but Laravel, Laravel News and UserScape are usually the primary organizers. As of March 2017,[update],, the following Laracons have been held or are announced:, +, +, +, +, +Taylor Otwell at the 2013 US Laracon, +, +, +, +, +,Date, +,Location, +, +, +,February 22–23, 2013, +,Washington, D.C., +, +, +,August 30–31, 2013,[33], +,Amsterdam, +, +, +,May 15–16, 2014, +,New York City, +, +, +,August 28–30, 2014,[34], +,Amsterdam, +, +, +,August 11–12, 2015,[35], +,Louisville, Kentucky, +, +, +,August 25–26, 2015,[36], +,Amsterdam, +, +, +,July 27–29, 2016,[37], +,Louisville, Kentucky, +, +, +,August 23–24, 2016,[38], +,Amsterdam, +, +, +,March 8, 2017,[39], +,Online, +, +, +,July 25–26, 2017,[40], +,New York City, +, +, +,August 28–30, 2017,[41],[42], +,Amsterdam, +, +, +,Laravel Partners,[,edit,], +,On April 7, 2017, Taylor Otwell announced the Partners section of the Laravel website. The intention was to provide the Laravel community a recommended list of trusted companies who provide best-in-class Laravel development and guidance.,[43], As of September, 2017, the current list of Laravel Partners includes, +, +,Vehikl, +,Tighten Co., +,Kirschbaum Development Group, +, +,See also,[,edit,], +, +, +,Computer programming portal, +,Free software portal, +, +, +, +,Comparison of web frameworks, +,Comparison of web template engines, +, +,Notes,[,edit,], +, +, +, +,^, ,PHP version 5.3.7 or newer is required for Laravel versions 4.1 and older, Laravel 4.2 and 5.0 require at least PHP 5.4, while Laravel 5.1 requires PHP 5.5.9 or newer. Laravel 5.5 requires PHP 7.0.0 or newer.,[3], +, +, +, +,References,[,edit,], +, +, +,^ ,a, ,b, ,c, ,d, ,e, ,Maks Surguy (July 27, 2013). ,""History of Laravel PHP framework, Eloquence emerging"",. ,maxoffsky.com,. Retrieved ,May 10,, 2015,., , +,^, ,""laravel/framework: Release v5.5.0"",. ,github.com,. August 30, 2017,. Retrieved ,August 30,, 2017,., , +,^ ,a, ,b, ,""Laravel documentation (version 5.3): Release notes"",. ,laravel.com,. Retrieved ,August 29,, 2015,., , +,^, ,""The real-time community site Voten goes open-source"",., , +,^ ,a, ,b, ,Daniel Gafitescu (June 6, 2013). ,""Goodbye CodeIgniter, Hello Laravel"",. ,sitepoint.com,. Retrieved ,December 21,, 2013,., , +,^ ,a, ,b, ,c, ,d, ,e, ,Martin Bean (April 2015). ,Laravel 5 Essentials,. ,books.google.com,. ,Packt,. ,ISBN, ,978-1785283017,. Retrieved ,September 2,, 2015,., , +,^ ,a, ,b, ,""Laravel Documentation (versions 3.0–3.2.14)"",. ,three.laravel.com,. Retrieved ,August 30,, 2014,., , +,^ ,a, ,b, ,""Laravel Documentation (version 4.2)"",. ,laravel.com,. Retrieved ,August 30,, 2014,., , +,^, ,Bruno Skvorc (March 28, 2015). ,""Best PHP Framework for 2015 – SitePoint Survey Results"",. ,sitepoint.com,. Retrieved ,June 14,, 2015,., , +,^, ,""laravel/laravel: laravel/readme.md at master"",. ,github.com,. April 22, 2015,. Retrieved ,May 10,, 2015,., , +,^ ,a, ,b, ,c, ,d, ,Raphaël Saunier (January 2014). ,Getting Started with Laravel 4,. ,worldcat.org,. ,Packt,. ,ISBN, ,978-1783287031,. Retrieved ,September 2,, 2015,., , +,^, ,Eric Barnes (January 30, 2015). ,""Laravel 5"",. ,laravel-news.com,. Retrieved ,May 10,, 2015,., , +,^, ,Eric L. Barnes (June 9, 2015). ,""Laravel 5.1 is released"",. ,laravel-news.com,. Retrieved ,June 14,, 2015,., , +,^, ,Eric L. Barnes (August 23, 2016). ,""Laravel  5.3 is now released"",. ,laravel-news.com,. Retrieved ,August 23,, 2016,., , +,^, ,David oscar (August 23, 2016). ,""What's new in laravel  5.3"",. ,digitalsoft.in,. Retrieved ,August 23,, 2016,., , +,^, ,""Laravel 5.4 Is Now Released"",. ,Laravel News,. 2017-01-24,. Retrieved ,2017-02-21,., , +,^, ,""Laravel Documentation: Releases"",. Laravel,. Retrieved ,February 26,, 2017,., , +,^, ,""Github: Laravel"",. Laravel,. Retrieved ,February 26,, 2017,., , +,^, ,Jeffrey Way (November 28, 2012). ,""Why Laravel is Taking the PHP Community by Storm"",. ,code.tutsplus.com,. Retrieved ,May 9,, 2015,., , +,^, ,""Laravel documentation (version 4.2): Package development"",. ,laravel.com,. Retrieved ,August 30,, 2014,., , +,^, ,""Eloquent ORM in Laravel: What and Why!"",. ,enukesoftware.com,. Retrieved ,December 19,, 2014,., , +,^, ,""Develop Faster with the Laravel PHP Framework"",. ,developer.com,. Retrieved ,April 17,, 2015,., , +,^, ,""Laravel documentation (version 4.0): Query builder"",. ,laravel.com,. Retrieved ,April 27,, 2015,., , +,^, ,""Laravel documentation (version 5.1): Blade Templates"",. ,laravel.com,. Retrieved ,June 10,, 2015,., , +,^, ,Dayle Rees (2014). ,""Laravel Blade engine"",. ,daylerees.com,. Retrieved ,June 10,, 2015,., , +,^ ,a, ,b, ,""Laravel documentation (version 5.0): Migrations and seeding"",. ,laravel.com,. Retrieved ,April 27,, 2015,., , +,^, ,Manmeet Anand. ,""Creating a Contact Form in Laravel 5 Using the Form Request Feature!"",. ,tisindia.com,. Retrieved ,March 2,, 2015,., , +,^, ,""Laravel Homestead - Laravel the PHP Framework for Web artisans"",. Retrieved ,30 October, 2016,., , +,^ ,a, ,b, ,Jason Lewis (February 28, 2013). ,""Your One-Stop Guide to Laravel Commands"",. ,code.tutsplus.com,. Retrieved ,May 9,, 2015,., , +,^, ,""Laracon Online | The official worldwide Laravel online conference"",. ,laracon.net,. Retrieved ,2017-03-24,., , +,^, ,""Search Results"",. ,laravel-news.com,. Retrieved ,2017-03-24,., , +,^, ,""Supporting Laravel"",. ,Medium,. 2017-03-13,. Retrieved ,2017-03-24,., , +,^, ,""Laracon EU 2013"",. ,laracon.eu,. Retrieved ,January 2,, 2014,., , +,^, ,""Laracon EU 2014"",. ,laracon.eu,. Retrieved ,August 30,, 2014,., , +,^, ,Eric L. Barnes (January 15, 2015). ,""Laracon 2015 will be in Louisville KY"",. ,laravel-news.com,. Retrieved ,July 9,, 2015,., , +,^, ,""Laracon EU 2015"",. ,laracon.eu,. Retrieved ,July 9,, 2015,., , +,^, ,Eric L. Barnes (January 6, 2016). ,""Laracon tickets are now on sale"",. ,laravel-news.com,. Retrieved ,January 7,, 2016,., , +,^, ,Eric L. Barnes (January 7, 2016). ,""Laracon EU tickets on sale"",. ,laravel-news.com,. Retrieved ,April 7,, 2016,., , +,^, ,""Announcing Laracon Online"",. ,Laravel News,. 2017-02-06,. Retrieved ,2017-03-24,., , +,^, ,""Laracon 2017 – Location and dates have been announced"",. ,Laravel News,. 2016-11-09,. Retrieved ,2017-03-24,., , +,^, ,WebEngineers. ,""Announcing Laracon EU 2017 the official European Laravel conference"",. ,Laracon EU 2017,. Retrieved ,2017-03-24,., , +,^, ,""Laracon EU 2017 is Announced"",. ,Laravel News,. 2017-01-16,. Retrieved ,2017-03-24,., , +,^, ,Otwell, Taylor (2017-04-07). ,""Laravel Partners"",. ,Taylor Otwell,. Retrieved ,2017-09-04,., , +, +, +,[1], +,Further reading,[,edit,], +, +,Laravel Design Patterns and Best Practices, Packt, ,ISBN, ,978-1783287987,, July 2014, by Arda Kılıçdağı and H. İbrahim Yilmaz, +, +,External links,[,edit,], +, +, +, +,Wikimedia Commons has media related to ,Laravel,., +, +, +, +,Official website, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,PHP, +, +, +, +,People, +, +, +, +,Andi Gutmans, +,Rasmus Lerdorf, +,Zeev Suraski, +, +, +, +, +, +, +, +, +,Resources, +, +, +, +,Accelerator, (,List,), +,Composer, +,Editors, +,Libraries, +,PEAR, +, +, +, +, +, +,Implementations, +, +, +, +,HHVM, +,HPHPc, +,Parrot, +,Phalanger, +,Project Zero, +,Quercus, +,Zend Engine, +, +, +, +, +, +,Web frameworks, +, +, +, +,CakePHP, +,CodeIgniter, +,Drupal, +,eZ Publish, +,Fat-Free, +,FuelPHP, +,Horde, +,Joomla!, +,Laravel, +,Lithium, +,Midgard, +,MODx, +,Nette Framework, +,Phalcon, +,Pop PHP, +,PRADO, +,Qcodo, +,Silex, +,SilverStripe, +,Symfony, +,TYPO3, +,WordPress, +,Xaraya, +,XOOPS, +,Yii, +,Zend Framework, +,Zeta Components, +, +, +, +, +, +,Testing, +, +, +, +,Behat, +,PHPUnit, +,PHP Unit Testing Framework, +,Lime, (,Symfony,), +, +, +, +, +, +,ORMs, +, +, +, +,Doctrine, +,Propel, +, +, +, +, +, +,IDEs, +, +, +, +,Aptana, +,Codelobster, +,Eclipse PDT, +,NetBeans, +,PHPEdit, +,PhpStorm, +,RadPHP, +,Zend Studio, +, +, +, +, +, +,Widget toolkit, +, +, +, +,PHP-GTK, +,PHP-Qt, +,wxPHP, +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web frameworks, +, +, +, +, +, +, +,Comparison, +, +, +, +, +, +,C++, +, +, +, +,CppCMS, +,Wt, +, +, +, +, +, +,CLI, +, +, +, +,ASP.NET, +, +,Core, +,AJAX, +,Dynamic Data, +,MVC, +,Razor, +,Web Forms, +, +, +,DNN, +,BFC, +,MonoRail, +,OpenRasta, +,Umbraco, +, +, +, +, +, +,ColdFusion, +, +, +, +,CFWheels, +,ColdBox Platform, +,ColdSpring, +,Fusebox, +,Mach-II, +,Model-Glue, +, +, +, +, +, +,Common Lisp, +, +, +, +,Caveman2, +,CL-HTTP, +,UnCommon Web, +,Weblocks, +, +, +, +, +, +,Haskell, +, +, +, +,Happstack, +,Yesod, +,Snap, +, +, +, +, +, +,Java, +, +, +, +,AppFuse, +,Flexive, +,Grails, +,GWT, +,ICEfaces, +,ItsNat, +,JavaServer Faces, +,JHipster, +,Jspx, +,JWt, +,OpenXava, +,Play, +,Reasonable Server Faces, +,Remote Application Platform, +,RIFE, +,Seam, +,Sling, +,Spring, +,Stripes, +,Struts, +,Tapestry, +,Vaadin, +,Vert.x, +,WebWork, +,Wicket, +,WaveMaker, +,ZK, +, +, +, +, +, +,JavaScript, +, +, +, +,Ample SDK, +,Angular,/,AngularJS, +,Backbone.js, +,Chaplin.js, +,Closure, +,Dojo Toolkit, +,Ember.js, +,Ext JS, +,jQuery, +,Meteor, +,MooTools, +,Node.js, +,OpenUI5, +,Prototype, +,React, +,Rico, +,script.aculo.us, +,Sencha Touch, +,SproutCore, +,Wakanda, +, +, +, +, +, +,Perl, +, +, +, +,Catalyst, +,Dancer, +,Mason, +,Maypole, +,Mojolicious, +,WebGUI, +, +, +, +, +, +,PHP, +, +, +, +,CakePHP, +,CodeIgniter, +,Drupal, +,Fat-Free, +,FuelPHP, +,Flow, +,Gyroscope, +,Horde, +,Kohana, +,Laravel, +,Lithium, +,Midgard, +,MODX, +,Nette, +,Phalcon, +,Pop PHP, +,PRADO, +,ProcessWire, +,Qcodo, +,Silex, +,SilverStripe, +,Symfony, +,TYPO3, +,Xaraya, +,XOOPS, +,Yii, +,Zend Framework, +, +, +, +, +, +,Python, +, +, +, +,BlueBream, +,CherryPy, +,Django, +,Flask, +,Grok, +,Nevow, +,Pyjs, +,Pylons, +,Pyramid, +,Quixote, +,TACTIC, +,Tornado, +,TurboGears, +,web2py, +,Webware, +,Zope 2, +, +, +, +, +, +,Ruby, +, +, +, +,Camping, +,Merb, +,Padrino, +,Ruby on Rails, +,Sinatra, +, +, +, +, +, +,Scala, +, +, +, +,Lift, +,Play, +,Scalatra, +, +, +, +, +, +,Smalltalk, +, +, +, +,AIDA/Web, +,Seaside, +, +, +, +, +, +,Other languages, +, +, +, +,Vibe.d, (,D,), +,Application Express, (,PL/SQL,), +,Grails, (,Groovy,), +,Kepler, (,Lua,), +,Rocket, (,Rust,), +,OpenACS, (,Tcl,), +,Phoenix, (,Elixir,), +,SproutCore, (,JavaScript,-,Ruby,), +,Yaws, (,Erlang,), +, +, +, +, +, +, +, +, +,^, ,http://www.mindinventory.com/blog/laravel-the-best-php-framework-for-web-development/, +, +, + + +, +, +, +, +",Laravel +" 17 January 2018, at 04:00."," +,DotNetNuke, +, +, +, +, +,Developer(s), +,DNN Corporation, ,[1], +, +, +, +, +, +,Stable release, +, +,9.1.1,[2], +, +, +, +, +, +, +,Development status, +,Active, +, +, +,Operating system, +,Microsoft Windows, or ,Cloud, +, +, +,Platform, +,ASP.NET, or ,Cloud,[3], +, +, +,Type, +,Web framework, +, +, +,License, +,MIT,[4], +, +, +,Website, +,www,.dnnsoftware,.com, +, +, +,DNN, (formerly ,DotNetNuke,) is a ,web content management system, based on ,Microsoft .NET,. The DNN Platform Edition is ,open source,., +,DNN is written in ,C#,, though it existed for many years as a ,VB.NET, project.,[5],[6], It is distributed under both a Community Edition ,MIT, license ,[4], and commercial proprietary licenses as DNN Evoq Content and DNN Evoq Engage editions., +, +, +, +,Contents, +, +, +,1, ,Editions, +,2, ,Architecture, +, +,2.1, ,Modules, +,2.2, ,Skins, +, +, +,3, ,Hosting, +,4, ,Developer ecosystem community, +,5, ,Project history, +,6, ,See also, +,7, ,References, +,8, ,External links, +, +, +, +,Editions,[,edit,], +,DNN Platform (formerly ""DotNetNuke Community Edition"" ,content management system,) is open source software that is intended to allow management of websites without much technical knowledge, and to be extensible through a large number of third-party apps to provide functionality not included in the ,DNN core modules,. ,Skins, can be used to change the look of a website using DNN., +,There are two commercial editions of the software with increased functionality compared to DNN Platform, and technical support. The DotNetNuke ,Professional Edition, was introduced in February 2009 with version 4.9. In July 2013, DotNetNuke Professional Edition was renamed Evoq Content.,[7], In addition, DotNetNuke Enterprise Edition was renamed Evoq Content: Enterprise.,[8], Evoq version 9.0 was released in December 2016.,[9], +,Architecture,[,edit,], +, +, +, +, +DNN uses a three-tier architecture model., +, +, +,DotNetNuke uses a three-tier architecture model with a core framework providing support to the extensible modular structure., +,While traditionally DNN focused on providing server side functionality, recent projects strive to enhance client side experiences - along with the rest of the industry.,[10], In recent years DNN migrated from using exclusively ,Web Forms, to also allowing ,Model View Controller, and ,Single-page application, architectures.,[11], In the future, DNN faces the challenge of moving from ,ASP.NET, 4.6 to the cross-platform free and open source ,.NET Core,., +,DNN can be extended using 3rd-party modules and providers that add functionality at the server or client side. The appearance of individual pages and sites can be customized using skins.,[12], +,Modules,[,edit,], +, +, +, +, +DotNetNuke modules., +, +, +,The default functionality of DNN can be expanded by adding third-party modules, either from an existing module store,,[13], from 3rd party authors,,[14], or through ,in-house development, of custom functionality.,[15], The DNN framework provides basic functionality such as ,security,, user administration, and ,content management,, while modules are used to tailor the web site for specific deployment needs.,[16], +,A set of primary modules are included with the core DNN distribution. These modules provide the functionality required to create an e-commerce system, an intranet, a public web site or a custom web application. They are maintained by a volunteer team community. In 2015 and 2016 most projects were moved from the DotNetNuke Community Forge,[17], to GitHub.,[18], +,Web pages have skins which define regions of a page (plus their appearance) where page editors can place modules (or extensions) made available by site administrators. Pages and modules can inherit or set custom access permissions that define which groups of users can view or edit each item., +,Module can be created in various ways: compiled modules use the Web Application Project model and are written in C# or VB.NET,,[19], dynamic modules use the Web Site Project model, and ,Razor, modules which use a C# or VB.NET scripting language.,[20], +,Skins,[,edit,], +,A skinning architecture provides a ,separation of presentation and content,, enabling a web designer to develop skins without requiring any specialist knowledge of development in ASP.NET: only knowledge of ,HTML, and an understanding of how to prepare and package the skins themselves is required. Skins consist of basic HTML files with placeholders (,tokens,) for content, menus and other functionality, along with support files such as images, ,style sheets, and ,JavaScript,, packaged in a ,ZIP file,.,[21], +,Upon Microsoft's release of the ,.NET Framework version 2,, Microsoft had included functionality known as master pages. The principal idea behind master pages was to encourage ,code recycling, and consistent design and aesthetics throughout a site by creating a master page with placeholders, which at ,runtime, would be ,compiled, and replaced by content., +,Like modules, skins, can be uploaded and automatically installed through the administration pages. If the compiled skin does not contain an ASP.NET user control file, then the DNN skinning engine builds one based on various tokens included in the HTML file which refer to various sections, placeholders and/or modules of a DNN-produced page. Modern skins incorporate CSS3 and HTML5,[22], with many authors' skins supporting ,Responsive web design,, various ,JavaScript libraries,. With no credentialing, a skin's quality may vary, but often trial periods are available to evaluate functionality., +,Hosting,[,edit,], +,DNN 7.0 and above has a minimum requirement of Windows Vista, ,SQL Server, 2008, and ,.NET, 4.0 and ,IIS, 7+. These product's latest versions are supported.,[23], As of version 6.0, DNN can also be installed in an ,Azure, ,cloud computing, environment.,[24], Numerous web hosting companies offer DNN as an offering, and a 1 step installation process is available through Microsoft.,[25], However DNN's requirement for an IIS medium trust environment has prevented broader adoption,[26], among some mainstream hosting companies., +,Developer ecosystem community,[,edit,], +,DNNSoftware.com has over 1 million registered members as of November 2013 and is used on some 750,000 websites globally.,[27], Support for the Community Edition of DotNetNuke is provided by community members and developers can participate in the open-source project on GitHub.,[28], +,API, reference documents for modules,[29], and skins,[30], are available, although as of 2013, some documentation was still available only in task-oriented form.,[31], A Wiki has been created to address this weakness, with 400 wiki pages as of May 2014.,[32], +,Project history,[,edit,], +,The DotNetNuke application originally evolved out of another project, the IBuySpy Workshop.,[33], The IBuySpy Workshop application had been created by Shaun Walker ,[34], as an enhancement to the IBuySpy Portal that started as a sample application for the ,.NET Framework,. Early versions of DotNetNuke were released by Walker's company, Perpetual Motion Inc, while later development was expanded by the open source community.,[,citation needed,], +,The name DotNetNuke was coined by Walker by combining the term ,.NET, with the word ""nuke"", which had been popular with pre-existing frameworks such as ,PHP-Nuke, and PostNuke.,[35], The term DotNetNuke and DNN are registered trademarks in the US (Search USPTO,[36],) and Canada.,[37],[38], +,In September 2006, four members of the project's board of directors formed a corporation to oversee the development of the project. The new DotNetNuke Corporation was co-founded by Walker,,[39], Joe Brinkman,,[40], Nik Kalyani,,[41], and Scott Willhite,[42], and replaced Perpetual Motion Interactive Systems Inc. as the corporate entity behind the project.,[43], +,On November 25, 2008, DotNetNuke announced ,Series A, financing from Sierra Ventures and ,August Capital,, and in February 2009, after hiring Navin Nagiah as CEO, a Professional Edition version of DotNetNuke has been released for business and enterprise customers. In February 2010 DotNetNuke announced a Series B financing from Sierra Ventures, ,August Capital,, and Pelion Venture Partners.,[44], +,In August 2009 a partner program was launched by DotNetNuke Corporation, aimed at providing support to the web design and development companies that build web sites using DotNetNuke. DotNetNuke Corporation also announced the acquisition of Snowcovered, an online market for DotNetNuke modules, skins, services and related products.,[45], +,In October 2009, the 2009 Open Source CMS Market Share Report concluded that DotNetNuke was the leading .NET-based open source web content management system.,[46], +,In 2013, the company was renamed to ,DNN Corporation,.,[47], +,See also,[,edit,], +, +,List of content management systems, (CMS), +, +,References,[,edit,], +, +, +,^, ,""Web CMS - Online Community Software - DNN (DotNetNuke)"",. ,dnnsoftware.com,., , +,^, ,""Releases · dnnsoftware_Dnn.Platform"",. ,GitHub,. GitHub,. Retrieved ,27 September, 2017,., , +,^, ,Pranav Singh (2013-06-04). ,""Deploying DotNetNuke on Windows Azure"",. CodeProject,. Retrieved ,2017-04-05,., , +,^ ,a, ,b, ,""DNN CMS Platform - License"",. ,Dotnetnuke.codeplex.com,. Retrieved ,2017-04-05,., , +,^, ,""DotNetNuke Switches to C# !! >"",. DNN Software. 2011-02-28,. Retrieved ,2017-04-05,., , +,^, ,a (2007-05-11). ,""A conversion of the popular DotNetNuke web application to C#"",. CodeProject,. Retrieved ,2017-04-05,., , +,^, ,""DNN Expands Product Suite, Services and SaaS Offering With DNN Evoq"",. DNN Corp,. Retrieved ,14 Aug, 2013,., , +,^, ,Mosher, Barb (2013-07-09). ,""DotNetNuke Rebrands to DNN Evoq, Focuses on Business Solutions + Platform"",. ,Cmswire.com,. Retrieved ,2017-04-05,., , +,^, ,""New CMS Features in Evoq 9"",. ,DNNSoftware,. DNN Corp,. Retrieved ,6 March, 2017,., , +,^, ,""Client Resource Management API"",. ,Dnnsoftware.com,. Retrieved ,2017-04-05,., , +,^, ,""DNN Loves MVC: 1 - Introduction"",. ,Charlesnurse.com,. 2015-03-28,. Retrieved ,2017-04-05,., , +,^, ,""DotNetNuke - the easy way to an ASP.NET website - .NET tutorial"",. Developer Fusion. 2010-06-28,. Retrieved ,2017-04-05,., , +,^, ,""The Official DNN Store - Modules, Skins and Extensions"",. ,Store.dnnsoftware.com,. 2017-02-11,. Retrieved ,2017-04-05,., , +,^, ,""DNN Community"",. ,Github.com,. Retrieved ,2017-04-05,., , +,^, ,""DotNetNuke 4 - Module Developers Guide - Chapter 1"",. ,Adefwebserver.com,. Retrieved ,2017-04-05,., , +,^, ,""Amazon.com: dnn and dotnetnuke"",. ,Smile.amazon.com,. Retrieved ,2017-04-05,., , +,^, ,""NET Forge CMS, Extensible CMS - DNN Software Forge"",. ,Dotnetnuke.com,. 2017-01-28,. Retrieved ,2017-04-05,., , +,^, ,""Why DNN Community Extensions have Moved to GitHub"",. ,Github.com,. 2015-02-20,. Retrieved ,2017-04-05,., , +,^, ,""DotNetNuke Development | DNN Developer | DNN Experts, DNN Module Development, DNN Skins India"",. ,Swayamsoft.com,. Retrieved ,2017-04-05,., , +,^, ,""Build CMS, Building a Product Roadmap, CMS Development Tools"",. ,Dnnsoftware.com,. 2017-01-28,. Retrieved ,2017-04-05,., , +,^, ,""Top 5 DotNetNuke Manifest file Module Packaging Tips"",. iFinity,. Retrieved ,2017-04-05,., , +,^, ,""How to Create a Responsive HTML5 Skin for DotNetNuke"",. ,Dnncreative.com,. Retrieved ,2017-04-05,., , +,^, ,""DNN Cloud Demo - Install DNN Software | DNN DotNetNuke"",. ,Dnnsoftware.com,. 2017-01-28,. Retrieved ,2017-04-05,., , +,^, ,""DotNetNuke in Azure Cloud"",. Elinext. 2012-04-14,. Retrieved ,2017-04-05,., , +,^, ,""Microsoft Web Platform"",. ,Microsoft.com,. Retrieved ,2017-04-05,., , +,^, ,""Installing DotNetNuke 4.9.0 on Medium Trust Webservers"",. ,Programmersanonymous.net,. Retrieved ,2017-04-05,., , +,^, ,""DNN CMS Platform - Home"",. ,Dotnetnuke.codeplex.com,. Retrieved ,2017-04-05,., , +,^, ,""dnnsoftware/Dnn.Platform: DNN Corp Platform Repository"",. GitHub,. Retrieved ,2017-04-05,., , +,^, ,""DNN API Endpoint Documentation"",. ,Endpoint.dnnapi.dnnsharp.com,. Retrieved ,2017-04-05,., , +,^, ,""DNN Skinning Reference | DNN Skinning Tool | Dot Net Nuke Skinning"",. ,10poundgorilla.com,. Retrieved ,2017-04-05,., , +,^, ,""About DNN - DNN Company Overview | DNN"",. DotNetNuke,. Retrieved ,2017-04-05,., , +,^, ,""CMS Wiki, Content Management Wiki"",. DNN Software. 2017-01-28,. Retrieved ,2017-04-05,., , +,^, ,""Open Source CMS Project History - DNN CMS & Online Community Software"",. ,dotnetnuke.com,., , +,^, ,Book: Building Websites with DotNetNuke 5, Michael Washington and Ian Lackey, Packt Publishing. Page 14 ""The core team comprises individuals invited to join the team by Shaun Walker, whom they affectionately call the ""Benevolent Dictator""."", +,^, ,""About DNN - DNN Company Overview - DNN (DotNetNuke)"",. ,dotnetnuke.com,., , +,^, ,""Trademark Electronic Search System (TESS)"",. ,uspto.gov,., , +,^, ,""Basic search: 1192080 - Canadian trade-marks database - Intellectual property and copyright - Canadian Intellectual Property Office - Industry Canada"",. ,ic.gc.ca,., , +,^, ,""Basic search: 1256752 - Canadian trade-marks database - Intellectual property and copyright - Canadian Intellectual Property Office - Industry Canada"",. ,ic.gc.ca,., , +,^, ,[1],[,permanent dead link,], +,^, ,[2],[,permanent dead link,], +,^, ,[3],[,permanent dead link,], +,^, ,[4],[,permanent dead link,], +,^, ,""About DNN - DNN Company Overview - DNN (DotNetNuke)"",. ,dotnetnuke.com,., , +,^, ,""DotNetNuke Raises $8 Million"",. PE Hub. 2010-02-09,. Retrieved ,2017-04-05,., , +,^, ,""DotNetNuke Buys Snowcovered"",. ,Silicontap.com,. 2009-08-27,. Retrieved ,2017-04-05,., , +,^, ,""Archived copy"",. Archived from ,the original, on 2010-06-18,. Retrieved ,2010-06-15,., , +,^, ,Shaun Walker. ,""DNN: The Metamorphosis Continues.."", ,DNN Software,., , +, +, +,External links,[,edit,], +, +,DNN Corp., - The official DNN Corp Site, +,Comparison of Evoq with other CMS systems, +,DNN Plus., - DNN Persian Site, +,DotNetNuke Development, - Content Management System, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web frameworks, +, +, +, +, +, +, +,Comparison, +, +, +, +, +, +,C++, +, +, +, +,CppCMS, +,Wt, +, +, +, +, +, +,CLI, +, +, +, +,ASP.NET, +, +,Core, +,AJAX, +,Dynamic Data, +,MVC, +,Razor, +,Web Forms, +, +, +,DNN, +,BFC, +,MonoRail, +,OpenRasta, +,Umbraco, +, +, +, +, +, +,ColdFusion, +, +, +, +,CFWheels, +,ColdBox Platform, +,ColdSpring, +,Fusebox, +,Mach-II, +,Model-Glue, +, +, +, +, +, +,Common Lisp, +, +, +, +,Caveman2, +,CL-HTTP, +,UnCommon Web, +,Weblocks, +, +, +, +, +, +,Haskell, +, +, +, +,Happstack, +,Yesod, +,Snap, +, +, +, +, +, +,Java, +, +, +, +,AppFuse, +,Flexive, +,Grails, +,GWT, +,ICEfaces, +,ItsNat, +,JavaServer Faces, +,JHipster, +,Jspx, +,JWt, +,OpenXava, +,Play, +,Reasonable Server Faces, +,Remote Application Platform, +,RIFE, +,Seam, +,Sling, +,Spring, +,Stripes, +,Struts, +,Tapestry, +,Vaadin, +,Vert.x, +,WebWork, +,Wicket, +,WaveMaker, +,ZK, +, +, +, +, +, +,JavaScript, +, +, +, +,Ample SDK, +,Angular,/,AngularJS, +,Backbone.js, +,Chaplin.js, +,Closure, +,Dojo Toolkit, +,Ember.js, +,Ext JS, +,jQuery, +,Meteor, +,MooTools, +,Node.js, +,OpenUI5, +,Prototype, +,React, +,Rico, +,script.aculo.us, +,Sencha Touch, +,SproutCore, +,Wakanda, +, +, +, +, +, +,Perl, +, +, +, +,Catalyst, +,Dancer, +,Mason, +,Maypole, +,Mojolicious, +,WebGUI, +, +, +, +, +, +,PHP, +, +, +, +,CakePHP, +,CodeIgniter, +,Drupal, +,Fat-Free, +,FuelPHP, +,Flow, +,Gyroscope, +,Horde, +,Kohana, +,Laravel, +,Lithium, +,Midgard, +,MODX, +,Nette, +,Phalcon, +,Pop PHP, +,PRADO, +,ProcessWire, +,Qcodo, +,Silex, +,SilverStripe, +,Symfony, +,TYPO3, +,Xaraya, +,XOOPS, +,Yii, +,Zend Framework, +, +, +, +, +, +,Python, +, +, +, +,BlueBream, +,CherryPy, +,Django, +,Flask, +,Grok, +,Nevow, +,Pyjs, +,Pylons, +,Pyramid, +,Quixote, +,TACTIC, +,Tornado, +,TurboGears, +,web2py, +,Webware, +,Zope 2, +, +, +, +, +, +,Ruby, +, +, +, +,Camping, +,Merb, +,Padrino, +,Ruby on Rails, +,Sinatra, +, +, +, +, +, +,Scala, +, +, +, +,Lift, +,Play, +,Scalatra, +, +, +, +, +, +,Smalltalk, +, +, +, +,AIDA/Web, +,Seaside, +, +, +, +, +, +,Other languages, +, +, +, +,Vibe.d, (,D,), +,Application Express, (,PL/SQL,), +,Grails, (,Groovy,), +,Kepler, (,Lua,), +,Rocket, (,Rust,), +,OpenACS, (,Tcl,), +,Phoenix, (,Elixir,), +,SproutCore, (,JavaScript,-,Ruby,), +,Yaws, (,Erlang,), +, +, +, +, +, +, + + +, +, +, +, +",DotNetNuke +" 2 January 2018, at 02:25.","For other uses, see ,Django,., +, +,Django, +, +, +, +, +, +, +, +,Original author(s), +,Lawrence Journal-World, +, +, +,Developer(s), +,Django Software Foundation, +, +, +,Initial release, +,21 July 2005,; 12 years ago, (,2005-07-21,),[1], +, +, +, +, +, +,Stable release, +,2.0.1,[2], ,(1 January 2018,; 21 days ago, (,2018-01-01,),), ,[±], +, +, +,Preview release, +,2.0 release candidate 1,[3], ,[±], +, +, +, +, +, +,Repository, +, +, +, +,https://github.com/django/django, +, +, +, +, +, +,Development status, +,Active, +, +, +,Written in, +,Python, +, +, +,Size, +,7.6 ,MB,[4], +, +, +,Type, +,Web framework, +, +, +,License, +,3-clause BSD, +, +, +,Website, +,www,.djangoproject,.com, +, +, +,Django, (,/,ˈ,dʒ,æ,ŋ,ɡ,oʊ,/, ,JANG,-goh,),[5], is a ,free and open-source, ,web framework,, written in ,Python,, which follows the model-view-template (MVT) ,architectural pattern,.,[6],[7], It is maintained by the ,Django Software Foundation, (DSF), an independent organization established as a ,501(c)(3), non-profit., +,Django's primary goal is to ease the creation of complex, database-driven websites. Django emphasizes ,reusability, and ""pluggability"" of components, rapid development, and the principle of ,don't repeat yourself,. Python is used throughout, even for settings files and data models. Django also provides an optional administrative ,create, read, update and delete, interface that is generated dynamically through ,introspection, and configured via admin models., +,Some well-known sites that use Django include the ,Public Broadcasting Service,,,[8], ,Instagram,,,[9], ,Mozilla,,,[10], ,The Washington Times,,,[11], ,Disqus,,,[12], ,Bitbucket,,,[13], and ,Nextdoor,.,[14], It was used on ,Pinterest,,,[15], but later the site moved to a framework built over ,Flask,.,[16], +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Features, +, +,2.1, ,Components, +,2.2, ,Bundled applications, +,2.3, ,Extensibility, +,2.4, ,Server arrangements, +, +, +,3, ,Version history, +,4, ,Development tools with Django support, +,5, ,Community, +,6, ,Ports to other languages, +,7, ,Bibliography, +,8, ,See also, +,9, ,References, +,10, ,External links, +, +, +, +,History,[,edit,], +,Django was created in the fall of 2003, when the ,web programmers, at the ,Lawrence Journal-World, newspaper, ,Adrian Holovaty, and ,Simon Willison,, began using Python to build applications.,[17], It was released publicly under a ,BSD license, in July 2005. The framework was named after guitarist ,Django Reinhardt,.,[17], +,In June 2008, it was announced that a newly formed ,Django Software Foundation, (DSF) would maintain Django in the future.,[18], +,Features,[,edit,], +,Components,[,edit,], +, +, +, +, +Screenshot of the Django admin interface for modifying a user account., +, +, +,Despite having its own nomenclature, such as naming the callable objects generating the ,HTTP, responses ""views"",,[6], the core Django framework can be seen as an ,MVC, architecture.,[7], It consists of an ,object-relational mapper, (ORM) that mediates between ,data models, (defined as Python classes) and a ,relational database, ("",M,odel""), a system for processing HTTP requests with a ,web templating system, ("",V,iew""), and a ,regular-expression,-based ,URL, dispatcher ("",C,ontroller"")., +,Also included in the core framework are:, +, +,a lightweight and standalone web server for development and testing, +,a form serialization and validation system that can translate between ,HTML, forms and values suitable for storage in the database, +,a template system that utilizes the concept of ,inheritance, borrowed from object-oriented programming, +,a ,caching, framework that can use any of several cache methods, +,support for ,middleware, classes that can intervene at various stages of request processing and carry out custom functions, +,an internal dispatcher system that allows components of an application to communicate events to each other via pre-defined signals, +,an ,internationalization, system, including translations of Django's own components into a variety of languages, +,a ,serialization, system that can produce and read ,XML, and/or ,JSON, representations of Django model instances, +,a system for extending the capabilities of the template engine, +,an interface to Python's built-in ,unit test, framework, +, +,Bundled applications,[,edit,], +,The main Django distribution also bundles a number of applications in its ""contrib"" package, including:, +, +,an extensible authentication system, +,the dynamic administrative interface, +,tools for generating ,RSS, and ,Atom, syndication feeds, +,a site's framework that allows one Django installation to run multiple websites, each with their own content and applications, +,tools for generating ,Google Sitemaps, +,built-in mitigation for ,cross-site request forgery,, ,cross-site scripting,, ,SQL injection,, ,password cracking, and other typical web attacks, most of them turned on by default,[19],[20], +,a framework for creating ,GIS, applications, +, +,Extensibility,[,edit,], +, +, +, +, +, +, +,This section ,relies too much on ,references, to ,primary sources,. ,Please improve this section by adding ,secondary or tertiary sources,., ,(January 2015), ,(,Learn how and when to remove this template message,), +, +, +, +,Django's configuration system allows third party code to be plugged into a regular project, provided that it follows the reusable app,[21], conventions. More than 2500 packages,[22], are available to extend the framework's original behavior, providing solutions to issues the original tool didn't tackle: registration, search, ,API, provision and consumption, ,CMS,, etc., +,This extensibility is, however, mitigated by internal components dependencies. While the Django philosophy implies loose coupling,,[23], the template filters and tags assume one engine implementation, and both the auth and admin bundled applications require the use of the internal ,ORM,. None of these filters or bundled apps are mandatory to run a Django project, but reusable apps tend to depend on them, encouraging developers to keep using the official stack in order to benefit fully from the apps ecosystem., +,Server arrangements,[,edit,], +,Django can be run in conjunction with ,Apache,, ,Nginx, using ,WSGI,, ,Gunicorn,, or ,Cherokee, using flup (a Python module).,[24],[25], Django also includes the ability to launch a ,FastCGI, server, enabling use behind any web server which supports FastCGI, such as ,Lighttpd, or ,Hiawatha,. It is also possible to use other ,WSGI,-compliant web servers.,[26], Django officially supports four database backends: ,PostgreSQL,, ,MySQL,, ,SQLite,, and ,Oracle,. ,Microsoft SQL Server, can be used with django-mssql on ,Microsoft, ,operating systems,,,[27], while similarly external backends exist for ,IBM Db2,,,[28], ,SQL Anywhere,[29], and ,Firebird,.,[30], There is a ,fork, named django-nonrel, which supports ,NoSQL, databases, such as ,MongoDB, and ,Google App Engine,'s Datastore.,[31], +,Django may also be run in conjunction with ,Jython, on any ,Java EE, application server such as ,GlassFish, or ,JBoss,. In this case django-jython must be installed in order to provide ,JDBC, drivers for database connectivity, which also can provide functionality to compile Django in to a .war suitable for deployment.,[32], +,Google App Engine, includes support for Django version 1.x.x,[33], as one of the bundled frameworks., +,Version history,[,edit,], +,The Django team will occasionally designate certain releases to be “Long-term support” (LTS) releases.,[34], LTS releases will get security and data loss fixes applied for a guaranteed period of time, typically 3+ years, regardless of the pace of releases afterwards., +, +, +,Version, +,Date,[35], +,Notes,[36], +, +, +,Old version, no longer supported:, 0.90,[37], +,000000002005-11-16-0000,16 Nov 2005, +, +, +, +,Old version, no longer supported:, 0.91,[38], +,000000002006-01-11-0000,11 Jan 2006, +,""new-admin"", +, +, +,Old version, no longer supported:, 0.95,[39], +,000000002006-07-29-0000,29 Jul 2006, +,""magic removal"", +, +, +,Old version, no longer supported:, 0.96,[40], +,000000002007-03-23-0000,23 Mar 2007, +,""newforms"", testing tools, +, +, +,Old version, no longer supported:, 1.0,[41], +,000000002008-09-03-0000,3 Sep 2008, +,API stability, decoupled admin, unicode, +, +, +,Old version, no longer supported:, 1.1,[42], +,000000002009-07-29-0000,29 Jul 2009, +,Aggregates, transaction based tests, +, +, +,Old version, no longer supported:, 1.2,[43], +,000000002010-05-17-0000,17 May 2010, +,Multiple db connections, ,CSRF,, model validation, +, +, +,Old version, no longer supported:, 1.3,[44], +,000000002011-03-23-0000,23 Mar 2011, +,Class based views, staticfiles, +, +, +,Old version, no longer supported:, 1.4 LTS,[45], +,000000002012-03-23-0000,23 Mar 2012, +,Timezones, in browser testing, app templates., +, +, +,Old version, no longer supported:, 1.5,[46], +,000000002013-02-26-0000,26 Feb 2013, +,Python 3 Support, configurable user model, +, +, +,Old version, no longer supported:, 1.6,[47], +,000000002013-11-06-0000,6 Nov 2013, +,Dedicated to Malcolm Tredinnick, db transaction management, connection pooling., +, +, +,Old version, no longer supported:, 1.7,[48], +,000000002014-09-02-0000,2 Sep 2014, +,Migrations, application loading and configuration., +, +, +,Older version, yet still supported:, 1.8 LTS,[49], +,000000002015-04-01-0000,1 Apr 2015, +,Native support for multiple template engines. ,Supported until at least April 2018, +, +, +,Old version, no longer supported:, 1.9,[50], +,000000002015-12-01-0000,1 Dec 2015, +,Automatic password validation. New styling for admin interface., +, +, +,Old version, no longer supported:, 1.10,[51], +,000000002016-08-01-0000,1 Aug 2016, +,Full text search for PostgreSQL. New-style middleware., +, +, +,Older version, yet still supported:, 1.11 LTS,[52], +,000000002017-04-04-0000,4 Apr 2017, +,Last version to support Python 2.7. ,Supported until at least April 2020, +, +, +,Current stable version:, ,2.0,[53], +,000000002017-12-01-0000,Dec 2017, +,First Python 3-only release, Simplified URL routing syntax, Mobile friendly admin., +, +, +,Future release:, 2.1,[53], +,000000002018-08-01-0000,Aug 2018, +, +, +, +,Future release:, 2.2 LTS,[53], +,000000002019-04-01-0000,Apr 2019, +,Supported until at least April 2022, +, +, +,Future release:, 3.0,[53], +,000000002019-12-01-0000,Dec 2019, +, +, +, +,Future release:, 3.1,[53], +,000000002020-08-01-0000,Aug 2020, +, +, +, +,Future release:, 3.2 LTS,[53], +,000000002021-04-01-0000,Apr 2021, +,Supported until at least April 2024, +, +, +, +, +,Legend:, +,Old version, +,Older version, still supported, +,Latest version, +,Latest preview version, +,Future release, +, +, +, +, +, +,Development tools with Django support,[,edit,], +,For developing a Django project, no special tools are necessary, since the source code can be edited with any conventional ,text editor,. Nevertheless, editors specialized on ,computer programming, can help increase the productivity of development, e.g. with features such as ,syntax highlighting,. Since Django is written in Python, text editors which are aware of Python syntax are beneficial in this regard., +,Integrated development environments, (IDE) add further functionality, such as debugging, refactoring, unit testing, etc. As with plain editors, IDEs with support for Python can be beneficial. Some IDEs that are specialized on Python additionally have integrated support for Django projects, so that using such an IDE when developing a Django project can help further increase productivity. For comparison of such Python IDEs, see the main article:, +,Main article: ,Comparison of integrated development environments § Python, +,Community,[,edit,], +,There is a semiannual conference for Django developers and users, named ""DjangoCon"", that has been held since September 2008. DjangoCon is held annually in Europe, in May or June;,[54], while another is held in the United States in August or September, in various cities.,[55], The 2012 DjangoCon took place in Washington D.C. from 3 to 8 September. 2013 DjangoCon was held in Chicago at the Hyatt Regency Hotel and the post-conference ,Sprints, were hosted at Digital Bootcamp, computer training center.,[56], The 2014 DjangoCon US returned to Portland, OR from 30 August to 6 September. The 2015 DjangoCon US was held in Austin, TX from 6 to 11 September at the AT&T Executive Center. The 2016 DjangoCon US was held in Philadelphia, PA at The ,Wharton School of the University of Pennsylvania, from 17 to 22 July.,[57], +,Django mini-conferences were held in ,Hobart,, Australia in July 2013, in ,Brisbane,, Australia in August 2014 and 2015, and in ,Melbourne,, Australia in 2016.,[58], +,Ports to other languages,[,edit,], +,Programmers have ported Django's template design from Python to other languages, providing decent cross-platform support. Some of these options are more direct ports; others, though inspired by Django and retaining its concepts, take the liberty to deviate from Django's design:, +, +,Liquid for ,Ruby,[59], +,Template::Swig for ,Perl,[60], +,Twig for ,PHP,[61], +,Jinja for ,Python,[62], +,ErlyDTL for ,Erlang,[63], +, +,Bibliography,[,edit,], +, +, +,Roy Greenfeld, Daniel; Roy Greenfeld, Audrey (2015), ,Two Scoops of Django: Best Practices for Django 1.8, (3rd ed.), Two Scoops Press, p. 531, ,ISBN, ,0981467342, , +,Jaiswal, Sanjeev; Kumar, Ratan (22 June 2015), ,Learning Django Web Development, (1st ed.), Packt, p. 405, ,ISBN, ,1783984406, , +,Ravindrun, Arun (31 March 2015), ,Django Design Patterns and Best Practices, (1st ed.), Packt, p. 180, ,ISBN, ,1783986646, , +,Osborn, Tracy (May 2015), ,Hello Web App, (1st ed.), Tracy Osborn, p. 142, ,ISBN, ,0986365912, , +,Bendoraitis, Aidas (October 2014), ,Web Development with Django Cookbook, (1st ed.), Packt, p. 294, ,ISBN, ,178328689X, , +,Baumgartner, Peter; Malet, Yann (2015), ,High Performance Django, (1st ed.), Lincoln Loop, p. 184, ,ISBN, ,1508748128, , +,Elman, Julia; Lavin, Mark (2014), ,Lightweight Django, (1st ed.), O'Reilly Media, p. 246, ,ISBN, ,149194594X, , +,Percival, Harry (2014), ,Test-Driven Development with Python, (1st ed.), O'Reilly Media, p. 480, ,ISBN, ,1449364829, , +, +, +,This list is an extraction from ,Current Django Books, +,See also,[,edit,], +, +, +,Free software portal, +, +, +, +,Flask (web framework), +,Pylons project, +,Comparison of web frameworks, +,Web2py, +, +, +,References,[,edit,], +, +, +,^, ,""Django FAQ"",. Retrieved ,2 September, 2014,., , +,^, ,Graham, Tim (1 January 2018). ,""Django bugfix releases: 2.0.1 and 1.11.9"",. ,Django Weblog,. Retrieved ,2 January, 2018,., , +,^, ,Graham, Tim (15 November 2017). ,""Django 2.0 release candidate 1 released"",. ,Django Weblog,. Retrieved ,16 November, 2017,., , +,^, ,""Django Download"",. Retrieved ,2 January, 2018,., , +,^, ,""FAQ: General - Django documentation - Django"",. Retrieved ,30 April, 2016,., , +,^ ,a, ,b, ,""FAQ: General - Django documentation - Django"",. Retrieved ,30 April, 2016,., , +,^ ,a, ,b, ,Adrian Holovaty, Jacob Kaplan-Moss; et al. ,The Django Book,. ,Django follows this MVC pattern closely enough that it can be called an MVC framework, , +,^, ,""20 Creative Websites Running Django"",., , +,^, ,""What Powers Instagram: Hundreds of Instances, Dozens of Technologies"",., , +,^, ,""Python"",. ,Mozilla Developer Network,. Retrieved ,30 April, 2016,., , +,^, ,Opensource.washingtontimes.com,. Retrieved on 2014-05-30., +,^, ,""Scaling Django to 8 Billion Page Views"",., , +,^, ,""DjangoSuccessStoryBitbucket – Django"",. Retrieved ,30 April, 2016,., , +,^, ,""The anti-Facebook: one in four American neighborhoods are now using this private social network"",. ,The Verge,. Retrieved ,16 June, 2016,., , +,^, ,""What is the technology stack behind Pinterest?"",. Retrieved ,30 April, 2016,., , +,^, ,""Sai Deep Chand G's answer to What is the technology stack behind Pinterest? - Quora"",. ,www.quora.com,. Retrieved ,2017-05-20,., , +,^ ,a, ,b, ,""Django's History"",. The Django Book,. Retrieved ,6 June, 2013,., , +,^, ,""Announcing the Django Software Foundation - Weblog - Django"",. Retrieved ,30 April, 2016,., , +,^, ,""Security in Django"",. Django Project,. Retrieved ,25 March, 2013,., , +,^, ,Socol, James (2012). ,""Best Basic Security Practices (Especially with Django)"",. Retrieved ,25 March, 2013,., , +,^, ,""What is a reusable app? — django-reusable-app-docs 0.1.0 documentation"",. Retrieved ,30 April, 2016,., , +,^, ,""Django Packages"",. Retrieved ,30 April, 2016,., , +,^, ,""Design philosophies - Django documentation - Django"",. Retrieved ,30 April, 2016,., , +,^, ,Django documentation of deployment, ,Archived, 11 January 2012 at the ,Wayback Machine,., +,^, ,""Cherokee Web Server - Cookbook Setting up Django - Cherokee Documentation"",. Retrieved ,30 April, 2016,., , +,^, ,How to use Django with Apache and mod_wsgi, ,Archived, 8 March 2013 at the ,Wayback Machine,.. Official Django documentation., +,^, ,""Manfre / django-mssql / source / — Bitbucket"",. Retrieved ,30 April, 2016,., , +,^, ,ibmdb. ,""GitHub - ibmdb/python-ibmdb: Automatically exported from code.google.com/p/ibm-db"",. ,GitHub,. Retrieved ,30 April, 2016,., , +,^, ,""Google Code Archive - Long-term storage for Google Code Project Hosting"",. Retrieved ,30 April, 2016,., , +,^, ,maxirobaina. ,""GitHub - maxirobaina/django-firebird: Firebird SQL backend for django"",. ,GitHub,. Retrieved ,30 April, 2016,., , +,^, ,""Django non-rel"",. Retrieved ,30 April, 2016,., , +,^, ,beachmachine. ,""GitHub - beachmachine/django-jython: Database backends and extensions for Django development on top of Jython"",. ,GitHub,. Retrieved ,30 April, 2016,., , +,^, ,Running Pure Django Projects on Google App Engine,. Code.google.com (2010-11-01). Retrieved on 5 December 2011., +,^, ,""Django's release process - Django documentation - Django"",. Retrieved ,30 April, 2016,., , +,^, ,Supported Versions, +,^, ,What Python version can I use with Django?, +,^, ,""Introducing Django 0.90"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 0.91 released"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Introducing Django 0.95"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Announcing Django 0.96!"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 1.0 released!"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 1.1 released"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 1.2 released"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 1.3 released"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 1.4 released"",. Django weblog. Retrieved 2 February 2013., +,^, ,""Django 1.5 released"", Django weblog. Retrieved 27 February 2013., +,^, ,""Django 1.6 released"", Django weblog. Retrieved 6 November 2013., +,^, ,""Django 1.7 released"", Django weblog. Retrieved 4 September 2014., +,^, ,""Django 1.8 released"", Django weblog. Retrieved 2 April 2015., +,^, ,""Django 1.9 released"", Django weblog. Retrieved 1 December 2015., +,^, ,""Django 1.10 released"", Django weblog. Retrieved 1 August 2016., +,^, ,""Django 1.11 released"", Django weblog. Retrieved 4 April 2017., +,^ ,a, ,b, ,c, ,d, ,e, ,f, ,""Django 2.0 released"", Django weblog. Retrieved 3 December 2017., +,^, ,DjangoCon EU series,, Lanyrd.com, +,^, ,DjangoCon US series,, Lanyrd.com, +,^, ,""DjangoCon"",. DjangoCon. Archived from ,the original, on 5 August 2012,. Retrieved ,29 July, 2012,., , +,^, ,""DjangoCon"",. DjangoCon,. Retrieved ,1 December, 2016,., , +,^, ,DjangoCon AU,. Djangocon.com.au. Retrieved on 2016-09-23., +,^, ,http://liquidmarkup.org, +,^, ,https://metacpan.org/pod/Template::Swig, +,^, ,http://twig.sensiolabs.org, +,^, ,http://jinja.pocoo.org, +,^, ,https://github.com/erlydtl/erlydtl/wiki, +, +, +,External links,[,edit,], +, +, +, +,Wikimedia Commons has media related to ,Django (web framework),., +, +, +, +,Official website, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Python, ,web frameworks, +, +, +, +, +, +, +,BlueBream, +,Bottle, +,CherryPy, +,Django, +,Flask, +,Grok, +,Nagare, +,Nevow, +,Pyjs, +,Pylons, +,Pyramid, +,Quixote, +,Spyce, +,TACTIC, +,Tornado, +,TurboGears, +,TwistedWeb, +,Webware, +,web2py, +,Zope 2, +,more,..., +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web frameworks, +, +, +, +, +, +, +,Comparison, +, +, +, +, +, +,C++, +, +, +, +,CppCMS, +,Wt, +, +, +, +, +, +,CLI, +, +, +, +,ASP.NET, +, +,Core, +,AJAX, +,Dynamic Data, +,MVC, +,Razor, +,Web Forms, +, +, +,DNN, +,BFC, +,MonoRail, +,OpenRasta, +,Umbraco, +, +, +, +, +, +,ColdFusion, +, +, +, +,CFWheels, +,ColdBox Platform, +,ColdSpring, +,Fusebox, +,Mach-II, +,Model-Glue, +, +, +, +, +, +,Common Lisp, +, +, +, +,Caveman2, +,CL-HTTP, +,UnCommon Web, +,Weblocks, +, +, +, +, +, +,Haskell, +, +, +, +,Happstack, +,Yesod, +,Snap, +, +, +, +, +, +,Java, +, +, +, +,AppFuse, +,Flexive, +,Grails, +,GWT, +,ICEfaces, +,ItsNat, +,JavaServer Faces, +,JHipster, +,Jspx, +,JWt, +,OpenXava, +,Play, +,Reasonable Server Faces, +,Remote Application Platform, +,RIFE, +,Seam, +,Sling, +,Spring, +,Stripes, +,Struts, +,Tapestry, +,Vaadin, +,Vert.x, +,WebWork, +,Wicket, +,WaveMaker, +,ZK, +, +, +, +, +, +,JavaScript, +, +, +, +,Ample SDK, +,Angular,/,AngularJS, +,Backbone.js, +,Chaplin.js, +,Closure, +,Dojo Toolkit, +,Ember.js, +,Ext JS, +,jQuery, +,Meteor, +,MooTools, +,Node.js, +,OpenUI5, +,Prototype, +,React, +,Rico, +,script.aculo.us, +,Sencha Touch, +,SproutCore, +,Wakanda, +, +, +, +, +, +,Perl, +, +, +, +,Catalyst, +,Dancer, +,Mason, +,Maypole, +,Mojolicious, +,WebGUI, +, +, +, +, +, +,PHP, +, +, +, +,CakePHP, +,CodeIgniter, +,Drupal, +,Fat-Free, +,FuelPHP, +,Flow, +,Gyroscope, +,Horde, +,Kohana, +,Laravel, +,Lithium, +,Midgard, +,MODX, +,Nette, +,Phalcon, +,Pop PHP, +,PRADO, +,ProcessWire, +,Qcodo, +,Silex, +,SilverStripe, +,Symfony, +,TYPO3, +,Xaraya, +,XOOPS, +,Yii, +,Zend Framework, +, +, +, +, +, +,Python, +, +, +, +,BlueBream, +,CherryPy, +,Django, +,Flask, +,Grok, +,Nevow, +,Pyjs, +,Pylons, +,Pyramid, +,Quixote, +,TACTIC, +,Tornado, +,TurboGears, +,web2py, +,Webware, +,Zope 2, +, +, +, +, +, +,Ruby, +, +, +, +,Camping, +,Merb, +,Padrino, +,Ruby on Rails, +,Sinatra, +, +, +, +, +, +,Scala, +, +, +, +,Lift, +,Play, +,Scalatra, +, +, +, +, +, +,Smalltalk, +, +, +, +,AIDA/Web, +,Seaside, +, +, +, +, +, +,Other languages, +, +, +, +,Vibe.d, (,D,), +,Application Express, (,PL/SQL,), +,Grails, (,Groovy,), +,Kepler, (,Lua,), +,Rocket, (,Rust,), +,OpenACS, (,Tcl,), +,Phoenix, (,Elixir,), +,SproutCore, (,JavaScript,-,Ruby,), +,Yaws, (,Erlang,), +, +, +, +, +, +, + + +, +, +, +, +",Django (web framework) +" 9 November 2017, at 14:46.","For the art historian, see ,Daniel Robbins (art historian),., +, +, +,Daniel Robbins, +, +, +,Born, +,Montreal,, ,Quebec,, Canada, +, +, +,Residence, +,Albuquerque, New Mexico,, US, +, +, +,Nationality, +,United States, +, +, +,Education, +,Worcester Polytechnic Institute, +, +, +,Organization, +,Funtoo Technologies, +, +, +,Known for, +,Free Software,, ,Hacker,, ,Gentoo,, ,Funtoo, +, +, +,Website, +,www,.funtoo,.org, +, +, +,Daniel Robbins, is a ,computer programmer, and consultant best known as the founder and former chief architect of the ,Gentoo Linux, project. In 2008, he launched the ,Funtoo project,, a ,free, ,Linux distribution, based on Gentoo, and is the project's lead hacker and organizer. He also currently works at the same time in ,Albuquerque, New Mexico,, as 'Open Source/Community Strategy Lead' at Zenoss, and as president for ,Funtoo Technologies,., +, +, +, +,Contents, +, +, +,1, ,Biography, +, +,1.1, ,Formation of Gentoo Linux distribution, +, +,1.1.1, ,Funtoo Linux, +,1.1.2, ,Microsoft, +,1.1.3, ,RTLinux, +, +, +,1.2, ,Funtoo Technologies, +, +, +,2, ,See also, +,3, ,References, +,4, ,External links, +, +, +, +,Biography,[,edit,], +,Formation of Gentoo Linux distribution,[,edit,], +,During his time as a system administrator at the ,University of New Mexico, in ,Albuquerque, Robbins formed his own distribution ,Enoch Linux,, which was later renamed ,Gentoo, in 2002., +,However, like many other ,free software, projects, Gentoo struggled to create a ,business model, which would support its key developers.,[1], Robbins resigned as Chief Architect on 26 April 2004,,[2], citing considerable ,personal debt,,,[3], and a desire to spend more time with his family, formed the ,Gentoo Foundation, and transferred all Gentoo ,intellectual property, to it, so that Gentoo is now run as a full community-based model. He did rejoin the project for a short time from August 2006,,[4],[5], becoming a developer again in February 2007 and joining the amd64 team,[6], but resigned in early March 2007.,[7], +,There have been several high-profile criticisms,[8],[9], of the way Gentoo has run since Robbins left, such as: ""...since the resignation of Gentoo's founder and benevolent dictator from the project in 2004, the newly established Gentoo Foundation has been battling with lack of clear directions and frequent developer conflicts..."",,[10], but in mid-July 2007 it emerged that Robbins was still technically the legal president of the Gentoo Foundation:,[11],[12], +, +,...I would like to see more fun in Gentoo, and a lot less politics, and in my apparent role as President of the Gentoo Foundation, I may have an opportunity to change things for the better. I will need to look into this more...,[11], +, +,Funtoo Linux,[,edit,], +,In 2008, Robbins began to work on ,Funtoo,, a project created to allow him to work on extending the technologies originally created for Gentoo.,[13], +,Microsoft,[,edit,], +,Robbins' move to ,Microsoft,, in May 2005, attracted attention,[14],[15], within the Linux community, which has historically had a combative relationship with Microsoft. He described his role working for ,Bill Hilf, as ""...helping Microsoft to understand Open Source and community-based projects..."",[16], +,However, Robbins resigned less than a year later on 16 January 2006 due to frustrations that he was unable to fully utilize his technical skills in this position., +,RTLinux,[,edit,], +,Later in 2006, he joined ,FSMLabs, in Socorro, New Mexico, to work on ,RTLinux,., +,Funtoo Technologies,[,edit,], +,Daniel Robbins is also president of ,Funtoo Technologies,, a consulting firm founded in 2006 and located in ,Albuquerque, New Mexico,., +,See also,[,edit,], +, +, +,Free software portal, +, +, +, +,References,[,edit,], +, +, +,^, ,Loli-Queru, Eugenia, (14 May 2002). ,""Interview with Gentoo's Daniel Robbins"",. ,OSNews,. Retrieved ,17 April, 2009,. ,I very much want to find a way to turn the Gentoo Linux project into a profitable enterprise. My main motivation in wanting to do this is so I can stop living from paycheck to paycheck and focus my professional efforts exclusively on Gentoo Linux development. Many of our developers would like to do the same thing., , +,^, ,Lord, timothy (26 April 2004). ,""Interview with Gentoo's Daniel Robbins"",. ,Slashdot,. Retrieved ,17 April, 2009,., , +,^, ,""Mail To News And Back Again"",. Gmane. 26 April 2004,. Retrieved ,4 August, 2009,., , +,^, ,""Funtoo by Daniel Robbins"",. Funtoo.org. Archived from ,the original, on 12 October 2006,. Retrieved ,4 August, 2009,., , +,^, ,""Gentoo Bug 145649 - Retire (once more): Daniel Robbins (drobbins)"",. Bugs.gentoo.org,. Retrieved ,4 August, 2009,., , +,^, ,""Gentoo Bug 145649 - Retire (once more): Daniel Robbins (drobbins)"",. Bugs.gentoo.org,. Retrieved ,4 August, 2009,., , +,^, ,[1], ,Archived, 30 September 2007 at the ,Wayback Machine,., +,^, ,""Put the fun back into computing. Use Linux, BSD"",. DistroWatch.com,. Retrieved ,4 August, 2009,., , +,^, ,""Slashdot | Is Gentoo in crisis?"",. Linux.slashdot.org,. Retrieved ,4 August, 2009,., , +,^, ,""Put the fun back into computing. Use Linux, BSD"",. DistroWatch.com,. Retrieved ,4 August, 2009,., , +,^ ,a, ,b, ,""Funtoo by Daniel Robbins: I am still President of the Gentoo Foundation?"",. Blog.funtoo.org. 18 July 2007. Archived from ,the original, on 7 February 2009,. Retrieved ,4 August, 2009,., , +,^, ,[2], +,^, ,[3], ,Archived, 21 April 2010 at the ,Wayback Machine,., +,^, ,""Slashdot | Gentoo Founder on his way to Redmond"",. Linux.slashdot.org,. Retrieved ,4 August, 2009,., , +,^, ,Marson, Ingrid (16 June 2005). ,""Gentoo Linux founder to 'educate' Microsoft | CNET News.com"",. News.com.com,. Retrieved ,4 August, 2009,., , +,^, ,""Gentoo Founder Joins Microsoft"",. Osnews.com,. Retrieved ,4 August, 2009,., , +, +, +,External links,[,edit,], +, +,Robbins' blog, +,Common threads: OpenSSH key management, Part 1, +,linuxcrazy mp3 and ogg interview, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Linux, +, +, +, +,Linux kernel, +, +, +, +,History, +,Kernel, +,Linus's Law, +,Linux-libre, +,Linux startup process, +,Linux kernel oops, +,Tux, +,more…, +, +, +, +, +, +,Controversies, +, +, +, +,Criticism of Linux, +,Criticism of desktop Linux, +,GNU/Linux naming controversy, +,Tanenbaum–Torvalds debate, +,SCO and Linux, +, +, +, +, +, +,Distributions, +, +, +, +,General comparison, +,Distributions list, +,Netbook-specific comparison, +,Distributions that run from RAM, +,Lightweight, +,Security-focused operating system, +,Proprietary software for Linux, +,Package manager, +, +,Package format, +,List of software package managers, +, +, +, +, +, +, +, +,Organizations, +, +, +, +,Linux Foundation, +,Linux Mark Institute, +,Linux User Group (LUG), +,Linux Documentation Project, +,LinuxChix, +,Linux Counter, +, +, +, +, +, +,Adoption, +, +, +, +,Desktop, +,Embedded, +,Mobile, +,Gaming, +,Linux range of use, +,List of Linux adopters, +, +, +, +, +, +,Media, +, +, +, +,DistroWatch, +,Free Software Magazine, +,Full Circle, +,Linux.com, +,Linux Format, +,Linux Gazette, +,Linux Journal, +,Linux Magazine, +,LinuxUser, +, +,Ubuntu User, +, +, +,Linux Outlaws, +,Linux Voice, +,LugRadio, +,LWN.net, +,OMG! Ubuntu!, +,Open Source For You, +,Phoronix, +,Revolution OS, +,The Code, +, +, +, +, +, +, +, +, +, ,Linux, +, ,Linux kernel features, +, ,Portal:Linux, +, ,WikiProject Linux, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Notable contributors to the ,Linux operating system, +, +, +, +,Kernel, +, +, +, +,H. Peter Anvin, +,Jens Axboe, +,Andries Brouwer, +,Rémy Card, +,Arnaldo Carvalho de Melo, +,Alan Cox, +,Kristoffer Ericson, +,Matthew Garrett, +,Michael Kerrisk, +,Con Kolivas, +,Greg Kroah-Hartman, +,Robert Love, +,David S. Miller, +,Ingo Molnár, +,Andrew Morton, +,Keith Packard, +,Hans Reiser, +,Rusty Russell, +,Sage Sharp, +,Linus Torvalds, +,Theodore Ts'o, +,Sage Weil, +,Harald Welte, +,Chris Wright, +, +, +, +, +, +,GNU, +, +, +, +,Loïc Dachary, +,Alexandre Oliva, +,Richard Stallman, +,Michael Tiemann, +, +, +, +, +, +,Distributions, +, +, +, +,Benjamin Mako Hill, +,Daniel Robbins, +,Gaël Duval, +,Ian Murdock, +,Mark Shuttleworth, +,Jane Silber, +,Patrick Volkerding, +,Peter MacDonald, +, +, +, +, +, +,Other developers, +, +, +, +,Timothee Besset, +,Matthias Ettrich, +,Olivier Fourdan, +,Mark Galassi, +,Jim Gettys, +,Ryan C. Gordon, +,Harald Hoyer, +,Miguel de Icaza, +,Havoc Pennington, +,Lennart Poettering, +,Michael Simms, +,Kay Sievers, +,Dave Taylor, +,Jeff Waugh, +, +, +, +, +, +,Advocates, +, +, +, +,Bradley M. Kuhn, +,Bruce Perens, +,Donna Benjamin, +,Eric S. Raymond, +,Federico Heinz, +,Jon Hall, +,Ken Coar, +,Mary Gardiner, +,Valerie Aurora, +, +, +, +, +, +,Others, +, +, +, +,Allison Randal, +,Dave Sifry, +,Jono Bacon, +,Karen Sandler, +,Keith Bergelt, +,Luis Villa, +,Pamela Jones, +,Pia Waugh, +, +, +, +, +, +, + + +, +, +, +, +",Daniel Robbins (computer programmer) +" 19 January 2018, at 07:22."," +,OpenBSD, +, +, +,""Free, Functional, and Secure"", +, +, +, +, +,OpenBSD 5.9 desktop, +, +, +, +,Developer, +,The OpenBSD Project, +, +, +,Written in, +,Primarily ,C,, ,assembly,, ,Perl,, ,Makefile,, and ,KornShell, +, +, +,OS family, +,Unix-like, (,BSD,), +, +, +,Working state, +,Current, +, +, +,Source model, +,Open source, +, +, +,Initial release, +,1 October 1996,; 21 years ago, (,1996-10-01,), +, +, +,Latest release, +,6.2 ,(9 October 2017,; 3 months ago, (,2017-10-09,),), ,[±], +, +, +,Package manager, +,OpenBSD package tools,[1], +, +, +,Platforms, +,Alpha,, ,x86-64,, ,ARMv7,, ,PA-RISC,, ,IA-32,, ,LANDISK,, ,Omron LUNA-88K,, ,MIPS64,, ,PowerPC,, and ,SPARC 64,[2], +, +, +,Kernel, type, +,Monolithic, +, +, +,Userland, +,BSD, +, +, +,Default ,user interface, +,Modified ,pdksh,, ,FVWM, ,X11, +, +, +,License, +,BSD,, ,ISC,, ATU,,[3], and other custom licenses,[4], +, +, +,Official website, +,openbsd,.org, +, +, +,OpenBSD, is a ,free and open-source, ,Unix-like, computer ,operating system, descended from ,Berkeley Software Distribution, (BSD), a ,Research Unix, derivative developed at the ,University of California, Berkeley,. In late 1995, ,Theo de Raadt, ,forked, it from ,NetBSD,. Besides the operating system as a whole, the project maintains portable versions of many subsystems, most notably ,OpenSSH,, which are available as packages in other operating systems., +,The project is known for its developers' insistence on ,open-source, code, good documentation, code correctness, and security. It has strict policies on ,licensing,, preferring the ,ISC license, and other variants of the ,Simplified BSD License,. Many of its ,security features, are optional or absent in other operating systems. Its developers frequently ,audit, the ,source tree, for software bugs and security holes., +,De Raadt coordinates the project from his home in ,Calgary,, Alberta, Canada. Its logo and mascot is a ,pufferfish, named Puffy., +, +, +, +,Contents, +, +, +,1, ,History and popularity, +,2, ,Uses, +, +,2.1, ,Security, +,2.2, ,Desktop, +,2.3, ,Server, +, +, +,3, ,Component projects, +,4, ,Third-party components in the base system, +,5, ,Development and release process, +,6, ,Open-source and open documentation, +,7, ,Licensing, +,8, ,Funding, +,9, ,Security and code auditing, +, +,9.1, ,Alleged FBI backdoor investigated, +,9.2, ,Slogan, +, +, +,10, ,Distribution and marketing, +,11, ,See also, +,12, ,Notes, +,13, ,References, +,14, ,External links, +, +, +, +,History and popularity,[,edit,], +,See also: ,Timeline of OpenBSD, +, +, +, +, +,Bar chart, showing the proportion of users of each ,BSD, variant from a 2005 BSD usage survey.,[5],[n 1], +, +, +,In December 1994, NetBSD co-founder ,Theo de Raadt, was asked to resign from his position as a senior developer and member of the NetBSD core team.,[6], The reason for this is not wholly clear, although there are claims that it was due to personality clashes within the NetBSD project and on its mailing lists.,[6], +,In October 1995, de Raadt founded OpenBSD, a new project forked from NetBSD 1.0. The initial release, OpenBSD 1.2, was made in July 1996, followed by OpenBSD 2.0 in October of the same year.,[7], Since then, the project has followed a schedule of a release every six months, each of which is supported for one year., +,On 25 July 2007, OpenBSD developer Bob Beck announced the formation of the ,OpenBSD Foundation,, a Canadian non-profit organization formed to ""act as a single point of contact for persons and organizations requiring a legal entity to deal with when they wish to support OpenBSD."",[8], +,Just how widely OpenBSD is used is hard to determine as its developers do not publish or collect usage statistics. In September 2005, the BSD Certification Group performed a usage survey which revealed that 32.8% of BSD users (1420 of 4330 respondents) were using OpenBSD,,[5], placing it second out of the four major BSD variants, behind ,FreeBSD, with 77% and ahead of NetBSD with 16.3%.,[n 1], +,Uses,[,edit,], +, +, +, +, +OpenBSD startup in console mode, +, +, +, +, +, +, +OpenBSD console login and welcome message, +, +, +, +, +, +, +Interaction with ,pdksh, in OpenBSD, +, +, +,Security,[,edit,], +,OpenBSD's security enhancements,, built-in cryptography, and the pf ,packet filter, suit it for use in the security industry, such as on firewalls,,[9], ,intrusion-detection systems,, and ,VPN, ,gateways,., +,Proprietary, systems from several manufacturers are based on OpenBSD, including devices from ,Armorlogic, (Profense web application firewall), Calyptix Security,,[10], GeNUA,,[11], RTMX,,[12], and .vantronix.,[13], Later versions of ,Microsoft,'s ,Services for UNIX,, an extension to the ,Windows, operating system providing ,Unix,-like functionality, use large amounts of OpenBSD code.,[14], +,Desktop,[,edit,], +,OpenBSD ships with the ,X Window System,[15], and is suitable for use on the desktop.,[16],[17],:,xl, There are a huge number of packages totalling 7814,[18], in number. Packages are available for popular applications, including desktop environments such as ,GNOME,, ,KDE,, and ,Xfce,, and web browsers such as ,Firefox, and ,Chromium,.,[19], The project also includes three window managers in the main distribution: ,cwm,, ,FVWM,, and ,twm,.,[20], +,Server,[,edit,], +,OpenBSD features a full server suite and can be easily configured as a ,mail server,, ,web server,, ,FTP server,, ,DNS server,, ,router,, ,firewall,, ,NFS, ,file server,, or any combination of these., +,Component projects,[,edit,], +,Despite the small team size and relatively low usage of OpenBSD, the project maintains portable versions of many parts of the base system, including:, +, +,LibreSSL,, a free implementation of the ,Secure Sockets Layer, (SSL) and ,Transport Layer Security, (TLS) protocols, forked from the ,OpenSSL, 1.0.1g branch, +,OpenBGPD,, a free implementation of the ,Border Gateway Protocol, 4 (BGP-4), +,OpenOSPFD,, a free implementation of the ,Open Shortest Path First, (OSPF) routing protocol, +,OpenNTPD,, a simple alternative to ntp.org's ,Network Time Protocol, (NTP) daemon, +,OpenSMTPD,, a free ,Simple Mail Transfer Protocol, (SMTP) daemon with ,IPv4,/,IPv6,, ,PAM,, ,Maildir, and virtual domains support, +,httpd, an ,HTTP, server first included in the 5.6 release, +,OpenSSH,, a free implementation of the ,Secure Shell, (SSH) protocol, +,OpenIKED,, a free implementation of the ,Internet Key Exchange, (IKEv2) protocol, +,Common Address Redundancy Protocol, (CARP), a free alternative to ,Cisco,'s patented ,HSRP,/,VRRP, server redundancy protocols, +,PF,, an ,IPv4,/,IPv6, stateful firewall with ,NAT,, ,PAT,, ,QoS, and traffic normalization support, +,pfsync,, a firewall states synchronization protocol for ,PF firewall, with ,High Availability, support using ,CARP, +,spamd,, a spam filter with ,greylisting, support designed to inter-operate with the ,PF firewall, +,sndio,, a compact audio and MIDI framework, +,Xenocara,, a customized ,X.Org, build infrastructure, +,cwm,, a stacking window manager, +,tmux, virtual console multiplexer, +, +,Some subsystems have been integrated into the base system of several other BSD projects,,[21],[22],[23], while many are available as packages for use in other Unix-like systems.,[24],[25],[26], +,Third-party components in the base system,[,edit,], +,OpenBSD includes a number of ,third-party software components,, many with OpenBSD-specific patches;,[19], examples include the ,X.Org Server,, ,GNU Compiler Collection,[27], (which acts as the default ,compiler,),,[n 2], ,Perl,, ,NSD,, ,Unbound,, ,Ncurses,, ,GNU Binutils,, ,GNU Debugger, and ,Awk,., +,OpenBSD used to include a fork of ,Apache 1.3,, which was later replaced by ,Nginx,. In the 5.6 release, Nginx was replaced with ,httpd,, an ,HTTP server, with ,FastCGI, and ,Transport Layer Security, support.,[28], As of May 2016,[update],, Apache and Nginx are still available as ports.,[29],[30], +,Development and release process,[,edit,], +, +, +, +, +OpenBSD developers at c2k1 ,hackathon, at ,MIT, +, +, +,Development is continuous, and team management is open and tiered. Anyone with appropriate skills may contribute, with commit rights being awarded on merit and de Raadt acting as coordinator.,[17],:,xxxv, Two official releases are made per year, with the version number incremented by 0.1,,[31], and these are each supported for twelve months (two release cycles).,[32], Snapshot releases are also available at frequent intervals., +,Maintenance patches for supported releases may be applied manually or by updating the system against the patch branch of the ,CVS, repository for that release.,[33], Alternatively, a system administrator may opt to upgrade using a snapshot release and then regularly update the system against the ,-current, branch of the CVS repository, in order to gain pre-release access to recently added features., +,The standard OpenBSD kernel, as maintained by the project, is strongly recommended for end users; this is as opposed to kernels customized by the user.,[34], +,Packages outside the base system are maintained by CVS through a ,ports tree, and are the responsibility of the individual maintainers, known as porters. As well as keeping the current branch up to date, porters are expected to apply appropriate bug-fixes and maintenance fixes to branches of their package for OpenBSD's supported releases. Ports are generally not subject to the same continuous auditing as the base system due to lack of manpower., +,Binary packages are built centrally from the ports tree for each architecture. This process is applied for the current version, for each supported release, and for each snapshot. Administrators are recommended to use the package mechanism rather than build the package from the ports tree, unless they need to perform their own source changes., +,OpenBSD's developers regularly meet at special events called ,hackathons,,,[35], where they ""sit down and code"", emphasizing productivity.,[36], +,Every new release includes a song.,[37], +,The ,OpenBSD Foundation, was accepted as a mentoring organization for the 2014 Google Summer of Code.,[38],[39], +,Open-source and open documentation,[,edit,], +,The OpenBSD Project is noted for its high-quality user documentation, considered top among the BSD family operating systems, all of which have excellent documentation.,[40],[41], When OpenBSD was created, de Raadt decided that the source should be easily available for anyone to read at any time, so, with the assistance of Chuck Cranor,,[42], he set up the first public, anonymous ,CVS, server. At the time, the tradition was for only a small team of developers to have access to a project's source repository.,[43], Cranor and de Raadt concluded that this practice ""runs counter to the open source philosophy"" and is inconvenient to contributors. De Raadt's decision allowed ""users to take a more active role"", and signaled the project's belief in open and public access to source code.,[43], +,OpenBSD does not include ,closed source, binary drivers in the source tree, nor do they include code requiring the signing of ,non-disclosure agreements,.,[44], +,Since OpenBSD is based in Canada, no United States export restrictions on cryptography apply, allowing the distribution to make full use of modern algorithms for encryption. For example, the swap space is divided into small sections and each section is encrypted with its own key, ensuring that sensitive data does not leak into an insecure part of the system.,[9], +,OpenBSD randomizes various behaviors of applications, making them less predictable and thus more difficult to attack. For example, PIDs are created and associated randomly to processes; the ,bind, ,system call, uses random ,port numbers,; files are created with random ,inode, numbers; and IP datagrams have random identifiers.,[45], This approach also helps expose bugs in the kernel and in user space programs., +,The OpenBSD policy on openness extends to hardware documentation: in the slides for a December 2006 presentation, de Raadt explained that without it ""developers often make mistakes writing drivers"", and pointed out that ""the [oh my god, I got it to work] rush is harder to achieve, and some developers just give up."",[46], He went on to say that vendor-supplied binary drivers are unacceptable for inclusion in OpenBSD, that they have ""no trust of vendor binaries running in our kernel"" and that there is ""no way to fix [them] ... when they break."",[46], +,Licensing,[,edit,], +,See also: ,BSD and GPL licensing, +,A goal of the OpenBSD Project is to ""maintain the spirit of the original Berkeley Unix ,copyrights,"", which permitted a ""relatively un-encumbered Unix source distribution."",[47], To this end, the ,Internet Systems Consortium (ISC) license, is preferred for new code, but the ,MIT, and BSD licenses are also accepted. The widely used ,GNU General Public License, is considered overly restrictive compared to these.,[48], +,In June 2001, triggered by concerns over Darren Reed's modification of IPFilter's license wording, a systematic license audit of the OpenBSD ports and source trees was undertaken.,[49], Code in more than a hundred files throughout the system was found to be unlicensed, ambiguously licensed or in use against the terms of the license. To ensure that all licenses were properly adhered to, an attempt was made to contact all the relevant copyright holders: some pieces of code were removed, many were replaced, and others, such as the ,multicast, ,routing, tools ,mrinfo, and ,map-mbone,, were ,relicensed, so that OpenBSD could continue to use them.,[50],[51], Also removed during this audit was all software produced by ,Daniel J. Bernstein,. At the time, Bernstein requested that all modified versions of his code be approved by him prior to redistribution, a requirement to which OpenBSD developers were unwilling to devote time or effort.,[52],[53],[54], +,Because of licensing concerns, the OpenBSD team has re-implemented software from scratch or adopted suitable existing software. Of particular note is the development, after license restrictions were imposed on ,IPFilter,, of the ,pf, ,packet filter,, which first appeared in OpenBSD 3.0,[55], and is now available in other major BSDs.,[56], OpenBSD developers have also replaced GPL licensed tools (such as ,diff,, ,grep, and ,pkg-config,) with BSD licensed equivalents.,[,citation needed,], +,Funding,[,edit,], +,Although the operating system and its portable components are used in commercial products, de Raadt says that little of the funding for the project comes from the industry: ""traditionally all our funding has come from user donations and users buying our CDs (our other products don't really make us much money). Obviously, that has not been a lot of money."",[31], +,For a two-year period in the early 2000s, the project received ,DARPA, funding, which ""paid the salaries of 5 people to work completely full-time, bought about $30k in hardware, and paid for 3 hackathons"", from the ,POSSE project,.,[31], +,In 2006, de Raadt expressed concern about the asymmetry of funding: ""I think that contributions should have come first from the vendors, secondly from the corporate users, and thirdly from individual users. But the response has been almost entirely the opposite, with almost a 15 to 1 dollar ratio in favor of the little people. Thanks a lot, little people!"",[31], However, since 2014 several large contributions to the ,OpenBSD Foundation, have come from corporations such as Microsoft,,[57], Facebook, and Google as well as the ,Core Infrastructure Initiative,.,[58], +,In 2006, the OpenBSD Project experienced financial danger.,[59], The ,Mozilla Foundation,[60], and ,GoDaddy,[61], are among the organizations that helped the OpenBSD Project to overcome its financial troubles., +,On 14 January 2014, Bob Beck issued a request for funding to cover electrical costs. If sustainable funding was not found, Beck suggested the OpenBSD Project would shut down.,[62], The project soon received a US$20,000 donation from Mircea Popescu, the Romanian creator of the MPEx bitcoin stock exchange, paid in ,bitcoins,.,[63], The project raised US$150,000,[64], in response to the appeal, enabling it to pay its bills and securing its short-term future.,[63], +,Security and code auditing,[,edit,], +,For more details on this topic, see ,OpenBSD security features,., +,Shortly after OpenBSD's creation, de Raadt was contacted by a local security software company named Secure Networks (SNI).,[65],[66], They were developing a ""network security auditing tool"" called Ballista,,[n 3], which was intended to find and attempt to ,exploit, possible software security flaws. This coincided with de Raadt's own interest in security, so for a time the two cooperated, a relationship that was of particular usefulness leading up to the release of OpenBSD 2.3,[67], and helped to define security as the focal point of the project.,[68], +,OpenBSD includes features designed to improve security, such as:, +, +,secure alternatives to ,POSIX, functions in the C standard library, such as ,strlcat, for ,strcat, and ,strlcpy, for ,strcpy,[69], +,toolchain alterations, including a ,static bounds checker,[27], +,memory protection techniques to guard against invalid accesses, such as ,ProPolice, and the ,W^X, ,page, protection feature, +,strong ,cryptography, and ,randomization,[70], +, +,To reduce the risk of a vulnerability or misconfiguration allowing ,privilege escalation,, many programs have been written or adapted to make use of ,privilege separation,, ,privilege revocation, and ,chrooting,. Privilege separation is a technique, pioneered on OpenBSD and inspired by the ,principle of least privilege,, where a program is split into two or more parts, one of which performs privileged operations and the other—almost always the bulk of the code—runs without privilege.,[71], Privilege revocation is similar and involves a program performing any necessary operations with the privileges it starts with then dropping them. Chrooting involves restricting an application to one section of the ,file system,, prohibiting it from accessing areas that contain private or system files. Developers have applied these features to OpenBSD versions of many common applications, such as ,tcpdump,, ,file,, ,tmux,, ,smtpd,, and ,syslogd,.,[72], +,OpenBSD developers were instrumental in the creation and development of ,OpenSSH,, which is developed in the OpenBSD CVS repositories. OpenSSH is based on the original ,SSH,.,[73], It first appeared in OpenBSD 2.6 and is now by far the most popular SSH client and server, available on many operating systems.,[74], +,The project has a policy of continually auditing source code for problems, work that developer Marc Espie has described as ""never finished ... more a question of process than of a specific bug being hunted."" He went on to list several typical steps once a bug is found, including examining the entire source tree for the same and similar issues, ""try[ing] to find out whether the documentation ought to be amended"", and investigating whether ""it's possible to augment the ,compiler, to warn against this specific problem."",[75], +,The default install is quite minimal, which the project states is to ensure novice users ""do not need to become security experts overnight"",,[76], which fits with open-source and code auditing practices argued to be important elements of a security system.,[77], +,Alleged FBI backdoor investigated,[,edit,], +,On 11 December 2010, Gregory Perry, a former technical consultant for the ,Federal Bureau of Investigation, (FBI), emailed de Raadt alleging that the FBI had paid some OpenBSD ex-developers 10 years previously to insert backdoors into the ,OpenBSD Cryptographic Framework,. De Raadt made the email public on 14 December by forwarding it to the openbsd-tech mailing list and suggested an audit of the ,IPsec, codebase.,[78],[79], De Raadt's response was skeptical of the report and he invited all developers to independently review the relevant code. In the weeks that followed, bugs were fixed but no evidence of backdoors were found.,[80], De Raadt stated ""I believe that NetSec was probably contracted to write backdoors as alleged. If those were written, I don't believe they made it into our tree. They might have been deployed as their own product."",[81], +,Slogan,[,edit,], +,The OpenBSD website features a prominent reference to the security record of the default installation. Until June 2002, the wording read ""Five years without a remote hole in the default install!"",[82], An ,OpenSSH, bug was then discovered that made it possible for a remote attacker to gain ,root privileges, in OpenBSD and in any of the other systems running OpenSSH at the time. It was quickly fixed, as is normal with known security holes.,[83],[84], The slogan was changed to ""One remote hole in the default install, in nearly 6 years!"" In 2007, a network-related remote vulnerability was found, which was also quickly fixed.,[85], The quote was subsequently altered to ""Only two remote holes in the default install, in a heck of a long time!"" As of May 2017,[update],, the wording remains., +,Distribution and marketing,[,edit,], +,The name OpenBSD refers to the fact that OpenBSD's source code is freely available on the Internet. It also refers to the wide range of hardware platforms the operating system supports.,[86], +,OpenBSD is freely available in various ways: the source can be retrieved by anonymous ,CVS,,,[87], and binary releases and development snapshots can be downloaded by FTP, HTTP, and rsync.,[88], Prepackaged CD-ROM sets through version 6.0 can be ordered online for a small fee, complete with an assortment of stickers and a copy of the release's theme song. These, with their artwork and other bonuses, have been one of the project's few sources of income, funding hardware, Internet service, and other expenses.,[89], Beginning with version 6.1, CD-ROM sets are no longer released., +,In common with other operating systems, OpenBSD provides a ,package management system, for easy installation and management of programs which are not part of the base operating system.,[90], Packages are binary files which are extracted, managed and removed using the package tools. On OpenBSD, the source of packages is the ports system, a collection of ,Makefiles, and other infrastructure required to create packages. In OpenBSD, the ports and base operating system are developed and released together for each version: this means that the ports or packages released with, for example, 4.6 are not suitable for use with 4.5 and vice versa.,[90], +, +, +, +, +Animated OpenBSD mascot ,Puffy,, 3D-rendered with ,Blender3D, +, +, +,OpenBSD at first used the ,BSD daemon, mascot. A specialized version of the daemon, the haloed daemon was drawn by Erick Green. Green was asked by de Raadt to create the logo for the 2.3 and 2.4 versions of OpenBSD. At first, it was planned to create a full daemon, including head and body, but Green was only able to complete the head part for OpenBSD 2.3. The body as well as pitchfork and tail was completed for OpenBSD 2.4.,[91], Subsequent releases saw variations, such as Cop daemon by Ty Semaka,,[92], but eventually settling on Puffy,,[93], described as a ,pufferfish,.,[n 4], Since then Puffy has appeared on OpenBSD promotional material and featured in release songs and artwork. The promotional material of early OpenBSD releases did not have a cohesive theme or design, but later the CD-ROMs, release songs, posters and tee-shirts for each release have been produced with a single style and theme, sometimes contributed to by Ty Semaka of the ,Plaid Tongued Devils,.,[37], These have become a part of OpenBSD ,advocacy,, with each release expounding a moral or political point important to the project, often through parody.,[94], Past themes have included: in OpenBSD 3.8, the ,Hackers of the Lost RAID,, a parody of ,Indiana Jones, linked to the new RAID tools featured as part of the release; ,The Wizard of OS,, making its debut in OpenBSD 3.7, based on the work of ,Pink Floyd, and a parody of ,The Wizard of Oz, related to the project's recent work on wireless card drivers; and OpenBSD 3.3's ,Puff the Barbarian,, including an 80s rock-style song and parody of ,Conan the Barbarian,, alluding to open documentation.,[37], +,See also,[,edit,], +, +, +,Free software portal, +,Cryptography portal, +,Computer science portal, +, +, +, +, +,Category:Computing mascots, +,Comparison of BSD operating systems, +,Comparison of open-source operating systems, +,KAME project, – responsible for OpenBSD's IPv6 support, +,List of computing mascots, +,OpenBSD Journal, – online newspaper dedicated to OpenBSD news, +,OpenBSD version history, +,Security-focused operating system, +, +, +,Notes,[,edit,], +, +, +, +,^ ,a, ,b, ,Multiple selections were permitted as a user may use multiple BSD variants side by side., +,^, ,As of OpenBSD 6.0,[update],, either 4.2.1 or 3.3.6 is shipped, depending on the platform.,[27], +,^, ,Later renamed to Cybercop Scanner after SNI was purchased by ,Network Associates,., +,^, ,Pufferfish do not, in fact, possess spikes; images of Puffy are closer to a similar species, the ,porcupinefish,., +, +, +, +,References,[,edit,], +, +, +,^, ,""Package Management"",. ,OpenBSD Frequently Asked Questions,. Retrieved ,1 June, 2016,., , +,^, ,""Platforms"",. ,OpenBSD,. Retrieved ,3 September, 2016,., , +,^, ,""src/sys/dev/microcode/atmel/atu-license – view – 1.3"",. ,cvsweb.openbsd.org,. Retrieved ,20 May, 2016,. ,Redistribution [...] is permitted provided that the following conditions are met: [...] Firmware is redistributed in object code only., , +,^, ,""src/sys/dev/microcode/tigon/tigon-license – view – 1.5"",. ,cvsweb.openbsd.org,. Retrieved ,20 May, 2016,., , +,^ ,a, ,b, ,BSD Usage Survey, ,(PDF), (Report). The BSD Certification Group. 31 October 2005. p. 9,. Retrieved ,16 September, 2012,., , +,^ ,a, ,b, ,Glass, Adam (23 December 1994). ,""Theo De Raadt"",. ,netbsd-users, (Mailing list)., , +,^, ,de Raadt, Theo, (18 October 1996). ,""The OpenBSD 2.0 release"",. ,openbsd-announce, (Mailing list)., , +,^, ,""Announcing – The OpenBSD Foundation"",. ,OpenBSD Journal,. 26 July 2007., , +,^ ,a, ,b, ,McIntire, Tim (8 August 2006). ,""Take a closer look at OpenBSD"",. ,Developerworks,. ,IBM,. Retrieved ,13 December, 2011,., , +,^, ,""AccessEnforcer Model AE800"",. ,Calyptix Security,. Retrieved ,28 May, 2016,., , +,^, ,""High Resistance Firewall genugate"",. ,GeNUA,. Retrieved ,29 May, 2016,., , +,^, ,""RTMX O/S IEEE Real Time POSIX Operating Systems"",. ,RTMX,. Retrieved ,13 December, 2011,. ,RTMX O/S is a product extension to OpenBSD Unix-like operating system with emphasis on embedded, dedicated applications., , +,^, ,"".vantronix secure system"",. ,Compumatica secure networks,. Retrieved ,13 December, 2011,. ,The Next Generation Firewall is not a standalone device, it is a Router for operation in security critical environments with high requirements for availability, comprehensive support as well as reliable and trusted systems powered by OpenBSD., , +,^, ,Dohnert, Roberto J. (21 January 2004). ,""Review of Windows Services for UNIX 3.5"",. ,OSNews,. David Adams., , +,^, ,""About Xenocara"",. ,Xenocara,. Retrieved ,13 December, 2011,., , +,^, ,Tzanidakis, Manolis (21 April 2006). ,""Using OpenBSD on the desktop"",. ,Linux.com,. Retrieved ,9 March, 2012,., , +,^ ,a, ,b, ,Lucas, Michael W. (April 2013). ,Absolute OpenBSD: Unix for the Practical Paranoid, (2nd ed.). San Francisco, California: ,No Starch Press,. ,ISBN, ,978-1-59327-476-4,., , +,^, ,http://openports.se/statistics.php,., , ,Missing or empty ,|title=, (,help,);, ,External link in ,|website=, (,help,);, ,Missing or empty ,|url=, (,help,), +,^ ,a, ,b, ,""OpenBSD 6.0"",. ,OpenBSD,. Retrieved ,1 November, 2016,., , +,^, ,""The X Windows System"",. ,OpenBSD Frequently Asked Questions,. Retrieved ,22 May, 2016,. ,OpenBSD ships with the cwm(1), fvwm(1) and twm(1) window managers, [...], , +,^, ,""Contents of /stable/10/crypto/openssh/README"",. ,svnweb.freebsd.org,. Retrieved ,19 May, 2016,. ,This is the port of OpenBSD's excellent OpenSSH to Linux and other Unices., , +,^, ,""src/crypto/external/bsd/openssh/dist/README – view – 1.4"",. ,NetBSD CVS Repositories,. Retrieved ,19 May, 2016,., , +,^, ,""dragonfly.git/blob – crypto/openssh/README"",. ,gitweb.dragonflybsd.org,. Retrieved ,19 May, 2016,. ,This is the port of OpenBSD's excellent OpenSSH to Linux and other Unices., , +,^, ,""Arch Linux – openssh 7.2p2-1 (x86_64)"",. ,Arch Linux,. Retrieved ,17 May, 2016,., , +,^, ,""openssh"",. ,OpenSUSE,. Retrieved ,17 May, 2016,., , +,^, ,""Debian – Details of package openssh-client in jessie"",. ,Debian,. Retrieved ,17 May, 2016,., , +,^ ,a, ,b, ,c, ,""gcc-local – local modifications to gcc"",. ,OpenBSD manual pages,. Retrieved ,1 November, 2016,., , +,^, ,""httpd – HTTP daemon"",. ,OpenBSD manual pages,. Retrieved ,1 November, 2016,., , +,^, ,""OpenBSD ports ∴ www/apache-httpd,-main"",. ,ports.su,. Retrieved ,18 May, 2016,., , +,^, ,""OpenBSD ports ∴ www/nginx"",. ,ports.su,. Retrieved ,18 May, 2016,., , +,^ ,a, ,b, ,c, ,d, ,Andrews, Jeremy (2 May 2006). ,""Interview: Theo de Raadt"",. ,KernelTrap,. Archived from ,the original, on 24 April 2013., , +,^, ,""OpenBSD's flavors"",. ,OpenBSD Frequently Asked Questions,. Retrieved ,22 May, 2016,., , +,^, ,""Applying patches in OpenBSD"",. ,OpenBSD Frequently Asked Questions,. Retrieved ,15 May, 2016,., , +,^, ,""Migrating to OpenBSD"",. ,OpenBSD Frequently Asked Questions,. Retrieved ,4 January, 2017,., , +,^, ,""Hackathons"",. ,OpenBSD,. Retrieved ,18 May, 2016,., , +,^, ,""Interview: Theo de Raadt of OpenBSD"",. ,NewsForge,. 28 March 2006,. Retrieved ,31 March, 2016,., , +,^ ,a, ,b, ,c, ,""Release Songs"",. ,OpenBSD,. Retrieved ,22 May, 2016,., , +,^, ,Beck, Bob (25 February 2014). ,""Google Summer of Code 2014"",. ,openbsd-misc, (Mailing list),. Retrieved ,4 March, 2014,., , +,^, ,""GSOC 2014 with the OpenBSD Foundation"",. ,Google Summer of Code 2014,. Retrieved ,4 March, 2014,., , +,^, ,Chisnall, David (20 January 2006). ,""BSD: The Other Free UNIX Family"",. ,InformIT,. ,Archived, from the original on 14 March 2014., , +,^, ,Smith, Jesse (18 November 2013). ,""OpenBSD 5.4: Puffy on the Desktop"",. ,Archived, from the original on 30 April 2014., , +,^, ,Cranor, Chuck D. ,""Chuck Cranor's Home Page"",. Retrieved ,13 December, 2011,. ,I also hosted and helped create the first Anonymous CVS server on the Internet (the original ,anoncvs,.openbsd,.org, [...], , +,^ ,a, ,b, ,Cranor, Chuck D.; ,de Raadt, Theo, (6 June 1999). ,Opening the Source Repository with Anonymous CVS,. ,USENIX, Annual Technical Conference. Monterey, California,. Retrieved ,13 December, 2011,., , +,^, ,""Project Goals"",. ,OpenBSD,. Retrieved ,18 May, 2016,. ,Integrate good code from any source with acceptable licenses. [...], NDAs are never acceptable., , +,^, ,de Raadt, Theo,; Hallqvist, Niklas; Grabowski, Artur; Keromytis, Angelos D.; ,Provos, Niels, (6 June 1999). ,""Randomness Used Inside the Kernel"",. ,Cryptography in OpenBSD: An Overview,. ,USENIX, Annual Technical Conference. Monterey, California,. Retrieved ,1 February, 2014,., , +,^ ,a, ,b, ,de Raadt, Theo, (5 December 2006). ,""Presentation at OpenCON"",. ,OpenBSD,. Retrieved ,13 December, 2011,., , +,^, ,""Copyright Policy"",. ,OpenBSD,. Retrieved ,13 December, 2011,., , +,^, ,Matzan, Jem (15 June 2005). ,""BSD cognoscenti on Linux"",. ,NewsForge,. ,Linux.com,. Retrieved ,28 May, 2016,., , +,^, ,Gasperson, Tina (6 June 2001). ,""OpenBSD and ipfilter still fighting over license disagreement"",. ,Linux.com,. Archived from ,the original, on 26 June 2008., , +,^, ,""src/usr.sbin/mrinfo/mrinfo.c – view – 1.7"",. ,cvsweb.openbsd.org,. 31 July 2001,. Retrieved ,24 May, 2016,. ,New license from Xerox! This code is now FREE! Took a while and a lot of mails, but it is worth it., , +,^, ,""src/usr.sbin/map-mbone/mapper.c – view – 1.5"",. ,cvsweb.openbsd.org,. 31 July 2001,. Retrieved ,24 May, 2016,. ,New license from Xerox! This code is now FREE! Took a while and a lot of mails, but it is worth it., , +,^, ,de Raadt, Theo, (24 August 2001). ,""Re: Why were all DJB's ports removed? No more qmail?"",. ,openbsd-misc, (Mailing list). Archived from ,the original, on 19 April 2016., , +,^, ,Bernstein, Daniel J., (27 August 2001). ,""Re: Why were all DJB's ports removed? No more qmail?"",. ,openbsd-misc, (Mailing list). Archived from ,the original, on 4 February 2012., , +,^, ,Espie, Marc (28 August 2001). ,""Re: Why were all DJB's ports removed? No more qmail?"",. ,openbsd-misc, (Mailing list). Archived from ,the original, on 19 April 2016., , +,^, ,Hartmeier, Daniel (10 June 2002). ,Design and Performance of the OpenBSD Stateful Packet Filter (pf),. ,USENIX, Annual Technical Conference. Monterey, California,. Retrieved ,13 December, 2011,., , +,^, ,The OpenBSD PF Packet Filter Book: PF for NetBSD, FreeBSD, DragonFly and OpenBSD,. Reed Media Services. ,ISBN, ,0-9790342-0-5,. Retrieved ,19 May, 2016,., , +,^, ,McAllister, Neil (8 July 2015). ,""Microsoft rains cash on OpenBSD Foundation, becomes top 2015 donor"",. ,The Register,. Retrieved ,27 May, 2016,., , +,^, ,""Contributors"",. ,OpenBSD Foundation,. Retrieved ,27 May, 2016,., , +,^, ,""OpenBSD Project in Financial Danger"",. ,Slashdot,. 21 March 2006,. Retrieved ,12 December, 2014,., , +,^, ,""Mozilla Foundation Donates $10K to OpenSSH"",. ,Slashdot,. 4 April 2006,. Retrieved ,12 December, 2014,., , +,^, ,""GoDaddy.com Donates $10K to Open Source Development Project"",. ,The Hosting News,. 19 April 2006. Archived from ,the original, on 11 November 2006., , +,^, ,Beck, Bob (14 January 2014). ,""Request for Funding our Electricity"",. ,openbsd-misc, (Mailing list),. Retrieved ,17 May, 2016,., , +,^ ,a, ,b, ,Bright, Peter (20 January 2014). ,""OpenBSD rescued from unpowered oblivion by $20K bitcoin donation"",. ,Ars Technica,. Retrieved ,20 January, 2014,., , +,^, ,""The OpenBSD Foundation 2014 Fundraising Campaign"",. ,OpenBSD Foundation,. Retrieved ,24 May, 2014,., , +,^, ,Varghese, Sam (8 October 2004). ,""Staying on the cutting edge"",. ,The Age,. Retrieved ,13 December, 2011,., , +,^, ,Laird, Cameron; Staplin, George Peter (17 July 2003). ,""The Essence of OpenBSD"",. ,ONLamp,. Retrieved ,13 December, 2011,., , +,^, ,de Raadt, Theo, (19 December 2005). ,""2.3 release announcement"",. ,openbsd-misc, (Mailing list). ,Without [SNI's] support at the right time, this release probably would not have happened., , +,^, ,Wayner, Peter (13 July 2000). ,""18.3 Flames, Fights, and the Birth of OpenBSD"",. ,Free For All: How Linux and the Free Software Movement Undercut the High Tech Titans, (1st ed.). ,HarperBusiness,. ,ISBN, ,978-0-06-662050-3,. Retrieved ,13 December, 2011,., , +,^, ,Miller, Todd C.; ,de Raadt, Theo, (6 June 1999). ,strlcpy and strlcat - Consistent, Safe, String Copy and Concatenation,. ,USENIX, Annual Technical Conference. Monterey, California,. Retrieved ,13 December, 2011,., , +,^, ,de Raadt, Theo,; Hallqvist, Niklas; Grabowski, Artur; Keromytis, Angelos D.; ,Provos, Niels, (6 June 1999). ,Cryptography in OpenBSD: An Overview,. ,USENIX, Annual Technical Conference. Monterey, California,. Retrieved ,27 May, 2016,., , +,^, ,Provos, Niels, (9 August 2003). ,""Privilege Separated OpenSSH"",. Retrieved ,13 December, 2011,., , +,^, ,""Innovations"",. ,OpenBSD,. Retrieved ,18 May, 2016,. ,Privilege separation: [...] The concept is now used in many OpenBSD programs, for example [...] etc., , +,^, ,""Project History and Credits"",. ,OpenSSH,. Retrieved ,13 December, 2011,., , +,^, ,""SSH usage profiling"",. ,OpenSSH,. Retrieved ,13 December, 2011,., , +,^, ,Biancuzzi, Federico (18 March 2004). ,""An Interview with OpenBSD's Marc Espie"",. ,ONLamp,. Retrieved ,13 December, 2011,., , +,^, ,""Security"",. ,OpenBSD,. Retrieved ,13 December, 2011,. ,Secure by Default., , +,^, ,Wheeler, David A., (3 March 2003). ,""2.4. Is Open Source Good for Security?"",. ,Secure Programming for Linux and Unix HOWTO,. Retrieved ,13 December, 2011,., , +,^, ,de Raadt, Theo, (14 December 2010). ,""Allegations regarding OpenBSD IPSEC"",. ,openbsd-tech, (Mailing list),. Retrieved ,28 May, 2016,., , +,^, ,Holwerda, Thom (14 December 2010). ,""FBI Added Secret Backdoors to OpenBSD IPSEC"",. ,OSNews,. Retrieved ,13 December, 2011,., , +,^, ,Ryan, Paul (23 December 2010). ,""OpenBSD code audit uncovers bugs, but no evidence of backdoor"",. ,Ars Technica,. Retrieved ,9 January, 2011,., , +,^, ,Mathew J. Schwartz (22 December 2010). ,""OpenBSD Founder Believes FBI Built IPsec Backdoor"",. ,InformationWeek: DARKreading,., , +,^, ,""OpenBSD"",. ,OpenBSD,. Archived from ,the original, on 28 May 2002., , +,^, ,""OpenSSH Remote Challenge Vulnerability"",. ,Internet Security Systems,. 26 June 2002,. Retrieved ,13 December, 2011,., , +,^, ,""OpenSSH 'Challenge-Response' authentication buffer overflow"",. ,Internet Security Systems,. Retrieved ,13 December, 2011,., , +,^, ,""OpenBSD's IPv6 mbufs remote kernel buffer overflow"",. ,Core Security Technologies,. 13 March 2007,. Retrieved ,13 December, 2011,., , +,^, ,Grimes, Roger A. (29 December 2006). ,""New year's resolution No. 1: Get OpenBSD"",. ,InfoWorld,., , +,^, ,""Anonymous CVS"",. ,OpenBSD,. Retrieved ,13 December, 2011,., , +,^, ,""Mirrors"",. ,OpenBSD,. Retrieved ,22 May, 2016,., , +,^, ,""Orders"",. ,OpenBSD,. Retrieved ,20 May, 2016,., , +,^ ,a, ,b, ,""Packages and Ports"",. ,OpenBSD Frequently Asked Questions,. Retrieved ,22 May, 2016,., , +,^, ,""OpenBSD"",. ,mckusick.com,. Retrieved ,12 December, 2014,., , +,^, ,de Raadt, Theo, (19 May 1999). ,""OpenBSD 2.5 Release Announcement"",. ,openbsd-announce, (Mailing list). Archived from ,the original, on 14 March 2014. ,OpenBSD 2.5 introduces the new Cop daemon image done by cartoonist Ty Semeka., , +,^, ,""OpenBSD 2.7"",. ,OpenBSD,. Retrieved ,22 May, 2016,., , +,^, ,Matzan, Jem (1 December 2006). ,""OpenBSD 4.0 review"",. ,Software in Review,. Retrieved ,13 December, 2011,. ,Each OpenBSD release has a graphical theme and a song that goes with it. The theme reflects a major concern that the OpenBSD programmers are addressing or bringing to light., , +, +, +,External links,[,edit,], +, +,Listen to this article, (,info/dl,) +, +, +, +, +, +, +, +, +, +, +, +, +,This audio file was created from a revision of the article "",OpenBSD,"" dated 2011-10-23, and does not reflect subsequent edits to the article. (,Audio help,), +,More spoken articles, +, +, +, +, +,Wikimedia Commons has media related to ,OpenBSD,., +, +, +, +, +, +,The Wikibook ,Guide to Unix, has a page on the topic of: ,OpenBSD, +, +, +, +,Official website, +,OpenBSD, at ,DistroWatch, +,OpenBSD ports & packages, ,latest package info, +,OpenBSD source code search, +,old list of OpenBSD commands, +,Video – An OpenBSD talk by Michael Lucas, on ,YouTube, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,The ,OpenBSD, Project, +, +, +, +,Operating system, +, +, +, +,OpenBSD, +, +,version history, +,security, +, +, +, +, +, +, +, +,Related projects, +, +, +, +,CARP, +,LibreSSL, +,mandoc, +,OpenSSH, +,OpenBGPD, +,OpenIKED, +,OpenOSPFD, +,OpenNTPD, +,OpenSMTPD, +,PF, +,sndio, +,spamd, +,Systrace, +,tmux, +,Xenocara, +, +,cwm, +, +, +,W^X, +, +, +, +, +, +,People, +, +, +, +,Theo de Raadt, +,Niels Provos, +,OpenBSD Foundation, +,Plaid Tongued Devils, +, +, +, +, +, +,Resources, +, +, +, +,OpenBSD Journal, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Berkeley Software Distribution, +, +, +, +,People, +, +, +, +,Bob Fabry, +,Keith Bostic, +,Marshall Kirk McKusick, +,Michael J. Karels, +,Bill Joy, +,Samuel Leffler, +,Jordan Hubbard, +,Theo de Raadt, +,Poul-Henning Kamp, +,Lynne, and ,William Jolitz, +, +, +, +, +, +,Derivatives, +, +, +, +, +,Active, +, +, +, +,FreeBSD, +,OpenBSD, +,NetBSD, +,DragonFly BSD, +,TrueOS, +,Junos OS, +,Darwin, +,PS3,/,PS4,/,PSP,/,PS Vita operating system, +,Nintendo Switch operating system, +,Full list, +, +, +, +, +, +,Discontinued, +, +, +, +,386BSD, +,BSD/OS, +,SunOS, +,Ultrix, +, +, +, +, +, +, +, +, +,Companies, +, +, +, +,Sleepycat Software, +,Walnut Creek CDROM, +,Berkeley Software Design, +,iXsystems, +, +, +, +, +, +,Other topics, +, +, +, +,Comparison, +,History, +,Licensing, +,BSD Daemon, +,Computer Systems Research Group, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Unix, and ,Unix-like, ,operating systems, +, +, +, +, +, +, +,BSD, +, +,386BSD, +, +,FreeBSD, +,NetBSD, +,OpenBSD, +,DragonFly BSD, +, +, +,NeXTSTEP, +,Darwin, +, +,macOS, +,iOS, +, +, +,SunOS, +,Ultrix, +, +, +,Coherent, +,GNU, +,Linux, +, +,Android, +,Chrome OS, +, +, +,LynxOS, +,MINIX, +,QNX, +, +,BlackBerry 10, +, +, +,Research Unix, +,System V, +, +,A/UX, +,AIX, +,HP-UX, +,illumos, +,IRIX, +,OpenServer, +,Solaris, +,Tru64 UNIX, +,UnixWare, +, +, +,Xenix, +,more..., +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, ,Book, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,MusicBrainz,: ,1ffebdcd-b78e-463d-9ce9-f2536be58db5, +, +, +, +, +, +, + + +, +, +, +, +",OpenBSD +" 3 September 2017, at 09:03."," +, +,Adrian Holovaty, +, +, +, +,Adrian Holovaty in 2009, +, +, +, +,Born, +,1981 (age 36–37), +,Naperville, Illinois, +, +, +,Nationality, +,USA, +, +, +,Alma mater, +,Missouri School of Journalism, (B.A., 2001), +, +, +,Occupation, +,web developer, journalist, entrepreneur, +, +, +,Known for, +,Django Web framework, +, +, +,Adrian Holovaty, (born 1981) is an American web developer, journalist and entrepreneur from ,Chicago, Illinois,, living in ,Amsterdam, the Netherlands,. He is co-creator of the ,Django web framework, and an advocate of ""journalism via computer programming""., +, +, +, +,Contents, +, +, +,1, ,Life and career, +, +,1.1, ,Crime mapping innovations, +, +, +,2, ,References, +,3, ,External links, +, +, +, +,Life and career,[,edit,], +,Holovaty, a ,Ukrainian American,, grew up in ,Naperville, Illinois,. He graduated from the ,Missouri School of Journalism, in 2001 and worked as a web developer/journalist for ,The Atlanta Journal-Constitution,, ,Lawrence Journal-World, and ,The Washington Post, before starting ,EveryBlock,, a web startup that provided ""microlocal"" news, in 2007.,[1], +,While working at the ,Lawrence Journal-World, from 2002 to 2005, he and other web developers (,Simon Willison,, Jacob Kaplan-Moss and Wilson Miner,[2],) created ,Django,, an ,open source, ,web application framework, for ,Python,. He and Kaplan-Moss served as the framework's ,Benevolent Dictators for Life, until January 2014.,[3], The pair wrote ,The Django Book,, first published in 2007., +,Holovaty is also a guitarist. In 1999, he recorded an album of his own guitar compositions,,[4], and since 2007 he has posted videos of his acoustic guitar arrangements on ,YouTube,, building an audience of more than 20,000 subscribers.,[5], In 2012 he and PJ Macklin founded ,SoundSlice,, a ,collaboratively edited, website which shows YouTube music videos alongside simultaneous animated ,tablature,, intended to help guitarists learn new musical pieces.,[6], +,Crime mapping innovations,[,edit,], +,In 2005, Holovaty launched ,chicagocrime.org,, a ,Google Maps, ,mashup, of ,Chicago Police Department, crime data.,[7], The site won the 2005 Batten Award for Innovations in Journalism,[8], and was named by ,The New York Times, as one of 2005's best ideas.,[9], +,As one of the first Google Maps mashups, it helped influence Google to create its official Google Maps API.,[10], Newspaper sites such as the ,Chicago Tribune, and the ,Chicago Sun-Times, have incorporated a map from EveryBlock, the successor to chicagocrime.org, into their web sites.,[11], +,In 2007, Holovaty was awarded a $1.1 million ,Knight Foundation, grant and left his job as editor of editorial innovations at ,washingtonpost.com, to start EveryBlock, the successor to chicagocrime.org.,[12], On August 17, 2009 EveryBlock was officially acquired by ,msnbc.com,.,[13], The terms of the deal were not disclosed.,[14], In February 2013, NBC News announced that it was shutting down EveryBlock.,[15], +,References,[,edit,], +, +, +, +,^, ,Goodbye hyperlocal, hello microlocal | Holovaty.com, +,^, ,Django committers, +,^, ,Adrian and Jacob retiring as Django BDFLs | Holovaty.com, +,^, ,Music | Holovaty.com, +,^, ,YouTube - adrianholovaty's Channel, +,^, ,""About Soundslice"",. SoundSlice LLC. November 2012., , +,^, ,Announcing chicagocrime.org | Holovaty.com, +,^, ,Batten award, +,^, ,Do-It-Yourself Cartography, +,^, ,Official Google Blog: The world is your JavaScript-enabled oyster, +,^, ,Street Wise: ,http://www.chicagomag.com/Chicago-Magazine/June-2009/Street-Wise/, +,^, ,Knight Foundation grant | Holovaty.com, +,^, ,Nieman Journalism Lab. ,""EveryBlock"",. ,Encyclo: an encyclopedia of the future of news,. Retrieved ,1 April, 2012,., , +,^, ,http://www.msnbc.msn.com/id/32443365/ns/business-us_business/, +,^, ,""NBC News shuts down hyperlocal site EveryBlock"",. CNN. February 7, 2013,. Retrieved ,February 7,, 2013,., , +, +, +, +,External links,[,edit,], +, +,Holovaty.com -- personal site, +,EveryBlock, +,YouTube videos, +, + + +, +, +, +, +",Adrian Holovaty +" 15 January 2018, at 11:32."," +,Drupal, +, +, +, +, +, +,Drupal 8 in action. Showing in-context editing and previews (,WYSIWYG,)., +, +, +, +,Original author(s), +,Dries Buytaert, +, +, +,Initial release, +,May 18, 2000,; 17 years ago, (,2000-05-18,),[1], +, +, +, +, +, +,Stable release, +, +,8.4.2,[2], / 3 November 2017,; 2 months ago, (,2017-11-03,), +, +, +, +, +, +, +,Repository, +, +, +, +,http://cgit.drupalcode.org/drupal, +, +, +, +, +, +,Development status, +,Active, +, +, +,Written in, +,PHP,, using ,Symfony, +, +, +,Operating system, +,Unix-like,, ,Windows, +, +, +,Platform, +,Cross-platform, +, +, +,Size, +,80 MB (uncompressed Drupal 8 core),[2], +, +, +,Available in, +,Multilingual, +, +, +,Type, +,Content management framework,, ,Content management system,, ,Community, and ,Blog software, +, +, +,License, +,GPLv2, or later,[3], +, +, +,Website, +,www,.drupal,.org, +, +, +,Drupal, ,/,ˈ,d,r,uː,p,əl,/, is ,[4], a ,free, and ,open source, ,content-management framework, written in ,PHP, and distributed under the ,GNU General Public License,.,[3],[5],[6], Drupal provides a ,back-end, framework for at least 2.3% of all ,web sites, worldwide,[7],[8], – ranging from personal ,blogs, to corporate, political, and government sites.,[9], Systems also use Drupal for ,knowledge management, and for business collaboration.,[10], +,As of November 2017,[update],, the Drupal community is composed of more than 1.3 million members,,[11],[12], including 109,000 users actively contributing,,[13], resulting in more than 39,000 free modules that extend and customize Drupal functionality,,[14], over 2,500 free themes that change the look and feel of Drupal,,[15], and at least 1,180 free distributions that allow users to quickly and easily set up a complex, use-specific Drupal in fewer steps.,[16], +,The standard release of Drupal, known as ,Drupal core,, contains basic features common to ,content-management systems,. These include user account registration and maintenance, menu management, ,RSS, feeds, taxonomy, page layout customization, and system administration. The Drupal core installation can serve as a simple Web site, a single- or multi-user blog, an ,Internet forum,, or a community Web site providing for ,user-generated content,., +,Drupal also describes itself as a ,Web application framework,.,[17], When compared with notable frameworks Drupal meets most of the generally accepted ,feature requirements, for such web frameworks.,[18],[19],[20], +,Although Drupal offers a sophisticated ,API, for developers, basic Web-site installation and administration of the framework require no programming skills.,[21], +,Drupal runs on any ,computing platform, that supports both a ,Web server, capable of running PHP and a ,database, to store content and configuration., +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Core, +, +,2.1, ,Core modules, +,2.2, ,Core themes, +,2.3, ,Localization, +,2.4, ,Auto-update notification, +,2.5, ,Database abstraction, +,2.6, ,Windows development, +,2.7, ,Accessibility, +, +, +,3, ,Extending the core, +, +,3.1, ,Modules, +,3.2, ,Themes, +,3.3, ,Distributions, +, +, +,4, ,Architecture, +,5, ,Community, +,6, ,Security, +,7, ,Criticism, +,8, ,See also, +,9, ,References, +,10, ,Further reading, +,11, ,External links, +, +, +, +,History,[,edit,], +, +,Latest major releases, +, +,Version, +,Release date, +, +, +,8.4.2, +,November 3, 2017,[2], +, +, +,8.2.8, +,April 19, 2017,[2], +, +, +,7.56, +,June 21, 2017,[22], +, +, +,6.38, +,February 24, 2016,[23], +, +, +,5.23, +,August 11, 2010,[24], +, +, +, +, +, +, +Drupal version 1-6 release history timeline, +, +, +,Originally written by ,Dries Buytaert, as a ,message board,, Drupal became an ,open source, project in 2001.,[25], The name ,Drupal, represents an English rendering of the ,Dutch, word ,druppel,, which means ""drop"" (as in a water droplet).,[26], The name came from the now-defunct Drop.org Web site, whose code slowly evolved into Drupal. Buytaert wanted to call the site ""dorp"" (Dutch for ""village"") for its community aspects, but mistyped it when checking the domain name and thought the error sounded better.,[25], +,Interest in Drupal got a significant boost in 2003 when it helped build ""DeanSpace"" for ,Howard Dean,, one of the candidates in the ,U.S. Democratic Party,'s primary campaign for the ,2004 U.S. presidential election,. DeanSpace used open-source sharing of Drupal to support a decentralized network of approximately 50 disparate, unofficial pro-Dean websites that allowed users to communicate directly with one another as well as with the campaign.,[27], After Dean ended his campaign, members of his Web team continued to pursue their interest in developing a Web platform that could aid political activism by launching CivicSpace Labs in July 2004, ""...the first company with full-time employees that was developing and distributing Drupal technology."",[28], Other companies began to also specialize in Drupal development.,[29],[30], By 2013 the Drupal Web site listed hundreds of vendors that offered Drupal-related services.,[31], +,As of 2014,[update], Drupal is developed by a community,,[32], and its popularity is growing rapidly.,[,citation needed,], From July 2007 to June 2008 the Drupal.org site provided more than 1.4 million downloads of Drupal software, an increase of approximately 125% from the previous year.,[33],[34], +,As of January 2017,[update], more than 1,180,000 sites use Drupal.,[35], These include hundreds of well-known organizations,,[36], including corporations, media and publishing companies, governments, non-profits,,[37], schools, and individuals. Drupal has won several ,Packt, Open Source CMS Awards,[38], and won the ,Webware 100, ,[,clarification needed,], three times in a row.,[39],[40], +,On March 5, 2009 Buytaert announced a ,code freeze, for Drupal 7 for September 1, 2009.,[41], Drupal 7 was released on January 5, 2011, with release parties in several countries.,[42], After that, maintenance on Drupal 5 stopped, with only Drupal 7 and Drupal 6 maintained.,[43], Drupal 7 series maintenance updates are released regularly.,[44], +,On December 1, 2012, Drupal 8 started its feature completion.,[45], About three years later, on October 7, 2015 Drupal 8 first release candidate (rc1) was announced.,[46], Drupal 8 includes new features and improvements for both users and developers, including: a revamped user interface; WYSIWYG and in-place editing; improved mobile support; added and improved key contributed modules including Views, Date, and Entity Reference; introduced a new object-oriented backend leveraging Symfony components; revamped configuration management; and improved multilingual support. Drupal 8 rc1 is the collective work of over 3,200 core contributors.,[47], +,Drupal 8.0.0 was released on November 19, 2015.,[48], A subsequent upgrade to it is also available in the form of Drupal 8.1.0,[49], that brings numerous improvements, including CKEditor WYSIWYG enhancements, added APIs, an improved help page, and two new experimental modules. Experimental modules are meant for testing purposes, but are not yet fully supported., +,Core,[,edit,], +,In the Drupal community, ""core"" refers to the collaboratively built codebase that can be extended through contributory modules and for versions prior to Drupal 8 is kept outside of the ""sites"" folder of a Drupal installation.,[50], (Starting with version 8, core is kept in its own 'core' sub-directory.) Drupal core is the stock element of Drupal. Bootstrap and Common libraries are defined as Drupal core and all other functionality is defined as Drupal modules including the system module itself., +,In a Drupal website's default configuration, authors can contribute content as either registered or anonymous users (at the discretion of the administrator). This content is accessible to web visitors through a variety of selectable criteria. As of Drupal 8, Drupal has adopted some ,Symfony, libraries into Drupal core., +,Core modules also includes a hierarchical ,taxonomy, system, which lets developers categorize content or ,tagged, with key words for easier access.,[21], +,Drupal maintains a detailed ,changelog, of core feature updates by version.,[51], +,Core modules,[,edit,], +,Drupal core includes optional modules that can be enabled by the administrator to extend the functionality of the core website.,[52], +,The core Drupal distribution provides a number of features, including:,[52], +, +, +,Access statistics and logging, +,Advanced search, +,Blogs, books, comments, forums, and polls, +,Caching and feature throttling for improved performance, +,Descriptive URLs, +,Multi-level menu system, +,Multi-site support,[53], +,Multi-user content creation and editing, +,OpenID, support, +,RSS feed and feed aggregator, +,Security and new release update notification, +,User profiles, +,Various access control restrictions (user roles, IP addresses, email), +,Workflow tools (triggers and actions), +, +, +,Core themes,[,edit,], +,Drupal includes core themes, which customize the ""look and feel"" of Drupal sites,,[54], for example, Garland and Bartik., +,The Color Module, introduced in Drupal core 5.0, allows administrators to change the color scheme of certain themes via a browser interface.,[55], +,Localization,[,edit,], +,As of January 2017,[update],, Drupal had been made available in 100 languages and ,English, (the default).,[56], Support is included for right-to-left languages such as ,Arabic,, ,Persian,, and ,Hebrew,.,[57], +,Drupal localization is built on top of ,gettext,, the GNU ,internationalization and localization, (i18n) library., +,Auto-update notification,[,edit,], +,Drupal can automatically notify the administrator about new versions of modules, themes, or the Drupal core.,[57], It's important to update quickly after security updates are released., +,Before updating it is highly recommended to take backup of core, modules, theme, files and database. If there is any error shown after update or new updates is not compatible with a module, then it can be quickly replace by backup. There are several backup modules available in Drupal., +,On October 15, 2014, a sql injection vulnerability was announced and update released.,[58], Two weeks later the Drupal security team released an advisory explaining that everyone should act under the assumption that any site not updated within 7 hours of the announcement are infected.,[59], Thus, it can be extremely important to apply these updates quickly and usage of a tool to make this process easier like drush is highly recommended., +,Database abstraction,[,edit,], +,Prior to version 7, Drupal had functions that performed tasks related to databases, such as SQL query cleansing, multi-site table name prefixing, and generating proper SQL queries. In particular, Drupal 6 introduced an abstraction layer that allowed programmers to create SQL queries without writing SQL., +,Drupal 7 extends the data abstraction layer so that a programmer no longer needs to write SQL queries as text strings. It uses ,PHP Data Objects, to abstract the database. ,Microsoft, has written a database driver for their ,SQL Server,.,[60], Drupal 7 supports the file-based SQLite database engine, which is part of the standard PHP distribution., +,Windows development,[,edit,], +,With Drupal 7's new database abstraction layer, and ability to run on the Windows web server ,IIS,, it is now easier for Windows developers to participate in the Drupal community., +,A group on Drupal.org is dedicated to Windows issues.,[61], +,Accessibility,[,edit,], +,With the release of Drupal 7, ,Web accessibility, has been greatly improved by the Drupal community.,[62], Drupal is a good framework for building sites accessible to people with disabilities, because many of the best practices have been incorporated into the program code Core. The accessibility team is carrying on the work of identifying and resolving accessibility barriers and raising awareness within the community., +,Drupal 7 started the adoption of ,WAI-ARIA, support for ,Rich Internet Applications, and this has been carried further in Drupal 8. There have been many improvements to both the visitor and administrator sides of Drupal, especially:, +, +,Drag and drop functionality, +,Improved color contrast and intensity, +,Adding skip navigation to core themes, +,Adding labels by default for input forms, +,Fixing CSS display:none with consistent methods for hiding and exposing text on focus., +, +,The community also added an accessibility gate for core issues in Drupal 8.,[63], +,Extending the core,[,edit,], +,Drupal core is ,modular,, defining a system of ,hooks, and ,callbacks,, which are accessed internally via an ,API,.,[64], This design allows third-party contributed ,modules, and ,themes, to extend or override Drupal's default behaviors without changing Drupal core's code., +,Drupal isolates core files from contributed modules and themes. This increases flexibility and security and allows administrators to cleanly upgrade to new releases without overwriting their site's customizations.,[65], The Drupal community has the saying, ""Never hack core,"" a strong recommendation that site developers do not change core files.,[50], +,Modules,[,edit,], +,Contributed modules offer such additional or alternate features as image galleries, custom content types and content listings, ,WYSIWYG, editors, private messaging, third-party integration tools,,[66], integrating with BPM portals,,[67], and more. As of January 2017,[update], the Drupal website lists more than 36,500 free ,modules,.,[14], +,Some of the most commonly used contributed modules include:,[68], +, +,Content Construction Kit (CCK): allows site administrators to dynamically create content types by extending the database schema. ""Content type"" describes the kind of information. Content types include, but are not limited to, events, invitations, reviews, articles, and products. The CCK Fields API is in Drupal core in Drupal 7.,[69],[70], +,Views: facilitates the retrieval and presentation, through a database abstraction system, of content to site visitors. Basic views functionality has been added to core in Drupal 8.,[71], +,Panels: drag and drop layout manager that allows site administrators to visually design their site., +,Rules: conditionally executed actions based on recurring events., +,Features: enables the capture and management of features (entities, views, fields, configuration, etc.) into custom modules., +,Context: allows definition of sections of site where Drupal features can be conditionally activated, +,Media: makes photo uploading and media management easier, +,Services: provides an API for Drupal., +,Organic Groups Mailing List, +, +,Themes,[,edit,], +,As of January 2017,[update],, there are more than 2,400,[15], free community-contributed ,themes,. Themes adapt or replace a Drupal site's default look and feel., +,Drupal themes use standardized formats that may be generated by common third-party theme design engines. Many are written in the ,PHPTemplate, engine,[72], or, to a lesser extent, the ,XTemplate, engine.,[73], Some templates use hard-coded ,PHP,. Drupal 8 will integrate the ,Twig, templating engine., +,The inclusion of the PHPTemplate and XTemplate engines in Drupal addressed user concerns about flexibility and complexity.,[74], The Drupal theming system utilizes a ,template engine, to further separate ,HTML,/,CSS, from PHP. A popular Drupal contributed module called 'Devel' provides GUI information to developers and themers about the page build., +,Community-contributed themes,[75], at the Drupal website are released under a free ,GPL, license,,[76], and the most installed Drupal themes are ,listed on this page,.,[77], +,Distributions,[,edit,], +,In the past, those wanting a fully customized installation of Drupal had to download a pre-tailored version separately from the official Drupal core. Today, however, a distribution defines a packaged version of Drupal that upon installation, provides a website or application built for a specific purpose., +,The distributions offer the benefit of a new Drupal site without having to manually seek out and install third-party contributed modules or adjust configuration settings.,[78], They are collections of modules, themes, and associated configuration settings that prepare Drupal for custom operation. For example, a distribution could configure Drupal as a ""brochure"" site rather than a news site or ,online store,., +,Architecture,[,edit,], +,Drupal is based on the ,Presentation Abstraction Control, architecture, or PAC., +,The ,menu system, acts as the Controller. It accepts input via a single source (,HTTP GET, and ,POST,), routes requests to the appropriate helper functions, pulls data out of the Abstraction (nodes and, from Drupal 5 onwards, forms), and then pushes it through a filter to get a Presentation of it (the theme system)., +,It even has multiple, parallel PAC agents in the form of blocks that push data out to a common canvas (page.tpl.php).,[79], +,Community,[,edit,], +,Drupal.org has a large community of users and developers who provide active ,community, support by coming up with new updates to help improve the functionality of Drupal,,[80], As of January 2017,[update], more than 105,400 users are actively contributing.,[13], The semiannual DrupalCon conference alternates between North America, Europe and Asia.,[81], Attendance at DrupalCon grew from 500 at ,Szeged, in August 2008, to over 3,700 people at Austin, Texas in June, 2014., +,Smaller events, known as ""Drupal Camps"" or DrupalCamp,,[82], occur throughout the year all over the world. The annual Florida DrupalCamp brings users together for ,Coding for a Cause, that benefits a local nonprofit organization, as does the annual GLADCamp (,Greater Los Angeles Drupal, Camp) event, ,Coders with a Cause,., +,The Drupal community also organizes professional and semi-professional gatherings called ,meetups, at a large number of venues around the world. In July, 2013, ,Droplabs,, a co-working space in Los Angeles, California, was recognized as the world's ""Top Drupal Location,[83],"" (with 62 recorded events) when compared with other event venues over a 12-month period., +,There are a number of active Drupal forums,,[84], mailing lists,[85], and discussion groups.,[86], Drupal also maintains several ,IRC, channels,[87], on the ,Freenode, network., +,There are over 30 national communities,[88], around drupal.org offering language-specific support., +,Notable Drupal users include ,NBC,, ,Taboola,, and ,Patch,.,[89], +,Security,[,edit,], +,Drupal's policy is to announce the nature of each security vulnerability once the fix is released.,[90],[91], +,Administrators of Drupal sites are automatically notified of these new releases via the Update Status module (Drupal 6) or via the Update Manager (Drupal 7).,[92], +,Drupal maintains a security announcement mailing list, a history of all security advisories,,[93], a security team home page,,[94], and an RSS feed,[95], with the most recent security advisories., +,In mid-October 2014,,[96], Drupal issued a ""highly critical"" security advisory regarding an ,SQL injection, bug in Drupal 7, also known as Drupalgeddon.,[97],[98], +,Downloading and installing an upgrade to Drupal 7.32 fixes the vulnerability, but does not remove any ,backdoor, installed by hackers if the site has already been ,compromised,.,[99], Attacks began soon after the vulnerability was announced. According to the Drupal security team, where a site was not patched within hours of the announcement, it should be considered compromised and taken offline by being replaced with a static HTML page while the administrator of its server must be told that other sites on the same server may also have been compromised., +,To solve the problem, the site must be restored using backups from before October 15, be patched and manually updated, and anything merged from the site must be audited.,[100], +,Criticism,[,edit,], +, +, +, +, +, +, +,This section needs to be ,updated,. ,Please update this article to reflect recent events or newly available information., ,(December 2014), +, +, +, +,In an article,[101], about the adoption of Drupal by the Whitehouse.gov site, ,Slate, associate editor Chris Wilson,[102], lists some common criticisms of Drupal. Other criticisms have included:, +, +,Usability:, Aspects of the Drupal 6 administration interface were confusing and intimidating to some, particularly for new administrators.,[103],[104],[105], According to Dries Buytaert, Drupal 7 addressed 90% of the problems identified by usability tests conducted at the Universities of Minnesota and Baltimore.,[106],[107], To achieve this, ,Acquia, (the company founded by the project lead of Drupal) hired ,user experience, designer Mark Boulton to work with the Drupal community to design an improved user interface for Drupal's administration interface.,[108], The majority of his team's design work has been implemented by the community in Drupal 7. The 2011 usability test results from the University of Minnesota Office of Information Technology show that all of the major usability problems identified in Drupal 6 are either vastly improved or non-existent in Drupal 7. However, some new usability problems were identified.,[109],[110], Since the release of Drupal 7 there are now various distributions and applications to enhance the Back-end Usability of Drupal such as Drupal Gardens,,[111], Open Enterprise,[112], and Mitkom Builder.,[113], +,Learning curve:, Some users describe Drupal as being difficult to master.,[114],[115], Drupal's many contributed modules can have overlapping functionality and have been reported as overwhelming to new users.,[116], +,Backward compatibility (for software development):, Prior to 7, Drupal did not commit to backward compatibility across major revisions.,[117], This means that module and theme developers may have to rework their code to make it compatible. However, Drupal's policy is to not change how it uses data. This means that data from previous versions is still usable without alteration in the new release.,[118],[119], Drupal documents any incompatibilities, allowing the user to make informed decisions about when and whether to upgrade. Upgrades from 8 to 9 and beyond will require substantially less effort."" ,[120], +,Performance/scalability:, In 2008, ,performance, tests between Drupal 6.1 and ,Joomla, 1.5 demonstrated that Drupal's pages were delivered ""significantly faster"" than those of Joomla.,[121], Despite this, arguments over speed persist.,[122], Drupal is likely to be slower than a special-purpose application for a given task. For example, ,WordPress, typically outperforms Drupal as a single-user blogging tool. Drupal positions itself for broader applications requirements that are outside the scope of more narrowly focused applications.,[123], Drupal offers ,caching, to store various page elements, the use of which resulted in a 508% improvement in one benchmark.,[124], When using Drupal's default Page Cache mechanism, the cached pages are delivered only to anonymous users, so contributed modules must be installed to allow caching content for logged in users.,[125],[126], Like performance, ,scalability, (the ability to add servers to handle growing numbers of visitors with consistent response) can become a concern on large, interactive sites. ,MySQL,'s query caching can help reduce the load on the database server caused by Drupal's high ,query rate,.,[127],[128], Drupal caches database schema ,metadata, as well as elements such as blocks, forms and menus.,[129], Drupal 7 increases performance in database queries and reduces PHP code usage.,[130], +,Integrability with hosting structures:, Because of Drupal's demanding query requirements, Drupal-based websites can quickly become very taxing to hosts whose databases reside on a machine separate from their ,HTTP server,. While the issue can normally be addressed by implementing aggressive ,caching, as described above, such methods may be unimplementable in cases where the host does not offer access to ,PHP accelerators, like ,XCache, or ,APC,. Drupal has plugins that facilitate similar caching without requiring special PHP extensions.,[131],[132], +,The Drupal core search is ineffective at searching content:,[,citation needed,], There are contributed modules that will greatly improve the search functionality on a Drupal website, but they are not easily accessible due to a high learning curve and the difficulty users have in general of finding the right module.,[,citation needed,], One of the faceted search options is ,Apache Solr, Search Integration module, however, the module requires a dedicated server or ,virtual private server, (VPS) to operate because Solr must run on a ,servlet, container, e.g. ,Tomcat,, ,Jetty, or ,Resin,. These requirements make it harder for a Drupal website to have a functional search feature. In response some companies have created Apache Solr ,SaaS, products., +,Many published, yet incomplete or outdated modules,[133], While Drupal's site boasts over 30,000 downloadable modules, searching the Drupal module directory finds many that are incomplete abandoned projects and do not work at all, only work for an outdated version due to lack of backward compatibility, or are unusable due to serious bugs. This is due to the open source nature of Drupal, and the fact that anyone is free to start a module and publish it on drupal.org. Modules with an active maintenance team are often highly polished, secure, and nearly bug free. Recent changes to the drupal.org website now let users search for modules, themes, and distributions, while filtering results by stability. ,[134], +, +, +,Difficult to unit test:,[135], Drupal 7 doesn't follow MVC framework and stores all of its configurations in database and as a result, unit testing the code without touching the database becomes extremely difficult. As a result, developers have resorted to using integration testing frameworks such as Red Test or behavior-driven development framework such as Behat and Codeception. Drupal 8 has taken a great stride in making it easier for developers to write unit-testable code., +, +,See also,[,edit,], +, +, +,Free software portal, +, +, +, +,Comparison of web frameworks, +,List of applications with iCalendar support, +,List of content management systems, +, +,References,[,edit,], +, +, +,^, ,Earliest tagged releases, +,^ ,a, ,b, ,c, ,d, ,Drupal 8 release history; drupal.org, +,^ ,a, ,b, ,""Licensing FAQ"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,A query on ,Drupal,',s official website on March 2009: ,How does one pronounce ""Drupal""?, (accessed 19 June 2013), +,^, ,""The Drupal Overview"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,""System Requirements"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,W3Techs (2011-07-15). ,""Usage of content management systems for websites"",. Retrieved ,2011-07-15,., , +,^, ,BuiltWith (2011-03-28). ,""Drupal Usage Statistics"",. Retrieved ,2011-03-28,., , +,^, ,""The State of Drupal 2010 speech"",. Archive.org. 2001-03-10,. Retrieved ,2011-08-31,., , +,^, ,""Knowledge management with Drupal"",., , +,^, ,""Getting Involved | Drupal.org"",. ,www.drupal.org,. 2017-04-10,. Retrieved ,2017-04-11,. ,Drupal.org Activity, , +,^, ,""1 Million Users on Drupal.org!"",. ,www.drupal.org,. 2013-10-11., , +,^ ,a, ,b, ,""Drupal Homepage"",. ,www.drupal.org,. 2017-04-09,. Retrieved ,2017-04-09,., , +,^ ,a, ,b, ,""Module project"",. ,www.drupal.org,. 2017-04-09,. Retrieved ,2017-04-09,., , +,^ ,a, ,b, ,""Download & Extend: Themes"",. ,www.drupal.org,. 2017-04-09,. Retrieved ,2017-04-09,., , +,^, ,""Download & Extend: Distributions"",. ,www.drupal.org,. 2017-04-09,. Retrieved ,2017-04-09,., , +,^, ,""Drupal 7 as an enterprise web application framework"",. ,drupal.org,., , +,^, ,""Comparison of web frameworks"",. ,Wikipedia,. 2017-04-07. ,Comparison of features, , +,^, ,O'Connor, William (2014-08-19). ,""The Drupal API turns a CMS into a true enterprise application - O'Reilly Radar"",. ,O'Reilly Media,. Retrieved ,2017-04-11,., , +,^, ,Diana, Dupuis (2013-05-15). ,""Drupal Is a Framework: Why Everyone Needs to Understand This"",. ,Linux Journal,., , +,^ ,a, ,b, ,""Features"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,Drupal 7 release history; drupal.org, +,^, ,Drupal 6 release history; drupal.org, +,^, ,Drupal 5 release history; drupal.org, +,^ ,a, ,b, ,""History"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,""Druppel: Dutch to English Translation"",. ,Babylon Translation,. Retrieved ,2009-04-08,., , +,^, ,Benjamin Melançon; et al. (2011). ,The Definitive Guide to Drupal 7, (2nd ed.). Apress. p. 823. ,ISBN, ,9781430231356,. Retrieved ,2012-05-27,., , +,^, ,Critchley, Spencer (2006-05-03). ,""Digital Politics: An Interview With CivicSpace Founder Zack Rosen"",. ,O'Reilly Media,. Retrieved ,2012-05-27,., , +,^, ,Kreiss, Daniel (2012-03-05). ,""Dean, Romney, and Drupal: Values and Technological Adoption"",. ,Culture Digitally,. Retrieved ,2012-05-27,., , +,^, ,Samantha M. Shapiro, ,""The Dean Connection"",, ,The New York Times, December 7, 2003, accessed May 27, 2012., +,^, ,""Marketplace"",. ,drupal.org,. Retrieved ,2013-04-18,., , +,^, ,Koenig, Josh. ,""Growth Graphs"",. ,Groups.Drupal,. Retrieved ,2009-04-08,., , +,^, ,Buytaert, Dries (2008). ,""Drupal Download Statistics"",. Retrieved ,2009-04-08,., , +,^, ,Buytaert, Dries (2007). ,""Drupal Download Statistics"",. Retrieved ,2009-04-08,., , +,^, ,""Usage statistics for Drupal core"",., , +,^, ,""Drupal Sites"",. ,Dries Buytaert,. Retrieved ,2010-07-20,., , +,^, ,""List of Nonprofit, NPO, NGO Websites Using Drupal"",. ,ENGINE Industries,. Archived from ,the original, on 2009-12-24,. Retrieved ,2010-07-20,., , +,^, ,""OSS CMS Award Previous Winners"",. ,Packt Publishing,. Retrieved ,2009-04-08,., , +,^, ,""Drupal is a Webware 100 winner for the third year in a row"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Cnet.com"",. News.cnet.com. 2009-05-19,. Retrieved ,2011-08-31,., , +,^, ,""Buytaert.net"",. Buytaert.net,. Retrieved ,2011-08-31,., , +,^, ,""Drupal 7 to be released on January 5 (with one ginormous party)"",. Buytaert.net,. Retrieved ,2011-08-31,., , +,^, ,""Xplain Hosting Drupal 7 Quickstart training seminar"",. ,Scoop,. 2010-12-16., , +,^, ,""drupal 7.24"",. ,drupal.org,. Retrieved ,2013-11-20,., , +,^, ,""Drupal 8 In Marking The Biggest Change In Its Content Management History"",. ,eyerys.com,. Retrieved ,19 November, 2015,., , +,^, ,""Drupal 8.0.0-rc1 announcement"",. ,drupal.org,., , +,^, ,""Drupal 8.0.0-rc1 announcement"",. ,drupal.org,., , +,^, ,""Drupal 8.0.0 released"",. ,drupal.org,. Retrieved ,19 November, 2015,., , +,^, ,https://www.drupal.org/blog/drupal-8-1-0, +,^ ,a, ,b, ,""Never hack core"",. ,drupal.org,., , +,^, ,""Drupal 7.39 released"",. ,drupal.org,. Retrieved ,2015-09-19,., , +,^ ,a, ,b, ,""Handbook: Core Modules"",. ,drupal.org,. Archived from ,the original, on 2008-07-28,. Retrieved ,2009-04-08,., , +,^, ,""Drupal Multi-site installation recipes"",., , +,^, ,Buytaert, Dries. ,""Garland, the new default core theme"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,""Color: Allows the user to change the color scheme of certain themes"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,""Drupal core translation downloads"",. ,drupal.org,. Retrieved ,2017-01-30,., , +,^ ,a, ,b, ,""Drupal 6.0 released"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,""SA-CORE-2014-005 - Drupal core - SQL injection"",. ,Https:,. Retrieved ,December 3,, 2014,., , +,^, ,""Drupal Core - Highly Critical - Public Service announcement - PSA-2014-003"",. ,Https:,. Retrieved ,December 3,, 2014,., , +,^, ,""Install Drupal for Windows"",. ,microsoft.com,. Retrieved ,2011-02-14,., , +,^, ,""Drupal on Windows Group"",. ,drupal.org,. Retrieved ,2011-02-14,., , +,^, ,Killesreiter, Gerhard (2013-02-25). ,""Accessibility statement"",. ,drupal.org,. Retrieved ,2013-04-16,., , +,^, ,Scholten, Roy (2012-12-10). ,""Drupal core gates"",. ,drupal.org,. Retrieved ,2013-04-16,., , +,^, ,""API Reference"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,""File and directory management"",. ,drupal.org,., , +,^, ,14 hours 40 min ago. (2009-05-20). ,""Integrating Drupal with External Systems"",. Appnovation.com. Archived from ,the original, on 2011-08-24,. Retrieved ,2011-08-31,., , +,^, ,""Drupal Camunda BPM Integration"",. ,Srijan Technologies,. Srijan Technologies., , +,^, ,""Project usage overview"",. ,Drupal.org,. Retrieved ,2011-08-18,., , +,^, ,""DRUPAL 5 TO DRUPAL 7"",., , +,^, ,""Field API"",. 2009,. Retrieved ,2009-05-08,., , +,^, ,""Views in Drupal Core initiative: Status report and roadmap"",. Retrieved ,2014-11-04,., , +,^, ,""PHPTemplate theme engine"",. ,drupal.org,. Archived from ,the original, on 2009-03-08,. Retrieved ,2009-04-08,., , +,^, ,""XTemplate theme engine"",. ,drupal.org,. Archived from ,the original, on 2009-03-16,. Retrieved ,2009-04-08,., , +,^, ,""How does Drupal compare to Mambo? discussion thread"",. ,drupal.org,. 2005-01-17,. Retrieved ,2009-04-08,., , +,^, ,""Drupal themes"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Adding your theme to Drupal.org"",. Drupal.org., , +,^, ,""10 Best Drupal Themes"",. MAAN Softwares,. Retrieved ,2017-11-08,., , +,^, ,""Top Drupal Distributions"",. AGLOBALWAY Consulting Services Inc. Archived from ,the original, on 2014-04-13., , +,^, ,""MVC vs. PAC"",., , +,^, ,Drupal - CMS Grew Overnight, By MAAN Softwares, Retrieved, June 8th, 2017, +,^, ,""drupal.org discussion on DrupalCon event management"",. Groups.drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Drupal Camps and Cons"",. Retrieved ,25 January, 2013,., , +,^, ,""1 Year of Drupal Events Visualized"",. Retrieved ,13 July, 2013,., , +,^, ,""forums"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""mailing lists"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Drupal Groups"",. Groups.drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Drupal IRC channels on FreeNode"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Language specific communities"",. Drupal.org. 2011-08-26,. Retrieved ,2011-08-31,., , +,^, ,Keller, Katherine (7 April 2017). ,""CMS Battle for Beginners: WordPress vs Joomla vs Drupal (Infographic)"",. ,Entrepreneur,. Retrieved ,17 May, 2017,., , +,^, ,Drupal. ,""Security announcement and release process"",., , +,^, ,Drupal. ,""How to report a security issue"",., , +,^, ,""Update manager (and Update status)"",. ,drupal.org,. Retrieved ,2011-07-01,., , +,^, ,""Security advisories"",. ,drupal.org,. Retrieved ,2009-04-28,., , +,^, ,""Drupal security team"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Drupal Security RSS feed"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,""Drupalgeddon megaflaw raises questions over CMS bods' crisis mgmt"",., , +,^, ,""SA-CORE-2014-005 - Drupal core - SQL injection"",. ,Security advisories,. Drupal security team., , +,^, ,""Drupalgeddon strikes back: outdated Drupal allegedly linked to ""Panama Papers,"","",. ,Blog,. Drop Guard., , +,^, ,""Drupal Core—Highly Critical—Public Service Announcement—PSA-2014-003"",. ,Security advisories,. Drupal security team. October 29, 2014 – via Drupal.org. , +,You should proceed under the assumption that every Drupal 7 website was compromised unless updated or patched before Oct 15th, 11pm UTC, that is 7 hours after the announcement., +,Simply updating to Drupal 7.32 will not remove backdoors,....updating to version 7.32 or applying the patch fixes the vulnerability but does not fix an already compromised website. If you find that your site is already patched but you didn’t do it, that can be a symptom that the site was compromised - some attacks have applied the patch as a way to guarantee they are the only attacker in control of the site., +, , +,^, ,Robinson, Brian (2014-11-07). ,""Attacks on open source call for better software design -"",. ,GCN,. Retrieved ,2016-07-29,., , +,^, ,Why running the White House Web site on Drupal is a political disaster waiting to happen., +,^, ,Message Error, Why running the White House Web site on Drupal is a political disaster waiting to happen, Chris Wilson. ,Slate (magazine), October 27, 2009, +,^, ,Scollan, Becca; Abby Byrnes; Malia Nagle; Paul Coyle; Cynthia York; Maleka Ingram (2008-05-01). ,""Drupal Usability Research Report"", ,(PDF),. Retrieved ,2009-04-08,., , +,^, ,Lal, Kieran (2008-06-26). ,""Drupal usability tests from the University of Baltimore with community solutions"",. ,drupal.org,. Retrieved ,2009-04-08,., , +,^, ,Buytaert, Dries (2008-07-03). ,""Usability, usability, and usability"",. Retrieved ,2009-04-08,., , +,^, ,Buytaert, Dries (2008-03-10). ,""First results from usability testing"",. Retrieved ,2009-04-08,., , +,^, ,""Report from Formal Drupal"", ,(PDF),. 2008-03-03,. Retrieved ,2009-04-08,., , +,^, ,Buytaert, Dries (2009-02-04). ,""Mark Boulton to help with Drupal 7"",. Archived from ,the original, on 2010-04-13., , +,^, ,University of Minnesota Office of Information Technology (2011-05-23). ,""Usability test at University of Minnesota, may 2011"",. ,drupal.org,., , +,^, ,University of Minnesota Office of Information Technology (2011-06-01). ,""Report from the University of Minnesota Drupal Usability Testing"",. ,drupal.org,., , +,^, ,""Drupal Gardens"",., , +,^, ,""Open Enterprise"",., , +,^, ,""Mitkom"",., , +,^, ,Howard, Brian C. (2007-01-25). ,""Harnessing Drupal for Citizen Journalism"",. ,NewAssignment.Net,. Retrieved ,2009-04-08,., , +,^, ,""Drupal Review"",. Archived from ,the original, on 2010-02-05., , +,^, ,James, Heather (2010-11-09). ,""203 people tell What I wish I knew when I started Drupal"",. ,Acquia.com,. Retrieved ,2010-11-11,., , +,^, ,Buytaert, Dries (2006-05-26). ,""Backward Compatibility"",. Retrieved ,2009-04-08,., , +,^, ,Buytaert, Dries (2006-07-27). ,""The pain before the pay-off"",. Retrieved ,2009-04-08,., , +,^, ,""Drupal's Upgrade Instructions (end-user)"",. Drupal.org,. Retrieved ,2011-08-31,., , +,^, ,http://buytaert.net/making-drupal-upgrades-easy-forever, +,^, ,""Joomla 1.5 & Drupal 6.1 Performance Comparison"",. Archived from ,the original, on 2012-07-22., , +,^, ,""Is Drupal Slow & Bloated?"",. Archived from ,the original, on 2012-09-09., , +,^, ,""Is Drupal the right tool for the job?"",., , +,^, ,""Drupal vs Joomla: performance | Dries Buytaert"",. Buytaert.net,. Retrieved ,2012-05-05,., , +,^, ,""Authenticated User Page Caching (Authcache)"",. ,drupal.org,. Retrieved ,2009-09-23,., , +,^, ,Buytaert, Dries (2006-08-11). ,""Drupal vs Joomla! performance"",. Retrieved ,2009-05-20,., , +,^, ,""Speed up a Drupal web site by enabling MySQL query caching"",. ,nadeausoftware.com,. 2007-03-07,. Retrieved ,2009-06-21,., , +,^, ,""Book on Drupal Performance & Scalability"",. Books.tag1consulting.com. 2008-07-16. Archived from ,the original, on 2011-09-06,. Retrieved ,2011-08-31,., , +,^, ,""Caching in Drupal 6"",. ,drupal.org,. 2008-07-28,. Retrieved ,2009-06-21,., , +,^, ,""Drupal 6 vs Drupal 7 performance and comments vs nodes"",. ,CivicActions.com,. 2009-05-19,. Retrieved ,2009-06-21,., , +,^, ,""Boost"",. drupal.org. 2006-10-15,. Retrieved ,2012-05-05,., , +,^, ,""Memcache API and Integration"",. drupal.org,. Retrieved ,2012-05-05,., , +,^, ,""Dealing with unsupported (abandoned) projects"",. ,While experienced Drupal users know to check the queue and the git commits to determine the health of a project, having broken and unmaintained/unsupported projects available can be confusing and off-putting for new users., , +,^, ,https://www.drupal.org/project/project_module, +,^, ,""Drupal Testing Methodologies Are Broken - Here's Why | Red Crackle"",. ,redcrackle.com,. Retrieved ,2015-12-05,., , +, +, +,Further reading,[,edit,], +, +,Abbott/Jones (2016), Learning Drupal 8, England, Packt Publishing. ,ISBN, ,978-1-78216-875-1, +,Pol, Kristen (2012). ,Drupal 7 Multilingual Sites,. Birmingham, England: Packt Publishing. ,ISBN, ,978-1-84951-818-5,., , +,Mercer, David (2010). ,Drupal 7,. Birmingham, England: Packt Publishing. ,ISBN, ,1-84951-286-8,., , +,Travis, Brian (2011). ,Pro Drupal 7 for Windows Developers,. Berkeley: APress. ,ISBN, ,978-1-4302-3153-0,., , +,Butcher, Matt; Larry Garfield; John Wilkins; Matt Farina; Ken Rickard; Greg Dunlap (2010). ,Drupal 7 Module Development,. Birmingham, England: Packt Publishing. ,ISBN, ,978-1-84951-116-2,., , +,Bhavin, Patel (Aug 2010). ,Drupal 6 Panel Cookbook,. Canada: Packt Publishing. ,ISBN, ,1-84951-118-7,., , +,Beighley, Lynn (2009). ,Drupal for Dummies,. New York: For Dummies. ,ISBN, ,978-0-470-55611-5,., , +,Herremans, D. (2009). ,Drupal 6: Ultimate Community Site Guide,. Switzerland. ,ISBN, ,978-2-8399-0490-2,., , +,Peacock, Michael (2008). ,Selling Online with Drupal e-Commerce,. Birmingham, England: Packt Publishing. ,ISBN, ,978-1-84719-406-0,., , +,VanDyk, John K. (2008). ,Pro Drupal Development, Second Edition,. New York: Springer Verlag/Apress. ,ISBN, ,1-4302-0989-5,., , +,Kafer, Konstantin; Emma Hogbin (Apr 2009). ,Front End Drupal: Designing, Theming, Scripting,. Jersey, USA: Prentice Hall. ,ISBN, ,0-13-713669-2,., , +, +,External links,[,edit,], +, +, +, +,Wikimedia Commons has media related to ,Drupal,., +, +, +, +,Official website, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web frameworks, +, +, +, +, +, +, +,Comparison, +, +, +, +, +, +,C++, +, +, +, +,CppCMS, +,Wt, +, +, +, +, +, +,CLI, +, +, +, +,ASP.NET, +, +,Core, +,AJAX, +,Dynamic Data, +,MVC, +,Razor, +,Web Forms, +, +, +,DNN, +,BFC, +,MonoRail, +,OpenRasta, +,Umbraco, +, +, +, +, +, +,ColdFusion, +, +, +, +,CFWheels, +,ColdBox Platform, +,ColdSpring, +,Fusebox, +,Mach-II, +,Model-Glue, +, +, +, +, +, +,Common Lisp, +, +, +, +,Caveman2, +,CL-HTTP, +,UnCommon Web, +,Weblocks, +, +, +, +, +, +,Haskell, +, +, +, +,Happstack, +,Yesod, +,Snap, +, +, +, +, +, +,Java, +, +, +, +,AppFuse, +,Flexive, +,Grails, +,GWT, +,ICEfaces, +,ItsNat, +,JavaServer Faces, +,JHipster, +,Jspx, +,JWt, +,OpenXava, +,Play, +,Reasonable Server Faces, +,Remote Application Platform, +,RIFE, +,Seam, +,Sling, +,Spring, +,Stripes, +,Struts, +,Tapestry, +,Vaadin, +,Vert.x, +,WebWork, +,Wicket, +,WaveMaker, +,ZK, +, +, +, +, +, +,JavaScript, +, +, +, +,Ample SDK, +,Angular,/,AngularJS, +,Backbone.js, +,Chaplin.js, +,Closure, +,Dojo Toolkit, +,Ember.js, +,Ext JS, +,jQuery, +,Meteor, +,MooTools, +,Node.js, +,OpenUI5, +,Prototype, +,React, +,Rico, +,script.aculo.us, +,Sencha Touch, +,SproutCore, +,Wakanda, +, +, +, +, +, +,Perl, +, +, +, +,Catalyst, +,Dancer, +,Mason, +,Maypole, +,Mojolicious, +,WebGUI, +, +, +, +, +, +,PHP, +, +, +, +,CakePHP, +,CodeIgniter, +,Drupal, +,Fat-Free, +,FuelPHP, +,Flow, +,Gyroscope, +,Horde, +,Kohana, +,Laravel, +,Lithium, +,Midgard, +,MODX, +,Nette, +,Phalcon, +,Pop PHP, +,PRADO, +,ProcessWire, +,Qcodo, +,Silex, +,SilverStripe, +,Symfony, +,TYPO3, +,Xaraya, +,XOOPS, +,Yii, +,Zend Framework, +, +, +, +, +, +,Python, +, +, +, +,BlueBream, +,CherryPy, +,Django, +,Flask, +,Grok, +,Nevow, +,Pyjs, +,Pylons, +,Pyramid, +,Quixote, +,TACTIC, +,Tornado, +,TurboGears, +,web2py, +,Webware, +,Zope 2, +, +, +, +, +, +,Ruby, +, +, +, +,Camping, +,Merb, +,Padrino, +,Ruby on Rails, +,Sinatra, +, +, +, +, +, +,Scala, +, +, +, +,Lift, +,Play, +,Scalatra, +, +, +, +, +, +,Smalltalk, +, +, +, +,AIDA/Web, +,Seaside, +, +, +, +, +, +,Other languages, +, +, +, +,Vibe.d, (,D,), +,Application Express, (,PL/SQL,), +,Grails, (,Groovy,), +,Kepler, (,Lua,), +,Rocket, (,Rust,), +,OpenACS, (,Tcl,), +,Phoenix, (,Elixir,), +,SproutCore, (,JavaScript,-,Ruby,), +,Yaws, (,Erlang,), +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Software in the Public Interest, +, +, +, +,People, +, +, +, +,Bdale Garbee, (President), +, +, +, +, +, +,Projects, +, +, +, +,0 A.D., +,Arch Linux, +,Debian, +,Drizzle, +,Drupal, +,FFmpeg, +,Fluxbox, +,freedesktop.org, +,FreedomBox, +,Gallery Project, +,GNU TeXmacs, +,GNUstep, +,Jenkins, +,LibreOffice, +,MinGW, +,Open and Free Technology Community, +,Open Bioinformatics Foundation, +,Open64, +,OpenEmbedded, +,OpenVAS, +,OpenWrt, +,PostgreSQL, +,Privoxy, +,SproutCore, +,X.Org Foundation, +,YafaRay, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,WorldCat Identities, +,VIAF,: ,180810498, +,LCCN,: ,n2009053036, +,GND,: ,7522644-3, +, +, +, +, +, +, + + +, +, +, +, +",Drupal +" 22 January 2018, at 01:37."," +,Unix, +, +, +,Evolution of Unix and Unix-like systems, +, +, +, +,Developer, +,Ken Thompson,, ,Dennis Ritchie,, ,Brian Kernighan,, ,Douglas McIlroy,, and ,Joe Ossanna, at ,Bell Labs, +, +, +,Written in, +,C, and ,assembly language, +, +, +,OS family, +,Unix, +, +, +,Working state, +,Current, +, +, +,Source model, +,Historically ,closed-source,, while some Unix projects (including ,BSD, family and ,Illumos,) are ,open-source, +, +, +,Initial release, +,Development started in 1969,; 49 years ago, (,1969,), +First manual published ,internally, in November 1971, (,1971-11,),[1], +Announced outside Bell Labs in October 1973, (,1973-10,),[2], +, +, +,Available in, +,English, +, +, +,Kernel, type, +,Varies; ,monolithic,, ,microkernel,, ,hybrid, +, +, +,Default ,user interface, +,Command-line interface, and ,Graphical, (,X Window System,), +, +, +,License, +,Varies; some versions are ,proprietary,, others are ,free,/,open-source software, +, +, +,Official website, +,opengroup,.org,/unix, +, +, +,Unix, (,/,ˈ,j,uː,n,ɪ,k,s,/,; trademarked as ,UNIX,) is a family of ,multitasking,, ,multiuser, computer ,operating systems, that derive from the original ,AT&T, Unix, development starting in the 1970s at the ,Bell Labs, research center by ,Ken Thompson,, ,Dennis Ritchie,, and others.,[3], +,Initially intended for use inside the ,Bell System,, AT&T licensed Unix to outside parties in the late 1970s, leading to a variety of both academic and commercial Unix variants from vendors like the ,University of California, Berkeley, (,BSD,), ,Microsoft, (,Xenix,), ,IBM, (,AIX,), and ,Sun Microsystems, (,Solaris,). In the early 1990s, AT&T sold its rights in Unix to ,Novell,, which then sold its Unix business to the ,Santa Cruz Operation, (SCO) in 1995.,[4], The UNIX trademark passed to ,The Open Group,, a neutral industry consortium, which allows the use of the mark for certified operating systems that comply with the ,Single UNIX Specification, (SUS). As of 2014, the Unix version with the largest installed base is ,Apple,'s ,macOS,.,[5], +,From the perspective of a power user or programmer, Unix systems are characterized by a ,modular design, that is sometimes called the "",Unix philosophy,""—that is to say, the operating system provides a set of simple tools that each perform a limited, well-defined function,,[6], with a unified ,filesystem, as the main means of communication,[3], and a ,shell, scripting and command language to combine the tools to perform complex workflows. Additionally, Unix also distinguishes itself from its predecessors as the first ,portable, operating system: almost the entire operating system is written in the ,C programming language, that allowed Unix to reach numerous platforms.,[7], +,Over the years, many ,Unix-like, operating systems have been developed, but ,Linux, is the most popular. In fact, Linux has displaced ,SUS,-certified Unix on many server platforms since its inception in the early 1990s. The world's most-used mobile operating system, ,Android,, is based on Linux., +, +, +, +,Contents, +, +, +,1, ,Overview, +,2, ,History, +,3, ,Standards, +,4, ,Components, +,5, ,Impact, +, +,5.1, ,Free Unix and Unix-like variants, +,5.2, ,ARPANET, +, +, +,6, ,Branding, +,7, ,See also, +,8, ,References, +,9, ,Further reading, +,10, ,External links, +, +, +, +,Overview,[,edit,], +, +, +, +, +,Version 7 Unix,, the ,Research Unix, ancestor of all modern Unix systems, +, +, +,Unix was originally meant to be a convenient platform for programmers developing software to be run on it and on other systems, rather than for non-programmers.,[8],[9], The system grew larger as the operating system started spreading in academic circles, as users added their own tools to the system and shared them with colleagues.,[10], +,Unix was designed to be ,portable,, ,multi-tasking, and ,multi-user, in a ,time-sharing, configuration. Unix systems are characterized by various concepts: the use of ,plain text, for storing data; a hierarchical ,file system,; treating devices and certain types of ,inter-process communication, (IPC) as files; and the use of a large number of ,software tools,, small programs that can be strung together through a ,command-line interpreter, using ,pipes,, as opposed to using a single monolithic program that includes all of the same functionality. These concepts are collectively known as the "",Unix philosophy,"". ,Brian Kernighan, and ,Rob Pike, summarize this in ,The Unix Programming Environment, as ""the idea that the power of a system comes more from the relationships among programs than from the programs themselves"".,[11], +,By the early 1980s, users began seeing Unix as a potential universal operating system, suitable for computers of all sizes.,[12],[13], The Unix environment and the ,client–server, program model were essential elements in the development of the ,Internet, and the reshaping of computing as centered in ,networks, rather than in individual computers., +,Both Unix and the ,C programming language, were developed by AT&T and distributed to government and academic institutions, which led to both being ported to a wider variety of machine families than any other operating system., +,Under Unix, the operating system consists of many utilities along with the master control program, the ,kernel,. The kernel provides services to start and stop programs, handles the ,file system, and other common ""low-level"" tasks that most programs share, and schedules access to avoid conflicts when programs try to access the same resource or device simultaneously. To mediate such access, the kernel has special rights, reflected in the division between ,user space and kernel space,., +,The ,microkernel, concept was introduced in an effort to reverse the trend towards larger kernels and return to a system in which most tasks were completed by smaller utilities. In an era when a standard computer consisted of a hard disk for storage and a ,data terminal, for ,input and output, (I/O), the Unix file model worked quite well, as I/O was generally linear. However, modern systems include networking and other new devices. As graphical user interfaces developed, the file model proved inadequate to the task of handling asynchronous events such as those generated by a ,mouse,. In the 1980s, ,non-blocking I/O, and the set of ,inter-process communication, mechanisms were augmented with ,Unix domain sockets,, ,shared memory,, ,message queues,, and ,semaphores,. In microkernel implementations, functions such as network protocols could be moved out of the kernel, while conventional (,monolithic,) Unix implementations have network protocol stacks as part of the kernel., +,History,[,edit,], +,Main article: ,History of Unix, +, +, +, +, +,Ken Thompson, (sitting) and ,Dennis Ritchie, working together at a ,PDP-11, +, +, +,The pre-history of Unix dates back to the mid-1960s when the ,Massachusetts Institute of Technology,, ,Bell Labs,, and ,General Electric, were developing an innovative ,time-sharing, operating system called ,Multics, for the ,GE-645, mainframe.,[14], Multics introduced ,many innovations,, but had many problems. Frustrated by the size and complexity of Multics but not by the aims, Bell Labs slowly pulled out of the project. Their last researchers to leave Multics, ,Ken Thompson,, ,Dennis Ritchie,, ,M. D. McIlroy,, and ,J. F. Ossanna,,,[15], decided to redo the work on a much smaller scale., +,The new operating system was initially without organizational backing, and also without a name. At this stage, the new operating system was a singletasking operating system, not a multitasking one such as Multics.,[15], The name ,Unics, (Uniplexed Information and Computing Service, pronounced as "",eunuchs,""), a ,pun, on ,Multics, (Multiplexed Information and Computer Services), was initially suggested for the project in 1970. ,Brian Kernighan, claims the coining for himself, and adds that ""no one can remember"" who came up with the final spelling Unix.,[16], Dennis Ritchie,,[15], Doug McIlroy,,[1], and ,Peter G. Neumann,[17], also credit Kernighan., +,In 1972, Unix was rewritten in the ,C programming language,.,[18], The migration from assembly to the ,higher-level language, C resulted in much more ,portable, software, requiring only a relatively small amount of machine-dependent code to be replaced when porting Unix to other ,computing platforms,.,[19], Bell Labs produced several versions of Unix that are collectively referred to as "",Research Unix,"". In 1975, the first source license for UNIX was sold to ,Donald B. Gillies, at the ,University of Illinois, Department of Computer Science.,[20], UIUC graduate student ,Greg Chesson, (who had worked on the UNIX kernel at Bell Labs) was instrumental in negotiating the terms of the license.,[21], +,During the late 1970s and early 1980s, the influence of Unix in academic circles led to large-scale adoption of Unix (,BSD, and ,System V,) by commercial startups, including ,Sequent,, ,HP-UX,, ,Solaris,, ,AIX,, and ,Xenix,. In the late 1980s, AT&T ,Unix System Laboratories, and ,Sun Microsystems, developed System V Release 4 (,SVR4,), which was subsequently adopted by many commercial Unix vendors., +,In the 1990s, Unix-like systems grew in popularity as ,Linux, and BSD distributions were developed through collaboration by a worldwide network of programmers. In 2000, Apple released ,Darwin,, also a Unix-like system, which became the core of the Mac OS X operating system, later renamed ,macOS,.,[22], +,Unix operating systems are widely used in modern ,servers,, ,workstations,, and ,mobile devices,.,[23], +,Standards,[,edit,], +, +, +, +, +The ,Common Desktop Environment, (CDE), part of the ,COSE initiative, +, +, +,In the late 1980s, an open operating system standardization effort now known as ,POSIX, provided a common baseline for all operating systems; ,IEEE, based POSIX around the common structure of the major competing variants of the Unix system, publishing the first POSIX standard in 1988. In the early 1990s, a separate but very similar effort was started by an industry consortium, the ,Common Open Software Environment, (COSE) initiative, which eventually became the ,Single UNIX Specification, (SUS) administered by ,The Open Group,. Starting in 1998, the Open Group and IEEE started the ,Austin Group,, to provide a common definition of POSIX and the Single UNIX Specification, which, by 2008, had become the Open Group Base Specification., +,In 1999, in an effort towards compatibility, several Unix system vendors agreed on SVR4's ,Executable and Linkable Format, (ELF) as the standard for binary and object code files. The common format allows substantial binary compatibility among Unix systems operating on the same CPU architecture., +,The ,Filesystem Hierarchy Standard, was created to provide a reference directory layout for Unix-like operating systems, and has mainly been used in Linux., +,Components,[,edit,], +,See also: ,List of Unix commands, +, +, +, +, +, +, +,This section ,does not ,cite, any ,sources,. ,Please help ,improve this section, by ,adding citations to reliable sources,. Unsourced material may be challenged and ,removed,., ,(January 2017), ,(,Learn how and when to remove this template message,), +, +, +, +,The Unix system is composed of several components that were originally packaged together. By including the development environment, libraries, documents and the portable, modifiable source code for all of these components, in addition to the ,kernel, of an operating system, Unix was a self-contained software system. This was one of the key reasons it emerged as an important teaching and learning tool and has had such a broad influence.,[,according to whom?,], +,The inclusion of these components did not make the system large – the original V7 UNIX distribution, consisting of copies of all of the compiled binaries plus all of the source code and documentation occupied less than 10 MB and arrived on a single nine-track ,magnetic tape,. The printed documentation, typeset from the online sources, was contained in two volumes., +,The names and filesystem locations of the Unix components have changed substantially across the history of the system. Nonetheless, the V7 implementation is considered by many,[,who?,], to have the canonical early structure:, +, +,Kernel, – source code in /usr/sys, composed of several sub-components: +, +,conf, – configuration and machine-dependent parts, including boot code, +,dev, – device drivers for control of hardware (and some pseudo-hardware), +,sys, – operating system ""kernel"", handling memory management, process scheduling, system calls, etc., +,h, – header files, defining key structures within the system and important system-specific invariables, +, +, +,Development environment, – early versions of Unix contained a development environment sufficient to recreate the entire system from source code: +, +,cc, – ,C language, compiler (first appeared in V3 Unix), +,as, – machine-language assembler for the machine, +,ld, – linker, for combining object files, +,lib, – object-code libraries (installed in /lib or /usr/lib). ,libc,, the system library with C run-time support, was the primary library, but there have always been additional libraries for such things as mathematical functions (,libm,) or database access. V7 Unix introduced the first version of the modern ""Standard I/O"" library ,stdio, as part of the system library. Later implementations increased the number of libraries significantly., +,make, – build manager (introduced in ,PWB/UNIX,), for effectively automating the build process, +,include, – header files for software development, defining standard interfaces and system invariants, +,Other languages, – V7 Unix contained a Fortran-77 compiler, a programmable arbitrary-precision calculator (,bc,, ,dc,), and the ,awk, scripting language; later versions and implementations contain many other language compilers and toolsets. Early BSD releases included ,Pascal, tools, and many modern Unix systems also include the ,GNU Compiler Collection, as well as or instead of a proprietary compiler system., +,Other tools, – including an object-code archive manager (,ar,), symbol-table lister (,nm,), compiler-development tools (e.g. ,lex, & ,yacc,), and debugging tools., +, +, +,Commands, – Unix makes little distinction between commands (user-level programs) for system operation and maintenance (e.g. ,cron,), commands of general utility (e.g. ,grep,), and more general-purpose applications such as the text formatting and typesetting package. Nonetheless, some major categories are: +, +,sh, – the ""shell"" programmable ,command-line interpreter,, the primary user interface on Unix before window systems appeared, and even afterward (within a ""command window"")., +,Utilities, – the core toolkit of the Unix command set, including ,cp,, ,ls,, ,grep,, ,find, and many others. Subcategories include: +, +,System utilities, – administrative tools such as ,mkfs,, ,fsck,, and many others., +,User utilities, – environment management tools such as ,passwd,, ,kill,, and others., +, +, +,Document formatting, – Unix systems were used from the outset for document preparation and typesetting systems, and included many related programs such as ,nroff,, ,troff,, ,tbl,, ,eqn,, ,refer,, and ,pic,. Some modern Unix systems also include packages such as ,TeX, and ,Ghostscript,., +,Graphics, – the ,plot, subsystem provided facilities for producing simple vector plots in a device-independent format, with device-specific interpreters to display such files. Modern Unix systems also generally include ,X11, as a standard windowing system and ,GUI,, and many support ,OpenGL,., +,Communications, – early Unix systems contained no inter-system communication, but did include the inter-user communication programs ,mail, and ,write,. V7 introduced the early inter-system communication system ,UUCP,, and systems beginning with BSD release 4.1c included ,TCP/IP, utilities., +, +, +,Documentation, – Unix was the first,[,citation needed,], operating system to include all of its documentation online in machine-readable form. The documentation included: +, +,man, – manual pages for each command, library component, ,system call,, header file, etc., +,doc, – longer documents detailing major subsystems, such as the C language and troff, +, +, +, +,Impact,[,edit,], +,See also: ,Unix-like, +, +, +, +, +, +, +,This section ,needs additional citations for ,verification,. ,Please help ,improve this article, by ,adding citations to reliable sources,. Unsourced material may be challenged and removed., ,(January 2017), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +,Ken Thompson, and ,Dennis Ritchie,, principal developers of ,Research Unix, +, +, +, +, +, +, +Photo from ,USENIX, 1984, including ,Dennis Ritchie, (center), +, +, +, +, +, +, +,Plan 9 from Bell Labs, extends Unix design principles, and was developed as a successor to Unix, +, +, +,The Unix system had significant impact on other operating systems. It achieved its reputation by its interactivity, by providing the software at a nominal fee for educational use, by running on inexpensive hardware, and by being easy to adapt and move to different machines. Unix was originally written in ,assembly language, (which had been thought necessary for system implementations on early computers), but was soon rewritten in ,C,, a ,high-level programming language,.,[24], Although this followed the lead of ,Multics, and ,Burroughs,, it was Unix that popularized the idea., +,Unix had a drastically simplified file model compared to many contemporary operating systems: treating all kinds of files as simple byte arrays. The file system hierarchy contained machine services and devices (such as ,printers,, ,terminals,, or ,disk drives,), providing a uniform interface, but at the expense of occasionally requiring additional mechanisms such as ,ioctl, and mode flags to access features of the hardware that did not fit the simple ""stream of bytes"" model. The ,Plan 9, operating system pushed this model even further and eliminated the need for additional mechanisms., +,Unix also popularized the hierarchical file system with arbitrarily nested subdirectories, originally introduced by Multics. Other common operating systems of the era had ways to divide a storage device into multiple directories or sections, but they had a fixed number of levels, often only one level. Several major proprietary operating systems eventually added recursive subdirectory capabilities also patterned after Multics. DEC's ,RSX-11,M's ""group, user"" hierarchy evolved into ,VMS, directories, ,CP/M,'s volumes evolved into ,MS-DOS, 2.0+ subdirectories, and HP's ,MPE, group.account hierarchy and IBM's ,SSP, and ,OS/400, library systems were folded into broader POSIX file systems., +,Making the command interpreter an ordinary user-level program, with additional commands provided as separate programs, was another Multics innovation popularized by Unix. The ,Unix shell, used the same language for interactive commands as for scripting (,shell scripts, – there was no separate job control language like IBM's ,JCL,). Since the shell and OS commands were ""just another program"", the user could choose (or even write) his own shell. New commands could be added without changing the shell itself. Unix's innovative command-line syntax for creating modular chains of producer-consumer processes (,pipelines,) made a powerful programming paradigm (,coroutines,) widely available. Many later command-line interpreters have been inspired by the Unix shell., +,A fundamental simplifying assumption of Unix was its focus on ,newline,-,delimited, text for nearly all file formats. There were no ""binary"" editors in the original version of Unix – the entire system was configured using textual shell command scripts. The common denominator in the I/O system was the byte – unlike ,""record-based"" file systems,. The focus on text for representing nearly everything made Unix pipes especially useful, and encouraged the development of simple, general tools that could be easily combined to perform more complicated ,ad hoc, tasks. The focus on text and bytes made the system far more scalable and portable than other systems. Over time, text-based applications have also proven popular in application areas, such as printing languages (,PostScript,, ,ODF,), and at the application layer of the ,Internet protocols,, e.g., ,FTP,, ,SMTP,, ,HTTP,, ,SOAP,, and ,SIP,., +,Unix popularized a syntax for ,regular expressions, that found widespread use. The Unix programming interface became the basis for a widely implemented operating system interface standard (POSIX, see above). The ,C programming language, soon spread beyond Unix, and is now ubiquitous in systems and applications programming., +,Early Unix developers were important in bringing the concepts of ,modularity, and ,reusability, into ,software engineering, practice, spawning a ""software tools"" movement. Over time, the leading developers of Unix (and programs that ran on it) established a set of cultural norms for developing software, norms which became as important and influential as the technology of Unix itself; this has been termed the ,Unix philosophy,., +,The ,TCP/IP networking protocols, were quickly implemented on the Unix versions widely used on relatively inexpensive computers, which contributed to the ,Internet, explosion of worldwide real-time connectivity, and which formed the basis for implementations on many other platforms., +,The Unix policy of extensive on-line documentation and (for many years) ready access to all system source code raised programmer expectations, and contributed to the 1983 launch of the ,free software movement,., +,Free Unix and Unix-like variants,[,edit,], +,See also: ,Operating system § Unix and Unix-like operating systems, +, +, +, +, +, +, +, +, +,Console screenshots of ,Debian, (top, a popular ,Linux distribution,) and ,FreeBSD, (bottom, a popular ,Unix-like, operating system), +, +, +,In 1983, ,Richard Stallman, announced the ,GNU, (short for ""GNU's Not Unix"") project, an ambitious effort to create a ,free software, ,Unix-like, system; ""free"" in the sense that everyone who received a copy would be free to use, study, modify, and redistribute it. The GNU project's own kernel development project, ,GNU Hurd,, had not produced a working kernel, but in 1991 ,Linus Torvalds, released the ,Linux kernel, as free software under the ,GNU General Public License,. In addition to their use in the ,Linux, operating system, many GNU packages – such as the ,GNU Compiler Collection, (and the rest of the ,GNU toolchain,), the ,GNU C library, and the ,GNU core utilities, – have gone on to play central roles in other free Unix systems as well., +,Linux distributions,, consisting of the Linux kernel and large collections of compatible software have become popular both with individual users and in business. Popular distributions include ,Red Hat Enterprise Linux,, ,Fedora,, ,SUSE Linux Enterprise,, ,openSUSE,, ,Debian GNU/Linux,, ,Ubuntu,, ,Linux Mint,, ,Mandriva Linux,, ,Slackware Linux,, and ,Gentoo,., +,A free derivative of ,BSD, Unix, ,386BSD,, was released in 1992 and led to the ,NetBSD, and ,FreeBSD, projects. With the 1994 settlement of a lawsuit brought against the University of California and Berkeley Software Design Inc. (,USL v. BSDi,) by ,UNIX Systems Laboratories,, it was clarified that Berkeley had the right to distribute BSD Unix for free, if it so desired. Since then, BSD Unix has been developed in several different product branches, including ,OpenBSD, and ,DragonFly BSD,., +,Linux and BSD are increasingly filling the market needs traditionally served by proprietary Unix operating systems, as well as expanding into new markets such as the consumer desktop and mobile and embedded devices. Because of the modular design of the Unix model, sharing components is relatively common; consequently, most or all Unix and Unix-like systems include at least some BSD code, and some systems also include GNU utilities in their distributions., +,In a 1999 interview, Dennis Ritchie voiced his opinion that Linux and BSD operating systems are a continuation of the basis of the Unix design, and are derivatives of Unix:,[25], +, +,""I think the Linux phenomenon is quite delightful, because it draws so strongly on the basis that Unix provided. Linux seems to be the among the healthiest of the direct Unix derivatives, though there are also the various BSD systems as well as the more official offerings from the workstation and mainframe manufacturers."", +, +,In the same interview, he states that he views both Unix and Linux as ""the continuation of ideas that were started by Ken and me and many others, many years ago."",[25], +,OpenSolaris, was the open-source counterpart to ,Solaris, developed by ,Sun Microsystems,, which included a ,CDDL,-licensed kernel and a primarily ,GNU, userland. However, ,Oracle, discontinued the project upon their acquisition of Sun, which prompted a group of former Sun employees and members of the OpenSolaris community to fork OpenSolaris into the ,illumos, kernel. As of 2014, illumos remains the only active open-source System V derivative., +,ARPANET,[,edit,], +,In May 1975, ,RFC 681, described the development of ,Network Unix, by the Center for Advanced Computation at the ,University of Illinois,. The system was said to ""present several interesting capabilities as an ,ARPANET, mini-host"". At the time Unix required a license from ,Bell Laboratories, that at $20,000(US) was very expensive for non-,university, users, while an educational license cost just $150. It was noted that Bell was ""open to suggestions"" for an ARPANET-wide license., +,Specific features found beneficial were the local processing facilities, ,compilers,, ,editors,, a ,document preparation system,, efficient file system and access control, ,mountable, and unmountable volumes, unified treatment of peripherals as ,special files,, integration of the ,network control program, (NCP) within the Unix file system, treatment of ,network connections, as special files that can be accessed through standard Unix ,I/O calls,, closing of all files on program exit, and the decision to be ""desirable to minimize the amount of code added to the basic Unix kernel""., +,Branding,[,edit,], +,See also: ,List of Unix systems, +, +, +, +, +Promotional ,license plate, by ,Digital Equipment Corporation, +, +, +, +, +, +, +,HP9000, ,workstation, running ,HP-UX,, a certified Unix operating system, +, +, +,In October 1993, ,Novell,, the company that owned the rights to the Unix System V source at the time, transferred the ,trademarks, of Unix to the X/Open Company (now ,The Open Group,),,[26], and in 1995 sold the related business operations to ,Santa Cruz Operation, (SCO).,[27], Whether Novell also sold the ,copyrights, to the actual software was the subject of a 2006 federal lawsuit, ,SCO v. Novell,, which Novell won. The case was appealed, but on August 30, 2011, the United States Court of Appeals for the Tenth Circuit affirmed the trial decisions, closing the case.,[28], Unix vendor ,SCO Group Inc., accused Novell of ,slander of title,., +,The present owner of the trademark ,UNIX, is The Open Group, an industry standards consortium. Only systems fully compliant with and certified to the ,Single UNIX Specification, qualify as ""UNIX"" (others are called "",Unix-like,"")., +,By decree of The Open Group, the term ""UNIX"" refers more to a class of operating systems than to a specific implementation of an operating system; those operating systems which meet The Open Group's Single UNIX Specification should be able to bear the ,UNIX 98, or ,UNIX 03, trademarks today, after the operating system's vendor pays a substantial certification fee and annual trademark royalties to The Open Group.,[29], Systems licensed to use the UNIX trademark include ,AIX,,,[30], ,HP-UX,,,[31], ,Inspur K-UX,,,[32], ,IRIX,,,[33], ,Solaris,,,[34], ,Tru64 UNIX, (formerly ""Digital UNIX"", or ,OSF/1,),,[35], ,macOS,,,[36], and a part of ,z/OS,.,[37], Notably, Inspur K-UX is a Linux distribution certified as UNIX 03 compliant.,[38],[39], +,Sometimes a representation like ,Un*x,, ,*NIX,, or ,*N?X, is used to indicate all operating systems similar to Unix. This comes from the use of the asterisk (,*,) and the question mark characters as wildcard indicators in many utilities. This notation is also used to describe other Unix-like systems that have not met the requirements for UNIX branding from the Open Group., +,The Open Group requests that ,UNIX, is always used as an adjective followed by a generic term such as ,system, to help avoid the creation of a ,genericized trademark,., +,Unix, was the original formatting, but the usage of ,UNIX, remains widespread because it was once typeset in ,small caps, (,Unix,). According to ,Dennis Ritchie,, when presenting the original Unix paper to the third Operating Systems Symposium of the American ,Association for Computing Machinery, (ACM), ""we had a new typesetter and ,troff, had just been invented and we were intoxicated by being able to produce small caps."",[40], Many of the operating system's predecessors and contemporaries used all-uppercase lettering, so many people wrote the name in upper case due to force of habit. It is not an acronym.,[41], +,Trademark names can be registered by different entities in different countries and trademark laws in some countries allow the same trademark name to be controlled by two different entities if each entity uses the trademark in easily distinguishable categories. The result is that Unix has been used as a brand name for various products including book shelves, ink pens, bottled glue, diapers, hair driers and food containers.,[42], +,Several plural forms of Unix are used casually to refer to multiple brands of Unix and Unix-like systems. Most common is the conventional ,Unixes,, but ,Unices,, treating Unix as a ,Latin, noun of the ,third declension,, is also popular. The pseudo-,Anglo-Saxon, plural form ,Unixen, is not common, although occasionally seen. ,Sun Microsystems,, developer of the Solaris variant, has asserted that the term ,Unix, is itself plural, referencing its many implementations.,[43], +,See also,[,edit,], +, +, +, +, +, +,Book: Unix, +, +, +, +, +, +,Comparison of operating systems, and ,open-source and closed-source software, +,List of operating systems,, ,Unix systems,, and ,Unix utilities, +,Market share of operating systems, +,Operating systems timeline, +,Plan 9 from Bell Labs, +,Unix time, +,Year 2038 problem, +, +,References,[,edit,], +, +, +,^ ,a, ,b, ,McIlroy, M. D., (1987). ,A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986, ,(PDF), (Technical report). CSTR. Bell Labs. 139. ,Archived, ,(PDF), from the original on 11 November 2017., , +,^, ,Ritchie, D. M.; Thompson, K. (1974). ,""The UNIX Time-Sharing System"", ,(PDF),. ,CACM,. ,17, (7): 365–375. ,Archived, ,(PDF), from the original on 11 June 2015., , +,^ ,a, ,b, ,Ritchie, D.M.; Thompson, K. (July 1978). ,""The UNIX Time-Sharing System"",. ,Bell System Tech. J,. USA: American Tel. & Tel. ,57, (6): 1905–1929. ,doi,:,10.1002/j.1538-7305.1978.tb02136.x,. Retrieved ,December 9,, 2012,., , +,^, ,""Novell Completes Sale of UnixWare Business to The Santa Cruz Operation | Micro Focus"",. ,www.novell.com,. ,Archived, from the original on 20 December 2015,. Retrieved ,20 December, 2015,., , +,^, ,Apple Inc. - UNIX 03, ,Archived, 4 November 2013 at the ,Wayback Machine,. Register of Certified Products, The Open Group, +,^, ,Raymond, Eric, (19 September 2003). ,The Art of Unix Programming,. Addison-Wesley. ,ISBN, ,0-13-142901-9,. ,Archived, from the original on 12 February 2009,. Retrieved ,9 February, 2009,., , +,^, ,Ritchie, Dennis M., (January 1993). ,""The Development of the C Language"", ,(PDF),. ,Archived, ,(PDF), from the original on 11 June 2015,. Retrieved ,20 December, 2015,., , +,^, ,""The Elements of Operating-System Style"",. ,Archived, from the original on 12 November 2008., , +,^, ,""Tandy/Radio Shack Book: Whole Earth Software Catalog"",. 1984. ,UNIX was created by software developers for software developers, to give themselves an environment they could completely manipulate., , +,^, ,Powers, Shelley; Peek, Jerry; O'Reilly, Tim; Loukides, Mike (2002). ,Unix Power Tools,. ,ISBN, ,0-596-00330-7,., , +,^, ,Kernighan, Brian W. Pike, Rob. ,The UNIX Programming Environment., 1984. viii, +,^, ,Fiedler, Ryan (October 1983). ,""The Unix Tutorial / Part 3: Unix in the Microcomputer Marketplace"",. ,BYTE,. p. 132,. Retrieved ,30 January, 2015,., , +,^, ,""Tandy/Radio Shack Book: Whole Earth Software Catalog"",. 1984. ,The best thing about UNIX is its portability. UNIX ports across a full range of hardware—from the single-user $5000 IBM PC to the $5 million Cray. For the first time, the point of stability becomes the software environment, not the hardware architecture; UNIX transcends changes in hardware technology, so programs written for the UNIX environment can move into the next generation of hardware., , +,^, ,Stuart, Brian L. (2009). ,Principles of operating systems: design & applications,. Boston, Massachusetts: Thompson Learning. p. 23. ,ISBN, ,1-4188-3769-5,., , +,^ ,a, ,b, ,c, ,Ritchie, Dennis M. ,""The Evolution of the Unix Time-sharing System"", ,(PDF),. ,Archived, ,(PDF), from the original on 3 April 2017,. Retrieved ,9 January, 2017,., , +,^, ,Dolya, Aleksey (29 July 2003). ,""Interview with Brian Kernighan"",. ,Linux Journal,. ,Archived, from the original on 18 October 2017., , +,^, ,Rik Farrow. ,""An Interview with Peter G. Neumann"", ,(PDF),. ,;login:,. ,42, (4): 38. ,That then led to Unics (the castrated one-user Multics, so- called due to Brian Kernighan) later becoming UNIX (probably as a result of AT&T lawyers)., , +,^, ,Stallings, William. ,Operating Systems: Internals and Design Principles, 5th ed, page 91. Pearson Education, Inc. 2005., +,^, ,""The History of Unix"",. ,BYTE,. August 1983. p. 188,. Retrieved ,31 January, 2015,., , +,^, ,Thompson, Ken (16 September 2014). ,""personal communication, Ken Thompson to Donald W. Gillies"",. ,UBC ECE Website,. ,Archived, from the original on 22 March 2016., , +,^, ,Chesson, Greg, (12 November 2014). ,""Personal Communication, Greg Chesson to Donald W. Gillies"",. ,UBC ECE Website,. ,Archived, from the original on 22 March 2016., , +,^, ,""Loading"",. Developer.apple.com. ,Archived, from the original on 5 June 2012,. Retrieved ,22 August, 2012,., , +,^, ,""Unix's Revenge"",. asymco. 29 September 2010. ,Archived, from the original on 9 November 2010,. Retrieved ,9 November, 2010,., , +,^, ,Ritchie, Dennis (1979). ,""The Evolution of the Unix Time-sharing System"",. Bell Labs. ,Archived, from the original on 11 June 2015,. Retrieved ,30 April, 2016,. ,Perhaps the most important watershed occurred during 1973, when the operating system kernel was rewritten in C., , +,^ ,a, ,b, ,Benet, Manuel (1999). ,""Interview With Dennis M. Ritchie"",. LinuxFocus.org. ,Archived, from the original on 17 January 2018., , +,^, ,Chuck Karish   View profile    More options. ,""The name UNIX is now the property of X/Open – comp.std.unix | Google Groups"",. Groups.google.com,. Retrieved ,2010-11-09,., ,CS1 maint: Multiple names: authors list (,link,), +,^, ,""HP, Novell and SCO To Deliver High-Volume UNIX OS With Advanced Network And Enterprise Services"",. Novell.com. 20 September 1995. ,Archived, from the original on 23 January 2007,. Retrieved ,9 November, 2010,., , +,^, ,Jones, Pamela. ,""SCO Files Docketing Statement and We Find Out What Its Appeal Will Be About"",. ,Groklaw,. Groklaw.net,. Retrieved ,12 April, 2011,., , +,^, ,The Open Group. ,""The Open Brand Fee Schedule"",. ,Archived, from the original on 31 December 2011,. Retrieved ,26 December, 2011,. ,The right to use the UNIX Trademark requires the Licensee to pay to The Open Group an additional annual fee, calculated in accordance with the fee table set out below., , +,^, ,The Open Group. ,""AIX 6 Operating System V6.1.2 with SP1 or later certification"",. ,Archived, from the original on 8 April 2016., , +,^, ,The Open Group. ,""HP-UX 11i V3 Release B.11.31 or later certification"",. ,Archived, from the original on 8 April 2016., , +,^, ,The Open Group. ,""Inspur K-UX 2.0 certification"",. ,Archived, from the original on 9 July 2014., , +,^, ,The Open Group. ,""IRIX 6.5.28 with patches (4605 and 7029) certification"",. ,Archived, from the original on 4 March 2016., , +,^, ,The Open Group. ,""Oracle Solaris 11 FCS and later certification"",. ,Archived, from the original on 24 September 2015., , +,^, ,Bonnie Talerico. ,""Hewlett-Packard Company Conformance Statement"",. The Open Group. ,Archived, from the original on 10 December 2015,. Retrieved ,8 December, 2015,., , +,^, ,""macOS version 10.12 Sierra on Intel-based Mac computers"",. The Open Group. ,Archived, from the original on 2 October 2016., , +,^, ,Vivian W. Morabito. ,""IBM Corporation Conformance Statement"",. The Open Group,. Retrieved ,2018-01-21,., , +,^, ,Xie Ruohong. ,""Inspur Conformance Statement"",. The Open Group. ,Archived, from the original on 10 December 2015,. Retrieved ,8 December, 2015,., , +,^, ,Xie Ruohong. ,""Inspur Conformance Statement: Commands and Utilities V4"",. The Open Group. ,Archived, from the original on 16 April 2016,. Retrieved ,8 December, 2015,., , +,^, ,""Unix"",. Catb.org. ,Archived, from the original on 4 June 2011,. Retrieved ,9 November, 2010,., , +,^, ,Troy, Douglas (1990). ,UNIX Systems,. Computing Fundamentals. Benjamin/Cumming Publishing Company. p. 4. ,ISBN, ,0-201-19827-4,., , +,^, ,""Autres Unix, autres moeurs (OtherUnix)"",. ,Bell Laboratories,. 1 April 2000. ,Archived, from the original on 3 April 2017,. Retrieved ,3 January, 2018,., , +,^, ,""History of Solaris"", ,(PDF),. ,Archived, ,(PDF), from the original on 18 March 2017. ,UNIX is plural. It is not one operating system but, many implementations of an idea that originated in 1965., , +, +, +,Further reading,[,edit,], +, +,General, +, +, +,Ritchie, D.M.,; ,Thompson, K., (July–August 1978). ,""The UNIX Time-Sharing System"",. ,Bell System Technical Journal,. ,57, (6). Archived from ,the original, on November 3, 2010., , +,""UNIX History"",. ,www.levenez.com,. Retrieved ,17 March, 2005,., , +,""AIX, FreeBSD, HP-UX, Linux, Solaris, Tru64"",. ,UNIXguide.net,. Retrieved ,17 March, 2005,., , +,""Linux Weekly News, February 21, 2002"",. ,lwn.net,. Retrieved ,7 April, 2006,., , +,Lions, John,: ,Lions' ,""Commentary on the Sixth Edition UNIX Operating System"",., , with Source Code,, Peer-to-Peer Communications, 1996; ,ISBN, ,1-57398-013-7, +, +, +,Books, +, +, +,Salus, Peter H.,: ,A Quarter Century of UNIX,, Addison Wesley, 1 June 1994; ,ISBN, ,0-201-54777-5, +, +, +,Television, +, +, +,Computer Chronicles, (1985). "",UNIX,""., +,Computer Chronicles, (1989). "",Unix,""., +, +,External links,[,edit,], +, +, +, +,Look up ,Unix, in Wiktionary, the free dictionary., +, +, +, +, +, +,Wikimedia Commons has media related to ,Unix,., +, +, +, +, +, +,The Wikibook ,Guide to Unix, has a page on the topic of: ,Commands, +, +, +, +,The UNIX System,, at ,The Open Group,., +,The Evolution of the Unix Time-sharing System, at the ,Wayback Machine, (archived 8 April 2015), +,The Creation of the UNIX Operating System, at the ,Wayback Machine, (archived 2 April 2014), +,The Unix Tree: files from historic releases, +,Unix, at Curlie (based on ,DMOZ,), +,The Unix 1st Edition Manuals,., +,1982 film about Unix featuring Dennis Ritchie, Ken Thompson, Brian Kernighan, Alfred Aho, and more, +,A History of UNIX before Berkeley: UNIX Evolution: 1975-1984, +,BYTE Magazine, September 1986: UNIX and the MC68000, – a software perspective on the MC68000 CPU architecture and UNIX compatibility, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Unix, ,command-line interface, programs and ,shell builtins, +, +, +, +,File system, +, +, +, +,cat, +,chmod, +,chown, +,chgrp, +,cksum, +,cmp, +,cp, +,dd, +,du, +,df, +,file, +,fuser, +,ln, +,ls, +,mkdir, +,mv, +,pax, +,pwd, +,rm, +,rmdir, +,split, +,tee, +,touch, +,type, +,umask, +, +, +, +, +, +,Processes, +, +, +, +,at, +,bg, +,crontab, +,fg, +,kill, +,nice, +,ps, +,time, +, +, +, +, +, +,User environment, +, +, +, +,env, +,exit, +,logname, +,mesg, +,talk, +,tput, +,uname, +,who, +,write, +, +, +, +, +, +,Text processing, +, +, +, +,awk, +,basename, +,comm, +,csplit, +,cut, +,diff, +,dirname, +,ed, +,ex, +,fold, +,head, +,iconv, +,join, +,m4, +,more, +,nl, +,paste, +,printf, +,sed, +,sort, +,strings, +,tail, +,tr, +,uniq, +,vi, +,wc, +,xargs, +, +, +, +, +, +,Shell builtins, +, +, +, +,alias, +,cd, +,echo, +,test, +,unset, +,wait, +, +, +, +, +, +,Searching, +, +, +, +,find, +,grep, +, +, +, +, +, +,Documentation, +, +, +, +,man, +, +, +, +, +, +,Software development, +, +, +, +,ar, +,ctags, +,lex, +,make, +,nm, +,strip, +,yacc, +, +, +, +, +, +,Miscellaneous, +, +, +, +,bc, +,cal, +,expr, +,lp, +,od, +,sleep, +,true and false, +, +, +, +, +, +, +, +, +, ,Categories, +, +,Standard Unix programs, +,Unix SUS2008 utilities, +, +, +, ,List, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Unix, and ,Unix-like, ,operating systems, +, +, +, +, +, +, +,BSD, +, +,386BSD, +, +,FreeBSD, +,NetBSD, +,OpenBSD, +,DragonFly BSD, +, +, +,NeXTSTEP, +,Darwin, +, +,macOS, +,iOS, +, +, +,SunOS, +,Ultrix, +, +, +,Coherent, +,GNU, +,Linux, +, +,Android, +,Chrome OS, +, +, +,LynxOS, +,MINIX, +,QNX, +, +,BlackBerry 10, +, +, +,Research Unix, +,System V, +, +,A/UX, +,AIX, +,HP-UX, +,illumos, +,IRIX, +,OpenServer, +,Solaris, +,Tru64 UNIX, +,UnixWare, +, +, +,Xenix, +,more..., +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, ,Book, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Operating systems, +, +, +, +,General, +, +, +, +,Advocacy, +,Comparison, +,Forensic engineering, +,History, +,Hobbyist development, +,List, +,Timeline, +,Usage share, +, +, +, +, +, +,Kernel, +, +, +, +, +,Architectures, +, +, +, +,Exokernel, +,Hybrid, +,Microkernel, +,Monolithic, +,Rump kernel, +,Unikernel, +, +, +, +, +, +,Components, +, +, +, +,Device driver, +,Loadable kernel module, +,Microkernel, +,User space, +, +, +, +, +, +, +, +, +,Process management, +, +, +, +, +,Concepts, +, +, +, +,Context switch, +,Interrupt, +,IPC, +,Process, +,Process control block, +,Real-time, +,Thread, +,Time-sharing, +, +, +, +, +, +,Scheduling, +algorithms, +, +, +, +,Computer multitasking, +,Fixed-priority preemptive, +,Multilevel feedback queue, +,Preemptive, +,Round-robin, +,Shortest job next, +, +, +, +, +, +, +, +, +,Memory management, and, +,resource, protection, +, +, +, +,Bus error, +,General protection fault, +,Memory protection, +,Paging, +,Protection ring, +,Segmentation fault, +,Virtual memory, +, +, +, +, +, +,Storage, access and, +,file systems, +, +, +, +,Boot loader, +,Defragmentation, +,Device file, +,File attribute, +,Inode, +,Journal, +,Partition, +,Virtual file system, +,Virtual tape library, +, +, +, +, +, +,List, +, +, +, +,AmigaOS, +,Android, +,BeOS, +,BSD, +,Chrome OS, +,CP/M, +,DOS, +,GNU, +,Haiku, +,illumos, +,IncludeOS, +,iOS, +,Linux, +,Macintosh, +, +,Classic Mac OS, +,macOS, +, +, +,MINIX, +,MorphOS, +,MUSIC/SP, +,Nemesis, +,NOS, +,OpenVMS, +,ORVYL, +,OS/2, +,OSv, +,Pick, +,QNX, +,ReactOS, +,RISC OS, +,RSTS/E, +,RSX-11, +,RT-11, +,Solaris, +,TOPS-10,/,TOPS-20, +,TPF, +,Unix, +,Visi On, +,VM/CMS, +,VS/9, +,Windows, +,Xinu, +,z/OS, +, +, +, +, +, +,Miscellaneous concepts, +, +, +, +,API, +,Computer network, +,HAL, +,Live CD, +,Live USB, +,OS shell, +, +,CLI, +,GUI, +,TUI, +,VUI, +, +, +,PXE, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,GND,: ,4061835-3, +,BNF,: ,cb11968227m, ,(data), +, +, +, +, +, +, + + +, +, +, +, +",Unix +" 6 January 2018, at 06:23."," +, +, +, +Dries Buytaert at ,FOSDEM, 2008., +, +, +,Dries Buytaert, (born 19 November 1978 in ,Wilrijk,, ,Antwerp,, ,Belgium,),[1], is an ,open-source software, ,programmer, notable as founder and lead developer of the ,Drupal, ,CMS,.,[2],[3],[4], +, +, +, +,Contents, +, +, +,1, ,Career, +,2, ,References, +,3, ,External links, +, +,3.1, ,Interviews, +,3.2, ,Talks, +, +, +, +, +, +,Career,[,edit,], +,Buytaert defended his PhD dissertation in ,Computer Science, on 27 January 2008,[5], at ,Ghent University, in Belgium.,[6], +,From 1999-2000 he was the maintainer of the ,Linux,-,WLAN, FAQ,.,[7], +,It was during this time that he founded the concept of Drupal. At first, Dries maintained a small news site and a web board, but it developed to attract more audience.,[8], +,On 1 December 2007, Dries,[9], announced, together with co-founder ,Jay Batson, the launch of a start-up called ,Acquia,.,[10], Acquia is a commercial open-source software company providing products, services, and technical support for ,Drupal,. Acquia wants to be to Drupal what ,Red Hat, has been to ,Linux,.,[11], In 2009, Acquia helped re-launch Whitehouse.gov on Drupal.,[12], +,On 31 March 2008, Dries launched ,Mollom,, a service dedicated to stopping website spam: ""Mollom's purpose is to dramatically reduce the effort of keeping your site clean and the quality of your content high. Currently, Mollom is a spam-killing one-two punch combination of a state-of-the-art spam filter and CAPTCHA server."" Over 59,000 websites are protected by the Mollom service,,[13], including all of ,Netlog,'s messages.,[14], +,In 2008, Buytaert was elected ""Young Entrepreneurs of Tech"" by ,BusinessWeek,.,[15], He was also named to the ,MIT, ,Technology Review, ,TR35, as one of the top 35 innovators in the world under the age of 35.,[16],[17], +,References,[,edit,], +, +, +,^, ,Curriculum Vitae, ,Archived, 21 August 2010 at the ,Wayback Machine,., +,^, ,""History"",. Drupal.org,. Retrieved ,23 April, 2012,., , +,^, ,""The Drupal core"",. Drupal.org. Archived from ,the original, on 3 May 2012,. Retrieved ,23 April, 2012,., , +,^, ,""Revamp of MAINTAINERS.txt"",. Groups.drupal.org,. Retrieved ,23 April, 2012,., , +,^, ,""Dr. Dre, Dries Buytaert"",. Buytaert.net,. Retrieved ,23 April, 2012,., , +,^, ,""conferences.oreilly.com"",. Conferences.oreillynet.com,. Retrieved ,23 April, 2012,., , +,^, ,""Linux-Wlan Faq (Old)"",. Linux-wlan.org. 6 March 2000,. Retrieved ,23 April, 2012,., , +,^, ,""The Drop By Dries Buytaert"",. Eyerys. 30 December 2016., , +,^, ,""Acquia, my Drupal startup, Dries Buytaert"",. Buytaert.net,. Retrieved ,23 April, 2012,., , +,^, ,""Acquia"",. Acquia,. Retrieved ,23 April, 2012,., , +,^, ,""With $30M in funding, Acquia edges closer to an IPO"",. Venturebeat.com. 29 November 2012,. Retrieved ,20 January, 2013,., , +,^, ,""Whitehouse goes Drupal"",. Techpresident.com. 24 October 2009,. Retrieved ,23 April, 2012,., , +,^, ,""Mollom Scorecard"",. Retrieved ,27 January, 2013,., , +,^, ,""Mollom filtering millions of messages for Netlog"",. Buytaert.net. 20 May 2009,. Retrieved ,23 April, 2012,., , +,^, ,Kharif, Olga (17 April 2008). ,""Young Entrepreneurs of Tech 2008"",. Businessweek.com,. Retrieved ,23 April, 2012,., , +,^, ,""2008 Young Innovators Under 35"",. ,Technology Review,. 2008,. Retrieved ,15 August, 2011,., , +,^, ,Christopher Chang, 33 University of California, Berkeley. ,""TR35 2008 Young Innovator"",. Technologyreview.com,. Retrieved ,23 April, 2012,., ,CS1 maint: Multiple names: authors list (,link,), +, +, +,External links,[,edit,], +, +, +, +,Wikimedia Commons has media related to ,Dries Buytaert,., +, +, +, +, +, +,Wikinews, has :, +, +, +, +, +,an ,interview with Dries Buytaert,., +, +, +, +, +, +,Personal website, +,Acquia, +,Mollom, +, +,Interviews,[,edit,], +, +,An In-Depth Interview With Dries, Drupal Watchdog interview (February 2011), +,Drupal founder, Dries Buytaert Interview, CMS Critic interview (January 2009), +,Video interview, with Dries Buytaert by Noel Hidalgo in Antwerp, Belgium (26 July 2007), +, +,Talks,[,edit,], +, +,DrupalCon Los Angeles 2015: Driesnote Keynote, - Dries' talk at DrupalCon 2015 in Los Angeles, United States (May 2015), +,The State of Drupal, - Dries' talk at ,FOSDEM, 2007 in Brussels, Belgium (February 2007), +,Video of talk, delivered by Dries Buytaert titled the ,State of Drupal, from OSCMS conference on Yahoo campus in Sunnyvale, California (late March 2007), +,The State of Drupal, - Dries' State of Drupal talk at Drupalcon 2007 in Barcelona, Spain (September 2007), +, + + +, +, +, +, +",Dries Buytaert +" 18 January 2018, at 07:07."," +, +,Theo de Raadt, +, +, +, +,Theo de Raadt in 2013, +, +, +, +,Born, +,(,1968-05-19,), May 19, 1968 ,(age 49), +,Pretoria,, ,South Africa, +, +, +,Residence, +,Calgary,, ,Alberta,, ,Canada, +, +, +,Nationality, +,Canadian, +, +, +,Alma mater, +,University of Calgary, +, +, +,Known for, +,NetBSD,, ,OpenBSD,, ,OpenSSH,, advocacy, +, +, +,Awards, +,Award for the Advancement of Free Software, +, +, +,Scientific career, +, +, +,Fields, +,computer science, free software development, +, +, +,Institutions, +,FSA Corporation, +, +, +, +, +, +,Theo de Raadt, (,/,ˈ,θ,iː,.,oʊ, ,d,ɛ,ˈ,r,ɔː,t,/,; ,Dutch: ,[ˈteː.joː dəˈraːt],; born May 19, 1968) is a ,software engineer, who lives in ,Calgary,, ,Alberta,, ,Canada,. He is the founder and leader of the ,OpenBSD, and ,OpenSSH, projects, and was also a founding member of the ,NetBSD, project., +, +, +, +,Contents, +, +, +,1, ,Childhood, +,2, ,NetBSD, +,3, ,OpenBSD, +,4, ,Outspokenness, +, +,4.1, ,DARPA funding cancellation, +,4.2, ,Free driver advocacy, +,4.3, ,Clash with Linux developers, +, +, +,5, ,References, +,6, ,External links, +, +, +, +,Childhood,[,edit,], +,Theo de Raadt is the eldest of four children to a ,Dutch, father and a ,South African, mother, with two sisters and a brother. Concern over the mandatory two-year armed forces ,conscription, in South Africa led the family to emigrate to Calgary, Alberta, Canada in November 1977. In 1983, the ,largest recession in Canada, since the ,Great Depression, sent the family to the ,Yukon,. Prior to the move, De Raadt got his first computer, a ,Commodore VIC-20,, which was soon followed by an ,Amiga,. It is with these computers that he first began to develop software.,[1], +,In 1992, he obtained a ,BSc, in ,Computer Science, from the ,University of Calgary,., +,NetBSD,[,edit,], +,The ,NetBSD, project was founded in 1993 by Chris Demetriou, Adam Glass, Charles Hannum, and De Raadt, who collectively felt frustration at the speed and quality of ,Jolix,, the standard Berkeley software distribution then, and believed that a more open development model would be of greater benefit to development of an operating system. Jolix, also known as ,386BSD,, was derived from the original University of California Berkeley's 4.3BSD release, while the new NetBSD project would merge relevant code from the Networking/2 and 386BSD releases. The new project would centre its focus on clean, portable, correct code with the goal being to produce a unified, multi-platform, production-quality, BSD-based operating system., +,Because of the importance of networks such as the Internet in the distributed, collaborative nature of its development, De Raadt suggested the name ""NetBSD"", which the three other founders agreed upon.,[,citation needed,], +,The first NetBSD source code repository was established on March 21, 1993 and the initial release, NetBSD 0.8, was made in April 1993. This was derived from 386BSD 0.1 plus the version 0.2.2 unofficial patchkit, with several programs from the Net/2 release missing from 386BSD re-integrated, and various other improvements. In August 1993, NetBSD 0.9 was released, which contained many enhancements and bug fixes. This was still a ,PC,-platform-only release, although by this time work was underway to add support for other architectures., +,NetBSD 1.0 was released in October, 1994. This was the first multi-platform release, supporting the ,IBM PC compatible,, ,HP 9000, Series 300, ,Amiga,, ,68k, ,Macintosh,, ,Sun-4c, series and ,PC532,. Also in this release, the legally encumbered Net/2-derived source code was replaced with equivalent code from 4.4BSD-lite, in accordance with the ,USL v BSDi, lawsuit settlement. De Raadt played a vital role in the creation of the ,SPARC, port, as together with Chuck Cranor,,[2], he implemented much of the initial code., +,OpenBSD,[,edit,], +,In December 1994, De Raadt was asked to resign his position as a senior developer and member of the NetBSD core team, and his access to the source code repository was revoked. The reason for this is not wholly clear, although there are claims that it was due to personality clashes within the NetBSD project and on its ,mailing lists,.,[3], De Raadt has been criticized for having a somewhat abrasive personality: in his book, ,Free for All,, Peter Wayner claims that De Raadt ""began to rub some people the wrong way"" before the split from NetBSD;,[4], while ,Linus Torvalds, has described him as ""difficult"".,[5], Many have different feelings: the same interviewer describes De Raadt's ""transformation"" on founding OpenBSD and his ""desire to take care of his team,"" some find his straightforwardness refreshing, and few deny he is a talented ,hacker,[6], and security ""guru"".,[7], +,In October 1995, De Raadt founded OpenBSD, a new project ,forked, from NetBSD 1.0. The initial ,release,, OpenBSD 1.2, was made in July 1996, followed in October of the same year by OpenBSD 2.0.,[8], Since then, the project has followed a schedule of a release every six months, each of which is maintained and supported for one year., +,Outspokenness,[,edit,], +, +, +, +, +,Jon ""maddog"" Hall, presents De Raadt with ,daemon, horns at ,FISL8, +, +, +,De Raadt has been a vocal advocate of free software since the inception of OpenBSD, but he is also a strong proponent of free speech, having on occasion had rather public disputes with various groups, from Linux advocates to governments. This outspoken attitude, while sometimes the cause of conflict, has also led him to acclaim; De Raadt has given presentations at open source, free software and security conferences around the world—including ,FOSDEM, in ,Brussels,, ,Belgium,, ,Usenix, in ,San Antonio, Texas,, ,U.S.,, ,AUUG, Conference in ,Melbourne,, ,Australia, and ,FISL, in ,Porto Alegre,, RS, ,Brazil,., +,DARPA funding cancellation,[,edit,], +,After De Raadt stated his disapproval of the U.S.-led ,occupation of Iraq, in an April, 2003 ,interview,[9], with ,Toronto,'s ,Globe and Mail,, a multi-million-dollar ,US Department of Defense, grant to the ,University of Pennsylvania,'s ,POSSE project, was cancelled, effectively ending the project. Funding from the grant had been used in the development of OpenSSH and OpenBSD, as well as many other projects and was to be used to pay for the ,hackathon, planned for May 8, 2003. Despite money from the grant already having been used to secure accommodations for sixty developers for a week, the money was reclaimed by the government at a loss and the hotel was told not to allow the developers to pay the reclaimed money to resecure the rooms.,[10], This resulted in criticism among some that the US military held an anti-,free speech, attitude. The grant termination was, however, not as bad a blow as some portrayed it. The project's supporters rallied to help and the hackathon went on almost as planned. The funding was cut mere months before the end of the grant, further fueling the speculations regarding the situation surrounding the grant's termination., +,Free driver advocacy,[,edit,], +,De Raadt is also well known for his advocacy of ,free software, ,drivers,. He has long been critical of developers of ,Linux, and other free platforms for their tolerance of non-free drivers and acceptance of ,non-disclosure agreements,., +,In particular, De Raadt has worked to convince ,wireless, hardware vendors to allow the ,firmware, images of their products to be freely redistributed. These efforts have been largely successful, particularly in negotiations with ,Taiwanese, companies, leading to many new wireless drivers. De Raadt has commented that ""most Taiwanese vendors give us documentation almost immediately"", allowing open source drivers to reliably support devices, as opposed to the lack of willingness from US companies like ,Intel, and ,Broadcom, to release firmware images free from ,licensing, restrictions.,[11], +,For this De Raadt was awarded the ,Free Software Foundation,'s 2004 ,Award for the Advancement of Free Software,.,[12], +,Clash with Linux developers,[,edit,], +,In April 2007, De Raadt was involved in a controversy involving the use of ,GPL, code from the Linux ,bcm43xx, driver in the BSD ,bcw, driver.,[13],[14], Linux developers accused the BSD community of infringing GPL code, but De Raadt denied infringement, arguing that the BSD driver was not ""released"". He also maintained that the conflict was not about GPL, but the way Linux developer ,Michael Buesch, handled the situation. To Buesch's email, he responded:,[15], +, +,It will be resolved in our tree, but it is up to him which way he does it. But when you approach issues like this with comments like ""We'd like you to start contacting us to resolve the issue now"" and your first mail is cc'd to a couple hundred people.... in the future, please think more carefully, ok?, +,Because right now, in that mail, you've pretty much done Broadcom's job for them. You've told the entire BSD community who may want to use a driver for this chip later, that because of a few GPL issues you are willing to use very strong words—published very widely—to disrupt the efforts of one guy who is trying to do things for them. And, you are going to do this using the GPL, even. You did not privately mail that developer. No, you basically went public with it., +,That is how about half the user and developer community will see it. They will see your widely posted mail as an overly strong position., +, +,Another clash occurred in August 2007, when a group of Linux developers attempted to modify the license of dual-licensed ath5k driver. De Raadt summarized the issue as follows:,[16], +, +,GPL fans said the great problem we would face is that companies would take our BSD code, modify it, and not give back. Nope—the great problem we face is that people would wrap the GPL around our code, and lock us out in the same way that these supposed companies would lock us out. Just like the Linux community, we have many companies giving us code back, all the time. But once the code is GPL'd, we cannot get it back., +, +,References,[,edit,], +, +, +,^, ,The Age article: ,""Staying on the cutting edge"",. October 8, 2004. Accessed April 5, 2006., +,^, ,""Chuck Cranor's Home Page"",., , +,^, ,Glass, Adam. Message to netbsd-users: ,Theo De Raadt(sic),,, December 23, 1994. Visited January 8, 2006., +,^, ,Wayner, Peter. ,Free For All: How Linux and the Free Software Movement Undercut the High Tech Titans,, ,18.3 Flames, Fights, and the Birth of OpenBSD,, 2000. Visited January 6, 2006., +,^, ,Forbes. ,Is Linux For Losers?, June 16, 2005. Visited January 8, 2006., +,^, ,In ,this message, the NetBSD core team acknowledge De Raadt's ""positive contributions"" to the project despite their problems with him., +,^, ,Tux Journal. ,A good morning with: Theo de Raadt,,, June 2, 2005. Visited April 21, 2006 (original is ,404,; please see a ,cached copy on archive.org,), +,^, ,Raadt, Theo de. Mail to openbsd-announce: ,The OpenBSD 2.0 release,,, October 18, 1996. Visited December 10, 2005., +,^, ,Globe and Mail article: ,""U.S. military helps fund Calgary hacker"",. April 6, 2003. Accessed October 30, 2006., +,^, ,LWN.net article: ,""DARPA Cancels OpenBSD Funding"",. April 24, 2003. Accessed April 5, 2006., +,^, ,Andrews, Jeremy (May 2, 2006). ,""Interview: Theo de Raadt"",. Archived from ,the original, on April 24, 2013., , +,^, ,Lee, Matt (February 26, 2005). ,""Theo de Raadt presented with the 2004 Free Software Award"",. Free Software Foundation., , +,^, ,LXer article: ,Broadcom Driver Dispute Uglier Than Necessary,. April 7, 2007. Accessed April 8, 2007., +,^, ,Thread on gmane.linux.kernel.wireless.general: ,OpenBSD bcw: Possible GPL license violation issues, Various dates beginning April 4, 2007. Accessed April 8, 2007., +,^, ,Theo de Raadt (4 April 2007). ,""OpenBSD bcw: Possible GPL license violation issues"",. Retrieved ,28 May, 2017, – via ,marc.info,., , +,^, ,de Raadt, Theo (August 31, 2007). ,""That whole ""Linux stealing our code"" thing"",. LKML.org., , +, +, +,External links,[,edit,], +, +, +,Free software portal, +, +, +, +, +, +,Wikiquote has quotations related to: ,Theo de Raadt, +, +, +, +, +, +,Wikimedia Commons has media related to ,Theo de Raadt,., +, +, +, +,Theo de Raadt's Web site, +,Interview (2006): Theo de Raadt,, at ,KernelTrap.org, (copy at Internet Archive)., +,Theo de Raadt Responds,, interview at ,Slashdot,., +,Interview (2001): Theo de Raadt,, at ,KernelTrap.org, (copy at Internet Archive)., +,Is Linux For Losers?,, interview at ,Forbes.com,., +,Theo de Raadt presented with the 2004 Free Software Award, +,NNDB: Theo de Raadt, +,Staying on the cutting edge, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,The ,OpenBSD, Project, +, +, +, +,Operating system, +, +, +, +,OpenBSD, +, +,version history, +,security, +, +, +, +, +, +, +, +,Related projects, +, +, +, +,CARP, +,LibreSSL, +,mandoc, +,OpenSSH, +,OpenBGPD, +,OpenIKED, +,OpenOSPFD, +,OpenNTPD, +,OpenSMTPD, +,PF, +,sndio, +,spamd, +,Systrace, +,tmux, +,Xenocara, +, +,cwm, +, +, +,W^X, +, +, +, +, +, +,People, +, +, +, +,Theo de Raadt, +,Niels Provos, +,OpenBSD Foundation, +,Plaid Tongued Devils, +, +, +, +, +, +,Resources, +, +, +, +,OpenBSD Journal, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,WorldCat Identities, +,VIAF,: ,106072661, +,MusicBrainz,: ,11ff06a3-6127-4b6d-9b43-bafcd8c650da, +,DBLP,: ,54/954, +, +, +, +, +, +, + + +, +, +, +, +",Theo de Raadt +" 22 January 2018, at 01:35.","This article is about the computing platform. For the currency, see ,Ether (currency),., +, +, +,Ethereum, +Currency: ,Ether, +, +, +, +,Ethereum Project's logo, +, +, +, +,Denominations, +, +, +,Plural, +,Ethers/Ethereums, +, +, +,Symbol, +,Ξ, +, +, +,Ticker symbol, +,ETH, +, +, +,Superunits, +, +, +, +, 10,12, +,Tether, +, +, +, 10,9, +,Gether, +, +, +, 10,6, +,Mether, +, +, +, 10,3, +,Kether, +, +, +,Subunits, +, +, +, +, 10,-3, +,Finney, milliether (mETH), +, +, +, 10,-6, +,Szabo, μETH, +, +, +, 10,-9, +,Shannon, nETH, Gwei, +, +, +, 10,-12, +,Babbage, pETH, Mwei, +, +, +, 10,-18, +,Wei, +, +, +,Coins, +,Balances from accounts to be debited/credited, in Wei, non-UTXO scheme, +, +, +,Development, +, +, +,White paper, +,https://github.com/ethereum/wiki/wiki/White-Paper, +, +, +,Implementation(s), +,Various, Go reference implementation, +, +, +,Code repository, +,https://github.com/ethereum/, +, +, +,Operating System, +,Non-specific, +, +, +,Source model, +,Open Source, +, +, +,License, +,GPL-3.0 & LGPL-3.0, +, +, +,Website, +,ethereum.org, +, +, +,Ledger, +, +, +,Timestamping scheme, +,Memory-hard Proof of Work (Ethash), +, +, +,Hash function, +,Keccak, +, +, +,Issuance, +,Block and Ommer reward, +, +, +,Block reward, +,3 ETH (non-deterministic), +, +, +,Block time, +,17-20 seconds, +, +, +,Block explorer, +,etherscan.io, +, +, +,Ethereum, is an ,open-source,, public, ,blockchain,-based ,distributed computing, platform featuring ,smart contract, (scripting) functionality.,[1], More specifically, it is a distributed ledger for state transitions. It is the bockchain network for ,Ether,, a ,cryptocurrency,. Ether can be transferred between accounts and used to compensate participant nodes for computations performed.,[2], Etherium provides a decentralized ,Turing-complete, ,virtual machine,, the Ethereum Virtual Machine (EVM), which can execute scripts using an international network of public nodes. ""Gas"", an internal transaction pricing mechanism, is used to mitigate ,spam, and allocate resources on the network.,[1],[3], +,Ethereum was proposed in late 2013 by ,Vitalik Buterin,, a ,cryptocurrency, researcher and programmer. Development was funded by an online ,crowdsale, that took place between July and August 2014. ,[4], The system went live on 30 July 2015, with 11.9 million coins ""premined"" for the crowdsale.,[5], This accounts for approximately 13 percent of the total circulating supply., +,In 2016, as a result of the collapse of ,The DAO, project, Ethereum was split into two separate blockchains – the new separate version became Ethereum (ETH), and the original continued as ,Ethereum Classic, (ETC).,[6],[7],[8], The value of the Ethereum currency grew over 13,000 percent in 2017.,[9], +, +, +, +,Contents, +, +, +,1, ,Etymology, +,2, ,History, +, +,2.1, ,Milestones, +,2.2, ,Public Testnets, +,2.3, ,The DAO event, +,2.4, ,Hard Forks, +, +, +,3, ,Architecture, +, +,3.1, ,Ether, +,3.2, ,Ethereum Virtual Machine, +,3.3, ,Smart contracts, +,3.4, ,Performance, +,3.5, ,Proposed uses, +, +, +,4, ,Decentralized applications, +, +,4.1, ,Enterprise software, +, +,4.1.1, ,Enterprise Ethereum Alliance (EEA), +,4.1.2, ,Permissioned ledgers, +, +, +, +, +,5, ,Ethereums, +,6, ,Criticisms, +,7, ,References, +,8, ,External links, +, +, +, +,Etymology,[,edit,], +,Vitalik Buterin picked the name Ethereum after browsing Wikipedia articles about elements and science fiction, when he found the name, noting, ""I immediately realized that I liked it better than all of the other alternatives that I had seen; I suppose it was the fact that sounded nice and it had the word ""ether"", referring to the hypothetical invisible medium that permeates the universe and allows light to travel."",[10], +,History,[,edit,], +,Ethereum was initially described in a white paper by ,Vitalik Buterin,,,[11], a programmer involved with ,Bitcoin Magazine,, in late 2013 with a goal of building decentralized applications.,[12],[13], Buterin had argued that Bitcoin needed a ,scripting language, for application development. Failing to gain agreement, he proposed development of a new platform with a more general scripting language.,[14],:,88, +,At the time of public announcement in January 2014, the core Ethereum team was Vitalik Buterin, Mihai Alisie, Anthony Di Iorio, and Charles Hoskinson.,[15], Formal development of the Ethereum software project began in early 2014 through a ,Swiss, company, ,Ethereum Switzerland GmbH, (,EthSuisse,).,[16],[17], Subsequently, a Swiss non-profit foundation, the Ethereum Foundation (,Stiftung Ethereum,), was created as well. Development was funded by an online public ,crowdsale, during July–August 2014, with the participants buying the Ethereum value token (ether) with another digital currency, ,bitcoin,.,[4], While there was early praise for the technical innovations of Ethereum, questions were also raised about its security and scalability.,[12], +,Milestones,[,edit,], +,Several codenamed prototypes of the Ethereum platform were developed by the Foundation, as part of their Proof-of-Concept series, prior to the official launch of the Frontier network. ""Olympic"" was the last of these prototypes, and public beta pre-release.,[18],[19], The Olympic network provided users with a ,bug bounty, of 25,000 ether for stress testing the limits of the Ethereum blockchain. ""Frontier"" marked the tentative experimental release of the Ethereum platform in July 2015.,[20],[21], +,""Homestead"" was the first to be considered ,stable,.,[22],[23], It includes improvements to transaction processing, gas pricing, and security.,[24],[22],[25], Since the initial launch, Ethereum has undergone several planned protocol upgrades, which are important changes affecting the underlying functionality and/or ,incentive structures, of the platform.,[26],[27], +,There are at least two other protocol upgrades planned in the future: ""Metropolis"" is intended to reduce the complexity of the EVM and provide more flexibility for smart contract developers.,[27], Metropolis also adds supports for zkSnarks (from ,Zcash,); with the first zksnarks transaction occurring on testnet on September 19, 2017.,[28], ""Serenity"" should include a fundamental change to Ethereum's consensus algorithm to enable a basic transition from hardware mining (,proof-of-work,) to virtual mining (,proof-of-stake,).,[27],[29], Improvements to ,scalability,, specifically ,sharding,, are also said to be a key objective on the development roadmap.,[30],[31], +, +, +,Version, +,Code name, +,Release date, +, +, +,Old version, no longer supported:, 0, +,Olympic, +,May, 2015, +, +, +,Old version, no longer supported:, 1, +,Frontier, +,30 July 2015, +, +, +,Old version, no longer supported:, 2, +,Homestead, +,14 March 2016, +, +, +,Current stable version:, ,3, +,Metropolis (vByzantium), +,16 October 2017, +, +, +,Future release:, 3.5, +,Metropolis (vConstantinople), +,TBA,[28], +, +, +,Future release:, 4, +,Serenity, +,TBA, +, +, +, +, +,Legend:, +,Old version, +,Older version, still supported, +,Latest version, +,Latest preview version, +,Future release, +, +, +, +, +, +,Public Testnets,[,edit,], +,Ethereum has three active public testnets: Ropsten (Proof of Work secured), Kovan (Parity based Proof of Authority secured), and Rinkeby (Clique Proof of Authority scheme). There is no Proof of Stake secured testnet. Each testnet has its own distinct genesis block, and are fully functional testing grounds for decentralized applications. Testnet Ether is not supposed to have market value., +,The DAO event,[,edit,], +,In 2016 a ,decentralized autonomous organization, called ,The DAO,, a set of ,smart contracts, developed on the platform, raised a record ,US$150 million, in a ,crowdsale, to fund the project.,[32], The DAO was exploited in June when ,US$50 million, in ether were claimed by an anonymous entity.,[33],[34], The event sparked a debate in the crypto-community about whether Ethereum should perform a contentious ""hard fork"" to reappropriate the affected funds.,[35], As a result of the dispute, the network split in two. Ethereum (the subject of this article) continued on the forked blockchain, while ,Ethereum Classic, continued on the original blockchain.,[36], The hard fork created a rivalry between the two networks.,[37], +,Hard Forks,[,edit,], +,After the hard fork related to The DAO, Ethereum subsequently forked twice in the fourth quarter of 2016 to deal with other attacks.,[38], By the end of November 2016, Ethereum had increased its ,DDoS, protection, de-bloated the blockchain, and thwarted further spam attacks by hackers.,[25], +,Architecture,[,edit,], +,Ether,[,edit,], +,Main article: ,Ether (currency), +,The value token of the Ethereum blockchain is called ether. It is listed under the code ETH and traded on ,cryptocurrency, exchanges, and the ,Greek, ,uppercase Xi, character (Ξ) is generally used for its ,currency symbol,. It is also used to pay for transaction fees and computational services on the Ethereum network.,[39], +,Ethereum Virtual Machine,[,edit,], +,The Ethereum Virtual Machine (EVM),[40],[41], is the runtime environment for smart contracts in Ethereum. The formal definition of the EVM is specified in the Ethereum Yellow Paper, original version by ,Gavin Wood,.,[42],[,better source needed,],[43], It is sandboxed and also completely isolated from the network, filesystem or other processes of the host computer system. Every Ethereum node in the network runs an EVM implementation and executes the same instructions. Ethereum Virtual Machines have been implemented in ,C++,, ,Go,, ,Haskell,, ,Java,, ,JavaScript,, ,Python,, ,Ruby,, ,Rust,, and ,WebAssembly, (currently under development).,[44],[45], +,Smart contracts,[,edit,], +,Ethereum's ,smart contracts, are based on computer language, which developers use to program their own functionalities.,[46], Smart contracts are ,high-level, programming ,abstractions, that are compiled down to EVM ,bytecode, and deployed to the Ethereum blockchain for execution. They can be written in ,Solidity, (a language library with similarities to ,C, and ,JavaScript,), Serpent (similar to ,Python,), LLL (a ,low-level, ,Lisp,-like language), and Mutan (,Go,-based, but deprecated). There is also a research-oriented language under development called Viper (a ,strongly-typed, ,Python,-derived ,decidable language,).,[47], +,Smart contracts can be public, which opens up the possibility to prove functionality, e.g. self-contained ,provably fair, casinos.,[48], +,One issue related to using smart contracts on a public blockchain is that bugs, including security holes, are visible to all but cannot be fixed quickly.,[49], One example of this is the 17 June 2016 attack on The DAO, which could not be quickly stopped or reversed.,[33], +,There is ongoing research on how to use formal verification to express and prove non-trivial properties. A ,Microsoft Research, report noted that writing solid smart contracts can be extremely difficult in practice, using The DAO hack to illustrate this problem. The report discussed tools that Microsoft had developed for verifying contracts, and noted that a large-scale analysis of published contracts is likely to uncover widespread vulnerabilities. The report also stated that it is possible to verify the equivalence of a Solidity program and the EVM code.,[50], +,Performance,[,edit,], +,In Ethereum all smart contracts are stored publicly on every node of the blockchain, which has trade-offs.,[51], Being a ,blockchain, means it is ,secure by design, and is an example of a distributed computing system with high ,Byzantine fault tolerance,. The downside is that performance issues arise in that every node is calculating all the smart contracts in real time, resulting in lower speeds.,[51], As of January 2016, the Ethereum protocol could process 25 transactions per second.,[51], On 19 December 2016, Ethereum exceeded one million transactions in a single day for the first time.,[52], +, +,Micro Raiden was launched November 2017.,[53], +,Buterin and Joseph Poon (a co-author of ,Bitcoin,'s lightning network whitepaper) announced in 2017 their plan to launch a scaling solution called Plasma which creates ""child"" blockchains to the ""main"" parent blockchain.,[54], The plasma project is not without skeptics, specifically Vlad Zamfir (Ethereum's lead researcher on proof of stake) has publicly questioned the plasma project's viability.,[54], +,Ethereum engineers have been working on ,sharding, the calculations, and the next step (called Ethereum 2) was presented at Devcon 3.,[55], +, +,Ethereum's blockchain uses ,Merkle Patricia trees,, for security reasons, to improve scalability, and to optimize transaction hashing.,[56], +,Proposed uses,[,edit,], +,Many uses have been proposed for Ethereum platform, including ones that are impossible or unfeasible.,[57],[58],[39], Use case proposals have included finance, the ,internet-of-things,, ,farm-to-table, produce, ,electricity sourcing and pricing,, and ,sports betting,.,[39],[59], Ethereum is (as of 2017) the leading ,blockchain, platform for ,initial coin offering, projects, with over 50% market share.,[60], +,Decentralized applications,[,edit,], +,The projects listed in this section are not exhaustive and may be outdated., +, +,Digital signatures, that ensure authenticity and proof of existence of documents: the ,Luxembourg Stock Exchange, has developed such a system,[61], +,Slock.It, is developing ,smart locks,[62], +,Digital tokens ,pegged, to ,fiat currencies,: Dai, stablecoin pegged to US dollar.,[63], ,Decentralized Capital.,[64], Spanish bank ,Santander, is also involved in such a project,[65],., +,Digital tokens ,pegged, to ,gold,: ,Digix,[4],[66], +,Improved ,digital rights management, for music: ,Imogen Heap, used the technology,[67], +,Platforms for ,prediction markets,: ,Augur,, Gnosis,[68],[69], Stox,[70],[71], +,Platforms for ,crowdfunding,: ,the DAO,[72],[73],[32], +,Social media platforms with economic incentives: ,Backfeed,,[74], ,Akasha,[75], +,Decentralized marketplaces: ,FreeMyVunk,,[76], ,Etheropt,,[77], ,TransActive Grid,[78], +,Remittance: ,Everex,[79], +,Online ,gambling,: ,Etheroll,[80], +,Electric car charging management: RWE,[81], +,Secure ,identity systems, for the Internet: ,uPort,[82],[83], +,Labour economics,: ,Blocklancer,,,[84], ,Ethlance,[85], +,Video Games,: ,Cryptokitties, popularity in December 2017 caused the Ethereum network to slow down.,[86], +, +,Enterprise software,[,edit,], +,Ethereum-based customized software and networks, independent from the public Ethereum chain, are being tested by ,enterprise software, companies.,[87], Interested parties include ,Microsoft,, ,IBM,, ,JPMorgan Chase,,,[39],[88], ,Deloitte,,,[89], ,R3,,,[90], ,Innovate UK, (cross-border payments prototype).,[91],[92], Barclays, UBS and Credit Suisse are experimenting with Ethereum blockchain to automate Markets in Financial Instruments Directive (MiFID) II requirements.,[93], +,Enterprise Ethereum Alliance (EEA),[,edit,], +,In March 2017, various blockchain start-ups, research groups, and Fortune 500 companies announced the creation of the Enterprise Ethereum Alliance (EEA) with 30 founding members.,[94], By May, the nonprofit organization had 116 enterprise members—including ,ConsenSys,, ,CME Group,, ,Cornell University's research group,, ,Toyota Research Institute,, ,Samsung SDS,, ,Microsoft,, ,Intel,, ,J.P. Morgan,, ,Cooley LLP,, ,Merck KGaA,, ,DTCC,, ,Deloitte,, ,Accenture,, ,Banco Santander,, ,BNY Mellon,, ,ING,, and ,National Bank of Canada,.,[95],[96],[97], +,The purpose of the EEA is to coordinate the engineering of an open-source reference standard and private ""permissioned"" version of the Ethereum blockchain that can address the common interests of enterprises in banking, management, consulting, automotive, pharmaceutical, health, technology, mobile, entertainment, and other industries, while working with developers from the Ethereum ecosystem. Certain members of the alliance have also indicated a desire to investigate and collaborate on hybrid architectures to potentially anchor private blockchains to the public Ethereum blockchain in the future, although concerns remain over the security, compliance, and regulations involved in bridging such permissioned and ""permissionless"" blockchains.,[94], +,By July 2017, there were over 150 members in the alliance, including recent additions ,MasterCard,, ,Cisco Systems,, and ,Scotiabank,.,[98], +,Permissioned ledgers,[,edit,], +,Ethereum-based ,permissioned blockchain, variants are used and being investigated for various projects., +, +,J.P. Morgan Chase, is developing a permissioned-variant of Ethereum blockchain dubbed ""Quorum."",[99], It's designed to toe the line between private and public in the realm of shuffling derivatives and payments. The idea is to satisfy regulators who need seamless access to financial goings-on, while protecting the privacy of parties that don't wish to reveal their identities nor the details of their transactions to the general public.,[100], +,Royal Bank of Scotland, has announced that it has built a Clearing and Settlement Mechanism (CSM) based on the Ethereum distributed ledger and smart contract platform.,[101],[102], +, +,Ethereums,[,edit,], +,Ethereums refer to the broad category that consists of all cryptocurrencies which emerged from the original ,Ethereum, blockchain:, +, +,Ethereum Classic, +,Expanse.,[103], +,Ethereum Fog,[104], +,EtherZero,[105], +,Ethereum Vega,[106], +,Etherite,[107], +,Ethereum Dark,[108], +, +,Ethereums can also refer for all ,tokens, developed and run on the Ethereum blockchain,[109], +,Criticisms,[,edit,], +,A finance blogger on ,FT Alphaville, has pointed out that criminals are using Ethereum to run ,Ponzi schemes, and other forms of investment fraud.,[110], The article was based on a paper from the ,University of Cagliari,, which placed the number of Ethereum smart contracts which facilitate Ponzi schemes at nearly 10% of 1384 smart contracts examined. However, it also estimated that only 0.05% of the transactions on the network were related to such contracts.,[111], +,References,[,edit,], +, +, +,^ ,a, ,b, ,Understanding Ethereum (Report). CoinDesk. 24 June 2016., , +,^, ,Cryptocurrencies: A Brief Thematic Review, ,Archived, 25 December 2017 at the ,Wayback Machine,.. Social Science Research Network. Date accessed 28 august 2017., +,^, ,ConsenSys (23 June 2016). ,""Ethereum, Gas, Fuel, & Fees"",. ,ConsenSys Media,. ,Archived, from the original on 23 May 2017,. Retrieved ,15 January, 2017,., , +,^ ,a, ,b, ,c, ,Aitken, Roger (23 April 2016). ,""Digital Gold 'Done Right' With DigixDAO Crypto-Trading on OpenLedger"",. ,Forbes,. ,Archived, from the original on 28 April 2016,. Retrieved ,28 April, 2016,., , +,^, ,etherchain.org. ,""Accounts - etherchain.org - The ethereum blockchain explorer"",. ,www.etherchain.org,. ,Archived, from the original on 7 August 2017,. Retrieved ,30 May, 2017,., , +,^, ,De Jesus, Cecille (19 July 2016). ,""The DAO Heist Undone: 97% of ETH Holders Vote for the Hard Fork"",. Futurism, LLC. ,Archived, from the original on 7 August 2017,. Retrieved ,16 May, 2017,., , +,^, ,Quentson, Andrew (17 July 2016). ,""Miners Vote Overwhelmingly in Support of Ethereum's Hardfork"",. Cryptocoinnews. ,Archived, from the original on 26 June 2017,. Retrieved ,14 May, 2017,., , +,^, ,Bradley, Miles (17 November 2016). ,""CoinDesk Research: Ethereum Hard Fork Had Little Impact on Sentiment"",. Coindesk. ,Archived, from the original on 8 July 2017,. Retrieved ,14 May, 2017,., , +,^, ,""Ethereum hits a fresh record high and is up over 13,000% in a year"",. ,CNBC,. January 8, 2017., , +,^, ,Vitalik Buterin (2014). ,""So where did the name Ethereum come from?"",., , +,^, ,""White Paper· ethereum/wiki Wiki · GitHub"",. ,Archived, from the original on 28 March 2015., , +,^ ,a, ,b, ,Finley, Klint (27 January 2014). ,""Out in the Open: Teenage Hacker Transforms Web Into One Giant Bitcoin Network"",. ,Wired,. ,Archived, from the original on 18 March 2016,. Retrieved ,21 March, 2016,., , +,^, ,Schneider, Nathan (7 April 2014). ,""Code your own utopia: Meet Ethereum, bitcoin's most ambitious successor"",. Al Jazeera. ,Archived, from the original on 23 February 2016,. Retrieved ,21 February, 2016,., , +,^, ,Tapscott, Don; Tapscott, Alex (2016-05-07). ,The Blockchain Revolution: How the Technology Behind Bitcoin is Changing Money, Business, and the World,. Portfolio. ,ISBN, ,978-0670069972,., , +,^, ,Vitalik Buterin (23 January 2014). ,""Ethereum: Now Going Public"",. Archived from ,the original, on 2 March 2014., , +,^, ,Schmid, Valentin (10 May 2014). ,""The Entrepreneur: Joe Lubin, COO of Ethereum"",. ,Epoch Times,. ,Archived, from the original on 25 April 2016,. Retrieved ,31 March, 2016,., , +,^, ,""Company Overview of Ethereum Switzerland GmbH"",. Bloomberg. 20 August 2016. ,Archived, from the original on 20 August 2016,. Retrieved ,20 August, 2016,. ,The company was founded in 2014 and is based in Baar, Switzerland., , +,^, ,Buterin, Vitalik (9 May 2015). ,""Olympic: Frontier Pre-Release"",. Ethereum Foundation. ,Archived, from the original on 2 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,Lombardo, Hans (17 May 2015). ,""Ethereum Debuts ""eπ"" Ethereum-on-Raspberry Pi as Olympic Whirs before Frontier Release"",. Allcoinsnews. ,Archived, from the original on 20 August 2017,. Retrieved ,5 June, 2017,., , +,^, ,Gupta, Vinay (12 March 2015). ,""Getting to the Frontier"",. Ethereum Foundation. ,Archived, from the original on 8 May 2015,. Retrieved ,5 June, 2015,., , +,^, ,Vigna, Paul (31 July 2015). ,""BitBeat: Ethereum Opens Its 'Frontier' for Business"",. The Wall Street Journal. ,Archived, from the original on 6 September 2017,. Retrieved ,5 June, 2017,., , +,^ ,a, ,b, ,""Ethereum Homestead Documentation: The Homestead Release"",. Ethereum Foundation. n.d. ,Archived, from the original on 6 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,Donnelly, Jacob (14 March 2016). ,""Ethereum Blockchain Project Launches First Production Release"",. CoindDesk. ,Archived, from the original on 6 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,Wilcke, Jeffrey (29 February 2016). ,""Homestead Release"",. Ethereum Foundation. ,Archived, from the original on 3 June 2017,. Retrieved ,5 June, 2017,., , +,^ ,a, ,b, ,Hertig, Alyssa (22 November 2016). ,""Ethereum's Fourth Blockchain Fork: So Far, So Good"",. CoinDesk. ,Archived, from the original on 27 May 2017,. Retrieved ,5 June, 2017,., , +,^, ,Gupta, Vinay (3 March 2015). ,""The Ethereum Launch Process"",. Ethereum Foundation. ,Archived, from the original on 6 June 2017,. Retrieved ,5 June, 2017,., , +,^ ,a, ,b, ,c, ,Silva, Los (25 February 2017). ,""Ethereum's Road Map for 2017"",. ETHNews. ,Archived, from the original on 2 June 2017,. Retrieved ,5 June, 2017,., , +,^ ,a, ,b, ,O'Leary, Rachel Rose (19 September 2017). ,""Ethereum's Byzantium Testnet Just Verified A Private Transaction"",. CoinDesk. ,Archived, from the original on 23 September 2017,. Retrieved ,24 September, 2017,., , +,^, ,Hertig, Alyssa (18 January 2017). ,""Where's Casper? Inside Ethereum's Race to Reinvent its Blockchain"",. CoinDesk. ,Archived, from the original on 30 May 2017,. Retrieved ,5 June, 2017,., , +,^, ,Hertig, Alyssa (n.d.). ,""How Will Ethereum Scale?"",. CoinDesk. ,Archived, from the original on 10 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,Rizzo, Pete (19 September 2016). ,""Ethereum's Creator Proves Blockchain Scaling Vision is No Joke"",. CoinDesk. ,Archived, from the original on 6 June 2017,. Retrieved ,5 June, 2017,., , +,^ ,a, ,b, ,Vigna, Paul (16 May 2016). ,""Chiefless Company Rakes in More than $100 Million"",. ,Wall Street Journal,. ,Archived, from the original on 25 June 2017,. Retrieved ,14 May, 2017,., , +,^ ,a, ,b, ,Popper, Nathaniel (18 June 2016). ,""Hacker May Have Taken $50 Million From Cybercurrency Project"",. ,The New York Times,. ,Archived, from the original on 20 June 2017,. Retrieved ,14 May, 2017,., , +,^, ,Price, Rob (17 June 2016). ,""Digital Currency Ethereum is Cratering Amid Claims of a $50 Million Hack"",. ,Business Insider,. Business Insider. ,Archived, from the original on 11 June 2017,. Retrieved ,14 May, 2017,., , +,^, ,Peck, Morgan (19 July 2016). ,"","",Hard Fork"" Coming to Restore Ethereum Funds to Investors of Hacked DAO"",. ,IEEE Spectrum: Technology, Engineering, and Science News,. IEEE. ,Archived, from the original on 3 March 2017,. Retrieved ,14 May, 2017,., , +,^, ,""What is Ethereum? | The Ultimate Beginners' Guide – CoinCentral"",. ,coincentral.com,. ,Archived, from the original on 11 September 2017,. Retrieved ,11 September, 2017,., , +,^, ,Hertig, Alyssa (28 July 2016). ,""Ethereum's Two Ethereums Explained"",. CoinDesk. ,Archived, from the original on 24 May 2017,. Retrieved ,15 May, 2017,., , +,^, ,Redman, Jamie (14 October 2016). ,""Ethereum to Hard Fork Two More Times Following Recent Attacks"",. ,Bitcoin.com,. Bitcoin.com. ,Archived, from the original on 2 November 2016,. Retrieved ,22 November, 2016,., , +,^ ,a, ,b, ,c, ,d, ,Popper, Nathaniel (27 March 2016). ,""Ethereum, a Virtual Currency, Enables Transactions That Rival Bitcoin's"",. ,New York Times,. ,Archived, from the original on 24 July 2016,. Retrieved ,2 September, 2016,., , +,^, ,""What Is Ethereum?—Ethereum Homestead 0.1 documentation"",. ,ethdocs.org,. ,Archived, from the original on 27 April 2017., , +,^, ,Dannen, Chris (2017). ""The EVM"". ,Introducing Ethereum and Solidity: Foundations of Cryptocurrency and Blockchain Programming for Beginners,. Apress. pp. 47–67. ,ISBN, ,9781484225356,., , +,^, ,Ethereum Yellow Paper, ,Archived, 18 February 2015 at the ,Wayback Machine,. by Gavin Wood, +,^, ,Triantafyllidis, Nikolaos Petros (19 February 2016). ""The Ethereum Project: Ethereum History"". Developing an Ethereum Blockchain Application (Report). University of Amsterdam. p. 20., , +,^, ,Dannen, Chris (27 March 2017). ,""Ethereum Devs Publish Roadmap for EVM Upgrade"",. CryptoNews. ,Archived, from the original on 25 December 2017., , +,^, ,""Ethereum Client Implementations - EntEthAlliance - Confluence"",. ,entethalliance.atlassian.net,., , +,^, ,""How Do Ethereum Smart Contracts Work?"",. ,CoinDesk,., , +,^, ,Rivlin, Brianne (14 November 2016). ,""Geth, Viper, and Wafr: New Ethereum Developments"",. ETHNews. ,Archived, from the original on 4 September 2017., , +,^, ,Piasecki, Piotr J. (2016). ,""Gaming Self-Contained Provably Fair Smart Contract Casinos"",. ,Ledger,. ,1,: 99–110. ,doi,:,10.5195/ledger.2016.29,. ,Archived, from the original on 24 December 2016., , +,^, ,Peck, M. (28 May 2016). ,""Ethereum's $150-Million Blockchain-Powered Fund Opens Just as Researchers Call For a Halt"",. ,IEEE Spectrum,. ,Institute of Electrical and Electronics Engineers,. ,Archived, from the original on 30 May 2016., , +,^, ,""Short Paper: Formal Verification of Smart Contracts"", ,(PDF),. ,microsoft.com/,. Microsoft. Archived from ,the original, ,(PDF), on 27 August 2016,. Retrieved ,25 August, 2016,., , +,^ ,a, ,b, ,c, ,Allison, Ian (25 January 2016). ,""How are banks actually going to use blockchains and smart contracts?"",. ,International Business Times,. ,Archived, from the original on 8 May 2016,. Retrieved ,4 May, 2016,., , +,^, ,Filiba, Jack. ,""Ethereum Breaks One Million Transactions in a Single Day"",. ,Archived, from the original on 22 December 2017., , +,^, ,Higgins, Stan. ,"",',Microraiden' Payment Channels Go Live on Ethereum Network"",. ,Archived, from the original on 22 December 2017., , +,^ ,a, ,b, ,Hertig, Alyssa (12 August 2017). ,""Ethereum + Lightning? Buterin and Poon Unveil 'Plasma' Scaling Plan"",. CoinDesk. ,Archived, from the original on 24 August 2017,. Retrieved ,23 August, 2017,., , +,^, ,Galeon, Dom. ,""Ethereum's Co-Founder Just Unveiled His Plan for the Future of Cryptocurrency"",. ,Archived, from the original on 9 November 2017., , +,^, ,Vitalik Buterin. ,""Merkling in Ethereum"",. ,Ethereum.org,., , +,^, ,Greenspan, Gideon (17 April 2016). ,""Why Many Smart Contract Use Cases Are Simply Impossible - CoinDesk"",. ,CoinDesk,. ,Archived, from the original on 7 August 2017., , +,^, ,""This Is Your Company on Blockchain"",. ,Bloomberg Businessweek,. ,Archived, from the original on 14 September 2016,. Retrieved ,14 September, 2016,., , +,^, ,Bordet, Julián (21 March 2016). ,""Decentralized Autonomous Organizations: Ethereum Sparks Up Googles of Tomorrow"",. ,The Cointelegraph,. ,Archived, from the original on 27 June 2016,. Retrieved ,21 July, 2016,., , +,^, ,""ICO Market Research: The Leading Blockchain Platforms Of 2017 - ICO Watch List Blog"",. ,ICO Watch List Blog,. 17 August 2017. ,Archived, from the original on 17 August 2017,. Retrieved ,20 August, 2017,., , +,^, ,""Luxembourg Stock Exchange introduces blockchain into reporting service"",. 2016-10-18,. Retrieved ,2016-11-04,., , +,^, ,Allison, Ian. ,""Ethereum-based Slock.it reveals first ever lock opened with money"",. ,International Business Times UK,. ,Archived, from the original on 2 April 2016., , +,^, ,Prince, Eliot. ,""MakerDAO Launches New Dai Stablecoin on the Ethereum Blockchain"",. ,Cryptoslate,., , +,^, ,Allison, Ian (12 September 2016). ,""Decentralized Capital issuing fiat-backed digital assets on the Ethereum blockchain"",. ,International Business Times,. ,Archived, from the original on 18 September 2016., , +,^, ,""Santander Confirms Fiat-backed Token Project on Ethereum Blockchain"",. ,CoinTelegraph,. ,Archived, from the original on 17 December 2016,. Retrieved ,15 January, 2017,., , +,^, ,Buntinx, JP (28 April 2016). ,""DigixDAO DGD Assets To Be Listed on OpenLedger"",. The Merkle. ,Archived, from the original on 2 June 2016,. Retrieved ,29 May, 2016,., , +,^, ,Allison, Ian (4 October 2015). ,""Imogen Heap shows how smart music contracts work using Ethereum"",. ,International Business Times,. ,Archived, from the original on 21 March 2016,. Retrieved ,24 March, 2016,., , +,^, ,""Ethereum Prediction Market Service Takes First Steps With Beta Launch - CoinDesk"",. ,CoinDesk,. 17 August 2016. ,Archived, from the original on 7 February 2017,. Retrieved ,6 February, 2017,., , +,^, ,""ICO Roundup 2017 by Cointelegraph: Cashing In On Blockchain Apps' Mainstream Year"",. ,CoinTelegraph,. ,Archived, from the original on 7 February 2017,. Retrieved ,6 February, 2017,., , +,^, ,""Stox Prediction Platform Closes ICO after One Day; Raises over $30 Million"",. CryptoCoinsNews. 2 August 2017. ,Archived, from the original on 29 September 2017,. Retrieved ,17 November, 2017,., , +,^, ,[1],[,dead link,], +,^, ,Rennie, Ellie (12 May 2016). ,""The radical DAO experiment"",. ,Swinburne News,. Swinburne University of Technology. ,Archived, from the original on 16 May 2016,. Retrieved ,12 May, 2016,. ,When it reaches the end of the funding phase on 28 May, it will begin contracting blockchain-based start-ups to create innovative technologies. The extraordinary thing about The DAO is that no single entity owns it, and it has no conventional management structure or board of directors., , +,^, ,Allison, Ian (30 April 2016). ,""Ethereum reinvents companies with launch of The DAO"",. ,International Business Times,. ,Archived, from the original on 1 May 2016,. Retrieved ,1 May, 2016,., , +,^, ,Weinglass, Simona (19 August 2015). ,""Backfeed wants to decentralize the Internet and help you earn what you deserve"",. Geektime.com. ,Archived, from the original on 14 March 2016,. Retrieved ,24 March, 2016,., , +,^, ,CFA, Adam Hayes, (3 February 2017). ,""This New Social Network is Powered by Ethereum Technology"",. ,Investopedia,. ,Archived, from the original on 6 February 2017,. Retrieved ,6 February, 2017,., , +,^, ,Allison, Ian (22 December 2015). ,""Game-changers FreeMyVunk and Digix allow video gamers to trade virtual assets for physical gold"",. ,International Business Times,. ,Archived, from the original on 17 March 2016,. Retrieved ,24 March, 2016,., , +,^, ,""Decentralized Options Exchange Etheropt Uses Automated Ethereum Smart Contract"",. ,Archived, from the original on 8 January 2017., , +,^, ,Rutkin, Aviva (2 March 2016). ,""Blockchain-based microgrid gives power to consumers in New York"",. ,New Scientist,. ,Archived, from the original on 22 March 2016,. Retrieved ,24 March, 2016,., , +,^, ,Mizrahi, Avi (1 December 2016). ,""Everex Helps Migrant Workers Send Remittance Back to Myanmar via Ethereum"",. ,Finance Magnates,. ,Archived, from the original on 20 December 2016,. Retrieved ,14 December, 2016,., , +,^, ,Bitcoinist. ,""Ethereum Dice Game Etheroll Announces Crowdfund Opening Feb. 13"",. ,bitcoinist.com,. ,Archived, from the original on 19 August 2017,. Retrieved ,18 August, 2017,., , +,^, ,Higgins, Stan. ,""Why a German Power Company is Using Ethereum to Test Blockchain Car Charging"",. ,CoinDesk,. ,Archived, from the original on 2 July 2017,. Retrieved ,2 May, 2017,., , +,^, ,EconoTimes. ,""ConsenSys uPort wins International Blockchain Summit - EconoTimes"",. ,EconoTimes,. ,Archived, from the original on 8 February 2017,. Retrieved ,6 February, 2017,., , +,^, ,Allison, Ian (23 September 2016). ,""ConsenSys uPort scoops first prize in International Blockchain Summit Demo Day"",. ,International Business Times UK,. ,Archived, from the original on 8 February 2017,. Retrieved ,6 February, 2017,., , +,^, ,Tkatchuk, Ralph (20 November 2017). ,""Can Blockchain Supercharge the Gig Economy?"",. ,Dataconomy,. ,Archived, from the original on 20 November 2017., , +,^, ,Gebron, Hunter (12 February 2017). ,""Ethlance and the Rise of the On-Demand Economy"",. ,Archived, from the original on 1 December 2017., , +,^, ,""CryptoKitties craze slows down transactions on Ethereum"",. 12 May 2017., , +,^, ,""Big Business Giants From Microsoft to J.P. Morgan Are Getting Behind Ethereum"",. ,Fortune,. ,Archived, from the original on 29 September 2017,. Retrieved ,8 November, 2017,., , +,^, ,""Hyperledger blockchain code almost comes together for IoT"",. Rethink Research. ,Archived, from the original on 16 August 2016,. Retrieved ,23 April, 2016,., , +,^, ,Allison, Ian (3 May 2016). ,""Deloitte to build Ethereum-based 'digital bank' with New York City's ConsenSys"",. ,International Business Times,. ,Archived, from the original on 6 May 2016., , +,^, ,Allison, Ian (20 January 2016). ,""R3 connects 11 banks to distributed ledger using Ethereum and Microsoft Azure"",. ,International Business Times,. ,Archived, from the original on 23 February 2016,. Retrieved ,23 February, 2016,., , +,^, ,""UK Government Awards £248k for Ethereum Prototype"",. ,CoinDesk,. ,Archived, from the original on 5 June 2016., , +,^, ,""Settlement using blockchain to Automate Foreign Exchange in a Regulated environment (SAFER)"",. ,Innovate UK,. ,Archived, from the original on 4 May 2016., , +,^, ,""Barclays, UBS, Credit Suisse Seek Ethereum Blockchain Solution For MiFID II Regulations"",. ,ETHNews.com,. Retrieved ,2017-12-29,., , +,^ ,a, ,b, ,Popper, Nathaniel (27 February 2017). ,""Business Giants to Announce Creation of a Computing System Based on Ethereum"",. ,New York Times,. ,Archived, from the original on 20 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,Peck, Morgan (2 March 2017). ,""Corporate Titans Unite to Build an Enterprise Version of the Ethereum Blockchain"",. Institute of Electrical and Electronics Engineers (IEEE). ,Archived, from the original on 17 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,""Enterprise Ethereum Alliance expands dramatically announcing 86 new members"", ,(PDF), (Press release). Enterprise Ethereum Alliance (EEA). 19 May 2017. ,Archived, ,(PDF), from the original on 7 June 2017,. Retrieved ,5 June, 2017,., , +,^, ,Shin, Laura (22 May 2017). ,""Ethereum Enterprise Alliance Adds 86 New Members Including DTCC, State Street And Infosys"",. Forbes. ,Archived, from the original on 22 May 2017,. Retrieved ,22 May, 2017,., , +,^, ,https://www.inc.com/brian-d-evans/the-enterprise-ethereum-alliance-just-got-a-whole-.html, +,^, ,""JP Morgan's Quorum blockchain powers new correspondent banking network "" Banking Technology"",. ,www.bankingtech.com,. ,Archived, from the original on 9 November 2017,. Retrieved ,8 November, 2017,., , +,^, ,Hacket, Robert. ,""Why J.P. Morgan Chase Is Building a Blockchain on Ethereum"",. ,Fortune,. ,Archived, from the original on 2 February 2017., , +,^, ,""Proving Ethereum for the Clearing Use Case"", ,(PDF),. ,Archived, ,(PDF), from the original on 10 October 2016., , +,^, ,Allison, Ian (7 December 2016). ,""Blockchain: RBS builds Ethereum-based distributed clearing house"",. ,IB Times,. ,Archived, from the original on 13 April 2017,. Retrieved ,8 May, 2017,., , +,^, ,""Expanse DAO Seeks to Develop Decentralised Ethereum"",., , +,^, ,""What Is Ethereum Fog?"",., , +,^, ,""EtherZero — a Revolutionary Ethereum Hard Fork"",., , +,^, ,""The New Classic? Protesters Are Already Plotting Alternative Ethereums"",., , +,^, ,""What is Etherite and how to help out"",., , +,^, ,""Ethereum Dark Official"",., , +,^, ,""Create your own CRYPTO-CURRENCY with Ethereum"",., , +,^, ,Kaminska, Izabella (1 June 2017). ,""It's not a ponzi, it's a smart ponzi"",. ,FT Alphaville,. ,Archived, from the original on 23 July 2017., , +,^, ,Bartoletti, Carta; et al. ,""Dissecting Ponzi schemes on Ethereum: identification, analysis, and impact"", ,(PDF),. Universita di Cagliari. ,Archived, ,(PDF), from the original on 17 August 2017,. Retrieved ,30 July, 2017,., ,CS1 maint: Explicit use of et al. (,link,), +, +, +,External links,[,edit,], +, +, +, +,Wikimedia Commons has media related to ,Ethereum,., +, +, +, +,Official website, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Cryptocurrencies, +, +, +, +,SHA-256,-based, +, +, +, +,Bitcoin, +,Bitcoin Cash, +,Factom, +,Namecoin, +,NuBits, +,Peercoin, +,Titcoin, +, +, +, +, +, +,Scrypt,-based, +, +, +, +,Auroracoin, +,Dogecoin, +,Litecoin, +,PotCoin, +, +, +, +, +, +,Zerocoin,-based, +, +, +, +,Zcash, +,Zcoin, +,Zclassic, +,ZeroVert, +,Bitcoin Gold, +, +, +, +, +, +,CryptoNote,-based, +, +, +, +,Boolberry, +,Bytecoin, +,Monero, +, +, +, +, +, +,Ethash,-based, +, +, +, +,Ethereum, +,Ethereum Classic, +,KodakCoin, +,Ubiq, +, +, +, +, +, +,Other ,proof-of-work, +, +, +, +,Dash, +,Decred, +,DigiByte, +,IOTA, +,Myriadcoin, +,Primecoin, +,Sia, +,Zerocash, +, +, +, +, +, +,Non ,proof-of-work, +, +, +, +,Ardor, +,BitShares, +,BlackCoin, +,Burstcoin, +,Cardano, +,Counterparty, +,Enigma, +,EOS, +,FunFair, +,Gridcoin, +,Lisk, +,Melonport, +,NEM, +,NEO, +,Nxt, +,OmiseGO, +,Polkadot, +,Qtum, +,RChain, +,Ripple, +,Shadow, +,Simple Token, +,Stellar, +,Steem, +,Waves Platform, +, +, +, +, +, +,Consensus, mechanisms, +, +, +, +,Proof-of-authority, +,Proof-of-space, +,Proof-of-stake, +,Proof-of-work system, +, +, +, +, +, +,Technology, +, +, +, +,Blockchain, +,Fork, +,Cryptocurrency tumbler, +,Zerocoin, +,Lightning Network, +,Atomic swap, +, +, +, +, +, +,Related topics, +, +, +, +,Anonymous Internet banking, +,Bitcoin network, +,Complementary currency, +,Crypto-anarchism, +,Cryptocurrency exchange, +,Digital currency, +,Double-spending, +,Electronic money, +,Initial coin offering, +,Airdrop, +,Virtual currency, +,Crypto Valley, +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, ,List, +, +, +, +, +, +, + + +, +, +, +, +",Ethereum +" 11 January 2018, at 13:32."," +, +,Vitalik Buterin, +, +, +, +,Vitalik Buterin, 2016, +, +, +, +,Native name, +,Виталий Дмитриевич Бутерин, +, +, +,Born, +,(,1994-01-31,), January 31, 1994 ,(age 23), +,Kolomna,, ,Russia, +, +, +,Nationality, +,Russian-Canadian, +, +, +,Alma mater, +,University of Waterloo, +(Dropped Out), +, +, +,Known for, +,Ethereum,, ,Bitcoin Magazine, +, +, +,Awards, +,Thiel Fellowship, +, +, +,Website, +,http://vitalik.ca, +, +, +,Scientific career, +, +, +,Fields, +,Digital contracts,, ,Digital currencies,, ,Game Theory, +, +, +, +, +, +,Vitalik Buterin, (Born January 31, 1994. ,Russian,: ,Виталий Дмитриевич Бутерин,) is a ,Russian,-,Canadian, ,programmer, and writer primarily known as a co-founder of ,Ethereum, and as a co-founder of ,Bitcoin Magazine,.,[1],[2],[3], +, +, +, +,Contents, +, +, +,1, ,Personal life, +,2, ,Endeavors, +, +,2.1, ,Beginnings at ,Bitcoin Magazine, +,2.2, ,Ethereum, +,2.3, ,Open source software, +, +, +,3, ,Awards and recognition, +,4, ,See also, +,5, ,References, +,6, ,External links, +, +, +, +,Personal life,[,edit,], +,Buterin was born in ,Kolomna,, ,Moscow Oblast,, ,Russia, to Dmitry Buterin, a computer scientist, and Natalia Ameline (née Chistyakova).,[,citation needed,], He lived in the area until the age of six when his parents emigrated to ,Canada, in search of better employment opportunities. While in grade three of elementary school in Canada, Buterin was placed into a class for gifted children and started to understand that he was drawn to math, programming, and economics. He also had the ability to add three-digit numbers in his head at twice the speed of his peers.,[4], Buterin attended the ,Abelard School,, a private high school in Toronto, for four years,,[5], which he said, ""proved to be among the most interesting and productive years of my life; the closer connection between students and teachers [&] the level of depth at which the material was taught, made me want to learn, and to focus on learning as my primary goal"".,[5], Buterin has written that although he was ""never particularly inspired by the traditional education system"",,[5], when subjects were presented with ""dedication and focus on intellectual inquiry"", he said he:, +, +,""noticed my attitude and my results almost immediately and drastically change. Education is ultimately much more than simply memorizing individual facts, or even learning individual concepts. [What] matters most: learning how to think, learning how to reason and learning how to learn."",[5], +, +,Buterin learned about Bitcoin, from his father, at age 17.,[4], In 2012, he obtained a Bronze Medal in the International Olympiad in Informatics.,[6], In 2013 he visited developers in other countries who shared his enthusiasm for code. He returned to Toronto later that year and published a white paper proposing Ethereum.,[7], He attended the ,University of Waterloo, but dropped out in 2014, when he received the ,Thiel Fellowship, in the amount of $100,000,,[8], and went to work on Ethereum full-time.,[8], +,On June 25, 2017, Buterin was the subject of a ,death hoax, originating from ,4chan,.,[9], +,Endeavors,[,edit,], +, +,Pybitcointools, (2013–), +,Bitcoin Magazine, (2011–2014), +,Ethereum, (2013–), +, +,Beginnings at ,Bitcoin Magazine,[,edit,], +,Main article: ,Bitcoin Magazine, +,Buterin met a person on a bitcoin chat forum trying to start a bitcoin blog. The owner offered five bitcoin (about $3.50) to anyone who would write an article for him. Buterin wrote for the site until its website shut down soon thereafter due to Bitcoin's lack of mainstream attention.,[10], +,In September 2011, another person reached out to Buterin about a new publication called ,Bitcoin Magazine,, a position which Buterin would accept as the first co-founder, and contribute as a leading writer., +,In addition Buterin wrote about bitcoin-related topics for other publications, including ,Bitcoin Weekly,.,[1],[11], ,Bitcoin Magazine, in 2012 later began publishing a print edition and has been referred to as the first serious publication dedicated to cryptocurrencies.,[12], ,Bitcoin Magazine, was then purchased by ,BTC Media,, where Buterin continued to write until mid-2014., +,In addition, he held a position on the editorial board of ,Ledger,, a peer-reviewed scholarly journal that publishes full-length original research articles on the subjects of cryptocurrency and blockchain technology.,[13], +,Ethereum,[,edit,], +,Main article: ,Ethereum, +,He is a co-creator and inventor of Ethereum, described as a “decentralised mining network and software development platform rolled into one” that facilitates the creation of new cryptocurrencies and programs that share a single ,blockchain, (a cryptographic transaction ledger).,[14],[15],[16], +,Ethereum was first described in Buterin's white paper, in late 2013. Buterin argued that bitcoin needed a scripting language for application development. But when he failed to gain agreement, he proposed development of a new platform with a more general scripting language.,[17], About the Ethereum Project, Buterin has said: ""I am truly grateful to have the opportunity to work in such an interesting and interdisciplinary area of industry, where I have the chance to interact with cryptographers, mathematicians and economists prominent in their fields, to help build software and tools that already affect tens of thousands of people around the world, and to work on advanced problems in computer science, economics and philosophy every week."",[5], +,Open source software,[,edit,], +,Vitalik has contributed as a developer to other open source software projects.,[1], Some early examples are: Kryptokit, pybitcointools, multisig.info, and btckeysplit.,[18], He also contributed to DarkWallet,[19], by ,Cody Wilson,, ,Bitcoin, ,Python, libraries,,[20], and the ,cryptocurrency, marketplace site Egora.,[2], +,Awards and recognition,[,edit,], +, +,Thiel Fellowship, Award, 2014 ,[21], +,World Technology Award in the IT Software category, 2014 ,[22], +,Fortune, 40 under 40 list, 2016.,[23], +,Forbes, 30 under 30 list, 2018.,[24], +, +,See also,[,edit,], +, +,Joseph Lubin, – Ethereum co-founder, +, +,References,[,edit,], +, +, +,^ ,a, ,b, ,c, ,Finley, Klint (27 January 2014). ,""Out in the open: Teenage hacker transforms web into one giant Bitcoin network"",. ,Wired,. Retrieved ,7 February, 2014,., , +,^ ,a, ,b, ,Melendez, Steven (10 February 2014). ,""Could this 20-Year-Old kid make Bitcoin obsolete?"",. ,Fast Company,. Retrieved ,22 February, 2014,., , +,^, ,del Castillo, Michael (24 September 2014). ,""Dark wallet: A radical way to Bitcoin"",. ,The New Yorker,. Retrieved ,24 January, 2014,., , +,^ ,a, ,b, ,Peck, Morgen (2016-06-13). ,""The Uncanny Mind That Built Ethereum"",. ,Backchannel,. Retrieved ,2016-06-15,., , +,^ ,a, ,b, ,c, ,d, ,e, ,""Students"",. ,Abelard School,. Retrieved ,7 October, 2017,., , +,^, ,""Results | IOI 2012"",. ,www.ioi2012.org,. Retrieved ,2016-07-21,., , +,^, ,Braga, Matthew (13 Oct 2016). ,""Change Agents 2016: Vitalik Buterin, Ethereum"",. Canadian Business,. Retrieved ,6 June, 2017,., , +,^ ,a, ,b, ,Elliot, Josh (July 2, 2014). ,""Why a 20-year-old Toronto drop-out accepted $100,000 to stay out of school"",. ,CTV,. Retrieved ,25 April, 2016,., , +,^, ,""4chan's Vitalik Buterin Death Hoax Crashes Ethereum Price"",. ,Bitsonline,. 2017-06-25,. Retrieved ,2017-06-25,., , +,^, ,""Interview with Vitalik Buterin"",. Bitcorati, Inc. January 10, 2014,. Retrieved ,June 3,, 2017,., , +,^, ,""About us – Bitcoin Magazine"",. ,Bitcoin Magazine,. Coin Publishing Ltd,. Retrieved ,23 February, 2014,., , +,^, ,Vigna, Paul; Casey, Michael J. (2015). ""Community"". ,The Age of Cryptocurrency: How Bitcoin and the Blockchain Are Challenging .., ,Macmillan Publishers,. p. 88. ,ISBN, ,9781250065636,., , +,^, ,""Ledger"",. Retrieved ,4 February, 2016,., , +,^, ,Aron, Jacob (6 February 2014). ,""Bitcoin: How its core technology will change the world"",. ,New Scientist, (2955),. Retrieved ,22 February, 2014,., , +,^, ,Hajdarbegovic, Nermin (23 February 2014). ,""Ethereum launches 'Cryptocurrency 2.0' network"",. ,CoinDesk,. Retrieved ,22 February, 2014,., , +,^, ,""Vitalik Buterin on Ethereum and The Decentralized Future"",. ,Future Thinkers Podcast,. 2015-04-21,. Retrieved ,2016-05-13,., , +,^, ,""Facilitating Online Contractual Agreements With Vitalik Buterin"",. ,Eyerys.com,. 2017-06-29,. Retrieved ,2017-06-30,., , +,^, ,Southurst, Jon (7 January 2014). ,""Roger Ver and Erik Voorhees Back Bitcoin Wallet KryptoKit"",. ,CoinDesk,. Retrieved ,25 April, 2016,., , +,^, ,Kelly, Brian (2015). ""Smart Money, set it and forget it"". ,The Bitcoin Big Bang: How Alternative Currencies Are About to Change the World,. ,Wiley Publishing,. p. 156. ,ISBN, ,978-1118963661,., , +,^, ,Antonopoulos, Andreas M. (December 20, 2014). ""#4. Keys, Addresses, and Wallets"". ,Mastering Bitcoin: Unlocking Digital Cryptocurrencies,. ,O'Reilly Media,. p. 82. ,ISBN, ,978-1449374044,., , +,^, ,Finley, Klint (5 June 2014). ,""$100k Peter Thiel Fellowship Awarded to Ethereum's Vitalik Buterin"",. ,CoinDesk,. Retrieved ,11 August, 2014,., , +,^, ,The 2014 World Technology Award Winner, +,^, ,40 under 40: Vitalik Buterin, 22,, ,Fortune,, September 2016., +,^, ,Forbes 30 under 30,, ,Forbes,, November 2017., +, +, +,External links,[,edit,], +, +,Decentralizing Everything with Ethereum's Vitalik Buterin | Disrupt SF 2017, (YouTube), +, + + +, +, +, +, +",Vitalik Buterin +" 20 November 2017, at 16:38."," +, +, +, +A timeline chart of how ,Linux distributions, forked., +, +, +,In ,software engineering,, a ,project fork, happens when developers take a copy of ,source code, from one ,software package, and start independent development on it, creating a distinct and separate piece of software. The term often implies not merely a ,development branch,, but also a split in the developer community, a form of ,schism,.,[1], +,Free and open-source software, is that which, by definition, may be forked from the original development team without prior permission, without violating ,copyright, law. However, licensed forks of proprietary software (,e.g., ,Unix,) also happen., +, +, +, +,Contents, +, +, +,1, ,Etymology, +,2, ,Forking of free and open source software, +,3, ,Forking proprietary software, +,4, ,See also, +,5, ,References, +,6, ,External links, +, +, +, +,Etymology,[,edit,], +,The word fork stems from the Latin word furca, meaning a ""fork or similarly shaped instrument."",[2], ""Fork"" in the meaning of ""to divide in branches, go separate ways"" has been used as early as the 14th century.,[3], In the software environment, the word evokes the ,fork, system call, which causes a running process to split itself into two (almost) identical copies that (typically) diverge to perform different tasks.,[4], +,In the context of software development, ""fork"" was used in the sense of creating a revision control "",branch,"" by ,Eric Allman, as early as 1980, in the context of ,SCCS,:,[5], +, +,Creating a branch ""forks off"" a version of the program., +, +,The term was in use on ,Usenet, by 1983 for the process of creating a subgroup to move topics of discussion to.,[6], +,""Fork"" is not known to have been used in the sense of a community schism during the origins of Lucid Emacs (now ,XEmacs,) (1991) or the ,BSDs, (1993–1994); ,Russ Nelson, used the term ""shattering"" for this sort of fork in 1993, attributing it to ,John Gilmore,.,[7], However, ""fork"" was in use in the present sense by 1995 to describe the XEmacs split,,[8], and was an understood usage in the ,GNU, Project by 1996.,[9], +,Forking of free and open source software,[,edit,], +,Free and open source software may be legally forked without prior approval of those currently developing, managing, or distributing the software per both ,The Free Software Definition, and ,The Open Source Definition,:,[10], +, +,The freedom to distribute copies of your modified versions to others (freedom 3). By doing this, you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this., +,— ,The Free Software Definition,[11], +, +, +,3. Derived Works: The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software., +,— ,The Open Source Definition,[12], +, +,In free software, forks often result from a schism over different goals or personality clashes. In a fork, both parties assume nearly identical code bases, but typically only the larger group, or whoever controls the Web site, will retain the full original name and the associated user community. Thus, there is a reputation penalty associated with forking.,[10], The relationship between the different teams can be cordial or very bitter., +,Eric S. Raymond,, in his essay ,Homesteading the Noosphere,,,[13], stated that ""The most important characteristic of a fork is that it spawns competing projects that cannot later exchange code, splitting the potential developer community"". He notes in the ,Jargon File,:,[14], +, +,Forking is considered a Bad Thing—not merely because it implies a lot of wasted effort in the future, but because forks tend to be accompanied by a great deal of strife and acrimony between the successor groups over issues of legitimacy, succession, and design direction. There is serious social pressure against forking. As a result, major forks (such as the ,Gnu-Emacs,/,XEmacs, split, the fissioning of the ,386BSD, group into three daughter projects, and the short-lived GCC/EGCS split) are rare enough that they are remembered individually in hacker folklore., +, +,David A. Wheeler, notes,[10], four possible outcomes of a fork, with examples:, +, +,The death of the fork. This is by far the most common case. It is easy to declare a fork, but considerable effort to continue independent development and support., +,A re-merging of the fork (,e.g.,, ,egcs, becoming ""blessed"" as the new version of ,gcc,.), +,The death of the original (,e.g., the ,X.Org Server, succeeding and ,XFree86, dying.), +,Successful branching, typically with differentiation (,e.g.,, ,OpenBSD, and ,NetBSD,.), +, +,Distributed revision control, (DVCS) tools have popularised a less emotive use of the term ""fork"", blurring the distinction with ""branch"".,[15], With a DVCS such as ,Mercurial, or ,Git,, the normal way to contribute to a project, is to first create a personal branch of the repository, independent of the main repository, and later seek to have your changes integrated with it. Sites such as ,GitHub,, ,Bitbucket, and ,Launchpad, provide free DVCS hosting expressly supporting independent branches, such that the technical, social and financial barriers to forking a source code repository are massively reduced, and GitHub uses ""fork"" as its term for this method of contribution to a project., +,Forks often restart version numbering from 0.1 or 1.0 even if the original software was at version 3.0, 4.0, or 5.0. An exception is when the forked software is designed to be a drop-in replacement for the original project, ,e.g., ,MariaDB, for ,MySQL,[16], or ,LibreOffice, for ,OpenOffice.org,., +,Forking proprietary software,[,edit,], +,In ,proprietary software,, the copyright is usually held by the employing entity, not by the individual software developers. Proprietary code is thus more commonly forked when the owner needs to develop two or more versions, such as a ,windowed, version and a ,command line, version, or versions for differing operating systems, such as a ,word processor, for ,IBM PC, compatible machines and ,Macintosh, computers. Generally, such internal forks will concentrate on having the same look, feel, data format, and behavior between platforms so that a user familiar with one can also be productive or share documents generated on the other. This is almost always an economic decision to generate a greater ,market share, and thus pay back the associated extra development costs created by the fork., +,A notable proprietary fork not of this kind is the many varieties of proprietary ,Unix,—almost all derived from AT&T Unix under license and all called ""Unix"", but increasingly mutually incompatible.,[17], ,See, ,UNIX wars,., +,The ,BSD licenses, permit forks to become proprietary software, and some say,[,who?,], that commercial incentives thus make proprietisation almost inevitable. Examples include ,macOS, (based on the proprietary ,NeXTSTEP, and the open source ,FreeBSD,), ,Cedega, and ,CrossOver, (proprietary forks of ,Wine,, though CrossOver tracks Wine and contributes considerably), EnterpriseDB (a fork of ,PostgreSQL,, adding Oracle compatibility features,[18],), Supported PostgreSQL with their proprietary ESM storage system,,[19], and Netezza's,[20], proprietary highly scalable derivative of PostgreSQL. Some of these vendors contribute back changes to the community project, while some keep their changes as their own competitive advantages., +,See also,[,edit,], +, +,List of software forks, +,Source port, +,Downstream (software development), +,Group decision-making, +,Modular programming, +, +,Modding, +, +, +,Custom software, +,Personalization, +,Team effectiveness, +, +,Duplicate code, +, +, +,ROM Hacking, +, +,References,[,edit,], +, +, +,^, ,""Schism"", with its connotations, is a common usage, ,e.g., ,""the Lemacs/FSFmacs schism"", (,Jamie Zawinski,, 2000), ,""Behind the KOffice split"", (Joe Brockmeier, ,Linux Weekly News,, 2010-12-14), ,""Copyright assignment - once bitten, twice shy"", (Richard Hillesley, ,H-Online,, 2010-08-06), ,""Forking is a feature"", (,Anil Dash,, 2010-09-10), ,""The Great Software Schism"", (,Glyn Moody,, ,Linux Journal,, 2006-09-28), ,""To Fork Or Not To Fork: Lessons From Ubuntu and Debian"", (,Benjamin Mako Hill,, 2005)., +,^, ,See, e.g., ,""furca"" from Etymological Dictionary of Latin by Michiel de Vaan (Ph.D. 2002), +,^, ,Entry 'fork' in Online Etymology Dictionary, +,^, ,""The term fork is derived from the POSIX standard for operating systems: the system call used so that a process generates a copy of itself is called fork()."" ,Robles, Gregorio; González-Barahona, Jesús M. (2012). ,A Comprehensive Study of Software Forks: Dates, Reasons and Outcomes, ,(PDF),. OSS 2012 The Eighth International Conference on Open Source Systems,. Retrieved ,20 Oct, 2012,., , +,^, ,Allman, Eric. ,""An Introduction to the Source Code Control System."", Project Ingres, University of California at Berkeley, 1980., +,^, ,Can somebody fork off a ""net.philosophy""?, (,John Gilmore,, net.misc, 18 January 1983), +,^, ,Shattering — good or bad?, (Russell Nelson, gnu.misc.discuss, 1 October 1993), +,^, ,Re: Hey Franz: 32K Windows SUCK!!!!!, (Bill Dubuque, cu.cs.macl.info, 21 September 1995), +,^, ,Lignux?, (Marcus G. Daniels, gnu.misc.discuss, 7 June 1996), +,^ ,a, ,b, ,c, ,Why Open Source Software / Free Software (OSS/FS, FLOSS, or FOSS)? Look at the Numbers!: Forking, (,David A. Wheeler,), +,^, ,Stallman, Richard. ,""The Free Software Definition"",. Free Software Foundation,. Retrieved ,2013-10-15,., , +,^, ,""The Open Source Definition"",. The Open Source Initiative,. Retrieved ,15 October, 2013,., , +,^, ,Raymond, Eric S., (15 August 2002). ,""Promiscuous Theory, Puritan Practice"",., , +,^, ,Forked, (,Jargon File,), first added to ,v4.2.2,, 20 Aug 2000), +,^, ,e.g., ,Willis, Nathan (15 January 2015). ,""An ""open governance"" fork of Node.js"",. ,LWN.net,. Retrieved ,15 January, 2015,. ,Forks are a natural part of the open development model—so much so that GitHub famously plasters a ""fork your own copy"" button on almost every page., , See also ,Nyman, Linus (2015). ,""Understanding Code Forking in Open Source Software"", (Ph.D.). Hanken School of Economics. p. 57. ,Where practitioners have previously had rather narrow definitions of a fork, [...] the term now appears to be used much more broadly. Actions that would traditionally have been called a branch, a new distribution, code fragmentation, a pseudo-fork, etc. may all now be called forks by some developers. This appears to be in no insignificant part due to the broad definition and use of the term fork by GitHub., , +,^, ,Forked a project, where do my version numbers start?, +,^, ,Fear of forking, - An essay about forking in ,free software, projects, by Rick Moen, +,^, ,EnterpriseDB, +,^, ,Fujitsu Supported PostgreSQL, ,Archived, 20 August 2006 at the ,Wayback Machine,., +,^, ,Netezza, +, +, +,External links,[,edit,], +, +,Right to Fork, at ,Meatball Wiki, +,A PhD examining forking: ,(Nyman, 2015), ""Understanding Code Forking in Open Source Software - An examination of code forking, its effect on open source software, and how it is viewed and practiced by developers"", +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Free and open-source software, +, +, +, +,General, +, +, +, +,Alternative terms for free software, +,Comparison of open-source and closed-source software, +,Comparison of source code hosting facilities, +,Free software, +,Free software project directories, +,Gratis versus libre, +,Long-term support, +,Open-source software, +,Open-source software development, +,Outline, +, +, +, +, +, +,Software, +packages, +, +, +, +,Audio, +,Bioinformatics, +,Codecs, +,Collaboration, +,Configuration management, +,Device drivers, +, +,Graphics, +,Wireless, +, +, +,Geophysics, +,Health, +,Mathematics, +,Operating systems, +,Programming languages, +,Routing, +,Statistics, +,Television, +,Video games, +,Web applications, +, +,Content management systems, +,E-commerce, +, +, +,Word processors, +,Android apps, +,iOS apps, +,Commercial, +,Trademarked, +,Formerly proprietary, +, +, +, +, +, +,Community, +, +, +, +,Free software movement, +,History, +,Open-source software movement, +,Organizations, +,Events, +, +, +, +, +, +,Licenses, +, +, +, +,AFL, +,Apache, +,APSL, +,Artistic, +,Beerware, +,Boost, +,BSD, +,CC0, +,CDDL, +,EPL, +,GNU GPL, +,GNU LGPL, +,ISC, +,MIT, +,MPL, +,Ms-PL/RL, +,Python, +,Python Software Foundation, +,Sleepycat, +,Unlicense, +,WTFPL, +,zlib, +, +, +, +, +, +,License types, +and standards, +, +, +, +,Comparison of free and open-source software licenses, +,Contributor License Agreement, +,Copyfree, +,Copyleft, +,Debian Free Software Guidelines, +,Definition of Free Cultural Works, +,Free license, +,The Free Software Definition, +,The Open Source Definition, +,Open-source license, +,Permissive software licence, +,Public domain, +,Viral license, +, +, +, +, +, +,Challenges, +, +, +, +,Binary blob, +,Digital rights management, +,Hardware restrictions, +,License proliferation, +,Mozilla software rebranding, +,Proprietary software, +,SCO/Linux controversies, +,Secure boot, +,Software patents, +,Software security, +,Trusted Computing, +, +, +, +, +, +,Related topics, +, +, +, +,The Cathedral and the Bazaar, +,Forking, +,Microsoft Open Specification Promise, +,Revolution OS, +, +, +, +, +, +, +, +, +, ,Book, +, ,Category, +, ,Commons, +, ,Portal, +, +, +, +, +, +, + + +, +, +, +, +",Fork (software development) +" 31 December 2017, at 19:16."," +,pandas, +, +, +, +, +,Original author(s), +,Wes McKinney, +, +, +,Developer(s), +,Community, +, +, +, +, +, +,Stable release, +, +,0.22.0,[1], / 29 December 2017,; 19 days ago, (,2017-12-29,), +, +, +, +, +, +, +,Repository, +, +, +, +,https://github.com/pandas-dev/pandas, +, +, +, +, +, +,Written in, +,Python, +, +, +,Operating system, +,Cross-platform, +, +, +,Type, +,Technical computing, +, +, +,License, +,BSD-new license, +, +, +,Website, +,pandas,.pydata,.org, +, +, +,In ,computer programming,, ,pandas, is a ,software library, written for the ,Python programming language, for data manipulation and analysis. In particular, it offers data structures and operations for manipulating numerical tables and ,time series,. It is ,free software, released under the ,three-clause BSD license,.,[2], The name is derived from the term "",panel data,"", an ,econometrics, term for multidimensional, structured data sets,[,citation needed,],., +, +, +, +,Contents, +, +, +,1, ,Library features, +,2, ,History, +,3, ,See also, +,4, ,References, +,5, ,External links, +, +, +, +,Library features,[,edit,], +, +,DataFrame object for data manipulation with integrated indexing., +,Tools for reading and writing data between in-memory data structures and different file formats., +,Data alignment and integrated handling of missing data., +,Reshaping and pivoting of data sets., +,Label-based slicing, fancy indexing, and subsetting of large data sets., +,Data structure column insertion and deletion., +,Group by engine allowing split-apply-combine operations on data sets., +,Data set merging and joining., +,Hierarchical axis indexing to work with high-dimensional data in a lower-dimensional data structure., +,Time series-functionality: Date range generation,[3], and frequency conversion, moving window statistics, moving window linear regressions, date shifting and lagging., +, +,The library is highly optimized for performance, with critical code paths written in ,Cython, or ,C,.,[4], +,History,[,edit,], +,Developer ,Wes McKinney, started working on pandas in 2008 while at ,AQR Capital Management, out of the need for a high performance, flexible tool to perform quantitative analysis on financial data. Before leaving AQR he was able to convince management to allow him to open source the library., +,Another AQR employee, Chang She, joined the effort in 2012 as the second major contributor to the library., +,See also,[,edit,], +, +,matplotlib, +,NumPy, +,SciPy, +,R (programming language), +,Scikit-learn, +,statsmodels, +,List of numerical analysis software, +, +,References,[,edit,], +, +, +, +,^, ,""Release Notes – pandas 0.22.0 documentation"",. ,pandas,. 29 December 2017,. Retrieved ,31 December, 2017,., , +,^, ,""License – Package overview – pandas 0.21.1 documentation"",. ,pandas,. 12 December 2017,. Retrieved ,13 December, 2017,., , +,^, ,""pandas.date_range – pandas 0.21.1 documentation"",. ,pandas,. 12 December 2017,. Retrieved ,13 December, 2017,., , +,^, ,""Python Data Analysis Library – pandas: Python Data Analysis Library"",. ,pandas,. Retrieved ,13 November, 2017,., , +, +, +, +,External links,[,edit,], +, +,Official website, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Scientific software in ,Python, +, +, +, +, +, +, +,NumPy, +,SciPy, +,matplotlib, +,pandas, +,scikit-learn, +,scikit-image, +,statsmodels, +,MayaVi, +,more, +, +, +, +, +, +, +, +, +, +,This ,software, article is a ,stub,. You can help Wikipedia by ,expanding it,., +, +, +,v, +,t, +,e, +, +, +, +, +, + + +, +, +, +, +",pandas (software) +" 18 October 2017, at 17:23.","In ,software engineering,, the ,active record pattern, is an ,architectural pattern, found in software that stores in-memory object data in ,relational databases,. It was named by ,Martin Fowler, in his 2003 book ,Patterns of Enterprise Application Architecture,.,[1], The interface of an object conforming to this pattern would include functions such as Insert, Update, and Delete, plus properties that correspond more or less directly to the columns in the underlying database table., +,The active record pattern is an approach to accessing data in a ,database,. A ,database table, or ,view, is wrapped into a ,class,. Thus, an ,object, instance is tied to a single row in the table. After creation of an object, a new row is added to the table upon save. Any object loaded gets its information from the database. When an object is updated, the corresponding row in the table is also updated. The wrapper class implements ,accessor, ,methods, or properties for each column in the table or view., +,This pattern is commonly used by object persistence tools and in ,object-relational mapping, (ORM). Typically, ,foreign key, relationships will be exposed as an object instance of the appropriate type via a property., +, +, +, +,Contents, +, +, +,1, ,Implementations, +, +,1.1, ,ColdFusion, +,1.2, ,PHP, +,1.3, ,Ruby, +,1.4, ,Python, +,1.5, ,Java, +,1.6, ,Dart, +,1.7, ,Other languages, +, +, +,2, ,Criticism, +, +,2.1, ,Testability, +,2.2, ,Single responsibility principle and separation of concerns, +, +, +,3, ,See also, +,4, ,References, +,5, ,External links, +, +, +, +,Implementations,[,edit,], +,Implementations of the concept can be found in various ,frameworks, for many programming environments. For example, if in a database there is a table ,parts, with columns ,name, (string type) and ,price, (number type), and the Active Record pattern is implemented in the class ,Part,, the pseudo-code, +, +part = new Part() +part.name = ""Sample part"" +part.price = 123.45 +part.save() +, +,will create a new row in the ,parts, table with the given values, and is roughly equivalent to the ,SQL, command, +, +, +,INSERT, ,INTO, ,parts, ,(,name,,, ,price,), ,VALUES, ,(,'Sample part',,, ,123,.,45,);, +, +,Conversely, the class can be used to query the database:, +, +b = Part.find_first(""name"", ""gearbox"") +, +,This will find a new ,Part, object based on the first matching row from the ,parts, table whose ,name, column has the value ""gearbox"". The SQL command used might be similar to the following, depending on the SQL implementation details of the database:, +, +, +,SELECT, ,*, ,FROM, ,parts, ,WHERE, ,name, ,=, ,'gearbox', ,LIMIT, ,1,;, ,-- MySQL or PostgreSQL, +, +,ColdFusion,[,edit,], +,ColdFusion, has an open source implementation of the active record pattern., +,The ,ColdFusion on Wheels, framework has an implementation of the active record pattern. It is open source and has the added advantage of requiring no complex configuration., +,PHP,[,edit,], +,PHP ActiveRecord is one ,open-source, library designed to fulfill the active record pattern.,[2], +,Several open-source ,PHP, frameworks also bundle their own ,ORM, implementing the active record pattern. Most implementations support relationships, behaviors, ,validation,, ,serialization, and support for multiple data sources., +, +,Maghead,, a high performance database framework written in pure PHP, contains a class/query method generator to boost the performance. It mixes the active record pattern with repository pattern., +,Boiler,, an ,MVC, framework for PHP, contains a set of tools for auto-generation of active record models.,[3], The project, designed for data-centered projects, aims to automate as much of the development process as possible,,[4], using ,Apache Ant,. Although a new addition to Open Source market,,[5], the project is already in use in many live applications, both commercially and open. The framework currently only supports ,MySQL, though the developers have reported some commercial work in Postgres., +,Cygnite PHP Framework,'s default database layer implements Active Record pattern which closely resemble with ,Ruby on Rails,.,[6], +,Laravel, contains an ORM called 'Eloquent' which implements the active record pattern, closely resembling that of ,Ruby on Rails, ,[7], +,CakePHP,'s ORM implements the active record pattern,,[8], but as of version 2.x queries return arrays of data, with levels of ,related data, as required. Version 3.0 uses objects and offers a hybrid implementation of ActiveRecord and Datamapper patterns., +,Lithium,'s ORM implements active record., +,Symfony,'s default database layer and ORM "",Doctrine,"" does not implement active record but rather a ,data mapper, approach., +,CodeIgniter, has a query builder it calls ""ActiveRecord"", but which does not implement the Active Record pattern. Instead, it implements what the user guide refers to as a modified version of the pattern. The Active Record functionality in CodeIgniter can be achieved by using either CodeIgniter DataMapper library or CodeIgniter Gas ORM library., +,Yii,'s ORM also implements the active record pattern.,[9], +,Propel, also implements the active record pattern.,[10], +,Paris is A lightweight Active Record implementation for PHP5, built on top of Idiorm.,[11], +, +,Ruby,[,edit,], +,The ,Ruby, library ActiveRecord implements ORM. It creates a ,persistable, domain model from business objects and database tables, where logic and data are presented as a unified package. It largely simplifies object-record mapping by assuming homogeneous identification method (i.e. ,Surrogate key,) by virtue of ,convention over configuration,. ActiveRecord adds ,inheritance, and ,associations, to the pattern above, solving two substantial limitations of that pattern. A set of macros acts as a domain language for the latter, and the ,Single Table Inheritance, pattern is integrated for the former; thus, ActiveRecord increases the functionality of the active record pattern approach to database interaction. ActiveRecord is the default ‘model’ component of the ,model-view-controller, web-application framework ,Ruby on Rails,, and is also a stand-alone ORM package for other Ruby applications. In both forms, it was conceived of by ,David Heinemeier Hansson,, and has been improved upon by a number of contributors.,[12], +,Other ORMs have been released since ActiveRecord first appeared. For example, ,DataMapper, and ,Sequel,. These ORMs include improvements over the original ActiveRecord framework.,[,neutrality, is ,disputed,], As a response to their release and adoption by the Rails community, Ruby on Rails v3.0 became independent of an ORM system, so that Rails users can instead use DataMapper or Sequel as their ORM., +,Python,[,edit,], +,Django,, one of ,Python,'s many web frameworks, uses the Active Record pattern for its ORM.,[13], +,Java,[,edit,], +,The ,Java language, implements the Active Record pattern via the ,ActiveJDBC, library. ActiveJDBC is an implementation of Active Record design pattern inspired by ,Ruby on Rails, ActiveRecord. ActiveJDBC is lightweight, fast, small and does not require any configuration., +,ActiveJPA, and ,jOOQ (for Java Object Oriented Querying), implements the Active record pattern, combining active records with ,source code generation, and a querying DSL similar to ,SQL, allowing for retrieving active records using complex SQL statements., +,The ,Play framework, is a Java web framework which implements the Active Record pattern, using ideas from ,Ruby on Rails,., +,JActiveRecord, is yet another library providing easy ,ORM, mapping for Java, inspired by ,Ruby on Rails, ActiveRecord but more focused on Java's type-safety., +,Dart,[,edit,], +,The ,Dart, language implements the Active Record pattern via the ,Dartabase Migration, and ,Dartabase Model, packages, +,Dartabase Migration, Serverside Database Object Models for simple data manipulation currently supporting MySQL/PGSQL inspired by Ruby on Rails Migration, +,Dartabase Model, Serverside Database migration for simple version controlled database structure manipulation currently supporting MySQL/PGSQL inspired by Ruby on Rails Model now console and GUI (build in Polymer 1.0), +,Other languages,[,edit,], +,There are several open source implementations of the Active Record pattern in other languages, including ,JavaScript, (e.g., ,ActiveJS,'s Active Record,[14],), ,Perl, (,DBIx::Class,), ,ActionScript,, ,Haxe, (SPOD,[15],), ,C#,,,[16], ,Objective-C,[17], and ,Scala,.,[18], +,Criticism,[,edit,], +,Testability,[,edit,], +,Due to the coupling of database interaction and application logic when using the active record pattern, unit testing an active record object without a database becomes difficult,[,citation needed,],. The negative effects on testability in the active record pattern can be minimized by using ,mocking, or ,dependency injection, frameworks to substitute the real data tier with a simulated one,[,citation needed,],., +,Single responsibility principle and separation of concerns,[,edit,], +,Another critique of the active record pattern is that, also due to the strong coupling of database interaction and application logic, an active record object does not follow the ,single responsibility principle, and ,separation of concerns, as opposed to ,multitier architecture, which properly addresses these practices. Because of this, the active record pattern is best and most often employed in simple applications that are all forms-over-data with ,CRUD, functionality, or only as one part of an architecture. Typically that part is data access and why several ORMs implement the active record pattern., +,See also,[,edit,], +, +,Business object, +,CRUD, +,Data mapper pattern, +,Object-relational mapping, +, +,References,[,edit,], +, +, +,^, ,Fowler, Martin (2003). ,Patterns of enterprise application architecture,. Addison-Wesley. ,ISBN, ,978-0-321-12742-6,., , +,^, ,""PHP ActiveRecord"",., , +,^, ,""Boiler Documentation: Models"",., , +,^, ,""YouTube demonstration of automation tools"",., , +,^, ,""Open Source Code, hosted on Github"",., , +,^, ,""Cygnite Framework Documentation: Active Record"",., , +,^, ,""Laravel Documentation: Eloquent ORM"",., , +,^, ,""CakePHP (most popular PHP framework)"",. ,Stanford University Wiki,., , +,^, ,""The Definitive Guide to Yii: Active Record"",., , +,^, ,""Propel: Active Record Reference"",., , +,^, ,""Github: j4mie/paris"",., , +,^, ,""Ruby Active Record"",. Retrieved ,2013-04-12,., , +,^, ,https://docs.djangoproject.com/en/1.11/misc/design-philosophies/#models,. Retrieved ,2017-06-28,., , ,Missing or empty ,|title=, (,help,), +,^, ,""ActiveJS Active Record"",. Retrieved ,2011-07-28,., , +,^, ,""SPOD Macros"",. Retrieved ,2013-01-09,., , +,^, ,""Castle ActiveRecord"",. Retrieved ,14 January, 2014,., , +,^, ,""Objective Record"",. Retrieved ,14 January, 2013,., , +,^, ,""Scala Active Record"",. Retrieved ,4 December, 2013,., , +, +, +,External links,[,edit,], +, +,Ruby implementation, +,DBIx::Class Perl Implementation, +,PHP implementation, +,.NET implementation, +,AIR Active Record project home, +,troba Active record extension, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Software design patterns, +, +, +, +,Gang of Four, +patterns, +, +, +, +, +,Creational, +, +, +, +,Abstract factory, +,Builder, +,Factory method, +,Prototype, +,Singleton, +, +, +, +, +, +,Structural, +, +, +, +,Adapter, +,Bridge, +,Composite, +,Decorator, +,Facade, +,Flyweight, +,Proxy, +, +, +, +, +, +,Behavioral, +, +, +, +,Chain of responsibility, +,Command, +,Interpreter, +,Iterator, +,Mediator, +,Memento, +,Observer, +,State, +,Strategy, +,Template method, +,Visitor, +, +, +, +, +, +, +, +, +,Concurrency, +patterns, +, +, +, +,Active object, +,Balking, +,Binding properties, +,Double-checked locking, +,Event-based asynchronous, +,Guarded suspension, +,Join, +,Lock, +,Monitor, +,Proactor, +,Reactor, +,Read write lock, +,Scheduler, +,Thread pool, +,Thread-local storage, +, +, +, +, +, +,Architectural, +patterns, +, +, +, +,Front controller, +,Interceptor, +,MVC, +,ADR, +,ECS, +,n,-tier, +,Specification, +,Publish–subscribe, +,Naked objects, +,Service locator, +,Active record, +,Identity map, +,Data access object, +,Data transfer object, +,Inversion of control, +,Model 2, +, +, +, +, +, +,Other, +patterns, +, +, +, +,Blackboard, +,Business delegate, +,Composite entity, +,Dependency injection, +,Intercepting filter, +,Lazy loading, +,Mock object, +,Null object, +,Object pool, +,Servant, +,Twin, +,Type tunnel, +,Method chaining, +, +, +, +, +, +,Books, +, +, +, +,Design Patterns, +,Enterprise Integration Patterns, +, +, +, +, +, +,People, +, +, +, +,Christopher Alexander, +,Erich Gamma, +,Ralph Johnson, +,John Vlissides, +,Grady Booch, +,Kent Beck, +,Ward Cunningham, +,Martin Fowler, +,Robert Martin, +,Jim Coplien, +,Douglas Schmidt, +,Linda Rising, +, +, +, +, +, +,Communities, +, +, +, +,The Hillside Group, +,The Portland Pattern Repository, +, +, +, +, +, +, + + +, +, +, +, +",Active record pattern +" 10 October 2017, at 13:13."," +, +, +, +, +, +,This article ,needs additional citations for ,verification,. ,Please help ,improve this article, by ,adding citations to reliable sources,. Unsourced material may be challenged and removed., ,(September 2016), ,(,Learn how and when to remove this template message,), +, +, +, +,In ,software engineering,, ,don't repeat yourself, (,DRY,) is a ,principle, of ,software development, aimed at reducing repetition of software patterns, replacing them with abstractions; and several copies of the same data, using ,data normalization, to avoid redundancy., +,The DRY principle is stated as ""Every piece of knowledge must have a single, unambiguous, authoritative representation within a system"". The principle has been formulated by ,Andy Hunt, and ,Dave Thomas, in their book ,The Pragmatic Programmer,. They apply it quite broadly to include "",database schemas,, ,test plans,, the ,build, system, even ,documentation,"".,[1], When the DRY principle is applied successfully, a modification of any single element of a system does not require a change in other logically unrelated elements. Additionally, elements that are logically related all change predictably and uniformly, and are thus kept in ,sync,. Besides using ,methods, and ,subroutines, in their code, Thomas and Hunt rely on ,code generators,, automatic build systems, and ,scripting languages, to observe the DRY principle across layers., +, +, +, +,Contents, +, +, +,1, ,DRY vs WET solutions, +,2, ,See also, +,3, ,References, +,4, ,External links, +, +, +, +,DRY vs WET solutions,[,edit,], +,Violations of DRY are typically referred to as WET solutions, which is commonly taken to stand for either ""write everything twice"", ""we enjoy typing"" or ""waste everyone's time"". WET solutions are common in multi-tiered architectures where a developer may be tasked with, for example, adding a comment field on a form in a web application. The text string ""comment"" might be repeated in the label, the HTML tag, in a read function name, a private variable, database DDL, queries, and so on. A DRY approach eliminates that redundancy by leveraging frameworks that reduce or eliminate all those edit tasks excepting the most important one, leaving the extensibility of adding new knowledge variables in one place.,[2],[3],[4], +,See also,[,edit,], +, +,Abstraction principle (programming), +,Code duplication, +,Code reuse, +,Database normalization, and ,Denormalization, +,Disk mirroring, +,Redundancy (engineering), +,Rule of three (computer programming), +,Separation of concerns, +,Single source of truth, (SSOT/SPOT), +,Structured programming, +, +,References,[,edit,], +, +, +, +,^, ,Dave Thomas, interviewed by Bill Venners (2003-10-10). ,""Orthogonality and the DRY Principle"",. Retrieved ,2006-12-01,., , +,^, ,Justin Lee (2006-03-08). ,""DRY is for losers"",. Retrieved ,2013-08-31,., , +,^, ,Alex Papadimoulis (2011-12-08). ,""The WET Cart"",. Retrieved ,2012-05-21,., , +,^, ,Kevin Greer (2016-02-05). ,""FOAM DRY + WET"",. Retrieved ,2016-03-09,., , +, +, +, +,External links,[,edit,], +, +,Orthogonality and the DRY Principle, +,Don't Repeat Yourself, at ,WikiWikiWeb, +,Once and Only Once, at WikiWikiWeb, +,97 Things Every Programmer Should Know (O'Reilly), +,The myth of over-normalization, (discussion of academic extremes vs. real-word database scenarios), +,Wilson G, Aruliah DA, Brown CT, Chue Hong NP, Davis M, Guy RT, et al. (2014). ,""Best Practices for Scientific Computing"",. ,PLoS Biol,. ,12, (1): e1001745. ,doi,:,10.1371/journal.pbio.1001745,. ,Don't Repeat Yourself (or Others), , +, + + +, +, +, +, +",Don't repeat yourself +" 1 November 2017, at 09:32."," +, +, +, +, +, +,This article ,needs additional citations for ,verification,. ,Please help ,improve this article, by ,adding citations to reliable sources,. Unsourced material may be challenged and removed., ,(January 2013), ,(,Learn how and when to remove this template message,), +, +, +, +,Convention over configuration, (also known as ,coding by convention,) is a software ,design paradigm, used by ,software frameworks, that attempt to decrease the number of decisions that a ,developer, using the framework is required to make without necessarily losing flexibility. The concept was introduced by ,David Heinemeier Hansson, to describe the philosophy of the ,Ruby on Rails, ,web framework,, but is related to earlier ideas like the concept of ""sensible ,defaults,"" and the ,principle of least astonishment, in ,user interface design,., +,The phrase essentially means a developer only needs to specify unconventional aspects of the application. For example, if there is a class Sales in the model, the corresponding table in the database is called ""sales"" by default. It is only if one deviates from this convention, such as the table ""product sales"", that one needs to write code regarding these names., +,When the convention implemented by the tool matches the desired behavior, it behaves as expected without having to write configuration files. Only when the desired behavior deviates from the implemented convention is explicit configuration required., +,Ruby on Rails' use of the phrase is particularly focused on its default project file and directory structure, which prevent developers from having to write ,XML, configuration files to specify which ,modules, the framework should load, which was common in many earlier frameworks., +,Disadvantages of the convention over configuration approach can occur due to conflicts with other software design principles, like the ,Zen of Python,'s ""explicit is better than implicit."" A ,software framework, based on convention over configuration often involves a ,domain-specific language, with a limited set of constructs or an ,inversion of control, in which the developer can only affect behavior using a limited set of ,hooks,, both of which can make implementing behaviors not easily expressed by the provided conventions more difficult than when using a ,software library, that does not try to decrease the number of decisions developers have to make or require inversion of control., +,Other methods of decreasing the number of decisions a developer needs to make include ,programming idioms, and configuration libraries with a ,multilayered architecture,., +, +, +, +,Contents, +, +, +,1, ,Motivation, +,2, ,Usage, +,3, ,See also, +,4, ,References, +,5, ,External links, +, +, +, +,Motivation,[,edit,], +,Some frameworks need multiple configuration files, each with many settings. These provide information specific to each project, ranging from URLs to mappings between classes and database tables. A large number of configuration files with lots of parameters is often difficult to maintain., +,For example, early versions of the Java persistence mapper ,Hibernate, mapped entities and their fields to the database by describing these relationships in XML files. Most of this information could have been revealed by conventionally mapping class names to the identically named ,database, tables and the fields to their columns, respectively. Later versions did away with the ,XML, configuration file and instead employed these very conventions, deviations from which can be indicated through the use of ,Java annotations, (see JavaBeans specification, linked below)., +,Usage,[,edit,], +, +, +, +, +The ,Maven, software tool auto-generated this directory structure for a Java project., +, +, +,Many modern frameworks use a ,convention over configuration, approach., +,The concept is older, however, dating back to the concept of a ,default,, and can be spotted more recently in the roots of ,Java, libraries. For example, the ,JavaBeans, specification relies on it heavily. To quote the ,JavaBeans, specification 1.01:,[1], +, +,""As a general rule we don't want to invent an enormous java.beans.everything class that people have to inherit from. Instead we'd like the ,JavaBeans, runtimes to provide default behaviour for 'normal' objects, but to allow objects to override a given piece of default behaviour by inheriting from some specific java.beans.something interface."", +, +,See also,[,edit,], +, +,Principle of least astonishment, +,Comparison of web frameworks, +,Frameworks that use the paradigm: +, +,ColdBox Platform, runs on ,Railo, +,Ruby on Rails, +,Lift, +,CakePHP, +,Apache Maven, +,Grails, +,Symfony, +,Appcelerator's Titanium Alloy, +,Yii, +,Laravel, +,Crosslight, +,Durandal (JavaScript SPA Framework), +,Ember.js, +,Enduro.js, +,Java Platform, Enterprise Edition, +,ASP.NET MVC, +,Spring Framework, +,Contao, +,Sails (web framework), +,Meteor, +,Roxy rest-API, +,Play Framework, +,KumbiaPHP Framework, +,Aurelia, +, +, +, +,References,[,edit,], +, +, +, +,^, ,Sun (24 July 1997). ,JavaBeans specification, ,Archived, 6 April 2012 at the ,Wayback Machine,., section 1.4., +, +, +, +, +,Bachle, M., & Kirchberg, P. (2007). ""Ruby on rails"". Software, IEEE, 24(6), 105-108. ,DOI 10.1109/BCI.2009.31,., +,Miller, J. (2009). ""Design For Convention Over Configuration"". Microsoft, Retrieved 18 April 2010., +,Chen, Nicholas (2006). ""Convention over configuration""., +, +,External links,[,edit,], +, +,Detailed information on CoC, +, + + +, +, +, +, +",Convention over configuration +" 2 January 2018, at 17:20.","In ,software engineering,, a ,software design pattern, is a general, ,reusable, solution to a commonly occurring problem within a given context in ,software design,. It is not a finished design that can be transformed directly into ,source, or ,machine code,. It is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized ,best practices, that the programmer can use to solve common problems when designing an application or system., +,Object-oriented, design patterns typically show relationships and ,interactions, between ,classes, or ,objects,, without specifying the final application classes or objects that are involved. Patterns that imply mutable state may be unsuited for ,functional programming, languages, some patterns can be rendered unnecessary in languages that have built-in support for solving the problem they are trying to solve, and object-oriented patterns are not necessarily suitable for non-object-oriented languages., +,Design patterns may be viewed as a structured approach to ,computer programming, intermediate between the levels of a ,programming paradigm, and a concrete ,algorithm,., +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Practice, +,3, ,Structure, +, +,3.1, ,Domain-specific patterns, +, +, +,4, ,Classification and list, +, +,4.1, ,Creational patterns, +,4.2, ,Structural patterns, +,4.3, ,Behavioral patterns, +,4.4, ,Concurrency patterns, +, +, +,5, ,Documentation, +,6, ,Criticism, +,7, ,See also, +,8, ,References, +,9, ,Further reading, +, +, +, +,History,[,edit,], +,Patterns originated as an ,architectural concept, by ,Christopher Alexander, (1977/79). In 1987, ,Kent Beck, and ,Ward Cunningham, began experimenting with the idea of applying patterns to programming – specifically ,pattern languages, – and presented their results at the ,OOPSLA, conference that year.,[1],[2], In the following years, Beck, Cunningham and others followed up on this work., +,Design patterns gained popularity in ,computer science, after the book ,Design Patterns: Elements of Reusable Object-Oriented Software, was published in 1994 by the so-called ""Gang of Four"" (Gamma et al.), which is frequently abbreviated as ""GoF"". That same year, the first ,Pattern Languages of Programming, Conference was held and the following year, the ,Portland Pattern Repository, was set up for documentation of design patterns. The scope of the term remains a matter of dispute. Notable books in the design pattern genre include:, +, +,Gamma, Erich,; ,Helm, Richard,; ,Johnson, Ralph,; ,Vlissides, John, (1995). ,Design Patterns: Elements of Reusable Object-Oriented Software,. ,Addison-Wesley,. ,ISBN, ,0-201-63361-2,., , +,Brinch Hansen, Per, (1995). ,Studies in Computational Science: Parallel Programming Paradigms,. Prentice Hall. ,ISBN, ,0-13-439324-4,., , +,Buschmann, Frank,; Meunier, Regine; Rohnert, Hans; Sommerlad, Peter (1996). ,Pattern-Oriented Software Architecture, Volume 1: A System of Patterns,. John Wiley & Sons. ,ISBN, ,0-471-95869-7,., , +,Schmidt, Douglas C.,; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). ,Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects,. John Wiley & Sons. ,ISBN, ,0-471-60695-2,., , +,Fowler, Martin, (2002). ,Patterns of Enterprise Application Architecture,. ,Addison-Wesley,. ,ISBN, ,978-0-321-12742-6,., , +,Hohpe, Gregor; Woolf, Bobby (2003). ,Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions,. ,Addison-Wesley,. ,ISBN, ,0-321-20068-3,., , +,Freeman, Eric T; Robson, Elisabeth; Bates, Bert; ,Sierra, Kathy, (2004). ,Head First Design Patterns,. ,O'Reilly Media,. ,ISBN, ,0-596-00712-4,., , +, +,Although design patterns have been applied practically for a long time, formalization of the concept of design patterns languished for several years.,[3], +,Practice,[,edit,], +,Design patterns can speed up the development process by providing tested, proven development paradigms.,[4], Effective software design requires considering issues that may not become visible until later in the implementation. Reusing design patterns helps to prevent subtle issues that can cause major problems,[,citation needed,],, and it also improves code readability for coders and architects who are familiar with the patterns., +,In order to achieve flexibility, design patterns usually introduce additional levels of ,indirection,, which in some cases may complicate the resulting designs and hurt application performance., +,By definition, a pattern must be programmed anew into each application that uses it. Since some authors see this as a step backward from ,software reuse, as provided by ,components,, researchers have worked to turn patterns into components. Meyer and Arnout were able to provide full or partial componentization of two-thirds of the patterns they attempted.,[5], +,Software design techniques are difficult to apply to a broader range of problems.,[,citation needed,], Design patterns provide general solutions, ,documented, in a format that does not require specifics tied to a particular problem., +,Structure,[,edit,], +,Design patterns are composed of several sections (see ,§ Documentation, below). Of particular interest are the Structure, Participants, and Collaboration sections. These sections describe a ,design motif,: a prototypical ,micro-architecture, that developers copy and adapt to their particular designs to solve the recurrent problem described by the design pattern. A micro-architecture is a set of program constituents (e.g., classes, methods...) and their relationships. Developers use the design pattern by introducing in their designs this prototypical micro-architecture, which means that micro-architectures in their designs will have structure and organization similar to the chosen design motif., +,Domain-specific patterns,[,edit,], +,Efforts have also been made to codify design patterns in particular domains, including use of existing design patterns as well as domain specific design patterns. Examples include ,user interface, design patterns,,[6], ,information visualization,,,[7], secure design,,[8], ""secure usability"",,[9], Web design ,[10], and business model design.,[11], +,The annual ,Pattern Languages of Programming, Conference proceedings ,[12], include many examples of domain-specific patterns., +,Classification and list,[,edit,], +, +, +, +, +, +, +,This section ,may have been ,copied and pasted, from a source, ,possibly, in violation of ,Wikipedia's copyright policy,. ,Please ,remedy this, by editing this article to remove any non-free copyrighted content and attributing free content correctly, or flagging the content for deletion. Please be sure that the supposed source of the copyright violation is not itself a ,Wikipedia mirror,., ,(August 2017), +, +, +, +,Design patterns were originally grouped into the categories: ,creational patterns,, ,structural patterns,, and ,behavioral patterns,, and described using the concepts of ,delegation,, ,aggregation,, and consultation. For further background on object-oriented design, see ,coupling, and ,cohesion,, ,inheritance,, ,interface,, and ,polymorphism,. Another classification has also introduced the notion of ,architectural design pattern, that may be applied at the architecture level of the software such as the ,Model–View–Controller, pattern., +,Creational patterns,[,edit,], +, +, +,Name, +,Description, +,In ,Design Patterns, +,In ,Code Complete,[13], +,Other, +, +, +,Abstract factory, +,Provide an interface for creating ,families, of related or dependent objects without specifying their concrete classes., +,Yes, +,Yes, +,N/A, +, +, +,Builder, +,Separate the construction of a complex object from its representation, allowing the same construction process to create various representations., +,Yes, +,No, +,N/A, +, +, +,Dependency Injection, +,A class accepts the objects it requires from an injector instead of creating the objects directly., +,No, +,No, +,N/A, +, +, +,Factory method, +,Define an interface for creating a ,single, object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses., +,Yes, +,Yes, +,N/A, +, +, +,Lazy initialization, +,Tactic of delaying the creation of an object, the calculation of a value, or some other expensive process until the first time it is needed. This pattern appears in the GoF catalog as ""virtual proxy"", an implementation strategy for the ,Proxy, pattern., +,Yes, +,No, +,PoEAA,[14], +, +, +,Multiton, +,Ensure a class has only named instances, and provide a global point of access to them., +,No, +,No, +,N/A, +, +, +,Object pool, +,Avoid expensive acquisition and release of resources by recycling objects that are no longer in use. Can be considered a generalisation of ,connection pool, and ,thread pool, patterns., +,No, +,No, +,N/A, +, +, +,Prototype, +,Specify the kinds of objects to create using a prototypical instance, and create new objects from the 'skeleton' of an existing object, thus boosting performance and keeping memory footprints to a minimum., +,Yes, +,No, +,N/A, +, +, +,Resource acquisition is initialization, (RAII), +,Ensure that resources are properly released by tying them to the lifespan of suitable objects., +,No, +,No, +,N/A, +, +, +,Singleton, +,Ensure a class has only one instance, and provide a global point of access to it., +,Yes, +,Yes, +,N/A, +, +, +,Structural patterns,[,edit,], +, +, +,Name, +,Description, +,In ,Design Patterns, +,In ,Code Complete,[13], +,Other, +, +, +,Adapter,, Wrapper, or Translator, +,Convert the interface of a class into another interface clients expect. An adapter lets classes work together that could not otherwise because of incompatible interfaces. The enterprise integration pattern equivalent is the translator., +,Yes, +,Yes, +,N/A, +, +, +,Bridge, +,Decouple an abstraction from its implementation allowing the two to vary independently., +,Yes, +,Yes, +,N/A, +, +, +,Composite, +,Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly., +,Yes, +,Yes, +,N/A, +, +, +,Decorator, +,Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality., +,Yes, +,Yes, +,N/A, +, +, +,Extension object, +,Adding functionality to a hierarchy without changing the hierarchy., +,No, +,No, +,Agile Software Development, Principles, Patterns, and Practices,[15], +, +, +,Facade, +,Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use., +,Yes, +,Yes, +,N/A, +, +, +,Flyweight, +,Use sharing to support large numbers of similar objects efficiently., +,Yes, +,No, +,N/A, +, +, +,Front controller, +,The pattern relates to the design of Web applications. It provides a centralized entry point for handling requests., +,No, +,No, +, +,J2EE Patterns,[16], ,PoEAA,[17], +, +, +, +,Marker, +,Empty interface to associate metadata with a class., +,No, +,No, +,Effective Java,[18], +, +, +,Module, +,Group several related elements, such as classes, singletons, methods, globally used, into a single conceptual entity., +,No, +,No, +,N/A, +, +, +,Proxy, +,Provide a surrogate or placeholder for another object to control access to it., +,Yes, +,No, +,N/A, +, +, +,Twin, ,[19], +,Twin allows modeling of multiple inheritance in programming languages that do not support this feature., +,No, +,No, +,N/A, +, +, +,Behavioral patterns,[,edit,], +, +, +,Name, +,Description, +,In ,Design Patterns, +,In ,Code Complete,[13], +,Other, +, +, +,Blackboard, +,Artificial intelligence, pattern for combining disparate sources of data (see ,blackboard system,), +,No, +,No, +,N/A, +, +, +,Chain of responsibility, +,Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it., +,Yes, +,No, +,N/A, +, +, +,Command, +,Encapsulate a request as an object, thereby allowing for the parameterization of clients with different requests, and the queuing or logging of requests. It also allows for the support of undoable operations., +,Yes, +,No, +,N/A, +, +, +,Interpreter, +,Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language., +,Yes, +,No, +,N/A, +, +, +,Iterator, +,Provide a way to access the elements of an ,aggregate, object sequentially without exposing its underlying representation., +,Yes, +,Yes, +,N/A, +, +, +,Mediator, +,Define an object that encapsulates how a set of objects interact. Mediator promotes ,loose coupling, by keeping objects from referring to each other explicitly, and it allows their interaction to vary independently., +,Yes, +,No, +,N/A, +, +, +,Memento, +,Without violating encapsulation, capture and externalize an object's internal state allowing the object to be restored to this state later., +,Yes, +,No, +,N/A, +, +, +,Null object, +,Avoid null references by providing a default object., +,No, +,No, +,N/A, +, +, +,Observer, or ,Publish/subscribe, +,Define a one-to-many dependency between objects where a state change in one object results in all its dependents being notified and updated automatically., +,Yes, +,Yes, +,N/A, +, +, +,Servant, +,Define common functionality for a group of classes., +,No, +,No, +,N/A, +, +, +,Specification, +,Recombinable ,business logic, in a ,Boolean, fashion., +,No, +,No, +,N/A, +, +, +,State, +,Allow an object to alter its behavior when its internal state changes. The object will appear to change its class., +,Yes, +,No, +,N/A, +, +, +,Strategy, +,Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it., +,Yes, +,Yes, +,N/A, +, +, +,Template method, +,Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure., +,Yes, +,Yes, +,N/A, +, +, +,Visitor, +,Represent an operation to be performed on the elements of an object structure. Visitor lets a new operation be defined without changing the classes of the elements on which it operates., +,Yes, +,No, +,N/A, +, +, +,Concurrency patterns,[,edit,], +, +, +,Name, +,Description, +,In ,POSA2,[20], +,Other, +, +, +,Active Object, +,Decouples method execution from method invocation that reside in their own thread of control. The goal is to introduce concurrency, by using ,asynchronous method invocation, and a ,scheduler, for handling requests., +,Yes, +,N/A, +, +, +,Balking, +,Only execute an action on an object when the object is in a particular state., +,No, +,N/A, +, +, +,Binding properties, +,Combining multiple observers to force properties in different objects to be synchronized or coordinated in some way.,[21], +,No, +,N/A, +, +, +,Blockchain, +,Decentralized way to store data and agree on ways of processing it in a ,Merkle tree,, optionally using ,digital signature, for any individual contributions., +,No, +,N/A, +, +, +,Compute kernel, +,The same calculation many times in parallel, differing by integer parameters used with non-branching pointer math into shared arrays, such as ,GPU,-optimized ,Matrix multiplication, or ,Convolutional neural network,., +,No, +,N/A, +, +, +,Double-checked locking, +,Reduce the overhead of acquiring a lock by first testing the locking criterion (the 'lock hint') in an unsafe manner; only if that succeeds does the actual locking logic proceed. +,Can be unsafe when implemented in some language/hardware combinations. It can therefore sometimes be considered an ,anti-pattern,., +, +,Yes, +,N/A, +, +, +,Event-based asynchronous, +,Addresses problems with the asynchronous pattern that occur in multithreaded programs.,[22], +,No, +,N/A, +, +, +,Guarded suspension, +,Manages operations that require both a lock to be acquired and a precondition to be satisfied before the operation can be executed., +,No, +,N/A, +, +, +,Join, +,Join-pattern provides a way to write concurrent, parallel and distributed programs by message passing. Compared to the use of threads and locks, this is a high-level programming model., +,No, +,N/A, +, +, +,Lock, +,One thread puts a ""lock"" on a resource, preventing other threads from accessing or modifying it.,[23], +,No, +,PoEAA,[14], +, +, +,Messaging design pattern (MDP), +,Allows the interchange of information (i.e. messages) between components and applications., +,No, +,N/A, +, +, +,Monitor object, +,An object whose methods are subject to ,mutual exclusion,, thus preventing multiple objects from erroneously trying to use it at the same time., +,Yes, +,N/A, +, +, +,Reactor, +,A reactor object provides an asynchronous interface to resources that must be handled synchronously., +,Yes, +,N/A, +, +, +,Read-write lock, +,Allows concurrent read access to an object, but requires exclusive access for write operations., +,No, +,N/A, +, +, +,Scheduler, +,Explicitly control when threads may execute single-threaded code., +,No, +,N/A, +, +, +,Thread pool, +,A number of threads are created to perform a number of tasks, which are usually organized in a queue. Typically, there are many more tasks than threads. Can be considered a special case of the ,object pool, pattern., +,No, +,N/A, +, +, +,Thread-specific storage, +,Static or ""global"" memory local to a thread., +,Yes, +,N/A, +, +, +,Documentation,[,edit,], +,The documentation for a design pattern describes the context in which the pattern is used, the forces within the context that the pattern seeks to resolve, and the suggested solution.,[24], There is no single, standard format for documenting design patterns. Rather, a variety of different formats have been used by different pattern authors. However, according to ,Martin Fowler,, certain pattern forms have become more well-known than others, and consequently become common starting points for new pattern-writing efforts.,[25], One example of a commonly used documentation format is the one used by ,Erich Gamma,, ,Richard Helm,, ,Ralph Johnson, and ,John Vlissides, (collectively known as the ""Gang of Four"", or GoF for short) in their book ,Design Patterns,. It contains the following sections:, +, +,Pattern Name and Classification:, A descriptive and unique name that helps in identifying and referring to the pattern., +,Intent:, A description of the goal behind the pattern and the reason for using it., +,Also Known As:, Other names for the pattern., +,Motivation (Forces):, A scenario consisting of a problem and a context in which this pattern can be used., +,Applicability:, Situations in which this pattern is usable; the context for the pattern., +,Structure:, A graphical representation of the pattern. ,Class diagrams, and ,Interaction diagrams, may be used for this purpose., +,Participants:, A listing of the classes and objects used in the pattern and their roles in the design., +,Collaboration:, A description of how classes and objects used in the pattern interact with each other., +,Consequences:, A description of the results, side effects, and trade offs caused by using the pattern., +,Implementation:, A description of an implementation of the pattern; the solution part of the pattern., +,Sample Code:, An illustration of how the pattern can be used in a programming language., +,Known Uses:, Examples of real usages of the pattern., +,Related Patterns:, Other patterns that have some relationship with the pattern; discussion of the differences between the pattern and similar patterns., +, +,Criticism,[,edit,], +,The concept of design patterns has been criticized in several ways., +,The design patterns may just be a sign of some missing features of a given programming language (,Java, or ,C++, for instance). ,Peter Norvig, demonstrates that 16 out of the 23 patterns in the ,Design Patterns, book (which is primarily focused on C++) are simplified or eliminated (via direct language support) in ,Lisp, or ,Dylan,.,[26], Related observations were made by Hannemann and Kiczales who implemented several of the 23 design patterns using an ,aspect-oriented programming language, (AspectJ) and showed that code-level dependencies were removed from the implementations of 17 of the 23 design patterns and that aspect-oriented programming could simplify the implementations of design patterns.,[27], See also ,Paul Graham's, essay ""Revenge of the Nerds"".,[28], +,Moreover, inappropriate use of patterns may unnecessarily increase complexity.,[29], +,Another point of criticism is the lack of an update version since the ,Design Patterns, book was published in 1994., +,See also,[,edit,], +, +, +,Abstraction principle, +,Algorithmic skeleton, +,Anti-pattern, +,Architectural pattern, +,Debugging patterns, +,Design pattern, +,Distributed design patterns, +,Double-chance function, +,Enterprise Architecture framework, +,GRASP (object-oriented design), +,Helper class, +,Interaction design pattern, +,List of software development philosophies, +,List of software engineering topics, +,Pattern language, +,Pattern theory, +,Pedagogical patterns, +,Portland Pattern Repository, +,Refactoring, +,Software development methodology, +,Material Design, +, +, +,References,[,edit,], +, +, +,^, ,Smith, Reid (October 1987). ,Panel on design methodology,. ,OOPSLA, '87 Addendum to the Proceedings. ,doi,:,10.1145/62138.62151,., ,, ,""Ward cautioned against requiring too much programming at, what he termed, 'the high level of wizards.' He pointed out that a written 'pattern language' can significantly improve the selection and application of abstractions. He proposed a 'radical shift in the burden of design and implementation' basing the new methodology on an adaptation of Christopher Alexander's work in pattern languages and that programming-oriented pattern languages developed at ,Tektronix, has significantly aided their software development efforts."", +,^, ,Beck, Kent,; ,Cunningham, Ward, (September 1987). ,Using Pattern Languages for Object-Oriented Program,. ,OOPSLA, '87 workshop on ,Specification and Design for Object-Oriented Programming,. Retrieved ,2006-05-26,., , +,^, ,Baroni, Aline Lúcia; Guéhéneuc, Yann-Gaël; Albin-Amiot, Hervé (June 2003). ""Design Patterns Formalization"". ,Nantes,: École Nationale Supérieure des Techniques Industrielles et des Mines de Nantes. ,CiteSeerX, ,10.1.1.62.6466, ,., , +,^, ,Bishop, Judith. ,""C# 3.0 Design Patterns: Use the Power of C# 3.0 to Solve Real-World Problems"",. C# Books from O'Reilly Media,. Retrieved ,2012-05-15,. ,If you want to speed up the development of your .NET applications, you're ready for C# design patterns -- elegant, accepted and proven ways to tackle common programming problems., , +,^, ,Meyer, Bertrand,; Arnout, Karine (July 2006). ,""Componentization: The Visitor Example"", ,(PDF),. ,IEEE Computer,. ,IEEE,. ,39, (7): 23–30. ,doi,:,10.1109/MC.2006.227,., , +,^, ,Laakso, Sari A. (2003-09-16). ,""Collection of User Interface Design Patterns"",. University of Helsinki, Dept. of Computer Science,. Retrieved ,2008-01-31,., , +,^, ,Heer, J.; Agrawala, M. (2006). ,""Software Design Patterns for Information Visualization"",. ,IEEE Transactions on Visualization and Computer Graphics,. ,12, (5): 853–60. ,doi,:,10.1109/TVCG.2006.178,. ,PMID, ,17080809,., , +,^, ,Dougherty, Chad; Sayre, Kirk; Seacord, Robert C.; Svoboda, David; Togashi, Kazuya (2009). ,Secure Design Patterns, ,(PDF),. Software Engineering Institute., , +,^, ,Garfinkel, Simson L. (2005). ,Design Principles and Patterns for Computer Systems That Are Simultaneously Secure and Usable, (Ph.D. thesis)., , +,^, ,""Yahoo! Design Pattern Library"",. Archived from ,the original, on 2008-02-29,. Retrieved ,2008-01-31,., , +,^, ,""How to design your Business Model as a Lean Startup?"",. Retrieved ,2010-01-06,., , +,^, ,Pattern Languages of Programming, Conference proceedings (annual, 1994—) ,[1], +,^ ,a, ,b, ,c, ,McConnell, Steve, (June 2004). ""Design in Construction"". ,Code Complete, (2nd ed.). ,Microsoft Press,. p. 104. ,ISBN, ,978-0-7356-1967-8,. ,Table 5.1 Popular Design Patterns, , +,^ ,a, ,b, ,Fowler, Martin, (2002). ,Patterns of Enterprise Application Architecture,. ,Addison-Wesley,. ,ISBN, ,978-0-321-12742-6,., , +,^, ,C. Martin, Robert (2002). ""28. Extension object"". ,Agile Software Development, Principles, Patterns, and Practices,. p. 408. ,ISBN, ,978-0135974445,., , +,^, ,Alur, Deepak; Crupi, John; Malks, Dan (2003). ,Core J2EE Patterns: Best Practices and Design Strategies,. ,Prentice Hall,. p. 166. ,ISBN, ,0-13-142246-4,., , +,^, ,Fowler, Martin, (2002). ,Patterns of Enterprise Application Architecture,. ,Addison-Wesley,. p. 344. ,ISBN, ,978-0-321-12742-6,., , +,^, ,Bloch, Joshua (2008). ""Item 37: Use marker interfaces to define types"". ,Effective Java (Second edition),. Addison-Wesley. p. 179. ,ISBN, ,978-0-321-35668-0,., , +,^, ,""Twin – A Design Pattern for Modeling Multiple Inheritance"", ,(PDF),., , +,^, ,Schmidt, Douglas C.,; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). ,Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects,. John Wiley & Sons. ,ISBN, ,0-471-60695-2,., , +,^, ,Binding Properties, +,^, ,Nagel, Christian; Evjen, Bill; Glynn, Jay; Watson, Karli; Skinner, Morgan (2008). ""Event-based Asynchronous Pattern"". ,Professional C# 2008,. Wiley. pp. 570–571. ,ISBN, ,0-470-19137-6,., , +,^, ,Lock Pattern, +,^, ,Gabriel, Dick,. ,""A Pattern Definition"",. Archived from ,the original, on 2007-02-09,. Retrieved ,2007-03-06,., , +,^, ,Fowler, Martin, (2006-08-01). ,""Writing Software Patterns"",. Retrieved ,2007-03-06,., , +,^, ,Norvig, Peter, (1998). ,Design Patterns in Dynamic Languages,., , +,^, ,Hannemann, Jan (2002). ,Design pattern implementation in Java and AspectJ,., , +,^, ,Graham, Paul, (2002). ,Revenge of the Nerds,. Retrieved ,2012-08-11,., , +,^, ,McConnell, Steve (2004). ,Code Complete: A Practical Handbook of Software Construction, 2nd Edition,. p. 105., , +, +, +,Further reading,[,edit,], +, +, +,Alexander, Christopher,; Ishikawa, Sara; Silverstein, Murray; Jacobson, Max; Fiksdahl-King, Ingrid; Angel, Shlomo (1977). ,A Pattern Language: Towns, Buildings, Construction,. New York: Oxford University Press. ,ISBN, ,978-0-19-501919-3,., , +,Alur, Deepak; Crupi, John; Malks, Dan (May 2003). ,Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition),. ,Prentice Hall,. ,ISBN, ,0-13-142246-4,., , +,Beck, Kent, (October 2007). ,Implementation Patterns,. ,Addison-Wesley,. ,ISBN, ,978-0-321-41309-3,., , +,Beck, Kent,; Crocker, R.; Meszaros, G.; ,Coplien, J. O.,; Dominick, L.; Paulisch, F.; ,Vlissides, J., (March 1996). ,Proceedings of the 18th International Conference on Software Engineering,. pp. 25–30., , +,Borchers, Jan (2001). ,A Pattern Approach to Interaction Design,. ,John Wiley & Sons,. ,ISBN, ,0-471-49828-9,., , +,Coplien, James O.,; Schmidt, Douglas C. (1995). ,Pattern Languages of Program Design,. ,Addison-Wesley,. ,ISBN, ,0-201-60734-4,., , +,Coplien, James O.,; ,Vlissides, John M.,; Kerth, Norman L. (1996). ,Pattern Languages of Program Design 2,. ,Addison-Wesley,. ,ISBN, ,0-201-89527-7,., , +,Eloranta, Veli-Pekka; Koskinen, Johannes; Leppänen, Marko; Reijonen, Ville (2014). ,Designing Distributed Control Systems: A Pattern Language Approach,. Wiley. ,ISBN, ,1118694155,., , +,Fowler, Martin, (1997). ,Analysis Patterns: Reusable Object Models,. ,Addison-Wesley,. ,ISBN, ,0-201-89542-0,., , +,Fowler, Martin, (2003). ,Patterns of Enterprise Application Architecture,. ,Addison-Wesley,. ,ISBN, ,978-0-321-12742-6,., , +,Freeman, Eric; Freeman, Elisabeth; ,Sierra, Kathy,; Bates, Bert (2004). ,Head First Design Patterns,. ,O'Reilly Media,. ,ISBN, ,0-596-00712-4,., , +,Hohmann, Luke; Fowler, Martin; Kawasaki, Guy (2003). ,Beyond Software Architecture,. ,Addison-Wesley,. ,ISBN, ,0-201-77594-8,., , +,Gabriel, Richard, (1996). ,Patterns of Software: Tales From The Software Community, ,(PDF),. ,Oxford University Press,. p. 235. ,ISBN, ,0-19-512123-6,. Archived from ,the original, ,(PDF), on 2003-08-01., , +,Gamma, Erich,; ,Helm, Richard,; ,Johnson, Ralph,; ,Vlissides, John, (1995). ,Design Patterns: Elements of Reusable Object-Oriented Software,. ,Addison-Wesley,. ,ISBN, ,0-201-63361-2,., , +,Hohpe, Gregor; Woolf, Bobby (2003). ,Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions,. ,Addison-Wesley,. ,ISBN, ,0-321-20068-3,., , +,Holub, Allen, (2004). ,Holub on Patterns,. ,Apress,. ,ISBN, ,1-59059-388-X,., , +,Kircher, Michael; Völter, Markus; Zdun, Uwe (2005). ,Remoting Patterns: Foundations of Enterprise, Internet and Realtime Distributed Object Middleware,. ,John Wiley & Sons,. ,ISBN, ,0-470-85662-9,., , +,Larman, Craig, (2005). ,Applying UML and Patterns,. ,Prentice Hall,. ,ISBN, ,0-13-148906-2,., , +,Liskov, Barbara,; ,Guttag, John, (2000). ,Program Development in Java: Abstraction, Specification, and Object-Oriented Design,. ,Addison-Wesley,. ,ISBN, ,0-201-65768-6,., , +,Manolescu, Dragos; Voelter, Markus; Noble, James (2006). ,Pattern Languages of Program Design 5,. ,Addison-Wesley,. ,ISBN, ,0-321-32194-4,., , +,Marinescu, Floyd (2002). ,EJB Design Patterns: Advanced Patterns, Processes and Idioms,. ,John Wiley & Sons,. ,ISBN, ,0-471-20831-0,., , +,Martin, Robert Cecil,; Riehle, Dirk; Buschmann, Frank (1997). ,Pattern Languages of Program Design 3,. ,Addison-Wesley,. ,ISBN, ,0-201-31011-2,., , +,Mattson, Timothy G; Sanders, Beverly A.; Massingill, Berna L. (2005). ,Patterns for Parallel Programming,. Addison-Wesley. ,ISBN, ,0-321-22811-1,., , +,Shalloway, Alan; Trott, James R. (2001). ,Design Patterns Explained, Second Edition: A New Perspective on Object-Oriented Design,. Addison-Wesley. ,ISBN, ,0-321-24714-0,., , +,Vlissides, John M., (1998). ,Pattern Hatching: Design Patterns Applied,. ,Addison-Wesley,. ,ISBN, ,0-201-43293-5,., , +,Weir, Charles; Noble, James (2000). ,Small Memory Software: Patterns for systems with limited memory,. ,Addison-Wesley,. ,ISBN, ,0-201-59607-5,. Archived from ,the original, on 2007-06-17., , +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Software design patterns, +, +, +, +,Gang of Four, +patterns, +, +, +, +, +,Creational, +, +, +, +,Abstract factory, +,Builder, +,Factory method, +,Prototype, +,Singleton, +, +, +, +, +, +,Structural, +, +, +, +,Adapter, +,Bridge, +,Composite, +,Decorator, +,Facade, +,Flyweight, +,Proxy, +, +, +, +, +, +,Behavioral, +, +, +, +,Chain of responsibility, +,Command, +,Interpreter, +,Iterator, +,Mediator, +,Memento, +,Observer, +,State, +,Strategy, +,Template method, +,Visitor, +, +, +, +, +, +, +, +, +,Concurrency, +patterns, +, +, +, +,Active object, +,Balking, +,Binding properties, +,Double-checked locking, +,Event-based asynchronous, +,Guarded suspension, +,Join, +,Lock, +,Monitor, +,Proactor, +,Reactor, +,Read write lock, +,Scheduler, +,Thread pool, +,Thread-local storage, +, +, +, +, +, +,Architectural, +patterns, +, +, +, +,Front controller, +,Interceptor, +,MVC, +,ADR, +,ECS, +,n,-tier, +,Specification, +,Publish–subscribe, +,Naked objects, +,Service locator, +,Active record, +,Identity map, +,Data access object, +,Data transfer object, +,Inversion of control, +,Model 2, +, +, +, +, +, +,Other, +patterns, +, +, +, +,Blackboard, +,Business delegate, +,Composite entity, +,Dependency injection, +,Intercepting filter, +,Lazy loading, +,Mock object, +,Null object, +,Object pool, +,Servant, +,Twin, +,Type tunnel, +,Method chaining, +, +, +, +, +, +,Books, +, +, +, +,Design Patterns, +,Enterprise Integration Patterns, +, +, +, +, +, +,People, +, +, +, +,Christopher Alexander, +,Erich Gamma, +,Ralph Johnson, +,John Vlissides, +,Grady Booch, +,Kent Beck, +,Ward Cunningham, +,Martin Fowler, +,Robert Martin, +,Jim Coplien, +,Douglas Schmidt, +,Linda Rising, +, +, +, +, +, +,Communities, +, +, +, +,The Hillside Group, +,The Portland Pattern Repository, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,GND,: ,4546895-3, +, +, +, +, +, +, + + +, +, +, +, +",Software design pattern +" 15 January 2018, at 13:48.","Software Engineering, is the application of ,engineering, to the ,development, of ,software, in a systematic method.,[1],[2],[3], +, +, +, +,Contents, +, +, +,1, ,Definitions, +,2, ,History, +,3, ,Subdisciplines, +,4, ,Education, +,5, ,Profession, +, +,5.1, ,Employment, +,5.2, ,Certification, +,5.3, ,Impact of globalization, +, +, +,6, ,Related fields, +, +,6.1, ,Computer Science, +, +, +,7, ,Controversy, +, +,7.1, ,Criticism, +, +, +,8, ,See also, +,9, ,Notes, +,10, ,References, +,11, ,Further reading, +,12, ,External links, +, +, +, +,Definitions,[,edit,], +,Notable definitions of software engineering include:, +, +,""the systematic application of scientific and technological knowledge, methods, and experience to the design, implementation, testing, and documentation of software""—The Bureau of Labor Statistics—,IEEE, ,Systems and software engineering - Vocabulary,[4], +,""The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of ,software,""—,IEEE, ,Standard Glossary of Software Engineering Terminology,[5], +,""an engineering discipline that is concerned with all aspects of software production""—,Ian Sommerville,[6], +,""the establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently on real machines""—,Fritz Bauer,[7], +, +,The term has also been used less formally:, +, +,as the informal contemporary term for the broad range of activities that were formerly called ,computer programming, and ,systems analysis,;,[8], +,as the broad term for all aspects of the ,practice, of computer programming, as opposed to the ,theory, of computer programming, which is called ,computer science,;,[9], +,as the term embodying the ,advocacy, of a specific approach to computer programming, one that urges that it be treated as an ,engineering, discipline rather than an art or a craft, and advocates the codification of recommended practices.,[10], +, +, +,History,[,edit,], +,Main article: ,History of software engineering, +,When the first digital ,computers, appeared in the early 1940s,,[11], the instructions to make them operate were wired into the machine. Practitioners quickly realized that this design was not flexible and came up with the ""stored program architecture"" or ,von Neumann architecture,. Thus the division between ""hardware"" and ""software"" began with ,abstraction, being used to deal with the complexity of computing., +,Programming languages, started to appear in the early 1950s,[12], and this was also another major step in abstraction. Major languages such as ,Fortran,, ,ALGOL,, and ,COBOL, were released in the late 1950s to deal with scientific, algorithmic, and business problems respectively. ,David Parnas, introduced the key concept of ,modularity, and ,information hiding, in 1972,[13], to help programmers deal with the ever-increasing complexity of ,software systems,., +,The origins of the term ""software engineering"" have been attributed to different sources. The term ""software engineering"" was used in the August 1966 issue of Communications of the ACM (Volume 9, number 8) “letter to the ACM membership” by the ACM President Anthony A. Oettinger;,[14], it is also commonly associated with the title of a seminal NATO conference in 1968 by Professor F.L. Bauer, the first conference on software engineering.,[15], At the time there was perceived to be a "",software crisis,"".,[16],[17],[18], +,In 1984, the ,Software Engineering Institute, (SEI) was established as a federally funded research and development center headquartered on the campus of Carnegie Mellon University in Pittsburgh, Pennsylvania, United States. ,Watts Humphrey, founded the SEI Software Process Program, aimed at understanding and managing the software engineering process. The Process Maturity Levels introduced would become the Capability Maturity Model Integration for Development(CMMi-DEV), which has defined how the US Government evaluates the abilities of a software development team., +,Modern, generally accepted best-practices for software engineering have been collected by the ,ISO/IEC JTC 1/SC 7, subcommittee and published as the ,Software Engineering Body of Knowledge, (SWEBOK).,[19], +,Subdisciplines,[,edit,], +,Software engineering can be divided into sub-disciplines.,[20], Some of them are:, +, +,Software requirements,[1],[20], (or ,Requirements engineering,): The elicitation, analysis, specification, and validation of ,requirements, for ,software,., +,Software design,:,[1],[20], The process of defining the architecture, components, interfaces, and other characteristics of a system or component. It is also defined as the result of that process., +,Software construction,:,[1],[20], The detailed creation of working, meaningful software through a combination of ,programming, (aka coding), verification, ,unit testing,, ,integration testing,, and ,debugging,., +,Software testing,:,[1],[20], An empirical, technical investigation conducted to provide stakeholders with information about the quality of the product or service under test., +,Software maintenance,:,[1],[20], The totality of activities required to provide cost-effective support to software., +,Software configuration management,:,[1],[20], The identification of the configuration of a system at distinct points in time for the purpose of systematically controlling changes to the configuration, and maintaining the integrity and traceability of the configuration throughout the system life cycle. Modern processes use ,software versioning,., +,Software engineering management,:,[1],[20], The application of management activities—planning, coordinating, measuring, monitoring, controlling, and reporting—to ensure that the development and maintenance of software is systematic, disciplined, and quantified., +,Software development process,:,[1],[20], The definition, implementation, assessment, measurement, management, change, and improvement of the software life cycle process itself., +,Software engineering models and methods,[20], impose structure on software engineering with the goal of making that activity systematic, repeatable, and ultimately more success-oriented, +,Software quality,[20], +,Software engineering professional practice,[20], is concerned with the knowledge, skills, and attitudes that software engineers must possess to practice software engineering in a professional, responsible, and ethical manner, +,Software engineering economics,[20], is about making decisions related to software engineering in a business context, +,Computing foundations,[20], +,Mathematical foundations,[20], +,Engineering foundations,[20], +, +,Education,[,edit,], +,Knowledge of ,computer programming, is a prerequisite for becoming a software engineer. In 2004 the ,IEEE Computer Society, produced the ,SWEBOK,, which has been published as ISO/IEC Technical Report 1979:2004, describing the body of knowledge that they recommend to be mastered by a graduate software engineer with four years of experience.,[21], Many software engineers enter the profession by obtaining a university degree or training at a vocational school. One standard international curriculum for undergraduate software engineering degrees was defined by the ,CCSE,, and updated in 2004.,[22], A number of universities have Software Engineering degree programs; as of 2010,[update],, there were 244 Campus ,Bachelor of Software Engineering, programs, 70 Online programs, 230 Masters-level programs, 41 Doctorate-level programs, and 69 Certificate-level programs in the United States.,[23], +,In addition to university education, many companies sponsor internships for students wishing to pursue careers in information technology. These internships can introduce the student to interesting real-world tasks that typical software engineers encounter every day. Similar experience can be gained through ,military service, in software engineering., +,Profession,[,edit,], +,Main articles: ,Software engineer, and ,Software engineering professionalism, +,Legal requirements for the licensing or certification of professional software engineers vary around the world. In the UK, there is no licensing or legal requirement to assume or use the job title Software Engineer. In some areas of Canada, such as Alberta, British Columbia, Ontario,,[24], and Quebec, software engineers can hold the Professional Engineer (P.Eng) designation and/or the Information Systems Professional (I.S.P.) designation. In Canada, there is a legal requirement to have P.Eng when one wants to use the title ""engineer"" or practice ""software engineering"". In Europe, Software Engineers can obtain the ,European Engineer, (EUR ING) professional title., +,The United States, since 2013, has offered an ,NCEES, ,Professional Engineer, exam for Software Engineering, thereby allowing Software Engineers to be licensed and recognized.,[25], Mandatory licensing is currently still largely debated, and perceived as controversial. In some parts of the US such as Texas, the use of the term ,Engineer, is regulated by law and reserved only for use by individuals who have a ,Professional Engineer, license., +,The ,IEEE Computer Society, and the ,ACM,, the two main US-based professional organizations of software engineering, publish guides to the profession of software engineering. The IEEE's ,Guide to the Software Engineering Body of Knowledge - 2004 Version,, or ,SWEBOK,, defines the field and describes the knowledge the IEEE expects a practicing software engineer to have. The most current SWEBOK v3 is an updated version and was released in 2014.,[26], The IEEE also promulgates a ""Software Engineering Code of Ethics"".,[27], +,Employment,[,edit,], +,In November 2004, the ,U. S. Bureau of Labor Statistics, counted 760,840 software engineers holding jobs in the ,U.S.,; in the same time period there were some 1.4 million practitioners employed in the U.S. in all other engineering disciplines combined.,[28], Due to its relative newness as a field of study, formal education in software engineering is often taught as part of a computer science curriculum, and many software engineers hold computer science degrees and have no engineering background whatsoever.,[29], +,Many software engineers work as employees or contractors. Software engineers work with businesses, government agencies (civilian or military), and non-profit organizations. Some software engineers work for themselves as ,freelancers,. Some organizations have specialists to perform each of the tasks in the ,software development process,. Other organizations require software engineers to do many or all of them. In large projects, people may specialize in only one role. In small projects, people may fill several or all roles at the same time. Specializations include: in industry (,analysts,, ,architects,, ,developers,, ,testers,, ,technical support,, ,middleware analysts,, ,managers,) and in academia (,educators,, ,researchers,)., +,Most software engineers and programmers work 40 hours a week, but about 15 percent of software engineers and 11 percent of programmers worked more than 50 hours a week in 2008. Injuries in these occupations are rare. However, like other workers who spend long periods in front of a computer terminal typing at a keyboard, engineers and programmers are susceptible to eyestrain, back discomfort, and hand and wrist problems such as ,carpal tunnel syndrome,.,[30], +,The field's future looks bright according to ,Money Magazine, and ,Salary.com,, which rated Software Engineer as the best job in the United States in 2006.,[31], In 2012, software engineering was again ranked as the best job in the United States, this time by CareerCast.com.,[32], +,Certification,[,edit,], +,The ,Software Engineering Institute, offers certifications on specific topics like ,security,, process improvement and ,software architecture,.,[33], ,Apple,, ,IBM,, ,Microsoft, and other companies also sponsor their own certification examinations. Many ,IT, ,certification, programs are oriented toward specific technologies, and managed by the vendors of these technologies.,[34], These certification programs are tailored to the institutions that would employ people who use these technologies., +,Broader certification of general software engineering skills is available through various professional societies. As of 2006,[update],, the ,IEEE, had certified over 575 software professionals as a ,Certified Software Development Professional, (CSDP).,[35], In 2008 they added an entry-level certification known as the Certified Software Development Associate (CSDA).,[36], The ,ACM, had a professional certification program in the early 1980s,,[,citation needed,], which was discontinued due to lack of interest. The ACM examined the possibility of professional certification of software engineers in the late 1990s, but eventually decided that such certification was inappropriate for the professional industrial practice of software engineering.,[37], +,In the U.K. the ,British Computer Society, has developed a legally recognized professional certification called ,Chartered IT Professional (CITP),, available to fully qualified members (,MBCS,). Software engineers may be eligible for membership of the ,Institution of Engineering and Technology, and so qualify for Chartered Engineer status. In Canada the ,Canadian Information Processing Society, has developed a legally recognized professional certification called ,Information Systems Professional (ISP),.,[38], In Ontario, Canada, Software Engineers who graduate from a ,Canadian Engineering Accreditation Board (CEAB), accredited program, successfully complete PEO's (,Professional Engineers Ontario,) Professional Practice Examination (PPE) and have at least 48 months of acceptable engineering experience are eligible to be licensed through the ,Professional Engineers Ontario, and can become Professional Engineers P.Eng.,[39], The PEO does not recognize any online or distance education however; and does not consider Computer Science programs to be equivalent to software engineering programs despite the tremendous overlap between the two. This has sparked controversy and a certification war. It has also held the number of P.Eng holders for the profession exceptionally low. The vast majority of working professionals in the field hold a degree in CS, not SE. Given the difficult certification path for holders of non-SE degrees, most never bother to pursue the license., +,Impact of globalization,[,edit,], +,The initial impact of outsourcing, and the relatively lower cost of international human resources in developing third world countries led to a massive migration of software development activities from corporations in North America and Europe to India and later: China, Russia, and other developing countries. This approach had some flaws, mainly the distance / timezone difference that prevented human interaction between clients and developers and the massive job transfer. This had a negative impact on many aspects of the software engineering profession. For example, some students in the ,developed world, avoid education related to software engineering because of the fear of ,offshore outsourcing, (importing software products or services from other countries) and of being displaced by ,foreign visa workers,.,[40], Although statistics do not currently show a threat to software engineering itself; a related career, ,computer programming, does appear to have been affected.,[41],[42], Nevertheless, the ability to smartly leverage offshore and near-shore resources via the ,follow-the-sun, workflow has improved the overall operational capability of many organizations.,[43], When North Americans are leaving work, Asians are just arriving to work. When Asians are leaving work, Europeans are arriving to work. This provides a continuous ability to have human oversight on business-critical processes 24 hours per day, without paying overtime compensation or disrupting a key human resource, sleep patterns., +,While global outsourcing has several advantages, global - and generally distributed - development can run into serious difficulties resulting from the distance between developers. This is due to the key elements of this type of distance that have been identified as geographical, temporal, cultural and communication (that includes the use of different languages and dialects of English in different locations).,[44], Research has been carried out in the area of global software development over the last 15 years and an extensive body of relevant work published that highlights the benefits and problems associated with the complex activity. As with other aspects of software engineering research is ongoing in this and related areas., +,Related fields,[,edit,], +,Software engineering is a direct sub-field of ,engineering, and has an overlap with ,computer science, and ,management science,[,citation needed,],. It is also considered a part of overall ,systems engineering,., +,Computer Science,[,edit,], +, +, +, +, +,This section needs expansion,. ,You can help by ,adding to it,., ,(July 2017), +, +, +, +,In general, software engineering focuses more on techniques for the application of software development in industry,,[45],[46], while computer science focuses more on algorithms and theory.,[47], +,Controversy,[,edit,], +,Criticism,[,edit,], +,Software engineering sees its practitioners as individuals who follow well-defined engineering approaches to problem-solving. These approaches are specified in various software engineering books and research papers, always with the connotations of predictability, precision, mitigated risk and professionalism. This perspective has led to calls for licensing, certification and codified bodies of knowledge as mechanisms for spreading the engineering knowledge and maturing the field., +,Software craftsmanship, has been proposed by a body of software developers as an alternative that emphasizes the coding skills and accountability of the software developers themselves without professionalism or any prescribed curriculum leading to ad-hoc problem-solving (craftmanship) without engineering (lack of predictability, precision, missing risk mitigation, methods are informal and poorly defined). ,The Software Craftsmanship Manifesto, extends the Agile Software Manifesto,[48], and draws a metaphor between modern software development and the apprenticeship model of medieval Europe., +,Software engineering extends engineering and draws on the engineering model, i.e. engineering process, engineering project management, engineering requirements, engineering design, engineering construction, and engineering validation. The concept is so new that it is rarely understood, and it is widely misinterpreted, including in software engineering textbooks, papers, and among the communities of programmers and crafters., +,One of the core issues in software engineering is that its approaches are not empirical enough because a real-world validation of approaches is usually absent, or very limited and hence software engineering is often misinterpreted as feasible only in a ""theoretical environment."", +,Dijkstra, who developed computer languages in the 20th century refuted the concepts of ""software engineering"" that was prevalent in the 1980s, arguing that those terms were poor analogies for what he called the ""radical novelty"" of ,computer science,:, +, +,A number of these phenomena have been bundled under the name ""Software Engineering"". As economics is known as ""The Miserable Science"", software engineering should be known as ""The Doomed Discipline"", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter ""How to program if you cannot."",[49], +, +,See also,[,edit,], +, +, +,Software portal, +,Software Testing portal, +, +, +,Main article: ,Outline of software engineering, +, +,Bachelor of Science in Information Technology, +,Bachelor of Software Engineering, +,List of software engineering conferences, +,List of software engineering publications, +,Software craftsmanship, +,Software Engineering Institute, +, +,Notes,[,edit,], +, +, +,^ ,a, ,b, ,c, ,d, ,e, ,f, ,g, ,h, ,i, ,Abran et al. 2004,, pp. 1–1, +,^, ,ACM (2007). ,""Computing Degrees & Careers"",. ACM,. Retrieved ,2010-11-23,., , +,^, ,Laplante, Phillip (2007). ,What Every Engineer Should Know about Software Engineering,. Boca Raton: CRC. ,ISBN, ,978-0-8493-7228-5,. Retrieved ,2011-01-21,., , +,^, ,Systems and software engineering - Vocabulary,, ,ISO,/,IEC,/,IEEE, std 24765:2010(E), 2010., +,^, ,IEEE Standard Glossary of Software Engineering Terminology,, ,IEEE, std 610.12-1990, 1990., +,^, ,Sommerville, Ian, (2007) [1982]. ""1.1.2 What is software engineering?"". ,Software Engineering, (8th ed.). Harlow, England: Pearson Education. p. 7. ,ISBN, ,0-321-31379-8,. ,Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification to maintaining the system after it has gone into use. In this definition, there are two key phrases:, +1. ,Engineering discipline, Engineers make things work. They apply theories, methods and tools where these are appropriate [. . .] Engineers also recognize that they must work to organizational and financial constraints. [. . .], +2. ,All aspects of software production, Software engineering is not just concerned with the technical processes of software development but also with activities such as software project management and with the development of tools, methods and theories to support software production., , +,^, ,""Software Engineering"". ,Information Processing,. North-Holland Publishing Co.year = 1972. ,71,: 530–538., , +,^, ,Akram I. Salah (2002-04-05). ,""Engineering an Academic Program in Software Engineering"", ,(PDF),. 35th Annual Midwest Instruction and Computing Symposium,. Retrieved ,2006-09-13,., ,: ""For some, software engineering is just a glorified name for programming. If you are a programmer, you might put 'software engineer' on your business card—never 'programmer' though."", +,^, ,Mills, Harlan D., J. R. Newman, and C. B. Engle, Jr., ""An Undergraduate Curriculum in Software Engineering,"" in ,Deimel, Lionel E. (1990). ,Software Engineering Education: SEI Conference 1990, Pittsburgh, Pennsylvania, USA, April 2–3,.,. Springer. ,ISBN, ,0-387-97274-9,., ,,,p. 26,: ""As a practical matter, we regard software engineering as the necessary preparation for the practicing, software development and maintenance professional. The Computer Scientist is preparing for further theoretical studies..."", +,^, ,David Budgen; Pearl Brereton; Barbara Kitchenham; Stephen Linkman (2004-12-14). ,""Realizing Evidence-based Software Engineering"",. Retrieved ,2006-10-18,., ,: ""We believe that software engineering can only advance as an engineering discipline by moving away from its current dependence upon advocacy and analysis,...."", +,^, ,Leondes (2002). ,intelligent systems: technology and applications,. CRC Press. p. I-6. ,ISBN, ,978-0-8493-1121-5,. ,1.4 Computers and a First Glimpse at Al (1940s), , +,^, ,Campbell-Kelly, Martin (April 1982). ""The Development of Computer Programming in Britain (1945 to 1955)"". ,IEEE Annals of the History of Computing,. ,4, (2): 121–139. ,doi,:,10.1109/MAHC.1982.10016,., , +,^, ,Parnas, David, (December 1972). ,""On the Criteria To Be Used in Decomposing Systems into Modules"",. ,Communications of the ACM,. ,15, (12): 1053–1058. ,doi,:,10.1145/361598.361623,. Retrieved ,2008-12-26,., , +,^, ,""The origin of ""software engineering,"","",. Retrieved ,17 Nov, 2017,., , +,^, ,Randall, Brian. ,""The 1968/69 NATO Software Engineering Reports"",. Retrieved ,17 Nov, 2017,., , +,^, ,Sommerville 2008,, p. 26, +,^, ,Peter, Naur; ,Randell, Brian, (7–11 October 1968). ,Software Engineering: Report of a conference sponsored by the NATO Science Committee, ,(PDF),. Garmisch, Germany: Scientific Affairs Division, NATO,. Retrieved ,2008-12-26,., , +,^, ,Randell, Brian, (10 August 2001). ,""The 1968/69 NATO Software Engineering Reports"",. ,Brian Randell's University Homepage,. The School of the Computer Sciences, Newcastle University,. Retrieved ,2008-10-11,. ,The idea for the first NATO Software Engineering Conference, and in particular that of adopting the then practically unknown term ""software engineering"" as its (deliberately provocative) title, I believe came originally from Professor ,Fritz Bauer,., , +,^, ,""ISO/IEC TR 19759:2005"",. Retrieved ,2012-04-01,., , +,^ ,a, ,b, ,c, ,d, ,e, ,f, ,g, ,h, ,i, ,j, ,k, ,l, ,m, ,n, ,o, ,p, ,""Software Engineering Body of Knowledge (SWEBOK Version 3), 2014"", ,(pdf),. ,www.swebok.org,. IEEE Computer Society,. Retrieved ,24 May, 2016,., , +,^, ,Abran, Alain, ed. (2005) [2004]. ,""Chapter 1: Introduction to the Guide"",. ,Guide to the Software Engineering Body of Knowledge,. Los Alamitos: IEEE Computer Society. ,ISBN, ,0-7695-2330-7,. Retrieved ,2010-09-13,. ,The total volume of cited literature is intended to be suitable for mastery through the completion of an undergraduate education plus four years of experience., , +,^, ,""SE2004 Software Engineering Curriculum"",. Sites.computer.org. 2003-09-30,. Retrieved ,2012-03-25,., , +,^, ,[1], Degree programs in Software Engineering, +,^, ,Williams, N.S.W. (19–21 February 2001). ""Professional Engineers Ontario's approach to licensing software engineering practitioners"". ,Software Engineering Education and Training, 2001 Proceedings. 14th Conference on,. Charlotte, NC: ,IEEE,. pp. 77–78., , +,^, ,""NCEES Software Engineering Exam Specifications"", ,(PDF),. Retrieved ,2012-04-01,., , +,^, ,"",',SWEBOK Guide Version 3,',"",. Retrieved ,2015-03-09,., , +,^, ,"",','Software Engineering Code of Ethics''"", ,(PDF),. Retrieved ,2012-03-25,., , +,^, ,Bureau of Labor Statistics, U.S. Department of Labor, ,USDL 05-2145: Occupational Employment and Wages, November 2004,, Table 1., +,^, ,""Software Engineering"",. Retrieved ,2008-02-01,., , +,^, ,""Computer Software Engineers and Computer Programmers"",. Retrieved ,2009-12-17,., , +,^, ,Kalwarski, Tara; Daphne Mosher; Janet Paskin; Donna Rosato (2006). ,""Best Jobs in America"",. ,MONEY Magazine,. CNN,. Retrieved ,2006-04-20,., , +,^, ,""Best and Worst Jobs of 2012"",. online.wsj.com,. Retrieved ,2017-11-03,., , +,^, ,""SEI certification page"",. Sei.cmu.edu,. Retrieved ,2012-03-25,., , +,^, ,Wyrostek, Warren (March 14, 2008). ,""The Top 10 Problems with IT Certification in 2008"",. ,InformIT,. Retrieved ,2009-03-03,., , +,^, ,IEEE Computer Society. ,""2006 IEEE computer society report to the IFIP General Assembly"", ,(PDF),. Retrieved ,2007-04-10,., , +,^, ,IEEE. ,""CSDA"",. Retrieved ,2010-04-20,., , +,^, ,ACM (July 17, 2000). ,""A Summary of the ACM Position on Software Engineering as a Licensed Engineering Profession"", ,(PDF),. Association for Computing Machinery (ACM). Archived from ,the original, ,(PDF), on May 17, 2008,. Retrieved ,2009-03-03,. ,At its meeting in May 2000, the Council further concluded that the framework of a licensed professional engineer, originally developed for civil engineers, does not match the professional industrial practice of software engineering. Such licensing practices would give false assurances of competence even if the body of knowledge were mature; and would preclude many of the most qualified software engineers from becoming licensed., , +,^, ,Canadian Information Processing Society. ,""I.S.P. Designation"",. Retrieved ,2007-03-15,., , +,^, ,""Professional Engineers Ontario: Welcome to PEO's website"",. Peo.on.ca,. Retrieved ,2012-03-25,., , +,^, ,Thibodaux, Patrick (2006-05-05). ,""As outsourcing gathers steam, computer science interest wanes"",. Computerworld.com,. Retrieved ,2016-12-06,., , +,^, ,""Computer Programmers"",. Bls.gov,. Retrieved ,2012-03-25,., , +,^, ,Mullins, Robert (2007-03-13). ,""Software developer growth slows in North America"",. InfoWorld,. Retrieved ,2012-03-25,., , +,^, ,""Gartner Magic Quadrant"", ,(PDF),. Cognizant.com,. Retrieved ,2012-03-25,., , +,^, ,Casey, Valentine (2010-08-20). ,""Virtual software team project management"",. Springer,. Retrieved ,2013-12-06,., , +,^, ,http://www.stevemcconnell.com/psd/04-senotcs.htm, +,^, ,https://engiegirlsatuwaterloo.wordpress.com/2013/08/29/computer-engineering-software-engineering-or-computer-science/, +,^, ,https://www.upwork.com/hiring/development/computer-science-vs-computer-engineering/, +,^, ,Beck, Kent,; et al. (2001). ,""Manifesto for Agile Software Development"",. Agile Alliance,. Retrieved ,14 June, 2010,., , +,^, ,Dijkstra, E. W., (1988). ,""On the cruelty of really teaching computing science"",. Retrieved ,2014-01-10,., , +, +, +,References,[,edit,], +, +,Abran, Alain; Moore, James W.; Bourque, Pierre; Dupuis, Robert; Tripp, Leonard L. (2004). ,Guide to the Software Engineering Body of Knowledge,. IEEE. ,ISBN, ,0-7695-2330-7,., , +,Sommerville, Ian (2008). ,Software Engineering, (7 ed.). Pearson Education. ,ISBN, ,978-81-7758-530-8,. Retrieved ,10 January, 2013,., , +, +,Further reading,[,edit,], +, +,Pressman, Roger S, (2009). ,Software Engineering: A Practitioner's Approach, (7th ed.). Boston, Mass: McGraw-Hill. ,ISBN, ,978-0073375977,., , +,Sommerville, Ian, (2010) [2010]. ,Software Engineering, (9th ed.). Harlow, England: Pearson Education. ,ISBN, ,978-0137035151,., , +,Jalote, Pankaj, (2005) [1991]. ,An Integrated Approach to Software Engineering, (3rd ed.). Springer. ,ISBN, ,0-387-20881-X,., , +,Bruegge, Bernd,; Dutoit, Allen (2009). ,Object-oriented software engineering : using UML, patterns, and Java, (3rd ed.). Prentice Hall. ,ISBN, ,978-0136061250,., , +, +,External links,[,edit,], +, +, +, +,Wikimedia Commons has media related to ,Software engineering,., +, +, +, +, +, +,Wikibooks has a book on the topic of: ,Introduction to Software Engineering, +, +, +, +, +, +,Wikiversity has learning resources about ,Software engineering, +, +, +, +,Guide to the Software Engineering Body of Knowledge, +,The Open Systems Engineering and Software Development Life Cycle Framework, OpenSDLC.org the integrated Creative Commons SDLC, +,Software Engineering Institute, Carnegie Mellon, +,Learn Software Engineering, Software Engineering Society, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Software engineering, +, +, +, +,Fields, +, +, +, +,Computer programming, +,Requirements engineering, +,Software deployment, +,Software design, +,Software maintenance, +,Software testing, +,Systems analysis, +,Formal methods, +, +, +, +, +, +,Concepts, +, +, +, +,Data modeling, +,Enterprise architecture, +,Functional specification, +,Modeling language, +,Orthogonality, +,Programming paradigm, +,Software, +,Software archaeology, +,Software architecture, +,Software configuration management, +,Software development methodology, +,Software development process, +,Software quality, +,Software quality assurance, +,Software verification and validation, +,Structured analysis, +, +, +, +, +, +,Orientations, +, +, +, +,Agile, +,Aspect-oriented, +,Object orientation, +,Ontology, +,Service orientation, +,SDLC, +, +, +, +, +, +,Models, +, +, +, +, +,Developmental, +, +, +, +,Agile, +,EUP, +,Executable UML, +,Incremental model, +,Iterative model, +,Prototype model, +,RAD, +,UP, +,Scrum, +,Spiral model, +,V-Model, +,Waterfall model, +,XP, +, +, +, +, +, +,Other, +, +, +, +,SPICE, +,CMMI, +,Data model, +,ER model, +,Function model, +,Information model, +,Metamodeling, +,Object model, +,Systems model, +,View model, +, +, +, +, +, +,Languages, +, +, +, +,IDEF, +,UML, +,USL, +,SysML, +, +, +, +, +, +, +, +, +, +,Software, +engineers, +, +, +, +, +,Victor Basili, +,Kent Beck, +,Grady Booch, +,Fred Brooks, +,Barry Boehm, +,Peter Chen, +,Danese Cooper, +,Ward Cunningham, +,Tom DeMarco, +,Edsger W. Dijkstra, +,Delores M. Etter, +,Martin Fowler, +,Adele Goldstine, +,Margaret Hamilton, +,C. A. R. Hoare, +,Lois Haibt, +,Mary Jean Harrold, +,Grace Hopper, +,Watts Humphrey, +,Michael A. Jackson, +,Ivar Jacobson, +,Alan Kay, +,Nancy Leveson, +,Stephen J. Mellor, +,Bertrand Meyer, +,David Parnas, +,Trygve Reenskaug, +,Winston W. Royce, +,James Rumbaugh, +,Mary Shaw, +,Peri Tarr, +,Elaine Weyuker, +,Niklaus Wirth, +,Edward Yourdon, +, +, +, +, +, +,Related fields, +, +, +, +,Computer science, +,Computer engineering, +,Project management, +,Risk management, +,Systems engineering, +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Systems engineering, +, +, +, +,Subfields, +, +, +, +,Aerospace engineering, +,Biological systems engineering, +,Configuration management, +,Earth systems engineering and management, +,Electrical engineering, +,Enterprise systems engineering, +,Performance engineering, +,Reliability engineering, +,Safety engineering, +, +, +, +, +, +,Processes, +, +, +, +,Requirements engineering, +,Functional specification, +,System integration, +,Verification and validation, +,Design review, +, +, +, +, +, +,Concepts, +, +, +, +,Business process, +,System, +,System lifecycle, +,V-Model, +,Systems development life cycle, +, +, +, +, +, +,Tools, +, +, +, +,Decision-making, +,Function modelling, +,IDEF, +,Optimization, +,Quality function deployment, +,System dynamics, +,Systems Modeling Language, +,Systems analysis, +,Systems modeling, +,Work breakdown structure, +, +, +, +, +, +,People, +, +, +, +,James S. Albus, +,Ruzena Bajcsy, +,Benjamin S. Blanchard, +,Wernher von Braun, +,Kathleen Carley, +,Harold Chestnut, +,Wolt Fabrycky, +,Barbara Grosz, +,Arthur David Hall III, +,Derek Hitchins, +,Robert E. Machol, +,Radhika Nagpal, +,Simon Ramo, +,Joseph Francis Shea, +,Katia Sycara, +,Manuela M. Veloso, +,John N. Warfield, +, +, +, +, +, +,Related fields, +, +, +, +,Control engineering, +,Computer engineering, +,Industrial engineering, +,Operations research, +,Project management, +,Quality management, +,Risk management, +,Software engineering, +, +, +, +, +, +, +, +, +,Category, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Engineering, +, +, +, +,Civil, +, +, +, +,Architectural, +,Construction, +,Environmental, +,Earthquake, +,Geotechnical, +,Hydraulic, +,Mining, +,Structural, +,Transportation, +, +, +, +, +, +,Mechanical, +, +, +, +,Acoustical, +,Aerospace, +,Automotive, +,Marine, +,Mechatronics, +,Railway, +, +, +, +, +, +,Electrical, +, +, +, +,Computer, +,Control, +,Electromechanics, +,Electronics, +,Microwaves, +,Power, +,Radio Frequency, +,Telecommunications, +, +, +, +, +, +,Chemical, +, +, +, +,Biochemical, +,Biological, +,Molecular, +,Petroleum, +,Process, +,Reaction, +,Thermodynamics, +,Transport phenomena, +, +, +, +, +, +,Interdisciplinarity, +, +, +, +,Audio, +,Biomedical, +,Ceramics, +,Engineering mathematics, +,Engineering mechanics, +,Engineering science, +,Fire, +,Industrial, +,Materials science, +,Metallurgy, +,Military, +,Nanotechnology, +,Nuclear, +,Optical, +,Photonics, +,Privacy, +,Robotics, +,Security, +,Systems, +, +, +, +, +, +,Glossaries, +, +, +, +,Engineering, +,Aerospace engineering, +,Civil engineering, +,Electrical and electronics engineering, +,Mechanical engineering, +,Structural engineering, +, +, +, +, +, +, +, +, +,List of engineering branches, +, ,Category:Engineering, +, , ,Engineering portal, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Major fields of ,computer science, +, +, +, +, +,Note: This template roughly follows the 2012 ,ACM Computing Classification System,., +, +, +, +,Hardware, +, +, +, +,Printed circuit board, +,Peripheral, +,Integrated circuit, +,Very-large-scale integration, +,Energy consumption, +,Electronic design automation, +, +, +, +, +, +,Computer systems, +organization, +, +, +, +,Computer architecture, +,Embedded system, +,Real-time computing, +,Dependability, +, +, +, +, +, +,Networks, +, +, +, +,Network architecture, +,Network protocol, +,Network components, +,Network scheduler, +,Network performance evaluation, +,Network service, +, +, +, +, +, +,Software organization, +, +, +, +,Interpreter, +,Middleware, +,Virtual machine, +,Operating system, +,Software quality, +, +, +, +, +, +,Software notations, +and ,tools, +, +, +, +,Programming paradigm, +,Programming language, +,Compiler, +,Domain-specific language, +,Modeling language, +,Software framework, +,Integrated development environment, +,Software configuration management, +,Software library, +,Software repository, +, +, +, +, +, +,Software development, +, +, +, +,Software development process, +,Requirements analysis, +,Software design, +,Software construction, +,Software deployment, +,Software maintenance, +,Programming team, +,Open-source model, +, +, +, +, +, +,Theory of computation, +, +, +, +,Model of computation, +,Formal language, +,Automata theory, +,Computational complexity theory, +,Logic, +,Semantics, +, +, +, +, +, +,Algorithms, +, +, +, +,Algorithm design, +,Analysis of algorithms, +,Randomized algorithm, +,Computational geometry, +, +, +, +, +, +,Mathematics, +of computing, +, +, +, +,Discrete mathematics, +,Probability, +,Statistics, +,Mathematical software, +,Information theory, +,Mathematical analysis, +,Numerical analysis, +, +, +, +, +, +,Information, +systems, +, +, +, +,Database management system, +,Information storage systems, +,Enterprise information system, +,Social information systems, +,Geographic information system, +,Decision support system, +,Process control system, +,Multimedia information system, +,Data mining, +,Digital library, +,Computing platform, +,Digital marketing, +,World Wide Web, +,Information retrieval, +, +, +, +, +, +,Security, +, +, +, +,Cryptography, +,Formal methods, +,Security services, +,Intrusion detection system, +,Hardware security, +,Network security, +,Information security, +,Application security, +, +, +, +, +, +,Human–computer, +interaction, +, +, +, +,Interaction design, +,Social computing, +,Ubiquitous computing, +,Visualization, +,Accessibility, +, +, +, +, +, +,Concurrency, +, +, +, +,Concurrent computing, +,Parallel computing, +,Distributed computing, +,Multithreading, +,Multiprocessing, +, +, +, +, +, +,Artificial, +intelligence, +, +, +, +,Natural language processing, +,Knowledge representation and reasoning, +,Computer vision, +,Automated planning and scheduling, +,Search methodology, +,Control method, +,Philosophy of artificial intelligence, +,Distributed artificial intelligence, +, +, +, +, +, +,Machine learning, +, +, +, +,Supervised learning, +,Unsupervised learning, +,Reinforcement learning, +,Multi-task learning, +,Cross-validation, +, +, +, +, +, +,Graphics, +, +, +, +,Animation, +,Rendering, +,Image manipulation, +,Graphics processing unit, +,Mixed reality, +,Virtual reality, +,Image compression, +,Solid modeling, +, +, +, +, +, +,Applied, +computing, +, +, +, +,E-commerce, +,Enterprise software, +,Computational mathematics, +,Computational physics, +,Computational chemistry, +,Computational biology, +,Computational social science, +,Computational engineering, +,Computational healthcare, +,Digital art, +,Electronic publishing, +,Cyberwarfare, +,Electronic voting, +,Video game, +,Word processing, +,Operations research, +,Educational technology, +,Document management, +, +, +, +, +, +, +, +, +, ,Book, +, ,Category, +, ,Portal, +,WikiProject, +, ,Commons, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,LCCN,: ,sh87007398, +,GND,: ,4116521-4, +,BNF,: ,cb11966616k, ,(data), +,NDL,: ,01014113, +,BNE,: ,XX541523, +, +, +, +, +, +, + + +, +, +, +, +",Software engineering +" 19 January 2018, at 03:57.","Not to be confused with ,SaaS,., +, +,Sass, +, +, +, +, +,Designed by, +,Hampton Catlin, +, +, +,Developer, +,Natalie Weizenbaum,, ,Chris Eppstein, +, +, +,First appeared, +,November 28, 2006,; 11 years ago, (,2006-11-28,), +, +, +, +, +, +,Stable release, +, +,3.5.1 / July 13, 2017,; 6 months ago, (,2017-07-13,),[1], +, +, +, +, +, +, +,Typing discipline, +,dynamic, +, +, +,OS, +,Cross-platform, +, +, +,License, +,MIT License, +, +, +,Filename extensions, +,.sass, .scss, +, +, +,Website, +,sass-lang,.com, +, +, +,Major ,implementations, +, +, +,Dart,, ,Ruby, +, +, +,Influenced by, +, +, +,CSS,, ,YAML,, ,Haml, +, +, +,Influenced, +, +, +,Less,, ,Stylus,, ,Tritium, +, +, +,Sass, (Syntactically awesome style sheets) is a ,style sheet language, initially designed by ,Hampton Catlin, and developed by ,Natalie Weizenbaum,.,[2],[3], After its initial versions, Weizenbaum and ,Chris Eppstein, continued to extend Sass with SassScript, a simple scripting language used in Sass files., +,Sass is a ,scripting language, that is ,interpreted, or ,compiled, into ,Cascading Style Sheets, (CSS). SassScript is the scripting language itself. Sass consists of two ,syntaxes,. The original syntax, called ""the indented syntax"", uses a syntax similar to ,Haml,.,[4], It uses ,indentation, to separate ,code blocks, and ,newline, characters to separate rules. The newer syntax, ""SCSS"", uses block formatting like that of CSS. It uses braces to denote code blocks and semicolons to separate lines within a block. The indented syntax and SCSS files are traditionally given the ,extensions, .sass and .scss, respectively., +,CSS3, consists of a series of selectors and pseudo-selectors that group rules that apply to them. Sass,[5], (in the larger context of both syntaxes) extends CSS by providing several mechanisms available in more traditional ,programming languages,, particularly ,object-oriented languages,, but that are not available to CSS3 itself. When SassScript is interpreted, it creates blocks of CSS rules for various selectors as defined by the Sass file. The Sass interpreter translates SassScript into CSS. Alternatively, Sass can monitor the .sass or .scss file and translate it to an output .css file whenever the .sass or .scss file is saved.,[6], Sass is simply ,syntactic sugar, for CSS., +,The official implementation of Sass is ,open-source, and coded in ,Ruby,; however, other implementations exist, including ,Dart,, ,PHP,, and a high-performance implementation in ,C, called libSass.,[7],[8], There's also a ,Java, implementation called JSass.,[9], Additionally, ,Vaadin, has a Java implementation of Sass.,[10], The indented syntax is a metalanguage. SCSS is a ,nested metalanguage,, as valid CSS is valid SCSS with the same ,semantics,. Sass supports integration with the ,Firefox, ,extension, ,Firebug,.,[11], +,SassScript provides the following mechanisms: ,variables,, ,nesting,, ,mixins,, and selector ,inheritance,.,[4], +, +, +, +,Contents, +, +, +,1, ,Variables, +,2, ,Nesting, +, +,2.1, ,Loops, +,2.2, ,Arguments, +,2.3, ,In combination, +, +, +,3, ,Selector inheritance, +,4, ,libSass, +,5, ,IDE integration, +,6, ,See also, +,7, ,References, +,8, ,External links, +, +, +, +,Variables,[,edit,], +,Sass allows variables to be defined. Variables begin with a ,dollar sign, (,$,). Variable ,assignment, is done with a ,colon, (,:,).,[11], +,SassScript supports four data types:,[11], +, +,Numbers, (including units), +,Strings, (with quotes or without), +,Colors (name, or names), +,Booleans, +, +,Variables can be ,arguments, to or results from one of several available ,functions,.,[12], During translation, the values of the variables are inserted into the output CSS document.,[4], +,In SCSS style, +, +, +,$primary-color,:, ,#3bbfce,;, +,$margin,:, ,16,px,;, + +,.content-navigation, ,{, + ,border-color,:, ,$,primary-color,;, + ,color,:, ,darken,(,$,primary-color,,, ,10,%,);, +,}, + +,.border, ,{, + ,padding,:, ,$,margin, ,/, ,2,;, + ,margin,:, ,$,margin, ,/, ,2,;, + ,border-color,:, ,$,primary-color,;, +,}, +, +,Or Sass style, +, +, +,$primary-color,:, ,#3bbfce, +,$margin,:, ,16,px, + +,.content-navigation, + ,border-color,:, ,$primary-color, + ,color,:, ,darken,(,$primary-color,,, ,10,%,), + +,.border, + ,padding,:, ,$margin,/,2, + ,margin,:, ,$margin,/,2, + ,border-color,:, ,$primary-color, +, +,Would compile to:, +, +, +,.,content-navigation, ,{, + ,border-color,:, ,#3bbfce,;, + ,color,:, ,#2b9eab,;, +,}, + +,.,border, ,{, + ,padding,:, ,8,px,;, + ,margin,:, ,8,px,;, + ,border-color,:, ,#3bbfce,;, +,}, +, +,Nesting,[,edit,], +,CSS does support logical nesting, but the code blocks themselves are not nested. Sass allows the nested code to be inserted within each other.,[4], +,In Sass style, +, +, +,table,.hl, + ,margin,:, ,2,em, ,0, + ,td,.ln, + ,text-align,:, ,right, + +,li, + ,font,:, + ,family,:, ,serif, + ,weight,:, ,bold, + ,size,:, ,1,.3,em, +, +,or SCSS style, +, +, +,table,.hl, ,{, + ,margin,:, ,2em, ,0,;, + ,td,.ln, ,{, + ,text-align,:, ,right,;, + ,}, +,}, + +,li, ,{, + ,font,:, ,{, + ,family,:, ,serif,;, + ,weight,:, ,bold,;, + ,size,:, ,1,.3em,;, + ,}, +,}, +, +,Would compile to:, +, +, +,table,.,hl, ,{, + ,margin,:, ,2,em, ,0,;, +,}, +,table,.,hl, ,td,.,ln, ,{, + ,text-align,:, ,right,;, +,}, + +,li, ,{, + ,font-family,:, ,serif,;, + ,font-weight,:, ,bold,;, + ,font-size,:, ,1.3,em,;, +,}, +, +,More complicated types of nesting including ,namespace, nesting and parent references are discussed in the Sass documentation.,[11], +, +, +,@mixin, table-base, ,{, + ,th, ,{, + ,text-align,:, ,center,;, + ,font-weight,:, ,bold,;, + ,}, + ,td,,, ,th, ,{, + ,padding,:, ,2px,;, + ,}, +,}, + +,#data, ,{, + ,@include, table-base,;, +,}, +, +,Or Sass style, +, +, +,=table-base, + ,th, + ,text-align,:, ,center, + ,font-weight,:, ,bold, + ,td,,, ,th, + ,padding,:, ,2,px, + +,#data, + ,+table-base, +, +,Would compile to:, +, +, +,#,data, ,th, ,{, + ,text-align,:, ,center,;, + ,font-weight,:, ,bold,;, +,}, +,#,data, ,td,,, ,#,data, ,th, ,{, + ,padding,:, ,2,px,;, +,}, +, +,Loops,[,edit,], +,Sass allows for iterating over variables using ,@for,, ,@each, and ,@while,, which can be used to apply different styles to elements with similar classes or ids., +, +, +,$squareCount,:, ,3, +,@for, ,$i, ,from, ,1, ,through, ,$squareCount, + ,#square-,#{,$i,}, + ,background-color,:, ,red, + ,width,:, ,50,px, ,*, ,$i, + ,height,:, ,120,px, ,/, ,$i, +, +,The above example would compile to:, +, +, +,#,square-1, ,{, + ,background-color,:, ,red,;, + ,width,:, ,50,px,;, + ,height,:, ,120,px,;, +,}, + +,#,square-2, ,{, + ,background-color,:, ,red,;, + ,width,:, ,100,px,;, + ,height,:, ,60,px,;, +,}, + +,#,square-3, ,{, + ,background-color,:, ,red,;, + ,width,:, ,150,px,;, + ,height,:, ,40,px,;, +,}, +, +,Arguments,[,edit,], +,Mixins also support arguments.,[4], +, +, +,=left,(,$dist,), + ,float,:, ,left, + ,margin-left,:, ,$dist, + +,#data, + ,+left,(,10,px,), +, +,Would compile to:, +, +, +,#,data, ,{, + ,float,:, ,left,;, + ,margin-left,:, ,10,px,;, +,}, +, +,In combination,[,edit,], +, +, +,=table-base, + ,th, + ,text-align,:, ,center, + ,font-weight,:, ,bold, + ,td,,, ,th, + ,padding,:, ,2,px, + +,=left,(,$dist,), + ,float,:, ,left, + ,margin-left,:, ,$dist, + +,#data, + ,+left,(,10,px,), + ,+table-base, +, +,Would compile to:, +, +, +,#,data, ,{, + ,float,:, ,left,;, + ,margin-left,:, ,10,px,;, +,}, +,#,data, ,th, ,{, + ,text-align,:, ,center,;, + ,font-weight,:, ,bold,;, +,}, +,#,data, ,td,,, ,#,data, ,th, ,{, + ,padding,:, ,2,px,;, +,}, +, +,Selector inheritance,[,edit,], +,While CSS3 supports the ,Document Object Model, (DOM) hierarchy, it does not allow selector inheritance. In Sass, inheritance is achieved by inserting a line inside of a code block that uses the @extend keyword and references another selector. The extended selector's attributes are applied to the calling selector.,[4], +, +, +,.error, + ,border,:, ,1,px, ,#f00, + ,background,:, ,#fdd, + +,.error.intrusion, + ,font-size,:, ,1,.3,em, + ,font-weight,:, ,bold, + +,.badError, + ,@extend, ,.error, + ,border-width,:, ,3,px, +, +,Would compile to:, +, +, +,.,error,,, ,.,badError, ,{, + ,border,:, ,1,px, ,#f00,;, + ,background,:, ,#fdd,;, +,}, + +,.,error,.,intrusion,,, +,.,badError,.,intrusion, ,{, + ,font-size,:, ,1.3,em,;, + ,font-weight,:, ,bold,;, +,}, + +,.,badError, ,{, + ,border-width,:, ,3,px,;, +,}, +, +,Sass supports ,multiple inheritance,.,[11], +,libSass,[,edit,], +,At the 2012 HTML5 Developer Conference, Hampton Catlin, the creator of Sass, announced version 1.0 of libSass, an open source C++ implementation of Sass developed by Catlin, Aaron Leung, and the engineering team at ,Moovweb,.,[8],[13], Current Sass maintainer, Chris Eppstein, has expressed intent to contribute as well.,[14], +,According to Catlin, libSass can be ""drop[ped] into anything and it will have Sass in it...You could drop it right into Firefox today and build Firefox and it will compile in there. We wrote our own parser from scratch to make sure that would be possible."",[15], +,The design goals of libSass are:, +, +,Performance – Developers have reported 10x speed up increases over the Ruby implementation of Sass.,[16], +,Easier integration – libSass makes it easier to integrate Sass into more software. Before libSass, tightly integrating Sass into a language or software product required bundling the entire Ruby interpreter. By contrast, libSass is a statically linkable library with zero external dependencies and C-like interface, making it easy to wrap Sass directly into other programming languages and tools. For example, open source libSass bindings now exist for ,Node,, ,Go,, and ,Ruby,.,[13], +,Compatibility – libSass's goal is full compatibility with the official Ruby implementation of Sass; however, this goal has not yet been fully met.,[8], +, +,IDE integration,[,edit,], +, +, +,IDE, +,Software, +,website, +, +, +,Adobe Dreamweaver, CC 2017, +, +,https://blogs.adobe.com/creativecloud/getting-started-with-css-preprocessors-less-and-sass/, +, +, +,Eclipse, +, +, +, +, +,Emacs, +,SCSS Mode, +,https://github.com/antonj/scss-mode/, +, +, +,JetBrains IntelliJ IDEA (Ultimate Edition), +, +,https://www.jetbrains.com/idea/, +, +, +,JetBrains PhpStorm, +, +,http://www.jetbrains.com/phpstorm/, +, +, +,JetBrains RubyMine, +, +,http://www.jetbrains.com/ruby/, +, +, +,Microsoft Visual Studio, +,Mindscape, +,http://www.mindscapehq.com/products/web-workbench, +, +, +,Microsoft Visual Studio, +,SassyStudio, +,http://visualstudiogallery.msdn.microsoft.com/85fa99a6-e4c6-4a1c-9f00-e6a8129b6f4d, +, +, +,Microsoft WebMatrix, +, +,http://www.microsoft.com/web/, +, +, +,NetBeans, +, +,http://plugins.netbeans.org/plugin/34929/scss-support, +, +, +,Vim, +,haml.zip, +,http://www.vim.org/scripts/script.php?script_id=1433, +, +, +,Atom, +, +,https://github.com/atom/language-sass, +, +, +,Visual Studio Code, +, +,https://code.visualstudio.com/Docs/languages/css, +, +, +,See also,[,edit,], +, +,Less (stylesheet language), +,Stylus (stylesheet language), +, +,References,[,edit,], +, +, +,^, ,Latest releases, +,^, ,""Sass: Syntactically Awesome Style Sheets"",. ,sass-lang.com,., , +,^, ,""Natalie Weizenbaum's blog"",., , +,^ ,a, ,b, ,c, ,d, ,e, ,f, ,Media Mark (3.2.12). ,""Sass - Syntactically Awesome Stylesheets"",. Sass-lang.com,. Retrieved ,2014-02-23,., , +,^, ,Kataria, Saransh. ,""Getting started with sass development"",. ,wisdomgeek,. saranshkataria., , +,^, ,Sass - Syntactically Awesome Stylesheets, Tutorial, +,^, ,""Sass / Scss"",. Drupal.org,. Retrieved ,2014-02-23,., , +,^ ,a, ,b, ,c, ,H. Catlin (2012-10-15). ,""Hampton's 6 Rules of Mobile Design"",. HTML5 Developer Conference,. Retrieved ,2013-07-11,., , +,^, ,""jsass - A Java implementation of the Sass compiler (and some other goodies). - Google Project Hosting"",. Code.google.com,. Retrieved ,2014-02-23,., , +,^, ,""SassCompiler (Vaadin 7.0.7 API)"",. Vaadin.com. 2013-06-06,. Retrieved ,2014-02-23,., , +,^ ,a, ,b, ,c, ,d, ,e, ,Sass (Syntactically Awesome StyleSheets), SASS_REFERENCE, +,^, ,Module: Sass::Script::Functions, Sass Functions, +,^ ,a, ,b, ,M. Catlin (2012-04-30). ,""libsass"",. Moovweb Blog,. Retrieved ,2013-07-11,., , +,^, ,C. Eppstein (2012-04-15). ,""Tweet"",. Retrieved ,2013-07-11,., , +,^, ,A. Stacoviak & A. Thorp (2013-06-26). ,""Sass, libsass, Haml and more with Hampton Catlin"",. Retrieved ,2013-07-30,., , +,^, ,D. Le Nouaille (2013-06-07). ,""Sassc and Bourbon"",. Retrieved ,2013-07-11,., , +, +, +,External links,[,edit,], +, +,Official website, +,Haml/Sass Google Group, +,pyScss, a Python Scss library and client, +,Sai the mixins extension and CSS authoring framework for Less & Sass/Scss (Git), +,Sass tools and resources, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Style sheet languages, +, +, +, +,Modes, +, +, +, +,Desktop publishing, +,Web development, +,User interfaces, +, +, +, +, +, +,Standard, +, +, +, +,Cascading (CSS), +,DSSSL, +,Extensible (XSL), +, +, +, +, +, +,Non-standard, +, +, +, +,JavaScript (JSSS), +,FOSI, +,Qt, +,Sass, +,Less, +,Stylus, +,SMIL Timesheets, +,PostCSS, +, +, +, +, +, +, +, +, +,List, +,Comparison, +, +, +, +, +, +, + + +, +, +, +, +",Sass (stylesheet language) +" 14 January 2018, at 14:04."," +,CoffeeScript, +, +, +, +, +,Paradigm, +,Multi-paradigm,: ,prototype-based,, ,functional,, ,imperative,, ,scripting, +, +, +,Designed by, +,Jeremy Ashkenas, +, +, +,Developer, +,Jeremy Ashkenas, Colin Runciman, et al., +, +, +,First appeared, +,December 13, 2009,; 8 years ago, (,2009-12-13,), +, +, +, +, +, +,Stable release, +, +,2.0.0 / September 18, 2017,; 4 months ago, (,2017-09-18,), +, +, +, +, +, +, +,OS, +,Cross-platform, +, +, +,License, +,MIT License, +, +, +,Filename extensions, +,.coffee, .litcoffee, +, +, +,Website, +,coffeescript,.org, +, +, +,Influenced by, +, +, +,Haskell,, ,JavaScript,, ,Perl,,,[,citation needed,], ,Python,,,[1], ,Ruby,, ,YAML,[2], +, +, +,Influenced, +, +, +,MoonScript, ,LiveScript,, JavaScript, +, +, +,CoffeeScript, is a programming language that ,transcompiles, to ,JavaScript,. It adds ,syntactic sugar, inspired by ,Ruby,, ,Python, and ,Haskell, in an effort to enhance JavaScript's brevity and readability.,[3], Specific additional features include ,list comprehension, and ,pattern matching,., +,CoffeeScript support is included in ,Ruby on Rails, version 3.1,[4], and ,Play Framework,.,[5], In 2011, ,Brendan Eich, referenced CoffeeScript as an influence on his thoughts about the future of JavaScript.,[6],[7], +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Syntax, +,3, ,Examples, +, +,3.1, ,Interval test, +,3.2, ,Loops and comprehensions, +,3.3, ,Functions and jQuery, +,3.4, ,String interpolation, +, +, +,4, ,Compiling, +,5, ,Latest additions, +,6, ,Adoption, +,7, ,See also, +, +,7.1, ,Other languages that compile to JavaScript, +, +, +,8, ,References, +,9, ,Further reading, +,10, ,External links, +, +, +, +,History,[,edit,], +,On December 13, 2009, ,Jeremy Ashkenas, made the first ,Git, commit of CoffeeScript with the comment: ""initial commit of the mystery language."",[8], The compiler was written in Ruby. On December 24, he made the first tagged and documented release, 0.1.0. On February 21, 2010, he committed version 0.5, which replaced the Ruby compiler with a ,self-hosting, version in pure CoffeeScript. By that time the project had attracted several other contributors on ,GitHub,, and was receiving over 300 page hits per day., +,On December 24, 2010, Ashkenas announced the release of stable 1.0.0 to ,Hacker News,, the site where the project was announced for the first time.,[9],[10], +,Syntax,[,edit,], +,Almost everything is an expression in CoffeeScript, for example ,if,, ,switch, and ,for, expressions (which have no return value in JavaScript) return a value. As in ,Perl,, these control statements also have postfix versions; for example, ,if, can also be written after the conditional statement., +,Many unnecessary parentheses and braces can be omitted; for example, blocks of code can be denoted by indentation instead of braces, function calls are implicit, and object literals are often detected automatically., +,Examples,[,edit,], +,Interval test,[,edit,], +,To compute the ,body mass index,, one may do (here in ,JavaScript,):, +, +, +,var, ,mass, ,=, ,72,;, +,var, ,height, ,=, ,1.78,;, +,var, ,BMI, ,=, ,mass, ,/, ,Math,.,pow,(,height,,, ,2,);, +,if, ,(,18.5, ,<, ,BMI, ,&&, ,BMI, ,<, ,25,), ,alert,(,'You are healthy!',);, +, +,With CoffeeScript the interval is directly described:, +, +, +,mass = ,72, +,height = ,1.78, +,BMI = ,mass, ,/, ,height,**,2, +,alert, ,'You are healthy!', ,if, ,18.5, ,<, ,BMI, ,<, ,25, +, +,Loops and comprehensions,[,edit,], +,To compute the ,greatest common divisor, of two integers with the ,euclidean algorithm,, in JavaScript one usually needs a ,while, loop:, +, +, +,gcd, ,=, ,(,x,,, ,y,), ,=>, ,{, + ,do, ,{, + ,z, ,=, ,x, ,%, ,y, + ,x, ,=, ,y, + ,y, ,=, ,z, + ,}, ,while, ,(,y, ,!==, ,0,), + ,return, ,x, +,}, +, +,Whereas in CoffeeScript one can use ,until, and pattern-matching instead:, +, +, +,gcd = ,(x, y) ->, + ,[,x,,, ,y,], ,=, ,[,y,,, ,x,%,y,], ,until, ,y, ,is, ,0, + ,x, +, +,Any ,for, loop can be replaced by a ,list comprehension,; so that to compute the squares of the positive odd numbers smaller than ten (i.e. numbers which remainder modulo 2 is 1), one can do:, +, +, +,alert, ,n,*,n, ,for, ,n, ,in, ,[,1,..,10,], ,when, ,n,%,2, ,is, ,1, +, +,Alternatively, there is:, +, +, +,alert, ,n,*,n, ,for, ,n, ,in, ,[,1,..,10,], ,by, ,2, +, +,A ,linear search, can be implemented with a one-liner using the when keyword:, +, +, +,names = ,[,""Ivan"",,, ,""Joanna"",,, ,""Nikolay"",,, ,""Mihaela"",], +,linearSearch = ,(searchName) ->, ,alert,(,name,), ,for, ,name, ,in, ,names, ,when, ,name, ,is, ,searchName, +, +,The ,for ... in, syntax allows looping over arrays while the ,for ... of, syntax allows looping over objects., +,The ,?, keyword quickly checks if a variable is ,null, or ,undefined, :, +, +, +,personCheck = ,->, + ,if, ,not, ,person,?, ,then, ,alert,(,""No person"",), ,else, ,alert,(,""Have person"",), +,person = ,null, +,personCheck,(), +,person = ,""Ivan"", +,personCheck,(), +, +,This would alert ""No person"" if the variable is ,null, or ,undefined, and ""Have person"" if there is something there., +,Functions and jQuery,[,edit,], +,A common JavaScript snippet using the ,jQuery, library is:, +, +, +,$,(,document,).,ready,(,function,(), ,{, + ,// Initialization code goes here, +,}), +, +,Or even just:, +, +, +,$,(,function,(), ,{, + ,// Initialization code goes here, +,}), +, +,In CoffeeScript, the ,function, keyword is replaced by the ,->, symbol, and indentation is used instead of curly braces, as in other ,off-side rule, languages such as Python and Haskell. Also, parentheses can usually be omitted, using indentation level instead to denote a function or block. Thus, the CoffeeScript equivalent of the snippet above is:, +, +, +,$,(,document,).,ready, ,->, + ,# Initialization code goes here, +, +,Or just:, +, +, +,$, ,->, + ,# Initialization code goes here, +, +,String interpolation,[,edit,], +,Ruby-style string interpolation is included in CoffeeScript. Double-quoted strings allow for interpolated values, using #{ ... }, and single-quoted strings are literal.,[11], +, +, +,author = ,""Wittgenstein"", +,quote = ,""A picture is a fact. -- ,#{, ,author, ,},"", + +,sentence = ,"",#{, ,22, ,/, ,7, ,}, is a decent approximation of π"", +, +,Compiling,[,edit,], +,The CoffeeScript compiler has been ,written in CoffeeScript, since version 0.5 and is available as a ,Node.js, utility; however, the core compiler does not rely on Node.js and can be run in any ,JavaScript, environment.,[12], One alternative to the ,Node.js, utility is the ,Coffee Maven Plugin,, a plugin for the popular ,Apache Maven, build system. The plugin uses the ,Rhino, JavaScript engine written in ,Java,., +,The official site at CoffeeScript.org has a ""Try CoffeeScript"" button in the menu bar; clicking it opens a modal window in which users can enter CoffeeScript, see the JavaScript output, and run it directly in the browser. The js2coffee,[13], site provides bi-directional translation., +,Latest additions,[,edit,], +, +,Source maps allow users to de-bug their CoffeeScript code directly, supporting CoffeeScript tracebacks on run time errors., +,CoffeeScript supports a form of ,Literate Programming,, using the ,.coffee.md, or ,.litcoffee, file extension. This allows CoffeeScript source code to be written in ,Markdown,. The compiler will treat any indented blocks (Markdown's way of indicating source code) as code, and ignore the rest as comments., +, +,Adoption,[,edit,], +,On September 13, 2012, ,Dropbox, announced that their browser-side code base has been rewritten from ,JavaScript, to CoffeeScript.,[14], +,GitHub,'s internal style guide once said ""write new JS in CoffeeScript"", and while it no longer does, all the advice in the style guide references how to write good CoffeeScript,,[15], and their ,Atom text editor, is also written in the language.,[16], +,See also,[,edit,], +, +,Source-to-source compiler, +, +,Other languages that compile to JavaScript,[,edit,], +, +, +,Free software portal, +, +, +,(In chronological order, with ones listed in the ,TIOBE index, highlighted in bold.), +, +,Haxe, (2006): a language that can be transpiled to C++, Java, C#, Python, Lua, PHP, and ActionScript; as well as JavaScript., +, +, +,Nim, (2008): a statically-typed programming language with syntactical similarities to ,Python,. The same Nim code can be compiled to C/C++ (optimized ,systems programming,, server-side, etc) or to JavaScript (interpreted scripting, client-side)., +, +, +,LiveScript, (2011): an indirect descendant of CoffeeScript focusing on functional programming., +, +, +,Amber Smalltalk, (2011): an implementation of the Smalltalk-80 language that runs on the JavaScript runtime., +, +, +,Dart, (2011): a ,Google,-led general-purpose ,OOP, language with with optional typing., +, +, +,Opa, (2011): an integrated stack for developing scalable client-server Web applications., +, +, +,TypeScript, (2012): a ,Microsoft,-led strict superset of JavaScript with optional typing., +, +, +,Elm, (2012): a statically-typed purely-functional language that compiles to JavaScript., +, +,References,[,edit,], +, +, +,^, ,http://coffeescript.org/, ""CoffeeScript borrows chained comparisons from Python"", +,^, ,Heller, Martin (18 October 2011). ,""Turn up your nose at Dart and smell the CoffeeScript"",. ,JavaWorld,. InfoWorld,. Retrieved ,2012-02-09,., , +,^, ,Alex MacCaw (January 2012). ,The Little Book on CoffeScript,. ,O'Reilly Media,. ,ISBN, ,978-1-4493-2105-5,., , +,^, ,Josh Peek (April 13, 2011). ,""Tweet by Rails Core Team Member"",., , +,^, ,""AssetsCoffeeScript - 2.5.x"",. ,www.playframework.com,. Retrieved ,2016-10-31,., , +,^, ,Eich, Brendan. "",Harmony of My Dreams,"", +,^, ,Eich, Brendan. "",My JSConf.US Presentation,"", +,^, ,Github. ,'initial commit of the mystery language', +,^, ,Hacker News. ,CoffeeScript 1.0.0 announcement, posted by Jeremy Ashkenas on Dec 24, 2010, +,^, ,Hacker News. ,Original CoffeeScript announcement, posted by Jeremy Ashkenas on Dec 24, 2009, +,^, ,""Official CoffeeScript Page"",. Retrieved ,20 November, 2013,., , +,^, ,CoffeeScript, ,Archived, 2012-04-27 at the ,Wayback Machine,.. Jashkenas.github.com. Retrieved on 2013-07-21., +,^, ,Sta Cruz, Rico. ,""js2coffee"",. Retrieved ,11 May, 2014,., , +,^, ,Wheeler, Dan; Mahkovec, Ziga; Varenhorst, Chris (13 September 2012). ,""Dropbox dives into CoffeeScript"",. Retrieved ,11 May, 2013,., , +,^, ,""JavaScript · Styleguide · GitHub"",. Github.com. ,Archived, from the original on 2013-08-15,. Retrieved ,2015-11-30,., , +,^, ,Atom source code,. github.com. Retrieved on 2015-07-22., +, +, +,Further reading,[,edit,], +, +,Lee, Patrick (May 14, 2014). ""CoffeeScript in Action"" (First ed.). ,Manning Publications,: 432. ,ISBN, ,978-1617290626,., , +,Grosenbach, Geoffrey (May 12, 2011). ""Meet CoffeeScript"" (First ed.). ,PeepCode,., , +,Bates, Mark (May 31, 2012). ""Programming in CoffeeScript"" (First ed.). ,Addison-Wesley,: 350. ,ISBN, ,0-321-82010-X,., , +,MacCaw, Alex (January 31, 2012). ""The Little Book on CoffeeScript"" (First ed.). ,O'Reilly Media,: 62. ,ISBN, ,978-1449321055,., , +,Burnham, Trevor (August 3, 2011). ""CoffeeScript: Accelerated JavaScript Development"" (First ed.). ,Pragmatic Bookshelf,: 138. ,ISBN, ,978-1934356784,., , +, +,External links,[,edit,], +, +,Official website, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Programming languages, +, +, +, +, +, +, +,Comparison, +,Timeline, +,History, +, +, +, +, +, +, +, +, +,Assembly, +,BASIC, +,C, +,C++, +,C#, +,COBOL, +,Fortran, +,Go, +,Groovy, +,Haskell, +,Java, +,JavaScript, (JS), +,Kotlin, +,Lisp, +,Lua, +,Objective-C, +,Pascal, +,Perl, +,PHP, +,Python, +,Rexx, +,Ruby, +,Shell, +,Smalltalk, +,Swift, +,Visual Basic .NET, (VB.NET), +,VBScript, +,more..., +, +, +, +, +, +, +, +, +, ,Category, +, ,Lists, +, +,Alphabetical, +,Categorical, +,Generational, +,Non-English-based, +, +, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,JavaScript, +, +, +, +,Code analysis, +, +, +, +,JSHint, +,JSLint, +, +, +, +, +, +,Transcompilers, +, +, +, +,CoffeeScript, +,Dart, +,Emscripten, +,Google Closure Compiler, +,Google Web Toolkit, +,Morfik, +,TypeScript, +,AtScript, +,Opa, +,Haxe, +,ClojureScript, +, +, +, +, +, +,Concepts, +, +, +, +,Ajax, +,Client-side, +,Dynamic HTML, +,JavaScript library, +,JavaScript syntax, +,Unobtrusive JavaScript, +, +, +, +, +, +,Debuggers, +, +, +, +,Firebug, +,Komodo IDE, +,Microsoft Script Debugger, +,Microsoft Script Editor, +,Opera Dragonfly, +,Venkman, +,Web Inspector, +, +, +, +, +, +,Doc generators, +, +, +, +,JSDoc, +, +, +, +, +, +,Editors (,comparison,), +, +, +, +,Ace, +, +,Cloud9 IDE, +, +, +,Atom, +,CodeMirror, +, +,Light Table, +,Brackets, +, +, +,Koding, +,Orion, +,Visual Studio, +, +,Visual Studio Express, +, +, +,Visual Studio Code, +,Visual Studio Team Services, +, +, +, +, +, +,Engines, +, +, +, +,Comparison of layout engines, +,List of ECMAScript engines, +,List of JavaScript engines, +, +, +, +, +, +,Frameworks, +, +, +, +,Comparison of JavaScript frameworks, +,List of JavaScript libraries, +, +, +, +, +, +,Related ,technologies, +, +, +, +,Cascading Style Sheets, +,Document Object Model, +,HTML, +,JSON, +,WebAssembly, +, +, +, +, +, +,Package managers, +, +, +, +,npm, +,NuGet, +, +, +, +, +, +,Server-side, +, +, +, +,Active Server Pages, +,CommonJS, +,JSGI, +,Node.js, +,Wakanda, +, +, +, +, +, +,Unit testing, +, +, +, +,Jasmine, +,Mocha, +,QUnit, +,List of JavaScript unit testing frameworks, +, +, +, +, +, +,People, +, +, +, +,Douglas Crockford, +,Brendan Eich, +,John Resig, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Node.js, +, +, +, +,Platform, +, +, +, +,Node.js, +,NPM, +,V8, +,CommonJS, +, +, +, +, +, +, +, +, +,Frameworks, +, +, +, +,MEAN, +, +,MongoDB, +,Express.js, +,AngularJS,/,Angular, +, +, +,MEEN (substituted with ,Ember.js,), +,Backbone.js, +,Meteor, +, +, +, +, +, +,Libraries, +, +, +, +,Lodash, +,Underscore.js, +,React.js, +, +, +, +, +, +,Languages, +, +, +, +,JavaScript, +,CoffeeScript, +,TypeScript, +, +, +, +, +, +,Hosts, +, +, +, +,Joyent, +,Nodejitsu, +,OpenShift, +,Linode, +,DigitalOcean, +, +, +, +, +, +, + + +, +, +, +, +",CoffeeScript +" 25 November 2017, at 19:53."," +,IBM i, +, +, +, +, +,Developer, +,IBM, +, +, +,Working state, +,Current, +, +, +,Source model, +,Closed source, +, +, +,Initial release, +,1988, +, +, +,Latest release, +,7.3 / April 15, 2016,; 20 months ago, (,2016-04-15,), +, +, +,Marketing target, +,Minicomputer and enterprise server, +, +, +,Available in, +,English, +, +, +,Kernel, type, +,shares many ,Microkernel, (SLIC) and ,Virtual machine, (TIMI) design philosophies, +, +, +,License, +,Proprietary, +, +, +,Official website, +,IBM i, +, +, +, +, +, +, +The logo for i5/OS, +, +, +,IBM i, is an ,operating system, that runs on ,IBM Power Systems, and on IBM ,PureSystems,. It was named ,OS/400, when it was introduced with the ,AS/400, line of computer systems in 1988, was later renamed to ,i5/OS,, and was renamed to IBM i in 2008 when the IBM Power Systems were introduced., +,It is one of the operating systems supported on IBM Power Systems alongside ,AIX, and ,Linux, as well as on IBM PureSystems alongside AIX, Linux and ,Windows,., +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Features, +, +,2.1, ,PASE, +, +, +,3, ,Version, +,4, ,See also, +,5, ,User groups, +,6, ,References, +,7, ,External links, +, +, +, +,History,[,edit,], +,The early ,IBM System/36, and ,IBM System/38, series customers were a key target of the AS/400, so OS/400 (and its descendants i5/OS and IBM i), have built-in subsystems that provide backward compatibility with these earlier IBM general business systems. IBM i programs, like System/38 programs before them, contain both processor-independent ""virtual"" binary code and processor-dependent executable binary code. Compilers for IBM i produce the processor-independent code as their output; the operating system automatically translates the processor-independent code into the processor-dependent code as needed, without the need for source code or attention by IT personnel. Notably, when migrating from a legacy processor, the only effect that most organizations notice is that the program runs somewhat longer when it runs for the first time on the new computer. Migration consists of taking a backup from the old computer, and restoring it on the new.,[1], +,Features,[,edit,], +,IBM designed IBM i as a "",turnkey,"" operating system, requiring little or no on-site attention from IT staff during normal operation. For example, IBM i has a built-in ,DB2, database which does not require separate installation. Disks are multiply redundant, and can be replaced on line without interrupting work. Hardware and software maintenance tasks are integrated. System administration has been ,wizard,-driven for years, even before that term was defined. This automatic self-care policy goes so far as to automatically schedule all common system maintenance, detect many failures and even order spare parts and service automatically. Organizations using i sometimes have ,sticker shock, when confronting the cost of system maintenance on other systems.,[1], +,Another peculiar feature is that this system was one of the earliest to be ,object-based,. Unlike traditional OSes like UNIX and Windows NT there are no files, only objects of different types. It implemented one of the earliest-known systems for persistent objects. Further, the objects persist in very large, flat virtual memory, called a ,single-level store,.,[1], +,The IBM i Access licensed product includes ,iSeries Navigator,, a client-based and web-based graphical tool for administration of the system, database, ,Apache web server,, and ,WebSphere Application Server,. IBM Systems Director Navigator for i now can be used to manage target servers running IBM i 5.4, 6.1 or 7.1 from a single browser environment with the IBM i 7.1., +,In 1999, IBM introduced ,logical partitioning (LPARs), with i5/OS to support multiple virtual systems on a single hardware footprint., +,In 2007, IBM and ,MySQL AB, ,announced a joint technology and reseller agreement, to bring support for the ,MySQL, open source database and ,DB2 for i as a certified MySQL storage engine, to the IBM i platform, which was ,later in 2011 dropped, by ,MySQL AB,., +,In 2011, IBM and ,Zend Technologies, announced ,Zend DBi, as replacement for the ,MySQL on IBM i support, with a first ,General availability release, in 2012., +,In 2013, IBM and ,PowerRuby Inc., announced ,PowerRuby, as a commercially supported port of the ,Ruby programming language, and the ,Ruby on Rails, ,Web application framework, for IBM i. ,PowerRuby, will be offered as a free download to be installed on customer machines., +,In 2014, IBM ported ,Node.js, to IBM i.,[2], +,PASE,[,edit,], +,IBM i also provides an environment for ,AIX, applications to run natively on the OS without the need for an AIX LPAR.,[3], +,AIX programs are binary compatible with IBM i when using its PASE (Portable Applications System Environment). PASE is essentially ""an operating system within an operating system"", supporting the most recent stable version of AIX. Most AIX 5L compatible binaries may be executed without modification or recompilation in the PASE environment. Exceptions to this are programs that contain direct calls to AIX kernel based APIs as there is no AIX kernel in PASE. If necessary an AIX program may be built directly in PASE using a standard AIX XL C/C++ compiler, for example if native APIs are to be used. In that case APIs are provided to translate between the AIX style pointers and the native 16 byte pointers. Support is provided for running both 32-bit and 64-bit AIX executables., +,Version,[,edit,], +,When IBM announced the new Power Systems line of servers on April 2, 2008, they renamed the operating system from i5/OS to IBM i,[4], and changed the version identifier format from VxRxMx (Version, Release, Modification, e.g. V6R1M0) to the more standard format (e.g. 6.1)., +,The latest version of IBM i is 7.3, announced on April 12, 2016 and released on April 15, 2016 (,Version Support Schedule,)., +,With 7.1, IBM started delivering new updates to the operating system via Technology Refreshes, where number 10 was released in May 2015., +,Version 7.2 was released in May 2014.,[5], +,Version 7.3 was released in April 2016.,[6], +,See also,[,edit,], +, +,Auxiliary storage pool, +,Multics, for a considerably earlier system which provided persistent objects, +, +,User groups,[,edit,], +,User groups have played a major part in the evolution of the IBM i. The largest such group is ,COMMON,.,[7], The Large User Group (LUG),,[8], whose membership consists of major corporations, is a major influence for current and future development of IBM i. The ,Young i Professionals, (YIPS),[9], is another group that has been significant in influencing the direction of the IBM i., +,References,[,edit,], +, +, +,^ ,a, ,b, ,c, ,Soltis, Frank, ""Inside the AS/400""; Frank Soltis was the AS/400 system architect., +,^, ,""Node.js"",. ,IBM i Technology Updates - Open Source Technologies,., , +,^, ,""IBM PASE for i"",. ,IBM,., , +,^, ,IBM Introduces the First in a New Generation of Power Systems, +,^, ,""Planned Availability Date"",. ,IBM i 7.2 TR3 and IBM i 7.1 TR11 offer performance, usability, and integration enhancements,., , +,^, ,""IBM i 7.3"",. ,IBM i 7.3 can deliver significant client value for database and security, and support for industry-leading workloads like analytics and mobile computing,., , +,^, ,""COMMON"",. COMMON,. Retrieved ,2013-11-13,., , +,^, ,""LUG"",. LUG,. Retrieved ,2017-02-09,., , +,^, ,""Young i Professionals (YIPS)"",. YIPS,. Retrieved ,2013-11-13,., , +, +, +,External links,[,edit,], +, +,IBM i, at ,ibm.com, +,IBM Systems IBM i Magazine, +,IBM developerWorks: Articles, tutorials, and technical resources for IBM i users, +,IBM i Wiki: A collaborative environment for the sharing of technical information related to IBM i, +,IBM developerWorks Article: New to IBM i, +,OS/400 commands, +,OS/400 CL (Control Language), +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Operating systems, by ,IBM, +, +, +, +,Desktop / Workstation, +, +, +, +,OS/2, +,PC DOS, +,AOS, +,AIX, +, +, +, +, +, +,Server / Mainframe, +, +, +, +,IBSYS, +,BOS/360, +,TOS/360, +,TSS/360, +,DOS/360 and successors, +, +,VSE, +, +, +,OS/360 and successors, +, +,OS/VS1, +,SVS, +,MVS, +,OS/390, +,z/OS, +, +, +,VM line, +,ACP, +,TPF, +,CPF, +,IBM i, +,AIX, +,zLinux, +,DPCX, +,DPPX, +,SSP, +,SRTOS, +, +, +, +, +, +,Point of Sale, +, +, +, +,4680 OS, +,4690 OS, +, +, +, +, +, +,Projects, +, +, +, +,Taligent, +,Workplace OS, +,Project Monterey, +,Project Trillian, +,K42, +, +, +, +, +, +, + + +, +, +, +, +",IBM i +" 16 July 2017, at 19:28."," +, +, +, +, +, +,The topic of this article ,may not meet Wikipedia's ,notability guidelines for products and services,. ,Please help to establish notability by citing ,reliable secondary sources, that are ,independent, of the topic and provide significant coverage of it beyond its mere trivial mention. If notability cannot be established, the article is likely to be ,merged,, ,redirected,, or ,deleted,., +,Find sources:, ,""Mod ruby"", – ,news, ,·, ,newspapers, ,·, ,books, ,·, ,scholar, ,·, ,JSTOR, ,(August 2014), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +, +, +,This article ,may rely excessively on sources too closely associated with the subject,, potentially preventing the article from being ,verifiable, and ,neutral,. ,Please help ,improve it, by replacing them with more appropriate ,citations, to ,reliable, independent, third-party sources,., ,(August 2014), ,(,Learn how and when to remove this template message,), +, +, +, +, +,mod_ruby, +, +, +, +, +,Stable release, +, +,1.3.0 / November 8, 2008,; 9 years ago, (,2008-11-08,), +, +, +, +, +, +, +,Repository, +, +, +, +,https://github.com/shugo/mod_ruby, +, +, +, +, +, +,Website, +,www,.modruby,.net, +, +, +,mod_ruby, is a module that ,embeds, the ,Ruby, ,interpreter, into the ,Apache web server, to allow Ruby code to execute natively, faster than other ,CGI, methods. Its drawback is that the characteristic sharing of classes among Apache processes is not safe for multiple applications,[1], (e.g., multiple ,Ruby on Rails, applications running simultaneously)., +,There is also the similar ,mod_mruby, for ,mruby,, a lightweight Ruby implementation., +,As of at least 2015, the project seems to no longer be under active development., +,See also,[,edit,], +, +,Phusion Passenger (mod_rails/mod_rack), +,mod_perl, +,mod_php, +,mod_python, +,mod_wsgi, +, +,Notes,[,edit,], +, +, +, +,^, ,[,dead link,],mod_ruby Wiki,, explaining the security problem of mod_ruby., +, +, +, +,External links,[,edit,], +, +,mod_ruby project, +,No True “mod_ruby” Is Damaging Ruby’s Viability On The Web, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web interfaces, +, +, +, +,Server-side, +, +, +, +, +,Protocols, +, +, +, +,HTTP, +,CGI, +,SCGI, +,FCGI, +,AJP, +,WSRP, +,WebSocket, +, +, +, +, +, +,Server APIs, +, +, +, +,C NSAPI, +,C ASAPI, +,C ISAPI, +,COM ASP, +,Java servlet, +, +,container, +, +, +,CLI OWIN, +,ASP.NET Handler, +,Python WSGI, +,Ruby Rack, +,JavaScript JSGI, +,Perl PSGI, +,Lua WSAPI, +,Portlet, +, +,container, +, +, +, +, +, +, +, +,Apache modules, +, +, +, +,mod_jk, +,mod_lisp, +,mod_mono, +,mod_parrot, +,mod_perl, +,mod_php, +,mod_proxy, +,mod_python, +,mod_wsgi, +,mod_ruby, +,Phusion Passenger, +, +, +, +, +, +,Topics, +, +, +, +,Web resource, vs. ,Web service, +,Open API, +,Webhook, +,Application server, +, +,comparison, +, +, +,Scripting, +, +, +, +, +, +, +, +, +,Client-side, +, +, +, +, +,Browser APIs, +, +, +, +,C NPAPI, +, +,LiveConnect, +,XPConnect, +, +, +,C NPRuntime, +,C PPAPI, +, +,NaCl, +, +, +,ActiveX, +,BHO, +,XBAP, +,WebAssembly, +, +, +, +, +, +,Web APIs, +, +, +, +, +,W3C, +, +, +, +,Audio, +,Canvas, +,CORS, +,DOM, +,DOM events, +,EME, +,File, +,Geolocation, +,IndexedDB, +,MSE, +,SSE, +,SVG, +,Video, +,WebRTC, +,WebSocket, +,Web messaging, +,Web storage, +,Web worker, +,XMLHttpRequest, +, +, +, +, +, +,Khronos, +, +, +, +,WebCL, +,WebGL, +, +, +, +, +, +,Others, +, +, +, +,Gears, +,Web SQL Database, (formerly W3C), +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Ajax, vs. ,DHTML, +,Mashup, +,Web IDL, +,Scripting, +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Dynamic web page, +,Open Web Platform, +,Rich Internet application, +,Web application, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Ruby programming language, +, +, +, +,Implementations, +, +, +, +, +,Active, +, +, +, +,Ruby MRI, / ,YARV, +,mruby, +,JRuby, +,Rubinius, +,MagLev, +,RubyMotion, +, +, +, +, +, +,Discontinued, +, +, +, +,MacRuby, +,IronRuby, +,XRuby, +,RubyJS, +,HotRuby, +, +, +, +, +, +, +, +, +, +, +, +,IDE, +, +, +, +,Komodo, +,NetBeans, +,RadRails, +,RubyMine, +, +, +, +, +, +,Applications, +, +, +, +,Capistrano, +,Chef, +,Hackety Hack, +,Homebrew, +,Interactive Ruby Shell, +,Pry, +,Puppet, +,Rake, +,Redmine, +,RSpec, +,RubyGems, +,RVM, +, +, +, +, +, +,Libraries and frameworks, +, +, +, +,Adhearsion, +,Camping, +,eRuby, (RHTML), +,Merb, +,Padrino, +,RubyCocoa, +,Ruby on Rails, +,Shoes, +,Sinatra, +,QtRuby, +, +, +, +, +, +,Server software, +, +, +, +,mod_ruby, +,Mongrel, +,Phusion Passenger, (mod_rails/mod_rack), +,Rack, +,WEBrick, +, +, +, +, +, +,People, +, +, +, +,Yukihiro Matsumoto, +,David Heinemeier Hansson, +,why the lucky stiff, +, +, +, +, +, +,Other, +, +, +, +,Document format, +,why's (poignant) Guide to Ruby, +,Ruby Central, +,RubyKaigi, +,RubyForge, +,Ruby License, +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, +, +, +, +, +, +, +, +, +,This ,programming-language,-related article is a ,stub,. You can help Wikipedia by ,expanding it,., +, +, +,v, +,t, +,e, +, +, +, +, +, + + +, +, +, +, +",mod_ruby +" 15 December 2017, at 10:41.","""FCGI"" redirects here. FCGI may also refer to a fellow of the ,City and Guilds of London Institute,., +, +, +, +, +, +, +,This article includes a ,list of references,, but ,its sources remain unclear, because it has ,insufficient ,inline citations,. ,Please help to ,improve, this article by ,introducing, more precise citations., ,(June 2010), ,(,Learn how and when to remove this template message,), +, +, +, +,FastCGI, is a ,binary protocol, for interfacing interactive programs with a ,web server,. FastCGI is a variation on the earlier ,Common Gateway Interface, (CGI); FastCGI's main aim is to reduce the overhead associated with interfacing the web server and ,CGI, programs, allowing a server to handle more web page requests at once., +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Implementation details, +,3, ,Web Servers that implement FastCGI, +,4, ,Language bindings for the FastCGI API, +,5, ,References, +,6, ,External links, +, +, +, +,History,[,edit,], +,CGI is a protocol for interfacing external applications to web servers. CGI applications run in separate ,processes,, which are created at the start of each request and torn down at the end. This ""one new process per request"" model makes CGI programs very simple to implement, but limits efficiency and scalability. At high loads, the operating system process creation and destruction overhead becomes significant. In addition, the CGI process model limits resource reuse techniques (such as reusing database connections, in-memory caching, etc.)., +,To address the scalability shortcomings of CGI, ,Open Market, developed FastCGI and first introduced it in their webserver product in the mid-1990s. Open Market originally developed FastCGI in part as a competitive response to ,Netscape's, proprietary, in-process API (,NSAPI,) for developing Web applications., +,Although initially developed by ,Open Market,, FastCGI was implemented by a number of other webserver makers. The FastCGI approach, however, competed against other techniques which also aimed to speed and simplify server-subprogram communications. ,Apache, modules such as ,mod_perl, and ,mod_php, appeared around the same time, and they also quickly gained popularity. Today, all of these various approaches (including CGI) remain in common use., +,Implementation details,[,edit,], +,Instead of creating a new process for each request, FastCGI uses persistent processes to handle a series of requests. These processes are owned by the FastCGI server, not the web server. ,[1], +,To service an incoming request, the web server sends ,environment information, and the page request itself to a FastCGI process over either a ,Unix domain socket,, a ,named pipe, or a ,TCP connection,. Responses are returned from the process to the web server over the same connection, and the web server subsequently delivers that response to the end-user. The connection may be closed at the end of a response, but both the web server and the FastCGI service processes persist.,[2], +,Each individual FastCGI process can handle many requests over its lifetime, thereby avoiding the overhead of per-request process creation and termination. Processing of multiple requests simultaneously can be achieved in several ways: by using a single connection with internal multiplexing (i.e. multiple requests over a single connection); by using multiple connections; or by a combination of these techniques. Multiple FastCGI servers can be configured, increasing stability and scalability., +,Web site administrators and programmers can find that the separation of web applications from the web server in FastCGI has many advantages over embedded interpreters (,mod_perl,, ,mod_php,, etc.). This separation allows server and application processes to be restarted independently – an important consideration for busy web sites. It also enables the implementation of per-application / hosting service security policies, which is an important requirement for ISPs and web hosting companies.,[3], Different types of incoming requests can be distributed to specific FastCGI servers which have been equipped to handle those particular types of requests efficiently., +,Web Servers that implement FastCGI,[,edit,], +,See also: ,Comparison of web server software § Features, +, +,Note: unless stated, completeness of FastCGI implementation is unknown, +, +, +,Apache HTTP Server, ,(partial), +, +,Implemented by ,mod_fcgid,. This module used to be third-party, but was granted to the ,ASF, as an Apache HTTP Server subproject in 2009, shepherded by Chris Darroch.,[4], It only supports ,UNIX sockets,, no TCP sockets.,[5], +,A third-party module ,mod_fastcgi, is also being used. For a while, this module no longer compiled properly under Apache 2.4.x,,[6], although that problem has been solved with a fork of the original project.,[7], +,Multiplexing of requests through a single connection is prohibited by Apache 1.x design,,[8], so this isn't supported, +,In Apache 2.4, ,mod_proxy_fcgi, was added, supporting TCP FastCGI servers., +, +, +,Caddy ,[9], +,Cherokee,[10], +,Hiawatha,[11], +, +,Loadbalancing FastCGI support, +,Supports chrooted FastCGI servers, +, +, +,Jetty,[12], +,Kerio WebSTAR, +,Lighttpd,[13], +,LiteSpeed Web Server, +,Microsoft IIS,[14], +,Nginx, +,NaviServer, +,Oracle iPlanet Web Server, +,OpenBSD,'s ,httpd(8),[15], +,Open Market Web Server, +,Resin Application Server, +,Roxen Web Server, +,ShimmerCat web server,.,[16], +,Zeus Web Server, +, +,Language bindings for the FastCGI API,[,edit,], +,FastCGI can be implemented in any language that supports ,network sockets,. (Since ""FastCGI is a protocol, not an implementation,"" it is not tightly bound to any language at all.) ,APIs, exist,[17], for:, +, +,Ada,[18], +,Borland Delphi,/,Lazarus, ,FreePascal,[19], +,C, / ,C++, +,Chicken Scheme, +,Common Lisp,[20], +,D programming language, +,Eiffel,[21], +,Erlang (programming language), +,Go, +,Guile Scheme, +,Haskell, +,HP BASIC for OpenVMS, +,Java,[22],[12], +,Lua, +,node.js,[23], +,OCaml, +,Perl,[24], +,PHP, (via php-fpm, or ,HipHop for PHP,[25],), +,Python, +,REALbasic (REAL Studio),[26], +,Ruby, +,Rust,[27], +,SmallEiffel, +,Smalltalk,: ,FasTalk, and ,Dolphin Smalltalk, +,Tcl, +,WebDNA, +,Vala, (via C bindings), +, +,Recent frameworks such as ,Ruby on Rails,, ,Catalyst,, ,Django,, ,Kepler, and ,Plack, allow use with either the embedded interpreters (,mod_ruby,, ,mod_perl,, ,mod_python, or ,mod_lua,, for example), or FastCGI., +,References,[,edit,], +, +, +,^, ,""FastCGI Specification"",. Open Market, Inc. 1996. Archived from ,the original, on 19 January 2016., , +,^, ,""FastCGI:A High-Performance Web Server Interface"",. Open Market, Inc. 1996. Archived from ,the original, on 1 October 2010., , +,^, ,Paul Heinlein (1 November 1998). ,""FastCGI: Persistent Applications for Your Web Server"",. Linux Journal,. Retrieved ,4 October, 2010,., , +,^, ,FastCGI apache module mod_fcgid, +,^, ,Debian bug #450748: Please add support for TCP/IP FastCGI servers, +,^, ,Issues with Apache 2.4 and PHP-FPM, +,^, ,libapache-mod-fastcgi on Github, +,^, ,FastCGI – The Forgotten Treasure/ Section 2.3., +,^, ,Caddy User Guide – FastCGI, +,^, ,FastCGI for Cherokee, +,^, ,FastCGI HOWTO for Hiawatha, +,^ ,a, ,b, ,FastCGI Support in Jetty, +,^, ,FastCGI for Lighttpd, +,^, ,""FastCGI Extension for IIS6.0 - RTM"",. ,FastCGI for IIS,. Microsoft. 2008-02-28,. Retrieved ,2008-02-29,., , +,^, ,OpenBSD's httpd(8) initial commit, +,^, ,[1], +,^, ,Application Libraries / Development Kits, +,^, ,Matreshka, +,^, ,ExtPascal, +,^, ,How to use FastCGI from Common Lisp, +,^, ,Goanna Eiffel, +,^, ,jFastCGI, a Java Servlet implementing FastCGI protocol, +,^, ,node-fastcgi npm package, +,^, ,There are a number of FastCGI modules for Perl: ,FCGI, (a compiled module written in C), ,FCGI::Async, (for asynchronous FastCGI applications), ,AnyEvent::FCGI, (for ,AnyEvent,-based applications), ,FCGI::EV, (for ,EV,-based applications), ,CGI::Fast, (Perl ,CGI,-like interface for FastCGI), ,FCGI::Client, (a FastCGI client library), and ,Net::FastCGI, (constants and functions to build and parse FastCGI messages)., +,^, ,FasterCGI with HHVM, +,^, ,REAL Studio Web Edition, builds web apps called via FastCGI, ,Archived, 2011-02-08 at the ,Wayback Machine,., +,^, ,[2], +, +, +,External links,[,edit,], +, +,FastCGI specification, (site backup) +, +,Secondary backup, +, +, +,FastCGI Web Site fork, +,mod_fastcgi – FastCGI module fork for Apache 1.x and 2.x supporting external applications, +,mod_fcgid - a FastCGI module for Apache 2.x, +,Microsoft FastCGI, +,Apache v2.x mod_proxy FastCGI Module, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web interfaces, +, +, +, +,Server-side, +, +, +, +, +,Protocols, +, +, +, +,HTTP, +,CGI, +,SCGI, +,FCGI, +,AJP, +,WSRP, +,WebSocket, +, +, +, +, +, +,Server APIs, +, +, +, +,C NSAPI, +,C ASAPI, +,C ISAPI, +,COM ASP, +,Java servlet, +, +,container, +, +, +,CLI OWIN, +,ASP.NET Handler, +,Python WSGI, +,Ruby Rack, +,JavaScript JSGI, +,Perl PSGI, +,Lua WSAPI, +,Portlet, +, +,container, +, +, +, +, +, +, +, +,Apache modules, +, +, +, +,mod_jk, +,mod_lisp, +,mod_mono, +,mod_parrot, +,mod_perl, +,mod_php, +,mod_proxy, +,mod_python, +,mod_wsgi, +,mod_ruby, +,Phusion Passenger, +, +, +, +, +, +,Topics, +, +, +, +,Web resource, vs. ,Web service, +,Open API, +,Webhook, +,Application server, +, +,comparison, +, +, +,Scripting, +, +, +, +, +, +, +, +, +,Client-side, +, +, +, +, +,Browser APIs, +, +, +, +,C NPAPI, +, +,LiveConnect, +,XPConnect, +, +, +,C NPRuntime, +,C PPAPI, +, +,NaCl, +, +, +,ActiveX, +,BHO, +,XBAP, +,WebAssembly, +, +, +, +, +, +,Web APIs, +, +, +, +, +,W3C, +, +, +, +,Audio, +,Canvas, +,CORS, +,DOM, +,DOM events, +,EME, +,File, +,Geolocation, +,IndexedDB, +,MSE, +,SSE, +,SVG, +,Video, +,WebRTC, +,WebSocket, +,Web messaging, +,Web storage, +,Web worker, +,XMLHttpRequest, +, +, +, +, +, +,Khronos, +, +, +, +,WebCL, +,WebGL, +, +, +, +, +, +,Others, +, +, +, +,Gears, +,Web SQL Database, (formerly W3C), +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Ajax, vs. ,DHTML, +,Mashup, +,Web IDL, +,Scripting, +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Dynamic web page, +,Open Web Platform, +,Rich Internet application, +,Web application, +, +, +, +, +, +, + + +, +, +, +, +",FastCGI +" 11 January 2018, at 15:30.","This article is about the software interface between a web server and programs. For other uses, see ,CGI (disambiguation),., +,In ,computing,, ,Common Gateway Interface, (,CGI,) offers a standard ,protocol, for ,web servers, to execute programs that execute like ,Console applications, (also called ,Command-line interface programs,) running on a ,server, that ,generates web pages dynamically,. Such programs are known as ,CGI scripts, or simply as ,CGIs,. The specifics of how the script is executed by the server are determined by the server. In the common case, a CGI script executes at the time a request is made and generates HTML.,[1], In brief, the CGI program receives HTTP forms data via Unix/Linux standard input, and most other data (such as URL paths, URL arguments, and HTTP header data) via well-known Unix/Linux process environment variables., +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Purpose of the CGI standard, +,3, ,Using CGI scripts, +,4, ,Example, +,5, ,Deployment, +,6, ,Uses, +,7, ,Alternatives, +,8, ,See also, +,9, ,References, +,10, ,External links, +, +, +, +,History,[,edit,], +, +, +, +, +The official CGI logo from the spec announcement, +, +, +,In 1993 the ,National Center for Supercomputing Applications, (NCSA) team wrote the specification for calling command line executables on the www-talk mailing list.,[2],[3],[4], The other Web server developers adopted it, and it has been a standard for Web servers ever since. A work group chaired by ,Ken Coar, started in November 1997 to get the NCSA definition of CGI more formally defined.,[5], This work resulted in ,RFC 3875,, which specified CGI Version 1.1. Specifically mentioned in the RFC are the following contributors:,[6], +, +,Rob McCool, (author of the ,NCSA HTTPd, ,Web Server,), +,John Franks (author of the GN Web Server), +,Ari Luotonen, (the developer of the ,CERN httpd, Web Server), +,Tony Sanders (author of the Plexus Web Server), +,George Phillips (Web server maintainer at the ,University of British Columbia,), +, +,Historically CGI scripts were often written using the C language. ,RFC 3875, ""The Common Gateway Interface (CGI)"" partially defines CGI using C,,[7], as in saying that environment variables ""are accessed by the C library routine getenv() or variable environ""., +,Purpose of the CGI standard,[,edit,], +,Each ,web server, runs ,HTTP, server software, which responds to requests from ,web browsers,. Generally, the HTTP server has a ,directory (folder),, which is designated as a document collection — files that can be sent to Web browsers connected to this server.,[8], For example, if the Web server has the domain name ,example.com,, and its document collection is stored at ,/usr/local/apache/htdocs, in the local file system, then the Web server will respond to a request for ,http://example.com/index.html, by sending to the browser the (pre-written) file ,/usr/local/apache/htdocs/index.html,., +,For pages constructed on the fly, the server software may defer requests to separate programs and relay the results to the requesting client (usually, a web browser that displays the page to the end user). In the early days of the web, such programs were usually small and written in a scripting language; hence, they were known as ,scripts,., +,Such programs usually require some additional information to be specified with the request. For instance, if Wikipedia were implemented as a script, one thing the script would need to know is whether the user is logged in and, if logged in, under which name. The content at the top of a Wikipedia page depends on this information., +,HTTP provides ways for browsers to pass such information to the web server, e.g. as part of the URL. The server software must then pass this information through to the script somehow., +,Conversely, upon returning, the script must provide all the information required by HTTP for a response to the request: the HTTP status of the request, the document content (if available), the document type (e.g. HTML, PDF, or plain text), etcetera., +,Initially, different server software would use different ways to exchange this information with scripts. As a result, it wasn't possible to write scripts that would work unmodified for different server software, even though the information being exchanged was the same. Therefore, it was decided to establish a standard way for exchanging this information: CGI (the ,Common Gateway Interface,, as it defines a common way for server software to interface with scripts). Webpage generating programs invoked by server software that operate according to the CGI standard are known as ,CGI scripts,., +,This standard was quickly adopted and is still supported by all well-known server software, such as ,Apache,, ,IIS,, and (with an extension) ,node.js,-based servers., +,An early use of CGI scripts was to process forms. In the beginning of HTML, HTML forms typically had an ""action"" attribute and a button designated as the ""submit"" button. When the submit button is pushed the URI specified in the ""action"" attribute would be sent to the server with the data from the form sent as a query string. If the ""action"" specifies a CGI script then the CGI script would be executed and it then produces a HTML page., +,Using CGI scripts,[,edit,], +,A web server allows its owner to configure which URLs shall be handled by which CGI scripts., +,This is usually done by marking a directory within the document collection as containing CGI scripts — its name is often ,cgi-bin,. For example, ,/usr/local/apache/htdocs/cgi-bin, could be designated as a CGI directory on the web server. When a Web browser requests a URL that points to a file within the CGI directory (e.g., ,http://example.com/cgi-bin/printenv.pl/with/additional/path?and=a&query=string,), then, instead of simply sending that file (,/usr/local/apache/htdocs/cgi-bin/printenv.pl,) to the Web browser, the HTTP server runs the specified script and passes the output of the script to the Web browser. That is, anything that the script sends to ,standard output, is passed to the Web client instead of being shown on-screen in a terminal window., +,As remarked above, the CGI standard defines how additional information passed with the request is passed to the script. For instance, if a slash and additional directory name(s) are appended to the URL immediately after the name of the script (in this example, ,/with/additional/path,), then that path is stored in the ,PATH_INFO, ,environment variable, before the script is called. If parameters are sent to the script via an ,HTTP GET, request (a question mark appended to the URL, followed by param=value pairs; in the example, ,?and=a&query=string,), then those parameters are stored in the ,QUERY_STRING, environment variable before the script is called. If parameters are sent to the script via an ,HTTP POST, request, they are passed to the script's ,standard input,. The script can then read these environment variables or data from standard input and adapt to the Web browser's request.,[9], +,Example,[,edit,], +,The following ,Perl, program shows all the environment variables passed by the Web server:, +, +, +,#!/usr/bin/perl, + +,=head1 DESCRIPTION, + +,printenv — a CGI program that just prints its environment, + +,=cut, +,print, ,""Content-type: text/plain\n\n"",;, + +,for, ,my, ,$var, ,(, ,sort, ,keys, ,%ENV, ,), ,{, + ,printf, ,""%s = \""%s\""\n"",,, ,$var,,, ,$ENV,{,$var,};, +,}, +, +,If a Web browser issues a request for the environment variables at ,http://example.com/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding,, a 64-bit ,Microsoft Windows, web server running ,cygwin, returns the following information:, +, +COMSPEC=""C:\Windows\system32\cmd.exe"" +DOCUMENT_ROOT=""C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"" +GATEWAY_INTERFACE=""CGI/1.1"" +HOME=""/home/SYSTEM"" +HTTP_ACCEPT=""text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"" +HTTP_ACCEPT_CHARSET=""ISO-8859-1,utf-8;q=0.7,*;q=0.7"" +HTTP_ACCEPT_ENCODING=""gzip, deflate"" +HTTP_ACCEPT_LANGUAGE=""en-us,en;q=0.5"" +HTTP_CONNECTION=""keep-alive"" +HTTP_HOST=""example.com"" +HTTP_USER_AGENT=""Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"" +PATH=""/home/SYSTEM/bin:/bin:/cygdrive/c/progra~2/php:/cygdrive/c/windows/system32:..."" +PATHEXT="".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"" +PATH_INFO=""/foo/bar"" +PATH_TRANSLATED=""C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\foo\bar"" +QUERY_STRING=""var1=value1&var2=with%20percent%20encoding"" +REMOTE_ADDR=""127.0.0.1"" +REMOTE_PORT=""63555"" +REQUEST_METHOD=""GET"" +REQUEST_URI=""/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding"" +SCRIPT_FILENAME=""C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/printenv.pl"" +SCRIPT_NAME=""/cgi-bin/printenv.pl"" +SERVER_ADDR=""127.0.0.1"" +SERVER_ADMIN=""(server admin's email address)"" +SERVER_NAME=""127.0.0.1"" +SERVER_PORT=""80"" +SERVER_PROTOCOL=""HTTP/1.1"" +SERVER_SIGNATURE="""" +SERVER_SOFTWARE=""Apache/2.2.19 (Win32) PHP/5.2.17"" +SYSTEMROOT=""C:\Windows"" +TERM=""cygwin"" +WINDIR=""C:\Windows"" +, +,Some, but not all, of these variables are defined by the CGI standard. Some, such as ,PATH_INFO,, ,QUERY_STRING,, and the ones starting with ,HTTP_,, pass information along from the HTTP request., +,From the environment, it can be seen that the Web browser is ,Firefox, running on a ,Windows 7, PC, the Web server is ,Apache, running on a system that emulates ,Unix,, and the CGI script is named ,cgi-bin/printenv.pl,., +,The program could then generate any content, write that to ,standard output,, and the Web server will transmit it to the browser., +,The following are ,environment variables, passed to CGI programs:, +, +,Server specific variables:, +, +,SERVER_SOFTWARE,: ,name,/,version, of ,HTTP server,., +,SERVER_NAME,: ,host name, of the server, may be ,dot-decimal, IP address., +,GATEWAY_INTERFACE,: CGI/,version,., +, +, +,Request specific variables:, +, +,SERVER_PROTOCOL,: HTTP/,version,., +,SERVER_PORT,: ,TCP port, (decimal)., +,REQUEST_METHOD,: name of HTTP method (see above)., +,PATH_INFO,: path suffix, if appended to URL after program name and a slash., +,PATH_TRANSLATED,: corresponding ,full path, as supposed by server, if ,PATH_INFO, is present., +,SCRIPT_NAME,: relative path to the program, like ,/cgi-bin/script.cgi,., +,QUERY_STRING,: the part of URL after ,?, character. The ,query string, may be composed of *,name,=,value, pairs separated with ,ampersands, (such as ,var1,=,val1,&,var2,=,val2,...) when used to submit ,form, data transferred via GET method as defined by HTML ,application/x-www-form-urlencoded,., +,REMOTE_HOST,: host name of the client, unset if server did not perform such lookup., +,REMOTE_ADDR,: ,IP address, of the client (dot-decimal)., +,AUTH_TYPE,: identification type, if applicable., +,REMOTE_USER, used for certain ,AUTH_TYPE,s., +,REMOTE_IDENT,: see ,ident,, only if server performed such lookup., +,CONTENT_TYPE,: ,Internet media type, of input data if PUT or POST method are used, as provided via HTTP header., +,CONTENT_LENGTH,: similarly, size of input data (decimal, in ,octets,) if provided via HTTP header., +,Variables passed by user agent (,HTTP_ACCEPT,, ,HTTP_ACCEPT_LANGUAGE,, ,HTTP_USER_AGENT,, ,HTTP_COOKIE, and possibly others) contain values of corresponding ,HTTP headers, and therefore have the same sense., +, +, +, +,The program returns the result to the Web server in the form of standard output, beginning with a header and a ,blank line,., +,The header is encoded in the same way as an ,HTTP header, and must include the ,MIME type, of the document returned.,[10], The headers, supplemented by the Web server, are generally forwarded with the response back to the user., +,Here is a simple CGI program written in Python 2 along with the HTML that handles a simple addition problem.,[11], +, +, +,, +,<,html,>, + ,<,body,>, + ,<,form, ,action,=,""add.cgi"", ,method,=,""POST"",>, + Enter two numbers to add:,<,br, ,/>, + First Number: ,<,input, ,type,=,""text"", ,name,=,""num1"", ,/><,br, ,/>, + Second Number: ,<,input, ,type,=,""text"", ,name,=,""num2"", ,/><,br, ,/>, + ,<,input, ,type,=,""submit"", ,value,=,""Add"", ,/>, + ,, + ,, +,, +, +, +, +,#!/usr/bin/env python2, + +,import, ,cgi, +,import, ,cgitb, +,cgitb,.,enable,(), + +,input_data, ,=, ,cgi,.,FieldStorage,(), + +,print, ,'Content-Type:text/html', ,# HTML is following, +,print, ,# Leave a blank line, +,print, ,'

Addition Results

', +,try,:, + ,num1, ,=, ,int,(,input_data,[,""num1"",],.,value,), + ,num2, ,=, ,int,(,input_data,[,""num2"",],.,value,), +,except,:, + ,print, ,'

Sorry, we cannot turn your inputs into numbers (integers).

', + ,return, ,1, +,print, ,'

{0} + {1} = {2}

',.,format,(,num1,,, ,num2,,, ,num1, ,+, ,num2,), +, +,This Python 2 CGI gets the inputs from the HTML and adds the two numbers together., +,Deployment,[,edit,], +,A Web server that supports CGI can be configured to interpret a ,URL, that it serves as a reference to a CGI script. A common convention is to have a ,cgi-bin/, ,directory, at the base of the directory tree and treat all executable files within this directory (and no other, for security) as CGI scripts. Another popular convention is to use ,filename extensions,; for instance, if CGI scripts are consistently given the extension ,.cgi,, the web server can be configured to interpret all such files as CGI scripts. While convenient, and required by many prepackaged scripts, it opens the server to attack if a remote user can upload executable code with the proper extension.,[,citation needed,], +,In the case of ,HTTP PUT or POSTs,, the user-submitted data are provided to the program via the ,standard input,. The Web server creates a subset of the ,environment variables, passed to it and adds details pertinent to the HTTP environment., +,Uses,[,edit,], +,CGI is often used to process inputs information from the user and produce the appropriate output. An example of a CGI program is one implementing a ,Wiki,. The user agent requests the name of an entry; the Web server executes the CGI; the CGI program retrieves the source of that entry's page (if one exists), transforms it into ,HTML,, and prints the result. The web server receives the input from the CGI and transmits it to the user agent. If the ""Edit this page"" link is clicked, the CGI populates an HTML ,textarea, or other editing control with the page's contents, and saves it back to the server when the user submits the form in it., +,Alternatives,[,edit,], +,Calling a command generally means the invocation of a newly created ,process, on the server. Starting the process can consume much more time and memory than the actual work of generating the output, especially when the program still needs to be ,interpreted, or ,compiled,. If the command is called often, the resulting workload can quickly overwhelm the server., +,The ,overhead, involved in process creation can be reduced by techniques such as ,FastCGI, that ""prefork"" interpreter processes, or by running the application code entirely within the web server, using extension modules such as ,mod_perl, or ,mod_php,. Another way to reduce the overhead is to use precompiled CGI programs, e.g. by writing them in languages such as ,C, or ,C++,, rather than interpreted or compiled-on-the-fly languages such as ,Perl, or ,PHP,, or by implementing the page generating software as a custom webserver module., +,Alternative approaches include:, +, +,Extensions such as ,Apache modules,, ,NSAPI, plugins, and ,ISAPI, plugins allow third-party software to run on the web server., +,FastCGI, reduces overhead by allowing a single, long-running process to handle more than one user request. Unlike converting an application to a web server plug-in, FastCGI applications remain independent of the web server., +,Simple Common Gateway Interface, or SCGI is designed to be easier to implement, yet it reduces latency in some operations compared to CGI., +,Replacement of the architecture for dynamic websites can also be used. This is the approach taken by ,Java EE,, which runs Java code in a Java servlet container in order to serve dynamic content and optionally static content. This approach replaces the overhead of generating and destroying processes with the much lower overhead of generating and destroying ,threads,, and also exposes the programmer to the library that comes with ,Java Platform, Standard Edition, on which the version of Java EE in use is based., +, +,The optimal configuration for any Web application depends on application-specific details, amount of traffic, and complexity of the transaction; these tradeoffs need to be analyzed to determine the best implementation for a given task and time budget., +,See also,[,edit,], +, +,CGI.pm, +,FastCGI, +,Perl Web Server Gateway Interface, +,Rack (web server interface), +,Web Server Gateway Interface, +, +,References,[,edit,], +, +, +, +,^, ,RFC3875: The Common Gateway Interface (CGI) Version 1.1, +,^, ,Server Scripts,, by Rob McCool, ,www-talk, mailing list, Sun, 14 Nov 1993 19:24:47 -0600, +,^, ,The Common Gateway Interface,, archived from ,the original, on 2010-01-27, , +,^, ,CGI: Common Gateway Interface, at w3.org, +,^, ,""Common Gateway Interface RFC Project Page"",. Archived from ,the original, on 2013-08-25., , +,^, ,RFC3875: The Common Gateway Interface (CGI) Version 1.1, +,^, ,RFC3875: The Common Gateway Interface (CGI) Version 1.1, +,^, ,Mapping URLs to Filesystem Locations Apache HTTP Server Version 2.2, +,^, ,Nelson, Anne Fulcher, and Nelson, William Harris Morehead. (2001). Building Electronic Commerce with Web Database Constructions. Boston, MA: Addison Wesley., +,^, ,CGI Primer (Mirror at citycat.ru), +,^, ,""Abacles HTML Forms"",. ,www.abacles.com,. Retrieved ,2016-04-06,., , +, +, +, +,External links,[,edit,], +, +,GNU cgicc,, a C++ class library for writing CGI applications, +,CGI,, a standard Perl module for CGI request parsing and HTML response generation, +,CGI Programming 101: Learn CGI Today!,, a CGI tutorial, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web interfaces, +, +, +, +,Server-side, +, +, +, +, +,Protocols, +, +, +, +,HTTP, +,CGI, +,SCGI, +,FCGI, +,AJP, +,WSRP, +,WebSocket, +, +, +, +, +, +,Server APIs, +, +, +, +,C NSAPI, +,C ASAPI, +,C ISAPI, +,COM ASP, +,Java servlet, +, +,container, +, +, +,CLI OWIN, +,ASP.NET Handler, +,Python WSGI, +,Ruby Rack, +,JavaScript JSGI, +,Perl PSGI, +,Lua WSAPI, +,Portlet, +, +,container, +, +, +, +, +, +, +, +,Apache modules, +, +, +, +,mod_jk, +,mod_lisp, +,mod_mono, +,mod_parrot, +,mod_perl, +,mod_php, +,mod_proxy, +,mod_python, +,mod_wsgi, +,mod_ruby, +,Phusion Passenger, +, +, +, +, +, +,Topics, +, +, +, +,Web resource, vs. ,Web service, +,Open API, +,Webhook, +,Application server, +, +,comparison, +, +, +,Scripting, +, +, +, +, +, +, +, +, +,Client-side, +, +, +, +, +,Browser APIs, +, +, +, +,C NPAPI, +, +,LiveConnect, +,XPConnect, +, +, +,C NPRuntime, +,C PPAPI, +, +,NaCl, +, +, +,ActiveX, +,BHO, +,XBAP, +,WebAssembly, +, +, +, +, +, +,Web APIs, +, +, +, +, +,W3C, +, +, +, +,Audio, +,Canvas, +,CORS, +,DOM, +,DOM events, +,EME, +,File, +,Geolocation, +,IndexedDB, +,MSE, +,SSE, +,SVG, +,Video, +,WebRTC, +,WebSocket, +,Web messaging, +,Web storage, +,Web worker, +,XMLHttpRequest, +, +, +, +, +, +,Khronos, +, +, +, +,WebCL, +,WebGL, +, +, +, +, +, +,Others, +, +, +, +,Gears, +,Web SQL Database, (formerly W3C), +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Ajax, vs. ,DHTML, +,Mashup, +,Web IDL, +,Scripting, +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Dynamic web page, +,Open Web Platform, +,Rich Internet application, +,Web application, +, +, +, +, +, +, + + +, +, +, +, +",Common Gateway Interface +" 8 January 2018, at 10:46."," +,Phusion Passenger, +, +,Developer(s), +,Phusion, +, +, +, +, +, +,Stable release, +, +,5.1.12,[1], / 23 November 2017,; 55 days ago, (,2017-11-23,), +, +, +, +, +, +, +,Repository, +, +, +, +,https://github.com/phusion/passenger/, +, +, +, +, +, +,Development status, +,Actively developed, +, +, +,Written in, +,C++, and ,Ruby,[2], +, +, +,License, +,MIT License, +, +, +,Website, +,phusionpassenger.com, +, +, +,Phusion Passenger, (informally also known as ,mod_rails, and ,mod_rack, among the Ruby community) is a ,free, web server and application server with support for ,Ruby,, ,Python, and ,Node.js,. It is designed to integrate into the ,Apache HTTP Server, or the ,nginx, web server, but also has a mode for running standalone without an external web server.,[3], Phusion Passenger supports ,Unix-like, operating systems, and is available as a ,gem package,, as a tarball, or as native Linux packages., +,Originally designed for web applications built on the ,Ruby on Rails, framework, it was later extended to support arbitrary Ruby web frameworks through ,the Rack interface,. Later versions also added support for Python through ,the WSGI interface,, as well as support for Node.js.,[4], In 2012, Phusion announced ,Phusion Passenger Enterprise,, a paid, commercial variant of Phusion Passenger with ""a wide array of premium features"".,[5], Phusion has stated that the open source variant will continue to be developed and maintained along with the Enterprise variant., +,Phusion Passenger is the ""preferred deployment setup"" for Ruby on Rails applications,,[6], and has been recommended by the Ruby on Rails authors.,[7],[8], In combination with Ruby 2.0, or with the now-discontinued ,Ruby Enterprise Edition,, Phusion Passenger claims that it is capable of reducing Rails's memory consumption by 33% as well as increasing its performance.,[9], +,See also,[,edit,], +, +,mod_ruby, +, +,References,[,edit,], +, +, +, +,^, ,Knoppel, Daniel (2017-11-23). ,""Passenger 5.1.12: Ubuntu 17.10, Nginx 1.12.2, new queue limit feature, fixes"",. Retrieved ,2018-01-08,., , +,^, ,""Passenger Library, In-depth: Lightweight Ruby dependency"",. Phusion,. Retrieved ,2016-07-14,., , +,^, ,""Phusion Passenger goes fourth"",. The H,. Retrieved ,26 February, 2015,., , +,^, ,""Phusion Passenger Node.js quickstart"",. Phusion,. Retrieved ,2013-07-15,., , +,^, ,""Phusion Passenger Enterprise released"",. Phusion. 2012-08-01,. Retrieved ,2013-07-15,., , +,^, ,""Deploy"",. Ruby on Rails,. Retrieved ,2009-07-03,., , +,^, ,""Myth #1: Rails is hard to deploy"",. Loudthinking.com. 2008-11-13,. Retrieved ,2009-07-03,., , +,^, ,""Koz Speaks — Random Musings on Technology"",. Koziarski.net,. Retrieved ,2009-07-03,., , +,^, ,""Performance and memory usage comparisons — Ruby Enterprise Edition"",. Rubyenterpriseedition.com,. Retrieved ,2013-07-15,., , +, +, +, +,External links,[,edit,], +, +,Phusion Passenger website, +,Phusion Passenger Enterprise, +,GitHub repository, +,Rack, +,Ruby Enterprise Edition, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web interfaces, +, +, +, +,Server-side, +, +, +, +, +,Protocols, +, +, +, +,HTTP, +,CGI, +,SCGI, +,FCGI, +,AJP, +,WSRP, +,WebSocket, +, +, +, +, +, +,Server APIs, +, +, +, +,C NSAPI, +,C ASAPI, +,C ISAPI, +,COM ASP, +,Java servlet, +, +,container, +, +, +,CLI OWIN, +,ASP.NET Handler, +,Python WSGI, +,Ruby Rack, +,JavaScript JSGI, +,Perl PSGI, +,Lua WSAPI, +,Portlet, +, +,container, +, +, +, +, +, +, +, +,Apache modules, +, +, +, +,mod_jk, +,mod_lisp, +,mod_mono, +,mod_parrot, +,mod_perl, +,mod_php, +,mod_proxy, +,mod_python, +,mod_wsgi, +,mod_ruby, +,Phusion Passenger, +, +, +, +, +, +,Topics, +, +, +, +,Web resource, vs. ,Web service, +,Open API, +,Webhook, +,Application server, +, +,comparison, +, +, +,Scripting, +, +, +, +, +, +, +, +, +,Client-side, +, +, +, +, +,Browser APIs, +, +, +, +,C NPAPI, +, +,LiveConnect, +,XPConnect, +, +, +,C NPRuntime, +,C PPAPI, +, +,NaCl, +, +, +,ActiveX, +,BHO, +,XBAP, +,WebAssembly, +, +, +, +, +, +,Web APIs, +, +, +, +, +,W3C, +, +, +, +,Audio, +,Canvas, +,CORS, +,DOM, +,DOM events, +,EME, +,File, +,Geolocation, +,IndexedDB, +,MSE, +,SSE, +,SVG, +,Video, +,WebRTC, +,WebSocket, +,Web messaging, +,Web storage, +,Web worker, +,XMLHttpRequest, +, +, +, +, +, +,Khronos, +, +, +, +,WebCL, +,WebGL, +, +, +, +, +, +,Others, +, +, +, +,Gears, +,Web SQL Database, (formerly W3C), +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Ajax, vs. ,DHTML, +,Mashup, +,Web IDL, +,Scripting, +, +, +, +, +, +, +, +, +,Topics, +, +, +, +,Dynamic web page, +,Open Web Platform, +,Rich Internet application, +,Web application, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Ruby programming language, +, +, +, +,Implementations, +, +, +, +, +,Active, +, +, +, +,Ruby MRI, / ,YARV, +,mruby, +,JRuby, +,Rubinius, +,MagLev, +,RubyMotion, +, +, +, +, +, +,Discontinued, +, +, +, +,MacRuby, +,IronRuby, +,XRuby, +,RubyJS, +,HotRuby, +, +, +, +, +, +, +, +, +, +, +, +,IDE, +, +, +, +,Komodo, +,NetBeans, +,RadRails, +,RubyMine, +, +, +, +, +, +,Applications, +, +, +, +,Capistrano, +,Chef, +,Hackety Hack, +,Homebrew, +,Interactive Ruby Shell, +,Pry, +,Puppet, +,Rake, +,Redmine, +,RSpec, +,RubyGems, +,RVM, +, +, +, +, +, +,Libraries and frameworks, +, +, +, +,Adhearsion, +,Camping, +,eRuby, (RHTML), +,Merb, +,Padrino, +,RubyCocoa, +,Ruby on Rails, +,Shoes, +,Sinatra, +,QtRuby, +, +, +, +, +, +,Server software, +, +, +, +,mod_ruby, +,Mongrel, +,Phusion Passenger, (mod_rails/mod_rack), +,Rack, +,WEBrick, +, +, +, +, +, +,People, +, +, +, +,Yukihiro Matsumoto, +,David Heinemeier Hansson, +,why the lucky stiff, +, +, +, +, +, +,Other, +, +, +, +,Document format, +,why's (poignant) Guide to Ruby, +,Ruby Central, +,RubyKaigi, +,RubyForge, +,Ruby License, +, +, +, +, +, +, +, +, +, ,Category, +, ,Commons, +, +, +, +, +, +, + + +, +, +, +, +",Phusion Passenger + Эта страница последний раз была отредактирована 25 сентября 2017 в 09:42.,"«,Великодушный пожизненный диктатор,» (,англ., ,Benevolent Dictator For Life,, сокр. ,BDFL,) — в контексте разработки ,свободного ПО,, полуюмористический термин, обозначающий главу или основателя проекта, который сохраняет за собой право принимать окончательные решения. Впервые термин использовался по отношению к ,Гвидо ван Россуму,, создателю языка ,Python,[1],[2],., +,В своем эссе «,Заселяя ноосферу,[en],» ,Эрик Рэймонд,, в частности, обсуждает феномен «великодушной диктатуры» в сообществе свободного ПО. Согласно Рэймонду, «диктатор» свободного проекта обязан быть ,великодушным,, поскольку, если набирается достаточно разработчиков, не согласных с решениями «диктатора», они в любой момент могут уйти из проекта или создать ,форк,., +,Примеры «великодушных пожизненных диктаторов»,[,править, | ,править код,], +, +,Андерс Хейлсберг, — ,C#,, ,Delphi,, ,Turbo Pascal, +,Гвидо ван Россум, — ,Python, +,Джимми Уэйлс, — ,Wikipedia,[3], +,Дрис Бёйтарт, — ,Drupal,[4],[5], +,Ларри Уолл, — ,Perl,[6],., +,Линус Торвальдс, — ,ядро Linux,, в интервью согласился с тем, что он великодушный диктатор проекта, но при этом не упомянул слово «пожизненный»,[7],., +,Марк Шаттлворт, — ,Ubuntu Linux,[8], +,Патрик Фолькердинг, — ,Slackware,[9], +,Расмус Лердорф, — ,PHP,[10], +,Тэо де Раадт, — ,OpenBSD, +,Уолтер Брайт, — ,D, +, +,Примечания,[,править, | ,править код,], +, +, +,↑, ,Guido van Rossum., ,Origin of BDFL, (31 июля 2008). ,Проверено 3 августа 2008., ,Архивировано, 16 марта 2012 года., +,↑, ,Python Creator Scripts Inside Google,. www.eweek.com. ,Проверено 3 августа 2008., ,Архивировано, 22 августа 2011 года., +,↑, ,Wikipedia. Rôle of Jimmy Wales, +,↑, ,Dries set to be married!,. ,Архивировано, 20 ноября 2012 года., +,↑, ,Urban Dictionary: BDFL,. ,Архивировано, 20 ноября 2012 года., +,↑, ,Policies and commitments related to the Perl core,. ,Проверено 11 сентября 2012., ,Архивировано, 20 ноября 2012 года., +,↑, ,Linus Torvalds' Benevolent Dictatorship,. ,Проверено 3 августа 2008., ,Архивировано, 16 марта 2012 года., +,↑, ,Ubuntu founder defuses rumors of impending Microsoft deal,. arstechnica.com. ,Проверено 3 августа 2008., ,Архивировано, 16 марта 2012 года., +,↑, ,The Slackware Linux Project: About This Site:,. slackware.com. ,Проверено 3 августа 2008., ,Архивировано, 16 марта 2012 года., +,↑, ,Marneweck, Jacques, ,Jacques Marneweck's Blog: Rasmus's no-framework PHP MVC framework,. Powertrip.co.za (28 февраля 2006). ,Проверено 1 июня 2011., ,Архивировано, 20 ноября 2012 года., +, +, +, +, +, +, +,Это ,заготовка статьи, о компьютерах. ,Вы можете помочь проекту, дополнив её., +,Это примечание по возможности следует заменить ,более точным,., +, +, + + +, +, +, +, +",Великодушный пожизненный диктатор +" 26 November 2017, at 13:50."," +, +, +, +, +, +,This article ,relies too much on ,references, to ,primary sources,. ,Please improve this by adding ,secondary or tertiary sources,., ,(June 2015), ,(,Learn how and when to remove this template message,), +, +, +, +, +,Nginx, +, +, +, +, +,Original author(s), +,Igor Sysoev, +, +, +,Developer(s), +,Nginx, Inc., +, +, +,Initial release, +,4 October 2004,; 13 years ago, (,2004-10-04,),[1], +, +, +, +, +, +,Stable release, +,1.12.2 ,(17 October 2017,; 2 months ago, (,2017-10-17,),), ,[±],[2], +, +, +,Preview release, +,1.13.7 ,(21 November 2017,; 57 days ago, (,2017-11-21,),), ,[±],[3], +, +, +, +, +, +,Repository, +, +, +, +,http://hg.nginx.org/nginx/, +,https://github.com/nginx/nginx, +, +, +, +, +, +,Written in, +,C,[4], +, +, +,Operating system, +,BSD variants,, ,HP-UX,, ,IBM AIX,, ,Linux,, ,macOS,, ,Solaris,, ,Windows,,,[5], and other ,*nix, flavors,[6], +, +, +,Type, +,Web server,, ,reverse/mail proxy server, +, +, +,License, +,2-clause BSD,[7], +, +, +,Website, +,nginx,.org, +, +, +,Nginx, ( ,/,ˌ,ɛ,n,dʒ,ɪ,n,ˈ,ɛ,k,s,/, ,EN,-jin-,EKS,) (stylized as ,NGINX,, ,NGiИX, or ,nginx,) is a ,web server, which can also be used as a ,reverse proxy,, ,load balancer, and ,HTTP cache,. The software was created by ,Igor Sysoev, and first publicly released in 2004.,[8], A company of the same name was founded in 2011 to provide support.,[9], +,Nginx is ,free and open source software,, released under the terms of a ,BSD,-like license. A large fraction of web servers use NGINX,,[10], often as a ,load balancer,.,[11], +, +, +, +,Contents, +, +, +,1, ,Features, +, +,1.1, ,HTTP proxy and Web server features, +,1.2, ,Mail proxy features, +, +, +,2, ,Performance vs Apache, +,3, ,History, +,4, ,See also, +,5, ,References, +,6, ,External links, +, +, +, +,Features,[,edit,], +,Nginx can be deployed to serve dynamic ,HTTP, content on the network using ,FastCGI,, ,SCGI, handlers for ,scripts,, ,WSGI, application servers or ,Phusion Passenger, modules, and it can serve as a software ,load balancer,.,[12], +,Nginx uses an ,asynchronous, ,event-driven, approach to handling requests. Nginx's modular event-driven architecture,[13], can provide more predictable performance under high loads.,[14], +,According to ,Netcraft,'s November 2016 Web Server Survey,,[15], Nginx was found to be the second most widely used web server across all ""active"" sites (18.22% of surveyed sites) and for the top million busiest sites (27.83% of surveyed sites). According to W3Techs, it was used by 37.7% of the top 1 million websites, 49.7% of the top 100,000 websites, and by 57.0% of the top 10,000 websites.,[16], According to BuiltWith, it is used on 38.2% of the top 10,000 websites, and its growth within the top 10k, 100k and 1 million segments increased.,[17], Wikipedia uses Nginx as its ,SSL termination proxy,.,[18], As of ,OpenBSD, release 5.2 (1 November 2012), Nginx became part of the OpenBSD base system, providing an alternative to the system's fork of Apache 1.3, which it was intended to replace,,[19], but it was later replaced by OpenBSD's own httpd(8).,[20], +,HTTP proxy and Web server features,[,edit,], +, +,Ability to handle ,more than 10,000 simultaneous connections, with a low memory footprint (~2.5 MB per 10k inactive ,HTTP keep-alive connections,), +,Handling of static files, index files and auto-indexing, +,Reverse proxy, with caching, +,Load balancing, with in-band health checks,[21], +,TLS/SSL, with ,SNI, and ,OCSP stapling, support, via ,OpenSSL,., +,FastCGI,, ,SCGI,, ,uWSGI, support with caching, +,Name- and IP address-based virtual servers, +,IPv6,-compatible, +,WebSockets, and ,HTTP/1.1 Upgrade (101 Switching Protocols),[22], +, +,Mail proxy features,[,edit,], +, +,TLS/SSL, support, +,STARTTLS, support, +,SMTP,, ,POP3,, and ,IMAP, ,proxy, +,Authentication using an external HTTP server,[23], +, +,Other features include upgrading executable and configuration without client connections loss,,[24], and a module-based architecture with both core,[25], and third-party module support.,[26], +,The paid Plus product includes additional features such as advanced load balancing and access to an expanded suite of metrics for performance monitoring.,[27],[28], +,Performance vs Apache,[,edit,], +,Nginx was written with an explicit goal of outperforming the ,Apache, web server.,[29], Out of the box, serving static files, Nginx uses dramatically less memory than Apache, and can handle roughly four times more requests per second.,[30], This performance boost comes at a cost of decreased flexibility, such as the ability to override systemwide access settings on a per-file basis (Apache accomplishes this with an ,.htaccess, file, while Nginx has no such feature built in).,[31], Formerly, adding third party modules to nginx required ,recompiling, the application from source with the modules ,statically linked,. This was partially overcome in version 1.9.11 with the addition of ,dynamic module loading,. However, the modules still must be compiled at the same time as nginx, and not all modules are compatible with this system—some require the older static linking process.,[32], +,History,[,edit,], +, +,Nginx, Inc., +, +, +,Type, +, +,Private, +, +, +,Industry, +,Technology, +, +, +,Founded, +,2011, +, +, +,Headquarters, +,Russia, +, +, +, +,Key people, +, +,Gus Robertson (CEO), ,Igor Sysoev, (,CTO,), +, +, +,Products, +,Web servers, +, +, +,Website, +,nginx,.com, +, +, +,Igor Sysoev began development of Nginx in 2002.,[8], Originally, Nginx was developed to solve the ,C10K Problem,, and to fill the needs of ,websites, including ,Rambler,, for which it was serving 500 million requests per day by September 2008.,[33],[34], +,A company of the same name was founded in July 2011 by Sysoev to provide commercial products and support for the software.,[35], +,The company's principal place of business is ,San Francisco,, ,California,, while legally incorporated in ,British Virgin Islands,.,[9], +,In October 2011, Nginx raised $3 million from ,BV Capital,, ,Runa Capital, and ,MSD Capital,, ,Michael Dell,‘s venture fund.,[36], +,The company announced commercial support options for companies using Nginx in production. Nginx offered commercial support in February 2012,,[37],[38], and paid Nginx Plus subscription in August 2013.,[39], +,Support packages focus on installation, configuration, performance improvement, etc.,[40], Support includes proactive notifications about major changes, security patches, updates and patches., +,WordPress, developer ,Automattic, and content delivery network provider ,MaxCDN, became funding partners for an update to ,Google,'s ,SPDY, version 3.1, slated for early 2014.,[41], +,Nginx also offers consulting services to assist customers in custom configuration or adding additional features.,[42], +,In October 2013, Nginx raised a $10 million series B investment round led by ,New Enterprise Associates,.,[43], That round included previous investors, as well as ,Aaron Levie,, CEO and founder of ,Box.com,.,[44],[45], In December 2014, Nginx raised a $20 million series B1 round led by New Enterprise Associates, with participation from e.ventures (formerly ,BV Capital,), Runa Capital, ,Index Ventures, and Nginx’s own CEO Gus Robertson.,[46],[47], +,See also,[,edit,], +, +, +,Free software portal, +, +, +, +,Comparison of web server software, +,Web accelerator, +,URL redirection § nginx rewrite, +,List of Nginx–MySQL–PHP packages, +, +,References,[,edit,], +, +, +,^, ,""CHANGES"",. Retrieved ,16 May, 2017,., , +,^, ,Dounin, Maxim (17 October 2017). ,""nginx-1.12.2"",. ,nginx-announce, (Mailing list),. Retrieved ,14 November, 2017,., , +,^, ,Dounin, Maxim (21 November 2017). ,""nginx-1.13.7"",. ,nginx-announce, (Mailing list),. Retrieved ,10 December, 2017,., , +,^, ,""The NGINX Open Source Project on Ohloh"",. ,ohloh.net,. Retrieved ,7 March, 2013,., , +,^, ,""nginx for Windows"",. Retrieved ,28 May, 2014,., , +,^, ,""Tested OS and platforms"",. Retrieved ,15 October, 2011,., , +,^, ,""Licensing"",. Retrieved ,18 January, 2013,., , +,^ ,a, ,b, ,Tony Mobily (5 January 2012). ,""Interview with Igor Sysoev, author of Apache's competitor NGINX"",. ,Free Software Magazine,. Retrieved ,18 October, 2013,., , +,^ ,a, ,b, ,""Notice of Exempt Offering of Securities"",. ,Form D,. US Securities and Exchange Commission 17 October 2013,. Retrieved ,15 September, 2016,., , +,^, ,https://news.netcraft.com/archives/2017/01/12/january-2017-web-server-survey.html, +,^, ,https://www.linode.com/docs/uptime/loadbalancing/use-nginx-as-a-front-end-proxy-and-software-load-balancer, +,^, ,Use nginx for Proxy Services and Software Load Balancing, 11 May 2010, by Sam Kleinman, Linode Library, +,^, ,""The Architecture of Open Source Applications (Volume 2): nginx"",. ,aosabook.org,. Retrieved ,10 June, 2015,., , +,^, ,Basic nginx Configuration, by Sam Kleinman; 21 August 2010, +,^, ,""November 2016 Web Server Survey"",. 22 November 2016,. Retrieved ,19 December, 2016,., , +,^, ,""Usage of web servers broken down by ranking"",. 19 December 2016,. Retrieved ,19 December, 2016,., , +,^, ,""Builtwith: nginx Usage Statistics"",. 19 December 2016,. Retrieved ,19 December, 2016,., , +,^, ,""Wikitech: HTTPS"",. Wikitech.wikimedia.org. 3 October 2011,. Retrieved ,3 December, 2011,., , +,^, ,OpenBSD Upgrade Guide: 5.1 to 5.2,, 2012/11/06 15:00:27 sthen, +,^, ,""Heads Up: Nginx Removed From Base"",., , +,^, ,""Module ngx_http_upstream_module"",. nginx.org,. Retrieved ,14 August, 2012,., , +,^, ,""Proxy: support for connection upgrade (101 Switching Protocols)"",. trac.nginx.org. 19 February 2013,. Retrieved ,21 February, 2013,., , +,^, ,""Module ngx_mail_auth_http_module"",. nginx.org,. Retrieved ,13 September, 2012,., , +,^, ,""Official documentation: Controlling nginx"",. nginx.org,. Retrieved ,3 December, 2011,., , +,^, ,""nginx documentation"",. ,nginx.org,. Retrieved ,9 June, 2015,., , +,^, ,""3rdPartyModules — Nginx Community"",. ,wiki.nginx.org,. Retrieved ,9 June, 2015,., , +,^, ,""How to monitor NGINX"",. ,Datadog,. 9 July 2015,. Retrieved ,9 July, 2015,., , +,^, ,""Application Load Balancing with NGINX Plus"",. ,NGINX,. Retrieved ,9 July, 2015,., , +,^, ,""NGINX vs. Apache: Our View of a Decade-Old Question"",. ,NGINX,. 9 October 2015,. Retrieved ,28 December, 2016,., , +,^, ,""Web server performance comparison"",. ,DreamHost,. Retrieved ,28 December, 2016,., , +,^, ,""NGINX vs. Apache (Pro/Con Review, Uses, & Hosting for Each) - HostingAdvice.com"",. ,HostingAdvice.com,. 5 April 2016,. Retrieved ,28 December, 2016,., , +,^, ,""Introducing Dynamic Modules in NGINX 1.9.11 - NGINX"",. ,NGINX,. 2016-02-09,. Retrieved ,2017-01-13,., , +,^, ,""Choosing Your Web Server: Apache Vs. Nginx"",. Eyerys. 7 December 2016,. Retrieved ,7 December, 2016,., , +,^, ,""Nginx: the High-Performance Web Server and Reverse Proxy"",. ,Linux Journal,. 1 September 2008,. Retrieved ,16 August, 2009,., , +,^, ,""Company"",. nginx.com. 3 January 2012,. Retrieved ,24 February, 2012,., , +,^, ,Natasha Starkell (11 October 2011). ,""Russian Nginx Raises $3 Million From International Investors"",. ,Techcrunch,. Retrieved ,20 November, 2014,., , +,^, ,Darryl K. Taft (8 February 2012). ,""NGINX Launches Commercial Support for Open-Source Web Server"",. ,e Week,. Retrieved ,18 October, 2013,., , +,^, ,Steven J. Vaughan-Nichols (8 February 2012). ,""Commercial Support now available for the open-source NGINX Web server"",. ,ZDNet Open Source blog,. Retrieved ,18 October, 2013,., , +,^, ,""Nginx Inc. Launches NGINX Plus"",. 22 August 2013., , +,^, ,Taft, Darryl K. (8 February 2012). ,""NGINX Launches Commercial Support for Open-Source Web Server"",. eweek.com,. Retrieved ,24 February, 2012,., , +,^, ,Shankland, Stephen (20 December 2013). ,""Nginx upgrade funded by fans of Google's SPDY Web protocol"",. ,CNET,. Retrieved ,6 January, 2014,., , +,^, ,""Commercial Support now available for the open-source NGINX Web server"",. ZDNet. 8 February 2012,. Retrieved ,28 February, 2012,., , +,^, ,Sean Michael Kerner (16 October 2013). ,""Nginx Raises $10 Million in New Funding for Server Development"",. ,e Week,. Retrieved ,18 October, 2013,., , +,^, ,Frederic Lardinois (15 October 2013). ,""Nginx Raises $10M Series B Round Led By NEA"",. ,Techcrunch,. Retrieved ,20 November, 2014,., , +,^, ,Jolie O'Dell (15 October 2013). ,""Nginx ties up a sweet $10M funding deal and hundreds of millions of users"",. ,Venture Beat,. Retrieved ,18 October, 2013,., , +,^, ,Frederic Lardinois (9 December 2014). ,""Nginx Raises $20M Series B1 Round To Drive International Expansion"",. ,Techcrunch,. Retrieved ,9 December, 2014,., , +,^, ,Jordan Novet (9 December 2014). ,""Nginx gets $20M, because an open-source web server is just the beginning"",. ,VentureBeat,. Retrieved ,9 December, 2014,., , +, +, +,External links,[,edit,], +, +,Official website, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web server software, +, +, +, +, +,Comparisons, +, +, +, +,Most popular, +, +, +, +,Apache, +,Nginx, +,IIS, +, +,IIS Express, +, +, +,LiteSpeed Web Server, +, +, +, +, +, +,Other, +, +, +, +,Cherokee, +,Hiawatha, +,iPlanet, +,Lighttpd, +,Mongoose, +,Mongrel2, +,Monkey, +,POCO, +,Traffic Server, +,Jexus, +,Yaws, +,Caddy, +,GlassFish, +,Jetty, +,JOnAS, +,NetWeaver, +,Resin, +,thttpd, +,Tomcat, +,WebLogic, +,WebSphere, +,WildFly, +,Caudium, +,Roxen, +,Gunicorn, +,Paste, +,Tornado, +,Twisted, +,PyGopherd, +,Zope, +,WEBrick, +,Passenger, +,AOLserver, +,NaviServer, +,JEUS, +, +, +, +, +, +,Retired, +, +, +, +,Boa, +,CERN httpd, +,NCSA HTTPd, +,Xitami, +,Zeus, +,Mongrel, +, +, +, +, +, +, + + +, +, +, +, +",Nginx +" 12 October 2017, at 18:58."," +, +, +, +, +, +,This article ,needs additional citations for ,verification,. ,Please help ,improve this article, by ,adding citations to reliable sources,. Unsourced material may be challenged and removed., ,(August 2013), ,(,Learn how and when to remove this template message,), +, +, +, +, +, +, +, +Anything between the ,kernel, and user applications is considered middleware., +, +, +,Middleware, is computer ,software, that provides services to ,software applications, beyond those available from the ,operating system,. It can be described as ""software glue"".,[1], +,Middleware makes it easier for ,software developers, to implement communication and ,input/output,, so they can focus on the specific purpose of their application., +, +, +, +,Contents, +, +, +,1, ,In distributed applications, +,2, ,Other examples, +,3, ,Boundaries, +,4, ,Origins, +,5, ,See also, +,6, ,References, +, +, +, +,In distributed applications,[,edit,], +,Main article: ,Middleware (distributed applications), +, +, +, +, +Software architecture: Middleware, +, +, +,The term is most commonly used for software that enables communication and management of data in ,distributed applications,. An ,IETF, workshop in 2000 defined middleware as ""those services found above the ,transport, (i.e. over TCP/IP) layer set of services but below the application environment"" (i.e. below application-level ,APIs,).,[2], In this more specific sense ,middleware, can be described as the dash (""-"") in ,client-server,, or the ,-to-, in ,peer-to-peer,.,[,citation needed,], Middleware includes ,web servers,, ,application servers,, ,content management systems,, and similar tools that support application development and delivery., +,ObjectWeb defines middleware as: ""The software layer that lies between the ,operating system, and applications on each side of a distributed computing system in a network."",[3], Services that can be regarded as middleware include ,enterprise application integration,, ,data integration,, ,message oriented middleware, (MOM), ,object request brokers, (ORBs), and the ,enterprise service bus, (ESB)., +,Database, access services are often characterised as middleware. Some of them are language specific implementations and support heterogeneous features and other related communication features. Examples of database-oriented middleware include ,ODBC,, ,JDBC, and ,transaction processing, monitors., +,Distributed computing system middleware can loosely be divided into two categories—those that provide human-time services (such as web request servicing) and those that perform in machine-time. This latter middleware is somewhat standardized through the ,Service Availability Forum, and is commonly used in complex, ,embedded systems, within telecom, defense and ,aerospace, industries., +,Other examples,[,edit,], +,The term ,middleware, is used in other contexts as well. ,Middleware, is sometimes used in a similar sense to a ,software driver,, an abstraction layer that hides detail about hardware devices or other software from an application., +, +,The ,mer, software distribution is a middleware: it lacks the ,Linux kernel, and it also lacks a UI. Mer is targeted at hardware vendors' mobile-oriented operating systems., +,The ,Android, operating system uses the ,Linux, kernel at its core, and also provides an ,application framework, that developers incorporate into their applications. In addition, ,Android, provides a middleware layer including ,libraries, that provide services such as data storage, screen display, ,multimedia,, and web browsing. Because the middleware libraries are ,compiled, to ,machine language,, services execute quickly. Middleware libraries also implement device-specific functions, so applications and the application framework need not concern themselves with variations between various Android devices. Android's middleware layer also contains the ,Dalvik, ,virtual machine, and its core ,Java, application libraries.,[4], +,Game engine, software such as ,Gamebryo, and ,Renderware, are sometimes described as middleware, because they provide many services to simplify game development., +,In simulation technology, ,middleware, is generally used in the context of the ,high level architecture, (HLA) that applies to many distributed simulations. It is a layer of software that lies between the ,application code, and the ,run-time infrastructure,. Middleware generally consists of a library of functions, and enables a number of applications—simulations or federates in HLA terminology—to ,page, these functions from the common library rather than re-create them for each application., +,Wireless networking developers can use middleware to meet the challenges associated with a ,wireless sensor network, (WSN). Implementing a middleware application allows WSN ,developers, to integrate operating systems and hardware with the wide variety of various applications that are currently available.,[5], +,The ,QNX, operating system offers middleware for providing multimedia services for use in ,automobiles,, ,aircraft, and other environments., +,Multimedia Home Platform, (DVB-MHP) is an open middleware system standard designed by the ,Digital Video Broadcasting, (DVB) project for interactive digital television. The MHP enables the reception and execution of interactive, Java-based applications on a television set., +,Universal Home API,, or UHAPI, is an application programming interface (API) for consumer electronics appliances, created by the UHAPI Forum. The objective of UHAPI is to enable standard middleware to run on audio/video streaming platforms via a hardware-independent industry standard API., +,The ,Miles Sound System, provided a middleware ,software driver, allowing developers to build software that worked with a range of different sound cards, without concerning themselves with the details of each card., +,Radio-frequency identification, software toolkits provide middleware to filter noisy and redundant raw data., +,Television,, ,media, and ,set-top-box, software often refers to middleware. For instance, ,OpenTV 5, middleware (sometimes called Connectware) is a ,Linux, and ,HTML5, distribution for set-top-box including a default TV navigation guide and provides open APIs to tailored TV user experience that can leverage the home cloud, broadcast video and web services for Pay-TV operators., +, +,Boundaries,[,edit,], +,The distinction between operating system and middleware functionality is, to some extent, arbitrary. While core kernel functionality can only be provided by the operating system itself, some functionality previously provided by separately sold middleware is now integrated in operating systems. A typical example is the ,TCP/IP stack, for telecommunications, nowadays included in virtually every operating system. At the other end of the scale, the boundary between middleware and application has also moved. ,Digital TV middleware, for example usually provides enough functionality so that no ""application"" is needed for end-users to be able to use the TV services., +,Origins,[,edit,], +,Middleware gained popularity in the 1980s as a solution to the problem of how to link newer applications to older legacy systems, although the term had been in use since 1968.,[6], It also facilitated ,distributed processing,, the connection of multiple applications to create a larger application, usually over a network., +,See also,[,edit,], +, +, +, +,Look up ,middleware, in Wiktionary, the free dictionary., +, +, +, +,Cross-language, +,Third party software component, +, +,References,[,edit,], +, +, +,^, ,""What is Middleware?"",. ,Middleware.org,. Defining Technology. 2008. Archived from the original on June 29, 2012,. Retrieved ,2013-08-11,., ,CS1 maint: Unfit url (,link,), +,^, ,http://www.ietf.org/rfc/rfc2768.txt, +,^, ,Krakowiak, Sacha. ,""What's middleware?"",. ObjectWeb.org,. Retrieved ,2005-05-06,., , +,^, ,Charlie Collins, Michael Galpin and Matthias Kaeppler, Android in Practice, Manning Publications, 2011, +,^, ,Hadim, S. and Mohamed, N. (2006). Middleware challenges and approaches for wireless sensor networks. IEEE Distributed Systems Online vol 7. Issue 3. Retrieved March 4, 2009 from ,iEEE Distributed Systems Online, +,^, ,Gall, Nick (July 30, 2005). ,""Origin of the term ,middleware,"",., , +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Major fields of ,computer science, +, +, +, +, +,Note: This template roughly follows the 2012 ,ACM Computing Classification System,., +, +, +, +,Hardware, +, +, +, +,Printed circuit board, +,Peripheral, +,Integrated circuit, +,Very-large-scale integration, +,Energy consumption, +,Electronic design automation, +, +, +, +, +, +,Computer systems, +organization, +, +, +, +,Computer architecture, +,Embedded system, +,Real-time computing, +,Dependability, +, +, +, +, +, +,Networks, +, +, +, +,Network architecture, +,Network protocol, +,Network components, +,Network scheduler, +,Network performance evaluation, +,Network service, +, +, +, +, +, +,Software organization, +, +, +, +,Interpreter, +,Middleware, +,Virtual machine, +,Operating system, +,Software quality, +, +, +, +, +, +,Software notations, +and ,tools, +, +, +, +,Programming paradigm, +,Programming language, +,Compiler, +,Domain-specific language, +,Modeling language, +,Software framework, +,Integrated development environment, +,Software configuration management, +,Software library, +,Software repository, +, +, +, +, +, +,Software development, +, +, +, +,Software development process, +,Requirements analysis, +,Software design, +,Software construction, +,Software deployment, +,Software maintenance, +,Programming team, +,Open-source model, +, +, +, +, +, +,Theory of computation, +, +, +, +,Model of computation, +,Formal language, +,Automata theory, +,Computational complexity theory, +,Logic, +,Semantics, +, +, +, +, +, +,Algorithms, +, +, +, +,Algorithm design, +,Analysis of algorithms, +,Randomized algorithm, +,Computational geometry, +, +, +, +, +, +,Mathematics, +of computing, +, +, +, +,Discrete mathematics, +,Probability, +,Statistics, +,Mathematical software, +,Information theory, +,Mathematical analysis, +,Numerical analysis, +, +, +, +, +, +,Information, +systems, +, +, +, +,Database management system, +,Information storage systems, +,Enterprise information system, +,Social information systems, +,Geographic information system, +,Decision support system, +,Process control system, +,Multimedia information system, +,Data mining, +,Digital library, +,Computing platform, +,Digital marketing, +,World Wide Web, +,Information retrieval, +, +, +, +, +, +,Security, +, +, +, +,Cryptography, +,Formal methods, +,Security services, +,Intrusion detection system, +,Hardware security, +,Network security, +,Information security, +,Application security, +, +, +, +, +, +,Human–computer, +interaction, +, +, +, +,Interaction design, +,Social computing, +,Ubiquitous computing, +,Visualization, +,Accessibility, +, +, +, +, +, +,Concurrency, +, +, +, +,Concurrent computing, +,Parallel computing, +,Distributed computing, +,Multithreading, +,Multiprocessing, +, +, +, +, +, +,Artificial, +intelligence, +, +, +, +,Natural language processing, +,Knowledge representation and reasoning, +,Computer vision, +,Automated planning and scheduling, +,Search methodology, +,Control method, +,Philosophy of artificial intelligence, +,Distributed artificial intelligence, +, +, +, +, +, +,Machine learning, +, +, +, +,Supervised learning, +,Unsupervised learning, +,Reinforcement learning, +,Multi-task learning, +,Cross-validation, +, +, +, +, +, +,Graphics, +, +, +, +,Animation, +,Rendering, +,Image manipulation, +,Graphics processing unit, +,Mixed reality, +,Virtual reality, +,Image compression, +,Solid modeling, +, +, +, +, +, +,Applied, +computing, +, +, +, +,E-commerce, +,Enterprise software, +,Computational mathematics, +,Computational physics, +,Computational chemistry, +,Computational biology, +,Computational social science, +,Computational engineering, +,Computational healthcare, +,Digital art, +,Electronic publishing, +,Cyberwarfare, +,Electronic voting, +,Video game, +,Word processing, +,Operations research, +,Educational technology, +,Document management, +, +, +, +, +, +, +, +, +, ,Book, +, ,Category, +, ,Portal, +,WikiProject, +, ,Commons, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,GND,: ,4426067-2, +, +, +, +, +, +, + + +, +, +, +, +",Middleware +" 10 January 2018, at 16:27.","""JRE"" redirects here. For the podcast, see ,Joe Rogan Experience,., +, +,Java virtual machine, +, +,Designer, +,Sun Microsystems, +, +, +,Bits, +,32-bit, +, +, +,Introduced, +,1994, +, +, +,Type, +,Stack, and ,register–register, +, +, +,Endianness, +,Big, +, +, +,Registers, +, +, +,General purpose, +,Per-method operand stack (up to 65535 operands) plus per-method local variables (up to 65535), +, +, +, +, +, +, +Overview of a Java virtual machine (JVM) architecture based on The Java Virtual Machine Specification Java SE 7 Edition, +, +, +,A ,Java virtual machine, (,JVM,) is ,an abstract computing machine, that enables a computer to run a ,Java, program. There are three notions of the JVM: specification, implementation, and instance. The specification is a document that formally describes what is required of a JVM implementation. Having a single specification ensures all implementations are ,interoperable,. A JVM implementation is a computer program that meets the requirements of the JVM specification. An instance of a JVM is an implementation running in a ,process, that executes a computer program compiled into ,Java bytecode,., +,Java Runtime Environment, (,JRE,) is a software package that contains what is required to run a Java program. It includes a Java Virtual Machine implementation together with an implementation of the ,Java Class Library,. The ,Oracle Corporation,, which owns the Java trademark, distributes a Java Runtime environment with their Java Virtual Machine called ,HotSpot,., +,Java Development Kit, (,JDK,) is a superset of a JRE and contains tools for Java programmers, e.g. a ,javac, compiler. The Java Development Kit is provided free of charge either by Oracle Corporation directly, or by the ,OpenJDK, open source project, which is governed by Oracle., +, +, +, +,Contents, +, +, +,1, ,JVM specification, +, +,1.1, ,Class loader, +,1.2, ,Virtual machine architecture, +,1.3, ,Bytecode instructions, +,1.4, ,JVM languages, +,1.5, ,Bytecode verifier, +, +,1.5.1, ,Secure execution of remote code, +, +, +,1.6, ,Bytecode interpreter and just-in-time compiler, +, +, +,2, ,JVM in the web browser, +, +,2.1, ,Java applets, +,2.2, ,JavaScript JVMs and interpreters, +,2.3, ,Compilation to JavaScript, +, +, +,3, ,Java Runtime Environment, +, +,3.1, ,Performance, +,3.2, ,Generational heap, +,3.3, ,Security, +, +, +,4, ,See also, +,5, ,Notes, +,6, ,References, +,7, ,External links, +, +, +, +,JVM specification,[,edit,], +,The Java virtual machine is an abstract (virtual) computer defined by a specification. This specification omits implementation details that are not essential to ensure interoperability: the memory layout of run-time data areas, the garbage-collection algorithm used, and any internal optimization of the Java virtual machine instructions (their translation into machine code). The main reason for this omission is to not unnecessarily constrain implementers. Any Java application can be run only inside some concrete implementation of the abstract specification of the Java virtual machine.,[1], +,Starting with ,Java Platform, Standard Edition, (J2SE) 5.0, changes to the JVM specification have been developed under the ,Java Community Process, as JSR 924.,[2], As of 2006,[update],, changes to specification to support changes proposed to the ,class file format, (JSR 202),[3], are being done as a maintenance release of JSR 924. The specification for the JVM was published as the ,blue book,,,[4], The preface states:, +, +,We intend that this specification should sufficiently document the Java Virtual Machine to make possible compatible clean-room implementations. Oracle provides tests that verify the proper operation of implementations of the Java Virtual Machine., +, +,One of Oracle's JVMs is named ,HotSpot,, the other, inherited from ,BEA Systems, is ,JRockit,. ,Clean-room, Java implementations include ,Kaffe, and ,IBM J9,. Oracle owns the Java trademark and may allow its use to certify implementation suites as fully compatible with Oracle's specification., +,Class loader,[,edit,], +,Main article: ,Java Class loader, +,One of the organizational units of JVM byte code is a class. A class loader implementation must be able to recognize and load anything that conforms to the Java class file format. Any implementation is free to recognize other binary forms besides ,class, files, but it must recognize ,class, files., +,The class loader performs three basic activities in this strict order:, +, +,Loading: finds and imports the binary data for a type, +,Linking: performs verification, preparation, and (optionally) resolution +, +,Verification: ensures the correctness of the imported type, +,Preparation: allocates memory for class variables and initializing the memory to default values, +,Resolution: transforms symbolic references from the type into direct references., +, +, +,Initialization: invokes Java code that initializes class variables to their proper starting values., +, +,In general, there are two types of class loader: bootstrap class loader and user defined class loader., +,Every Java virtual machine implementation must have a bootstrap class loader, capable of loading trusted classes. The Java virtual machine specification doesn't specify how a class loader should locate classes., +,Virtual machine architecture,[,edit,], +,The JVM operates on primitive values (integers and floating-point numbers) and ,references,. The JVM is fundamentally a 32-bit machine. ,long, and ,double, types, which are 64-bits, are supported natively, but consume two units of storage in a frame's local variables or operand stack, since each unit is 32 bits. ,boolean,, ,byte,, ,short,, and ,char, types are all sign-extended (except ,char, which is zero-extended) and operated on as 32-bit integers, the same as ,int, types. The smaller types only have a few type-specific instructions for loading, storing, and type conversion. ,boolean, is not known at all to the JVM; booleans are operated on as 8-bit ,byte, values, with 0 representing ,false, and 1 representing ,true,., +,The JVM has a garbage-collected heap for storing objects and arrays. Code, constants, and other class data are stored in the ""method area"". The method area is logically part of the heap, but implementations may treat the method area separately from the heap, and for example might not garbage collect it. Each JVM thread also has its own ,call stack, (called a ""Java Virtual Machine stack"" for clarity), which stores ,frames,. A new frame is created each time a method is called, and the frame is destroyed when that method exits., +,Each frame provides an ""operand stack"" and an array of ""local variables"". The operand stack is used for operands to computations and for receiving the return value of a called method, while local variables serve the same purpose as ,registers, and are also used to pass method arguments. Thus, the JVM is both a ,stack machine, and a ,register machine,., +,Bytecode instructions,[,edit,], +,Main article: ,Java bytecode, +,The JVM has ,instructions, for the following groups of tasks:, +, +, +,Load and store, +,Arithmetic, +,Type conversion, +,Object creation and manipulation, +,Operand stack management (push / pop), +,Control transfer (branching), +,Method invocation and return, +,Throwing exceptions, +,Monitor-based concurrency, +, +, +,The aim is binary compatibility. Each particular host ,operating system, needs its own implementation of the JVM and runtime. These JVMs interpret the bytecode semantically the same way, but the actual implementation may be different. More complex than just emulating bytecode is compatibly and efficiently implementing the ,Java core API, that must be mapped to each host operating system., +,These instructions operate on a set of common ,abstracted ,data types, rather the ,native data types, of any specific ,instruction set architecture,., +,JVM languages,[,edit,], +,Main article: ,List of JVM languages, +,A JVM language is any language with functionality that can be expressed in terms of a valid class file which can be hosted by the Java Virtual Machine. A class file contains Java Virtual Machine instructions (,Java byte code,) and a symbol table, as well as other ancillary information. The class file format is the hardware- and operating system-independent binary format used to represent compiled classes and interfaces.,[5], +,There are several JVM languages, both old languages ported to JVM and completely new languages. ,JRuby, and ,Jython, are perhaps the most well-known ports of existing languages, i.e. ,Ruby, and ,Python, respectively. Of the new languages that have been created from scratch to compile to Java bytecode, ,Clojure,, ,Apache Groovy,, ,Scala, and ,Kotlin, may be the most popular ones. A notable feature with the JVM languages is that they are ,compatible with each other,, so that, for example, Scala libraries can be used with Java programs and vice versa.,[6], +,Java 7 JVM implements ,JSR 292: Supporting Dynamically Typed Languages,[7], on the Java Platform, a new feature which supports dynamically typed languages in the JVM. This feature is developed within the ,Da Vinci Machine, project whose mission is to extend the JVM so that it supports languages other than Java.,[8],[9], +,Bytecode verifier,[,edit,], +,A basic philosophy of Java is that it is inherently safe from the standpoint that no user program can crash the host machine or otherwise interfere inappropriately with other operations on the host machine, and that it is possible to protect certain methods and data structures belonging to trusted code from access or corruption by untrusted code executing within the same JVM. Furthermore, common programmer errors that often led to data corruption or unpredictable behavior such as accessing off the end of an array or using an uninitialized pointer are not allowed to occur. Several features of Java combine to provide this safety, including the class model, the garbage-collected ,heap,, and the verifier., +,The JVM verifies all bytecode before it is executed. This verification consists primarily of three types of checks:, +, +,Branches are always to valid locations, +,Data is always initialized and references are always type-safe, +,Access to private or package private data and methods is rigidly controlled, +, +,The first two of these checks take place primarily during the verification step that occurs when a class is loaded and made eligible for use. The third is primarily performed dynamically, when data items or methods of a class are first accessed by another class., +,The verifier permits only some bytecode sequences in valid programs, e.g. a ,jump (branch) instruction, can only target an instruction within the same ,method,. Furthermore, the verifier ensures that any given instruction operates on a fixed stack location,,[10], allowing the JIT compiler to transform stack accesses into fixed register accesses. Because of this, that the JVM is a stack architecture does not imply a speed penalty for emulation on ,register-based architectures, when using a JIT compiler. In the face of the code-verified JVM architecture, it makes no difference to a JIT compiler whether it gets named imaginary registers or imaginary stack positions that must be allocated to the target architecture's registers. In fact, code verification makes the JVM different from a classic stack architecture, of which efficient emulation with a JIT compiler is more complicated and typically carried out by a slower interpreter., +,The original specification for the bytecode verifier used natural language that was incomplete or incorrect in some respects. A number of attempts have been made to specify the JVM as a formal system. By doing this, the security of current JVM implementations can more thoroughly be analyzed, and potential security exploits prevented. It will also be possible to optimize the JVM by skipping unnecessary safety checks, if the application being run is proven to be safe.,[11], +,Secure execution of remote code,[,edit,], +,A virtual machine architecture allows very fine-grained control over the actions that code within the machine is permitted to take. It assumes the code is ""semantically"" correct, that is, it successfully passed the (formal) bytecode verifier process, materialized by a tool, possibly off-board the virtual machine. This is designed to allow safe execution of untrusted code from remote sources, a model used by ,Java applets,, and other secure code downloads. Once bytecode-verified, the downloaded code runs in a restricted "",sandbox,"", which is designed to protect the user from misbehaving or malicious code. As an addition to the bytecode verification process, publishers can purchase a certificate with which to ,digitally sign, applets as safe, giving them permission to ask the user to break out of the sandbox and access the local file system, ,clipboard,, execute external pieces of software, or network., +,Formal proof of bytecode verifiers have been done by the Javacard industry (Formal Development of an Embedded Verifier for Java Card Byte Code,[12],), +,Bytecode interpreter and just-in-time compiler,[,edit,], +,For each ,hardware architecture, a different Java bytecode ,interpreter, is needed. When a computer has a Java bytecode interpreter, it can run any Java bytecode program, and the same program can be run on any computer that has such an interpreter., +,When Java bytecode is executed by an interpreter, the execution will always be slower than the execution of the same program compiled into native machine language. This problem is mitigated by ,just-in-time (JIT) compilers, for executing Java bytecode. A JIT compiler may translate Java bytecode into native machine language while executing the program. The translated parts of the program can then be executed much more quickly than they could be interpreted. This technique gets applied to those parts of a program frequently executed. This way a JIT compiler can significantly speed up the overall execution time., +,There is no necessary connection between the Java programming language and Java bytecode. A program written in Java can be compiled directly into the machine language of a real computer and programs written in other languages than Java can be compiled into Java bytecode., +,Java bytecode is intended to be platform-independent and secure.,[13], Some JVM implementations do not include an interpreter, but consist only of a just-in-time compiler.,[14], +,JVM in the web browser,[,edit,], +,Since the very early stages of the design process, Java (and JVM) has been marketed as a web technology for creating ,Rich Internet Applications,., +,Java applets,[,edit,], +,Main article: ,Java applet, +,On the client side, web browsers may be extended with a ,NPAPI, Java plugin which executes so called ,Java applets, embedded into HTML pages. The applet is allowed to draw into a rectangular region on the page assigned to it and use a restricted set of APIs that allow for example access to user's microphone or 3D acceleration. Java applets were superior to ,JavaScript, both in performance and features until approximately 2011, when JavaScript engines in browsers were made significantly faster and the ,HTML 5, suite of web technologies started enhancing JavaScript with new APIs. Java applets are not able to modify the page outside its rectangular region which is not true about JavaScript. ,Adobe Flash Player,, the main competing technology, works in the same way in this respect. Java applets are not restricted to Java and in general can be created in any JVM language., +,As of April 2014, ,Google Chrome, does not allow the use of any NPAPI plugins.,[15], ,Mozilla Firefox, will also ban NPAPI plugins by the end of 2016. This means that Java applets can no longer be used in either browser.,[16], Oracle ultimately announced in January 2016 that it will discontinue the Java web browser plugin effective Java 9.,[17], +,As of June 2015,[update], according to W3Techs, Java applet use had fallen to 0.1% of all web sites. Flash had fallen to 10.8% and Silverlight to 0.1% of web sites.,[18], +,JavaScript JVMs and interpreters,[,edit,], +,As of May 2016, ,JavaPoly, allows users to import unmodified Java libraries, and invoke them directly from JavaScript. JavaPoly allows websites to use run unmodified Java libraries, even if the user does not have Java installed on their computer.,[19], +,Compilation to JavaScript,[,edit,], +,With the continuing improvements in JavaScript execution speed, combined with the increased use of mobile devices whose web browsers do not implement support for plugins, there are efforts to target those users through compilation to JavaScript. It is possible to either compile the source code or JVM bytecode to JavaScript., +,Compiling the JVM bytecode, which is universal across JVM languages, allows building upon the language's existing compiler to bytecode. The main JVM bytecode to JavaScript compilers are TeaVM,,[20], the compiler contained in Dragome Web SDK,,[21], Bck2Brwsr,,[22], and j2js-compiler.,[23], +,Leading compilers from JVM languages to JavaScript include the Java-to-JavaScript compiler contained in ,Google Web Toolkit,, Clojurescript (,Clojure,), GrooScript (,Apache Groovy,), ,Scala.js, (Scala) and others.,[24], +,Java Runtime Environment,[,edit,], +,Main article: ,HotSpot, +,The Java Runtime Environment (JRE) released by Oracle is a software distribution containing a stand-alone Java VM (,HotSpot,), a browser plugin (discontinued since ,Java 9,), the Java ,standard library, (,Java Class Library,) and a configuration tool. It is the most common Java environment installed on Windows computers. It is freely available for download at the website java.com., +,Performance,[,edit,], +,Main article: ,Java performance, +,The JVM specification gives a lot of leeway to implementors regarding the implementation details. Since Java 1.3, JRE from Oracle contains a JVM called HotSpot. It has been designed to be a high-performance JVM., +,To speed-up code execution, HotSpot relies on just-in-time compilation. To speed-up object allocation and garbage collection, HotSpot uses generational heap., +,Generational heap,[,edit,], +,The ,Java virtual machine heap, is the area of memory used by the JVM for ,dynamic memory allocation,.,[25], +,In HotSpot the heap is divided into ,generations,:, +, +,The ,young generation, stores short-lived ,objects, that are created and immediately ,garbage collected,., +,Objects that persist longer are moved to the ,old generation, (also called the ,tenured generation,). This memory is subdivided into (two) Survivors spaces where the objects that survived the first and next garbage collections are stored., +, +,The ,permanent generation, (or ,permgen,) was used for ,class, definitions and associated metadata prior to Java 8. Permanent generation was not part of the heap.,[26],[27], The ,permanent generation, was removed from Java 8.,[28], +,Originally there was no permanent generation, and objects and classes were stored together in the same area. But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area allowed significant performance improvements.,[26], +,Security,[,edit,], +,Oracle's JRE is installed on a large number of computers. Since any web page the user visits may run Java applets, Java provides an easily accessible ,attack surface, to malicious web sites that the user visits. Kaspersky Labs reports that the Java web browser plugin is the method of choice for computer criminals. Java exploits are included in many exploit packs that hackers deploy onto hacked web sites.,[29], +,In the past, end users were often using an out-of-date version of JRE which was vulnerable to many known attacks. This led to the widely shared belief between users that Java is inherently insecure.,[30], Since Java 1.7, Oracle's JRE for Windows includes automatic update functionality., +,See also,[,edit,], +, +, +,Java portal, +, +, +, +,List of Java virtual machines, +,Comparison of Java virtual machines, +,Comparison of application virtual machines, +,Automated exception handling, +,Java performance, +,List of JVM languages, +,Java processor, +,Common Language Runtime, +, +,Notes,[,edit,], +, +, +,^, ,Bill Venners, ,Inside the Java Virtual Machine, Chapter 5, +,^, ,""The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 924"",. Jcp.org,. Retrieved ,2015-06-26,., , +,^, ,""The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 202"",. Jcp.org,. Retrieved ,2015-06-26,., , +,^, ,The Java Virtual Machine Specification, (the ,first, and ,second, editions are also available online)., +,^, ,""The Java Virtual Machine Specification : Java SE 7 Edition"", ,(PDF),. Docs.oracle.com,. Retrieved ,2015-06-26,., , +,^, ,""Frequently Asked Questions - Java Interoperability"",. ,scala-lang.org,. Retrieved ,2015-11-18,., , +,^, ,""The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 292"",. Jcp.org,. Retrieved ,2015-06-26,., , +,^, ,""Da Vinci Machine project"",. Openjdk.java.net,. Retrieved ,2015-06-26,., , +,^, ,""New JDK 7 Feature: Support for Dynamically Typed Languages in the Java Virtual Machine"",. Oracle.com,. Retrieved ,2015-06-26,., , +,^, ,""The Verification process"",. ,The Java Virtual Machine Specification,. Sun Microsystems. 1999,. Retrieved ,2009-05-31,., , +,^, ,Stephen N. Freund and John C. Mitchell. 1999. A formal framework for the Java bytecode language and verifier. In ,Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA '99),, A. Michael Berman (Ed.) ,Association for Computing Machinery,, New York, pp.147–166. ,doi,:,10.1145/320384.320397, +,^, ,http://www-sop.inria.fr/everest/Lilian.Burdy/CBR02dsn.pdf, +,^, ,David J. Eck, ,Introduction to Programming Using Java,, Seventh Edition, Version 7.0, August 2014 at Section 1.3 ""The Java Virtual Machine"", +,^, ,Oracle JRockit Introduction, Release R28 at 2. ""Understanding Just-In-Time Compilation and Optimization"", +,^, ,""Chrome starts pushing Java off the Web by disabling plugins"",. ,Ars Technica,. Retrieved ,9 December, 2015,., , +,^, ,""Firefox will stop supporting plugins by end of 2016, following Chrome's lead"",. ,PC World,. Retrieved ,9 December, 2015,., , +,^, ,""Oracle deprecates the Java browser plugin, prepares for its demise"",. ,Ars Technica,. Retrieved ,15 April, 2016,., , +,^, ,""Historical yearly trends in the usage of client-side programming languages, June 2015"",. W3techs.com,. Retrieved ,2015-06-26,., , +,^, ,Krill, Paul (13 May 2016). ,""JavaPoly.js imports existing Java code and invokes it directly from JavaScript"",. InfoWorld,. Retrieved ,18 July, 2016,., , +,^, ,""TeaVM project home page"",. Teavm.org,. Retrieved ,2015-06-26,., , +,^, ,""Dragome Web SDK"",. Dragome.com,. Retrieved ,2015-06-26,., , +,^, ,""Bck2Brwsr - APIDesign"",. Wiki.apidesign.org,. Retrieved ,2015-06-26,., , +,^, ,Wolfgang Kuehn (decatur). ,j2js-compiler, GitHub, +,^, ,""List of languages that compile to JS · jashkenas/coffeescript Wiki · GitHub"",. Github.com. 2015-06-19,. Retrieved ,2015-06-26,., , +,^, ,""Frequently Asked Questions about Garbage Collection in the Hotspot Java Virtual Machine"",. ,Sun Microsystems,. 6 February 2003,. Retrieved ,7 February, 2009,., , +,^ ,a, ,b, ,Masamitsu, Jon (28 November 2006). ,""Presenting the Permanent Generation"",. Retrieved ,7 February, 2009,., , +,^, ,Nutter, Charles (11 September 2008). ,""A First Taste of InvokeDynamic"",. Retrieved ,7 February, 2009,., , +,^, ,""JEP 122: Remove the Permanent Generation"",. ,Oracle Corporation,. 2012-12-04,. Retrieved ,2014-03-23,., , +,^, ,""Is there any protection against Java exploits? | Kaspersky Lab"",. Kaspersky.com. 2013-09-09,. Retrieved ,2015-06-26,., , +,^, ,""What Is Java, Is It Insecure, and Should I Use It?"",. Lifehacker.com. 2013-01-14,. Retrieved ,2015-06-26,., , +, +, +,References,[,edit,], +, +, +,Clarifications and Amendments to the Java Virtual Machine Specification, Second Edition, includes list of changes to be made to support J2SE 5.0 and JSR 45, +,JSR 45,, specifies changes to the class file format to support source-level debugging of languages such as ,JavaServer Pages, (JSP) and ,SQLJ, that are translated to Java, +, +, +,External links,[,edit,], +, +,What is Java virtual machine (JVM)?, +,The Java Virtual Machine Specification, +,Java implementations, at Curlie (based on ,DMOZ,), +,How to download and install prebuilt OpenJDK packages, +,How to Install Java?, (JRE from Oracle), +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Java virtual machines, (,comparison,), +, +, +, +,Sun/Oracle, +, +, +, +,HotSpot, +,KVM, +,OpenJDK, +,Maxine VM, +, +, +, +, +, +,Major implementations, +, +, +, +,Excelsior JET, +,JamVM, +,Jikes RVM, +,IBM J9, +, +, +, +, +, +,Embedded, +, +, +, +,Excelsior JET Embedded, +,JamaicaVM, +,Mika VM, +,Mysaifu, +,Squawk (Sun), +, +, +, +, +, +,Others, +, +, +, +,CACAO, +,IcedTea, +,JX, +,more…, +, +, +, +, +, +,Discontinued, +, +, +, +,Apache Harmony, +,Dalvik, +,GCJ, +,IKVM.NET, +,JRockit, +,Kaffe, +,Microsoft JVM, +,SableVM, +,Jupiter, +,more…, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Java, +, +, +, +,Platforms, +, +, +, +,Java language, +,JVM, +,Micro Edition, +,Standard Edition, +,Enterprise Edition, +,Java Card, +,Android SDK, +, +, +, +, +, +, +, +, +,Oracle technologies, +, +, +, +,Squawk, +,Java Development Kit, +,OpenJDK, +,Java virtual machine, +,JavaFX, +,Maxine VM, +, +, +, +, +, +,Platform technologies, +, +, +, +,Applets, +,Servlets, +,MIDlets, +,JSP, +,Web Start (JNLP), +, +, +, +, +, +,Major third-party technologies, +, +, +, +,Blackdown, +,Eclipse, +,GNU Classpath, +,GWT, +,Harmony, +,Hibernate, +,IcedTea, +,Jazelle, +,Spring, +,Struts, +,TopLink, +,WildFly, +, +, +, +, +, +,History, +, +, +, +,Java version history, +,Java Community Process, +,Sun Microsystems, +,Free Java implementations, +, +, +, +, +, +,Major JVM languages, +, +, +, +,BeanShell, +,Clojure, +,Groovy, +,Oxygene, +,JRuby, +,Jython, +,Kotlin, +,Processing, +,Rhino, +,Scala, +,Tcl/Java, +, +, +, +, +, +,Conferences, +, +, +, +,JavaOne, +,Devoxx, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Sun Microsystems, ,(,acquired, by ,Oracle Corp,, 2010), +, +, +, +,People, +, +, +, +,Bill Joy, +,Andy Bechtolsheim, +,Scott McNealy, +,Vinod Khosla, +,List of notable employees, +, +, +, +, +, +,Hardware, +, +, +, +,Sun-1, +,Sun-2, +,Sun-3, +,Sun386i, +,Sun-4, +,SPARCstation, +,Netra, +,Ultra, +,Enterprise, +,Sun Blade, +,Sun Fire, +,SPARC Enterprise, +,SPARC, +,JavaStation, +,Sun Ray, +,Sun Modular Datacenter, +,more..., +, +, +, +, +, +,Software, +, +, +, +,SunOS, +,Solaris, +,NIS, (,+,), +,NFS, +,ZFS, +,SunView, +,NeWS, +,OpenWindows, +,Java Desktop System, +,Sun Studio, +,Java, +,StarOffice, +,iPlanet,/,Sun ONE,/,Java Enterprise System, +,Sun Secure Global Desktop, +,MySQL, +,Sun xVM, +,GlassFish, +,more..., +, +, +, +, +, +,Storage, +, +, +, +,StorageTek, +,Sun Open Storage, +,QFS, +,ZFS, +, +, +, +, +, +,High-performance computing, +, +, +, +,Sun Cloud, +,Sun Constellation System, +,Sun Visualization System, +,Sun Grid Engine, +,Lustre, +, +, +, +, +, +,Research, +, +, +, +,Sun Labs, +,picoJava, +,Fortress, +,Project Looking Glass, +, +, +, +, +, +,Education, +, +, +, +,SCPs, +,BlueJ, +, +, +, +, +, +,Community, +, +, +, +,Common Development and Distribution License, +,Java Community Process, +,NetBeans, +,OpenOffice.org, +,OpenSolaris, +,OpenSPARC, +,OpenJDK, +,OSUM, +, +, +, +, +, +, + + +, +, +, +, +",Java virtual machine +" 17 January 2018, at 17:44.","Not to be confused with ,Content management, or ,Information management,., +,Knowledge management, (,KM,) is the process of creating, sharing, using and managing the ,knowledge, and information of an organisation.,[1], It refers to a multidisciplinary approach to achieving organisational objectives by making the best use of knowledge.,[2], +,An established ,discipline, since 1991, KM includes courses taught in the fields of ,business administration,, ,information systems,, management, library, and ,information sciences,.,[3],[4], Other fields may contribute to KM research, including information and media, ,computer science,, ,public health, and ,public policy,.,[5], Several universities offer dedicated ,master's degrees, in knowledge management., +,Many large companies, public institutions and non-profit organisations have resources dedicated to internal KM efforts, often as a part of their ,business strategy,, ,IT,, or ,human resource management, departments.,[6], Several consulting companies provide advice regarding KM to these organisations.,[6], +,Knowledge management efforts typically focus on organisational objectives such as improved performance, ,competitive advantage,, ,innovation,, the sharing of lessons learned, integration and ,continuous improvement, of the organisation.,[7], These efforts overlap with ,organisational learning, and may be distinguished from that by a greater focus on the management of knowledge as a strategic asset and on encouraging the ,sharing of knowledge,.,[2],[8], KM is an enabler of organisational learning.,[9],[10], +, +, +, +,Contents, +, +, +,1, ,History, +,2, ,Research, +, +,2.1, ,Dimensions, +,2.2, ,Strategies, +,2.3, ,Motivations, +, +, +,3, ,KM technologies, +,4, ,Legal knowledge management, +,5, ,See also, +,6, ,References, +,7, ,External links, +, +, +, +,History,[,edit,], +,Knowledge management efforts have a long history, including on-the-job discussions, formal ,apprenticeship,, ,discussion forums,, corporate libraries, professional training, and mentoring programs.,[2],[10], With increased use of computers in the second half of the 20th century, specific ,adaptations, of technologies such as ,knowledge bases,, ,expert systems,, ,information repositories,, group ,decision support systems,, ,intranets,, and ,computer-supported cooperative work, have been introduced to further enhance such efforts.,[2], +,In 1999, the term ,personal knowledge management, was introduced; it refers to the management of knowledge at the individual level.,[11], +,In the enterprise, early collections of case studies recognised the importance of knowledge management dimensions of strategy, ,process, and ,measurement,.,[12],[13], Key lessons learned include people and the cultural norms which influence their behaviors are the most critical resources for successful knowledge creation, dissemination and application; cognitive, social and organisational learning processes are essential to the success of a knowledge management strategy; and measurement, ,benchmarking, and incentives are essential to accelerate the learning process and to drive cultural change.,[13], In short, knowledge management programs can yield impressive benefits to individuals and organisations if they are purposeful, concrete and action-orientated., +,Research,[,edit,], +,KM emerged as a scientific discipline in the early 1990s.,[14], It was initially supported by individual practitioners, when ,Skandia, hired Leif Edvinsson of Sweden as the world's first ,Chief Knowledge Officer, (CKO).,[15], Hubert Saint-Onge (formerly of ,CIBC,, Canada), started investigating KM long before that.,[2], The objective of CKOs is to manage and maximise the intangible assets of their organisations.,[2], Gradually, CKOs became interested in practical and theoretical aspects of KM, and the new research field was formed.,[16], The KM idea has been taken up by academics, such as ,Ikujiro Nonaka, (,Hitotsubashi University,), Hirotaka Takeuchi (Hitotsubashi University), ,Thomas H. Davenport, (,Babson College,) and Baruch Lev (,New York University,).,[3],[17], In 2001, ,Thomas A. Stewart,, former editor at ,Fortune, magazine and subsequently the editor of ,Harvard Business Review,, published a cover story highlighting the importance of intellectual capital in organisations.,[18], The KM discipline has been gradually moving towards academic maturity.,[2], First, is a trend toward higher cooperation among academics; single-author publications are less common. Second, the role of practitioners has changed.,[16], Their contribution to academic research declined from 30% of overall contributions up to 2002, to only 10% by 2009.,[19], Third, the number of academic knowledge management journals has been steadily growing, currently reaching 27 outlets.,[20], +,Multiple KM disciplines exist; approaches vary by author and school.,[16],[21], As the discipline matured, academic debates increased regarding ,theory, and practice, including:, +, +,Techno-centric, with a focus on technology, ideally those that enhance ,knowledge sharing, and creation.,[22],[23], +,Organisational, with a focus on how an organisation can be designed to facilitate knowledge processes best.,[6], +,Ecological, with a focus on the interaction of people, ,identity,, knowledge, and environmental factors as a ,complex adaptive system, akin to a natural ,ecosystem,.,[24],[25], +, +,Regardless of the ,school of thought,, core components of KM roughly include people/culture, processes/structure and technology. The details depend on the ,perspective,.,[26], KM perspectives include:, +, +,community of practice,[27], +,social network analysis,[28], +,intellectual capital,[29], +,information theory,[14],[15], +,complexity science,[30], +,constructivism,[31],[32], +, +,The practical relevance of academic research in KM has been questioned,[33], with ,action research, suggested as having more relevance,[34], and the need to translate the findings presented in academic journals to a practice.,[12], +,Dimensions,[,edit,], +,Different ,frameworks, for distinguishing between different 'types of' knowledge exist.,[10], One proposed framework for categorizing the ,dimensions, of knowledge distinguishes ,tacit knowledge, and ,explicit knowledge,.,[30], Tacit knowledge represents internalised knowledge that an individual may not be consciously aware of, such as to accomplish particular tasks. At the opposite end of the spectrum, explicit knowledge represents knowledge that the individual holds consciously in mental focus, in a form that can easily be communicated to others.,[16],[35], +, +, +, +, +The Knowledge Spiral as described by Nonaka & Takeuchi., +, +, +,Ikujiro Nonaka proposed a model (,SECI,, for Socialization, Externalization, Combination, Internalization) which considers a spiraling interaction between ,explicit knowledge, and tacit knowledge.,[36], In this model, knowledge follows a cycle in which implicit knowledge is 'extracted' to become explicit knowledge, and explicit knowledge is 're-internalised' into implicit knowledge.,[36], +,Hayes and Walsham (2003) describe knowledge and knowledge management as two different perspectives.,[37], The content perspective suggests that knowledge is easily stored; because it may be codified, while the relational perspective recognises the contextual and relational aspects of knowledge which can make knowledge difficult to share outside the specific context in which it is developed.,[37], +,Early research suggested that KM needs to convert internalised tacit knowledge into explicit knowledge to share it, and the same effort must permit individuals to internalise and make personally meaningful any codified knowledge retrieved from the KM effort.,[6],[38], +,Subsequent research suggested that a distinction between tacit knowledge and explicit knowledge represented an oversimplification and that the notion of explicit knowledge is self-contradictory.,[11], Specifically, for knowledge to be made explicit, it must be translated into information (i.e., ,symbols, outside our heads).,[11],[39], More recently, together with ,Georg von Krogh, and ,Sven Voelpel,, Nonaka returned to his earlier work in an attempt to move the debate about knowledge conversion forward.,[4],[40], +,A second proposed framework for categorizing knowledge dimensions distinguishes embedded knowledge of a ,system, outside a human individual (e.g., an information system may have knowledge embedded into its design) from ,embodied knowledge, representing a learned capability of a human body's ,nervous, and ,endocrine systems,.,[41], +,A third proposed framework distinguishes between the exploratory creation of ""new knowledge"" (i.e., innovation) vs. the ,transfer, or exploitation of ""established knowledge"" within a group, organisation, or community.,[37],[42], Collaborative environments such as communities of practice or the use of ,social computing, tools can be used for both knowledge creation and transfer.,[42], +,Strategies,[,edit,], +,Knowledge may be accessed at three stages: before, during, or after KM-related activities.,[29], Organisations have tried knowledge capture ,incentives,, including making content submission mandatory and incorporating rewards into ,performance measurement, plans.,[43], Considerable controversy exists over whether such incentives work and no consensus has emerged.,[7], +,One strategy to KM involves actively managing knowledge (push strategy).,[7],[44], In such an instance, individuals strive to explicitly encode their knowledge into a shared knowledge repository, such as a ,database,, as well as retrieving knowledge they need that other individuals have provided (codification).,[44], +,Another strategy involves individuals making knowledge requests of experts associated with a particular subject on an ad hoc basis (pull strategy).,[7],[44], In such an instance, expert individual(s) provide ,insights, to requestor (personalisation).,[30], +,Hansen et al. defined the two strategies.,[45], Codification focuses on collecting and storing codified knowledge in electronic databases to make it accessible.,[46], Codification can therefore refer to both tacit and explicit knowledge.,[47], In contrast, personalization encourages individuals to share their knowledge directly.,[46], Information technology plays a less important role, as it is only facilitates communication and knowledge sharing., +,Other knowledge management strategies and instruments for companies include:,[7],[24],[30], +, +,Knowledge sharing (fostering a culture that encourages the sharing of information, based on the concept that knowledge is not irrevocable and should be shared and updated to remain relevant), +,Storytelling, (as a means of transferring tacit knowledge), +,Cross-project learning, +,Make knowledge-sharing as a key roles in employees' job description, +,After-action reviews, +,Knowledge mapping (a map of knowledge repositories within a company accessible by all), +,Communities of practice, +,Expert directories (to enable knowledge seeker to reach to the experts), +,Expert systems, (knowledge seeker responds to one or more specific questions to reach knowledge in a repository), +,Best practice transfer, +,Knowledge fairs, +,Competence management (systematic evaluation and planning of competences of individual organisation members), +,Proximity & architecture (the physical situation of employees can be either conducive or obstructive to knowledge sharing), +,Master–apprentice relationship, Mentor-mentee relationship, Job-shadowing, +,Collaborative software, technologies (wikis, shared bookmarking, blogs, ,social software,, etc.), +,Knowledge repositories (databases, ,bookmarking engines,, etc.), +,Measuring and reporting intellectual capital (a way of making explicit knowledge for companies), +,Knowledge brokers, (some organisational members take on responsibility for a specific ""field"" and act as first reference on a specific subject), +,Inter-project knowledge transfer, +,Intra-organizational knowledge sharing, +,Inter-organizational knowledge sharing, +, +,Motivations,[,edit,], +,Multiple ,motivation,s lead organisations to undertake KM.,[35], Typical considerations include:,[30], +, +,Making available increased knowledge content in the ,development, and provision of ,products, and ,services, +,Achieving shorter development cycles, +,Facilitating and managing innovation and organisational learning, +,Leveraging ,expertise,s across the organisation, +,Increasing ,network, ,connectivity, between internal and external individuals, +,Managing business environments and allowing employees to obtain relevant insights and ,ideas, appropriate to their work, +,Solving intractable or ,wicked problems, +,Managing intellectual capital and assets in the workforce (such as the expertise and ,know-how, possessed by key individuals or stored in repositories), +, +,KM technologies,[,edit,], +,Knowledge management (KM) technology can be categorised:, +, +,Groupware,—Software that facilitates collaboration and sharing of organisational information. One of the earliest successful products in this category was ,Lotus Notes,: it provided tools for ,threaded discussions,, ,document sharing,, organisation-wide uniform email, etc., +,Workflow systems,—Systems that allow the representation of processes associated with the creation, use and maintenance of organisational knowledge. For example, the process to create and utilise forms and documents., +,Content management, and ,document management, systems—Software systems that automate the process of creating web content and/or documents. Roles such as editors, graphic designers, writers and producers can be explicitly modeled along with the tasks in the process and validation criteria. Commercial vendors started either to support documents (e.g. ,Documentum,) or to support web content (e.g. ,Interwoven,) but as the Internet grew these functions merged and vendors now perform both functions., +,Enterprise portals,—Software that aggregates information across the entire organisation or for groups such as project teams (e.g. ,Microsoft SharePoint,)., +,eLearning,—Software that enables organisations to create customised training and education. This can include lesson plans, monitoring progress and online classes., +,Planning and ,scheduling software,—Software that automates schedule creation and maintenance (e.g. ,Microsoft Outlook,). The planning aspect can integrate with ,project management software, such as ,Microsoft Project,.,[22], +,Telepresence,—Software that enables individuals to have virtual ""face-to-face"" meetings without assembling at one location. Videoconferencing is the most obvious example., +, +,These categories overlap. Workflow, for example, is a significant aspect of a content or document management systems, most of which have tools for developing enterprise portals.,[7],[48], +,Proprietary KM technology products such as Lotus Notes defined proprietary formats for email, documents, forms, etc. The Internet drove most vendors to adopt Internet formats. ,Open-source, and ,freeware, tools for the creation of ,blogs, and ,wikis, now enable capabilities that used to require expensive commercial tools.,[34],[49], +,KM is driving the adoption of tools that enable organisations to work at the semantic level,,[50], as part of the ,Semantic Web,:,[51], for example, the ,Stanford, ,Protégé Ontology Editor,. Some commentators have argued that after many years the Semantic Web has failed to see widespread adoption,,[52],[53],[54], while other commentators have argued that it has been a success.,[55], +,Legal knowledge management,[,edit,], +,Knowledge management in law firms has evolved through three phases.,[56],  Phase one focused primarily on the development of taxonomies to systematize attorney work product and related research.  The second phase focused on enterprise search to mine the growing volume of information managed by law firms.  Legal industry specific search engines were deployed by many AmLaw 100 law firms during this phase. Phase 3 was driven by changes in the legal market place and growing competition that led to price pressure and increased demands for efficiency from clients. A major focus of law firm KM today is in using historical billing information to generate alternative fee arrangements and more generally in the area of legal project management to more efficiently deliver legal services to clients., +,See also,[,edit,], +, +, +,Customer knowledge, +,Electronic Journal of Knowledge Management, +,Ignorance management, +,Information management, +,Information governance, +,Journal of Knowledge Management, +,Journal of Knowledge Management Practice, +,Knowledge cafe, +,Knowledge community, +,Knowledge ecosystem, +,Knowledge engineering, +,Knowledge management software, +,Knowledge modeling, +,Knowledge transfer, +,Knowledge translation, +,Legal case management, +, +, +,References,[,edit,], +, +, +,^, ,Girard, John P.; Girard, JoAnn L. (2015). ,""Defining knowledge management: Toward an applied compendium"", ,(PDF),. ,Online Journal of Applied Knowledge Management,. ,3, (1): 14., , +,^ ,a, ,b, ,c, ,d, ,e, ,f, ,g, ,""Introduction to Knowledge Management"",. ,www.unc.edu,. University of North Carolina at Chapel Hill. Archived from the original on March 19, 2007,. Retrieved ,11 September, 2014,., ,CS1 maint: Unfit url (,link,), +,^ ,a, ,b, ,Nonaka, Ikujiro (1991). ""The knowledge creating company"". ,Harvard Business Review,. ,69, (6): 96–104., , +,^ ,a, ,b, ,Nonaka, Ikujiro; von Krogh, Georg (2009). ""Tacit Knowledge and Knowledge Conversion: Controversy and Advancement in Organizational Knowledge Creation Theory"". ,Organization Science,. ,20, (3): 635–652. ,doi,:,10.1287/orsc.1080.0412,., , +,^, ,Bellinger, Gene,. ,""Mental Model Musings"",. ,Systems Thinking Blog,. Retrieved ,18 April, 2013,., , +,^ ,a, ,b, ,c, ,d, ,Addicot, Rachael; McGivern, Gerry; Ferlie, Ewan (2006). ""Networks, Organizational Learning and Knowledge Management: NHS Cancer Networks"". ,Public Money & Management,. ,26, (2): 87–94. ,doi,:,10.1111/j.1467-9302.2006.00506.x,., , +,^ ,a, ,b, ,c, ,d, ,e, ,f, ,Gupta, Jatinder; Sharma, Sushil (2004). ,Creating Knowledge Based Organizations,. Boston: Idea Group Publishing. ,ISBN, ,1-59140-163-1,., , +,^, ,Maier, R. (2007). ,Knowledge Management Systems: Information And Communication Technologies for Knowledge Management (3rd edition),. Berlin: Springer., , +,^, ,Sanchez, R (1996) Strategic Learning and Knowledge Management, Wiley, Chichester, +,^ ,a, ,b, ,c, ,Sanchez, R. (1996). ,Strategic Learning and Knowledge Management,. Chichester: Wiley., , +,^ ,a, ,b, ,c, ,Wright, Kirby (2005). ""Personal knowledge management: supporting individual knowledge worker performance"". ,Knowledge Management Research and Practice,. ,3, (3): 156–165. ,doi,:,10.1057/palgrave.kmrp.8500061,., , +,^ ,a, ,b, ,Booker, Lorne; Bontis, Nick; Serenko, Alexander (2008). ""The relevance of knowledge management and intellectual capital research"". ,Knowledge and Process Management,. ,15, (4): 235–246. ,doi,:,10.1002/kpm.314,., , +,^ ,a, ,b, ,Morey, Daryl; Maybury, Mark; Thuraisingham, Bhavani (2002). ,Knowledge Management: Classic and Contemporary Works,. MIT Press. p. 451. ,ISBN, ,0-262-13384-9,., , +,^ ,a, ,b, ,McInerney, Claire (2002). ""Knowledge Management and the Dynamic Nature of Knowledge"". ,Journal of the American Society for Information Science and Technology,. ,53, (12): 1009–1018. ,doi,:,10.1002/asi.10109,., , +,^ ,a, ,b, ,""Information Architecture and Knowledge Management"",. Kent State University. Archived from ,the original, on June 29, 2008,. Retrieved ,18 April, 2013,., , +,^ ,a, ,b, ,c, ,d, ,Bray, David. ""SSRN-Literature Review – Knowledge Management Research at the Organizational Level"". ,Papers.ssrn.com,. ,SSRN, ,991169, ,., , ,Missing or empty ,|url=, (,help,);, ,|access-date=, requires ,|url=, (,help,), +,^, ,Davenport, Tom. ,""Enterprise 2.0: The New, New Knowledge Management?"",. ,Harvard Business Review,. Retrieved ,18 April, 2013,., , +,^, ,Stewart, Thomas A. (1998). ,Intellectual Capital: The New Wealth of Organizations,. Crown Business Publishers. ,ISBN, ,0385483813,., , +,^, ,Serenko, Alexander; Bontis, Nick; Booker, Lorne; Sadeddin, Khaled; Hardie, Timothy (2010). ""A scientometric analysis of knowledge management and intellectual capital academic literature (1994–2008)"". ,Journal of Knowledge Management,. ,14, (1): 13–23. ,doi,:,10.1108/13673271011015534,., , +,^, ,Serenko, Alexander; Bontis, Nick (2017). ,""Global Ranking of Knowledge Management and Intellectual Capital Academic Journals: 2017 Update"", ,(PDF),. ,Journal of Knowledge Management,. ,21, (3): 675–692. ,doi,:,10.1108/JKM-11-2016-0490,., , +,^, ,Langton Robbins, N. S. (2006). ,Organizational Behaviour (Fourth Canadian Edition),. Toronto, Ontario: Pearson Prentice Hall., , +,^ ,a, ,b, ,Alavi, Maryam; Leidner, Dorothy E. (1999). ,""Knowledge management systems: issues, challenges, and benefits"",. ,Communications of the AIS,. ,1, (2)., , +,^, ,Rosner, D.; Grote, B.; Hartman, K.; Hofling, B.; Guericke, O. (1998). ""From natural language documents to sharable product knowledge: a knowledge engineering approach"". In Borghoff, Uwe M.; Pareschi, Remo. ,Information technology for knowledge management,. Springer Verlag. pp. 35–51., , +,^ ,a, ,b, ,Bray, David. ""SSRN-Knowledge Ecosystems: A Theoretical Lens for Organizations Confronting Hyperturbulent Environments"". ,Papers.ssrn.com,. ,SSRN, ,984600, ,., , ,Missing or empty ,|url=, (,help,), +,^, ,Carlson Marcu Okurowsk, Lynn; Marcu, Daniel; Okurowsk, Mary Ellen. ,""Building a Discourse-Tagged Corpus in the Framework of Rhetorical Structure Theory"", ,(PDF),. University of Pennsylvania. Archived from ,the original, ,(PDF), on 25 March 2012,. Retrieved ,19 April, 2013,., , +,^, ,Spender, J.-C.; Scherer, A. G. (2007). ""The Philosophical Foundations of Knowledge Management: Editors' Introduction"". ,Organization,. ,14, (1): 5–28. ,doi,:,10.1177/1350508407071858,. ,SSRN, ,958768, ,., , +,^, ,""TeacherBridge: Knowledge Management in Communities of Practice"", ,(PDF),. Virginia Tech. Archived from ,the original, ,(PDF), on 17 December 2008,. Retrieved ,18 April, 2013,., , +,^, ,Groth, Kristina. ,""Using social networks for knowledge management"", ,(PDF),. Royal Institute of Technology, Stockholm, Sweden,. Retrieved ,18 April, 2013,., , +,^ ,a, ,b, ,Bontis, Nick; Choo, Chun Wei (2002). ,The Strategic Management of Intellectual Capital and Organizational Knowledge,. New York: Oxford University Press. ,ISBN, ,0-19-513866-X,., , +,^ ,a, ,b, ,c, ,d, ,e, ,Snowden, Dave (2002). ""Complex Acts of Knowing – Paradox and Descriptive Self Awareness"". ,Journal of Knowledge Management, Special Issue,. ,6, (2): 100–111. ,doi,:,10.1108/13673270210424639,., , +,^, ,Nanjappa, Aloka; Grant, Michael M. (2003). ,""Constructing on constructivism: The role of technology"", ,(PDF),. ,Electronic Journal for the Integration of Technology in Education,. ,2, (1). Archived from ,the original, ,(PDF), on 2008-12-17., , +,^, ,Wyssusek, Boris. ,""Knowledge Management - A Sociopragmatic Approach (2001)"",. ,CiteSeerX,. Retrieved ,18 April, 2013,., , +,^, ,Ferguson, J. (2005). ""Bridging the gap between research and practice"". ,Knowledge Management for Development Journal,. ,1, (3): 46–54., , +,^ ,a, ,b, ,Andriessen, Daniel (2004). ""Reconciling the rigor-relevance dilemma in intellectual capital research"". ,The Learning Organization,. ,11, (4/5): 393–401. ,doi,:,10.1108/09696470410538288,., , +,^ ,a, ,b, ,Alavi, Maryam; Leidner, Dorothy E. (2001). ""Review: Knowledge Management and Knowledge Management Systems: Conceptual Foundations and Research Issues"". ,MIS Quarterly,. ,25, (1): 107–136. ,doi,:,10.2307/3250961,. ,JSTOR, ,3250961,., , +,^ ,a, ,b, ,Nonaka, Ikujiro; Takeuchi, Hirotaka (1995). ,The knowledge creating company: how Japanese companies create the dynamics of innovation,. New York: Oxford University Press. p. 284. ,ISBN, ,978-0-19-509269-1,., , +,^ ,a, ,b, ,c, ,Hayes, M.; Walsham, G. (2003). ""Knowledge sharing and ICTs: A relational perspective"". In Easterby-Smith, M.; Lyles, M.A. ,The Blackwell Handbook of Organizational Learning and Knowledge Management,. Malden, MA: Blackwell. pp. 54–77. ,ISBN, ,978-0-631-22672-7,., , +,^, ,""Rhetorical Structure Theory Website"",. ,RST,. Retrieved ,19 April, 2013,., , +,^, ,Serenko, Alexander; Bontis, Nick (2004). ,""Meta-review of knowledge management and intellectual capital literature: citation impact and research productivity rankings"", ,(PDF),. ,Knowledge and Process Management,. ,11, (3): 185–198. ,doi,:,10.1002/kpm.203,. Archived from ,the original, ,(PDF), on 2007-09-26., , +,^, ,Nonaka, I.; von Krogh, G. & Voelpel S. (2006). ""Organizational knowledge creation theory: Evolutionary paths and future advances"". ,Organization Studies,. ,27, (8): 1179–1208. ,doi,:,10.1177/0170840606066312,., , +,^, ,Sensky, Tom (2002). ""Knowledge Management"". ,Advances in Psychiatric Treatment,. ,8, (5): 387–395. ,doi,:,10.1192/apt.8.5.387,., , +,^ ,a, ,b, ,""SSRN-Exploration, Exploitation, and Knowledge Management Strategies in Multi-Tier Hierarchical Organizations Experiencing Environmental Turbulence by David Bray"". Papers.ssrn.com. ,SSRN, ,961043, ,., , ,Missing or empty ,|url=, (,help,);, ,|access-date=, requires ,|url=, (,help,), +,^, ,Benbasat, Izak; Zmud, Robert (1999). ""Empirical research in information systems: The practice of relevance"". ,MIS Quarterly,. ,23, (1): 3–16. ,doi,:,10.2307/249403,. ,JSTOR, ,249403,., , +,^ ,a, ,b, ,c, ,""Knowledge Management for Data Interoperability"", ,(PDF),. Retrieved ,18 April, 2013,., , +,^, ,Hansen et al., 1999, +,^ ,a, ,b, ,Smith (2004), p. 7, +,^, ,Hall (2006), pp. 119f, +,^, ,Rao, Madanmohan (2005). ,Knowledge Management Tools and Techniques,. Elsevier. pp. 3–42. ,ISBN, ,0-7506-7818-6,., , +,^, ,Calvin, D. Andrus (2005). ""The Wiki and the Blog: Toward a Complex Adaptive Intelligence Community"". ,Studies in Intelligence,. ,49, (3). ,SSRN, ,755904, ,., , +,^, ,Capozzi, Marla M. (2007). ""Knowledge Management Architectures Beyond Technology"". ,First Monday,. ,12, (6). ,doi,:,10.5210/fm.v12i6.1871,., , +,^, ,Berners-Lee, Tim; Hendler, James; Lassila, Ora (May 17, 2001). ,""The Semantic Web A new form of Web content that is meaningful to computers will unleash a revolution of new possibilities"",. ,Scientific American,. ,284,: 34–43. ,doi,:,10.1038/scientificamerican0501-34,. Archived from ,the original, on April 24, 2013., , +,^, ,Bakke, Sturla; ygstad, Bendik (May 2009). ,""Two emerging technologies: a comparative analysis of Web 2.0 and the Semantic Web"",. ,CONF-IRM 2009 Proceedings, (28). ,Our research question is: how do we explain the surprising success of Web 2.0 and the equally surprising non-fulfillment of the Semantic Web. Building on a case study approach we conducted a in depth comparative analysis of the two emerging technologies. We propose two conclusions. First, traditional top-down management of an emerging global technology has proved not to be effective in the case of the Semantic Web and Web 2.0, and second, the success for such global technologies is mainly associated with bootstrapping an already installed base., , +,^, ,Grimes, Seth (7 January 2014). ,""Semantic Web business: going nowhere slowly"",. ,InformationWeek,. Retrieved ,5 September, 2017,. ,SemWeb is a narrowly purposed replica of a subset of the World Wide Web. It's useful for information enrichment in certain domains, via a circumscribed set of tools. However, the SemWeb offers a vanishingly small benefit to the vast majority of businesses. The vision persists but is unachievable; the business reality of SemWeb is going pretty much nowhere., , +,^, ,Cagle, Kurt (3 July 2016). ,""Why the Semantic Web has failed"",. ,LinkedIn,. Retrieved ,5 September, 2017,. ,This may sound like heresy, but my personal belief is that the semantic web has failed. Not in ""just give it a few more years and it'll catch on"" or ""it's just a matter of tooling and editors"". No, I'd argue that, as admirable as the whole goal of the semantic web is, it's just not working in reality., , +,^, ,Zaino, Jennifer (23 September 2014). ,""The Semantic Web's rocking, and there ain't no stopping it now"",. ,dataversity.net,. Retrieved ,5 September, 2017,. ,Make no mistake about it: The semantic web has been a success and that's not about to stop now. That was essentially the message delivered by W3C Data Activity Lead Phil Archer, during his keynote address celebrating the semantic web's ten years of achievement at last month's Semantic Technology & Business Conference in San Jose., , +,^, ,Winston, A. M. (2014). Law firm knowledge management: selected annotated bibliography. ,Law Library Journal, 106(2), 175-198., +, +, +,External links,[,edit,], +, +, +, +,Wikiquote has quotations related to: ,Knowledge management, +, +, +, +,Knowledge management, at Curlie (based on ,DMOZ,), +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Knowledge management, +, +, +, +,Main articles, +, +, +, +,Personal knowledge management, +,Knowledge worker, +,Intellectual capital, +,Chief knowledge officer, +,Collective intelligence, +, +, +, +, +, +,Related to electronic systems, +, +, +, +,Enterprise content management, +,Knowledge management software, +, +, +, +, +, +,Related, +, +, +, +,Community of practice, +,Design rationale, +,Knowledge, +, +, +, +, +, +,Journals, +, +, +, +,Knowledge Management Research and Practice, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,GND,: ,4561842-2, +,NDL,: ,00947301, +, +, +, +, +, +, + + +, +, +, +, +",Knowledge management +" 15 December 2017, at 17:26.","""Blogger"" redirects here. For the Google service with same name, see ,Blogger (service),. For other uses, see ,Blog (disambiguation),., +,Not to be confused with ,.blog,., +, +, +,Journalism, +, +, +, +, +, +, +, +,News, +,Writing style, +,Ethics, +,Objectivity, +,News values, +,Attribution, +,Defamation, +,Editorial independence, +,Journalism school, +,Index of journalism articles, +, +, +, +, +,Areas, +, +, +, +, +,Arts, +,Business, +,Data, +,Entertainment, +,Environment, +,Fashion, +,Medicine, +,Politics, +,Science, +,Sports, +,Technology, +,Trade, +,Traffic, +,Weather, +,World, +, +, +, +, +,Genres, +, +, +, +, +,Advocacy, +,Analytic, +,Blogging, +,Broadcast, +,Citizen, +,Civic, +,Collaborative, +,Comics-based, +,Community, +,Data, +,Database, +,Gonzo, +,Immersion, +,Investigative, +,Literary, +,Muckraking, +,Narrative, +,"",New Journalism,"", +,Non-profit, +,Online, +,Opinion, +,Peace, +,Photojournalism, +,Scientific, +,Sensor, +,Underground, +,Visual, +,Watchdog, +, +, +, +, +,Social impact, +, +, +, +, +,Fake news, +,Fourth Estate, +,Fifth Estate, +,Freedom of the press, +,Infotainment, +,Media bias, +,Public relations, +,Press service, +,Propaganda model, +,Yellow journalism, +, +, +, +, +,News media, +, +, +, +, +,Newspapers, +,Magazines, +,TV and radio, +,Internet, +,News agencies, +,Alternative media, +, +, +, +, +,Roles, +, +, +, +, +,Journalists ,(reporters), +,Columnist, +,Blogger, +,Editor, +,Copy editor, +,Meteorologist, +,News presenter, +,Photographer, +,Pundit / commentator, +, +, +, +, +, +, +, ,Journalism portal, +,Category: Journalism, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +, +, +, +,A ,blog, (a ,truncation, of the expression "",weblog,""),[1], is a discussion or informational ,website, published on the ,World Wide Web, consisting of discrete, often informal ,diary,-style text entries (""posts""). Posts are typically displayed in reverse chronological order, so that the most recent post appears first, at the top of the web page. Until 2009, blogs were usually the work of a single individual,,[,citation needed,], occasionally of a small group, and often covered a single subject or topic. In the 2010s, ""multi-author blogs"" (MABs) have developed, with posts written by large numbers of authors and sometimes professionally edited. MABs from ,newspapers,, other media outlets, ,universities,, ,think tanks,, ,advocacy groups,, and similar institutions account for an increasing quantity of blog traffic. The rise of ,Twitter, and other "",microblogging,"" systems helps integrate MABs and single-author blogs into the news media. ,Blog, can also be used as a verb, meaning ,to maintain or add content to a blog,., +,The emergence and growth of blogs in the late 1990s coincided with the advent of web publishing tools that facilitated the posting of content by non-technical users who did not have much experience with ,HTML, or ,computer programming,. Previously, a knowledge of such technologies as ,HTML, and ,File Transfer Protocol, had been required to publish content on the Web, and as such, early Web users tended to be ,hackers, and computer enthusiasts. In the 2010s, the majority are interactive ,Web 2.0, websites, allowing visitors to leave online comments, and it is this interactivity that distinguishes them from other static websites.,[2], In that sense, blogging can be seen as a form of ,social networking service,. Indeed, bloggers do not only produce content to post on their blogs, but also often build social relations with their readers and other bloggers.,[3], However, there are high-readership blogs which do not allow comments., +,Many blogs provide commentary on a particular subject or topic, ranging from politics to sports. Others function as more personal ,online diaries,, and others function more as ,online brand advertising, of a particular individual or company. A typical blog combines text, digital images, and links to other blogs, ,web pages,, and other media related to its topic. The ability of readers to leave publicly viewable comments, and interact with other commenters, is an important contribution to the popularity of many blogs. However, blog owners or authors often moderate and filter online comments to remove ,hate speech, or other offensive content. Most blogs are primarily textual, although some focus on art (,art blogs,), photographs (,photoblogs,), videos (,video blogs, or ""vlogs""), music (,MP3 blogs,), and audio (,podcasts,). In education, blogs can be used as instructional resources. These blogs are referred to as ,edublogs,. ,Microblogging, is another type of blogging, featuring very short posts., +,On 16 February 2011,[update],, there were over 156 million public blogs in existence. On 20 February 2014, there were around 172 million ,Tumblr,[4], and 75.8 million ,WordPress,[5], blogs in existence worldwide. According to critics and other bloggers, ,Blogger, is the most popular blogging service used today. However, Blogger does not offer public statistics.,[6],[7], ,Technorati, lists 1.3 million blogs as of February 22, 2014.,[8], +, +, +, +,Contents, +, +, +,1, ,History, +, +,1.1, ,Origins, +,1.2, ,Rise in popularity, +,1.3, ,Political impact, +,1.4, ,Mainstream popularity, +, +, +,2, ,Types, +,3, ,Community and cataloging, +,4, ,Popularity, +,5, ,Blurring with the mass media, +,6, ,Consumer-generated advertising, +,7, ,Legal and social consequences, +, +,7.1, ,Defamation or liability, +,7.2, ,Employment, +, +,7.2.1, ,Business owners, +, +, +,7.3, ,Political dangers, +,7.4, ,Personal safety, +,7.5, ,Behavior, +, +, +,8, ,See also, +,9, ,References, +,10, ,Further reading, +,11, ,External links, +, +, +, +,History, +, +, +, +, +Early example of a ""diary"" style blog consisting of text and images transmitted wirelessly in ,real time, from a ,wearable computer, with ,head-up display,, 22 February 1995, +, +, +,Main articles: ,History of blogging, and ,online diary, +,The term ""weblog"" was coined by ,Jorn Barger,[9], on 17 December 1997. The short form, ""blog"", was coined by Peter Merholz, who jokingly broke the word ,weblog, into the phrase ,we blog, in the sidebar of his blog Peterme.com in April or May 1999.,[10],[11],[12], Shortly thereafter, ,Evan Williams, at ,Pyra Labs, used ""blog"" as both a noun and verb (""to blog"", meaning ""to edit one's weblog or to post to one's weblog"") and devised the term ""blogger"" in connection with Pyra Labs' ,Blogger, product, leading to the popularization of the terms.,[13], +,Origins, +,Before blogging became popular, digital communities took many forms, including ,Usenet,, commercial online services such as ,GEnie,, ,Byte Information Exchange, (BIX) and the early ,CompuServe,, ,e-mail lists,,,[14], and ,Bulletin Board Systems, (BBS). In the 1990s, ,Internet forum, software, created running conversations with ""threads"". Threads are topical connections between messages on a virtual "",corkboard,"". From 14 June 1993, Mosaic Communications Corporation maintained their ""What’s New"",[15], list of new websites, updated daily and archived monthly. The page was accessible by a special ""What's New"" button in the Mosaic web browser., +,The modern blog evolved from the ,online diary,, where people would keep a running account of the events in their personal lives. Most such writers called themselves diarists, ,journalists,, or journalers. ,Justin Hall,, who began personal blogging in 1994 while a student at ,Swarthmore College,, is generally recognized as one of the earlier bloggers,,[16], as is ,Jerry Pournelle,.,[17], ,Dave Winer,'s Scripting News is also credited with being one of the older and longer running weblogs.,[18],[19], The Australian Netguide magazine maintained the Daily Net News,[20], on their web site from 1996. Daily Net News ran links and daily reviews of new websites, mostly in Australia., +,Another early blog was Wearable Wireless Webcam, an online shared diary of a person's personal life combining text, digital video, and digital pictures transmitted live from a wearable computer and ,EyeTap, device to a web site in 1994. This practice of semi-automated blogging with live video together with text was referred to as ,sousveillance,, and such journals were also used as evidence in legal matters. Early blogs were simply manually updated components of common ,Websites,. However, the evolution of electronic and software tools to facilitate the production and maintenance of Web articles posted in reverse chronological order made the publishing process feasible to a much larger, less technical, population. Ultimately, this resulted in the distinct class of online publishing that produces blogs we recognize today. For instance, the use of some sort of browser-based software is now a typical aspect of ""blogging"". Blogs can be hosted by dedicated ,blog hosting services,, or they can be run using blog software, or on regular ,web hosting services,. Some early bloggers, such as ,The Misanthropic Bitch,, who began in 1997, actually referred to their online presence as a ,zine,, before the term blog entered common usage., +,Rise in popularity, +,After a slow start, blogging rapidly gained in popularity. Blog usage spread during 1999 and the years following, being further popularized by the near-simultaneous arrival of the first hosted blog tools:, +, +,Bruce Ableson, launched ,Open Diary, in October 1998, which soon grew to thousands of online diaries. Open Diary innovated the reader comment, becoming the first blog community where readers could add comments to other writers' blog entries., +,Brad Fitzpatrick, started ,LiveJournal, in March 1999., +,Andrew Smales created Pitas.com in July 1999 as an easier alternative to maintaining a ""news page"" on a Web site, followed by DiaryLand in September 1999, focusing more on a personal diary community.,[21], +,Evan Williams, and ,Meg Hourihan, (,Pyra Labs,) launched ,Blogger.com, in August 1999 (purchased by ,Google, in February 2003), +, +,Political impact, +, +, +, +, +On 6 December 2002, Josh Marshall's talkingpointsmemo.com blog called attention to U.S. Senator ,Lott's, comments regarding Senator Thurmond. Senator Lott was eventually to resign his Senate leadership position over the matter., +, +, +,An early milestone in the rise in importance of blogs came in 2002, when many bloggers focused on comments by ,U.S. Senate Majority Leader, ,Trent Lott,.,[22], Senator Lott, at a party honoring ,U.S. Senator, ,Strom Thurmond,, praised Senator Thurmond by suggesting that the United States would have been better off had Thurmond been elected president. Lott's critics saw these comments as a tacit approval of ,racial segregation,, a policy advocated by Thurmond's ,1948 presidential campaign,. This view was reinforced by documents and recorded interviews dug up by bloggers. (See ,Josh Marshall,'s ,Talking Points Memo,.) Though Lott's comments were made at a public event attended by the media, no major media organizations reported on his controversial comments until after blogs broke the story. Blogging helped to create a political crisis that forced Lott to step down as majority leader., +,Similarly, blogs were among the driving forces behind the "",Rathergate,"" scandal. To wit: (television journalist) ,Dan Rather, presented documents (on the CBS show ,60 Minutes,) that conflicted with accepted accounts of President Bush's military service record. Bloggers declared the documents to be ,forgeries, and presented evidence and arguments in support of that view. Consequently, CBS apologized for what it said were inadequate reporting techniques (see ,Little Green Footballs,). Many bloggers view this scandal as the advent of blogs' acceptance by the mass media, both as a news source and opinion and as means of applying political pressure.,[,original research?,], The impact of these stories gave greater credibility to blogs as a medium of news dissemination. Though often seen as partisan gossips,,[,citation needed,], bloggers sometimes lead the way in bringing key information to public light, with mainstream media having to follow their lead. More often, however, news blogs tend to react to material already published by the mainstream media. Meanwhile, an increasing number of experts blogged, making blogs a source of in-depth analysis.,[,original research?,], +,In ,Russia,, some political bloggers have started to challenge the dominance of official, overwhelmingly pro-government media. Bloggers such as ,Rustem Adagamov, and ,Alexei Navalny, have many followers and the latter's nickname for the ruling ,United Russia, party as the ""party of crooks and thieves"" has been adopted by anti-regime protesters.,[23], This led to the ,Wall Street Journal, calling Navalny ""the man ,Vladimir Putin, fears most"" in March 2012.,[24], +,Mainstream popularity, +,By 2004, the role of blogs became increasingly mainstream, as ,political consultants,, news services, and candidates began using them as tools for outreach and opinion forming. Blogging was established by politicians and political candidates to express opinions on war and other issues and cemented blogs' role as a news source. (See ,Howard Dean, and ,Wesley Clark,.) Even politicians not actively campaigning, such as the ,UK's Labour Party's, ,MP, ,Tom Watson,, began to blog to bond with constituents. In January 2005, ,Fortune, magazine listed eight bloggers whom business people ""could not ignore"": ,Peter Rojas,, ,Xeni Jardin,, ,Ben Trott,, ,Mena Trott,, ,Jonathan Schwartz,, Jason Goldman, ,Robert Scoble,, and ,Jason Calacanis,.,[25], +,Israel, was among the first national governments to set up an official blog.,[26], Under ,David Saranga,, the ,Israeli Ministry of Foreign Affairs, became active in adopting ,Web 2.0, initiatives, including an official ,video blog,[26], and a ,political blog,.,[27], The Foreign Ministry also held a ,microblogging, press conference via ,Twitter, about its ,war with Hamas,, with Saranga answering questions from the public in common text-messaging abbreviations during a live worldwide ,press conference,.,[28], The questions and answers were later posted on ,IsraelPolitik,, the country's official political blog.,[29], +,The impact of blogging upon the mainstream media has also been acknowledged by governments. In 2009, the presence of the American journalism industry had declined to the point that several newspaper corporations were filing for bankruptcy, resulting in less direct competition between newspapers within the same circulation area. Discussion emerged as to whether the newspaper industry would benefit from a stimulus package by the federal government. U.S. President ,Barack Obama, acknowledged the emerging influence of blogging upon society by saying ""if the direction of the news is all blogosphere, all opinions, with no serious fact-checking, no serious attempts to put stories in context, then what you will end up getting is people shouting at each other across the void but not a lot of mutual understanding”.,[30], Between 2009 and 2012, an ,Orwell Prize, for blogging was awarded., +,Types, +, +, +, +, +A screenshot from the BlogActive website., +, +, +,There are many different types of blogs, differing not only in the type of content, but also in the way that content is delivered or written., +, +,Personal blogs, +,The personal blog is an ongoing online diary or commentary written by an individual, rather than a corporation or organization. While the vast majority of personal blogs attract very few readers, other than the blogger's immediate family and friends, a small number of personal blogs have become popular, to the point that they have attracted lucrative advertising sponsorship. A tiny number of personal bloggers have become famous, both in the online community and in the real world., +, +, +,Collaborative blogs or group blogs, +,A type of weblog in which posts are written and published by more than one author. The majority of high-profile collaborative blogs are based around a single uniting theme, such as politics, technology or advocacy. In recent years, the ,blogosphere, has seen the emergence and growing popularity of more collaborative efforts, often set up by already established bloggers wishing to pool time and resources, both to reduce the pressure of maintaining a popular website and to attract a larger readership., +, +, +,Microblogging, +,Microblogging is the practice of posting small pieces of digital content—which could be text, pictures, links, short videos, or other media—on the Internet. Microblogging offers a portable communication mode that feels organic and spontaneous to many users. It has captured the public imagination, in part because the short posts are easy to read on the go or when waiting. Friends use it to keep in touch, business associates use it to coordinate meetings or share useful resources, and celebrities and politicians (or their publicists) microblog about concert dates, lectures, book releases, or tour schedules. A wide and growing range of add-on tools enables sophisticated updates and interaction with other applications. The resulting profusion of functionality is helping to define new possibilities for this type of communication.,[31], Examples of these include ,Twitter,, ,Facebook,, ,Tumblr, and, by far the largest, ,WeiBo,., +, +, +,Corporate and organizational blogs, +,A blog can be private, as in most cases, or it can be for ,business, or ,not-for-profit organization, or ,government, purposes. Blogs used internally, and only available to employees via an ,Intranet, are called ,corporate blogs,. Companies use internal corporate blogs enhance the communication, culture and ,employee engagement, in a ,corporation,. Internal corporate blogs can be used to communicate news about company policies or procedures, build employee ,esprit de corps, and improve ,morale,. Companies and other organizations also use external, publicly accessible blogs for ,marketing,, ,branding,, or ,public relations, purposes. Some organizations have a blog authored by their executive; in practice, many of these executive blog posts are penned by a ,ghostwriter,, who makes posts in the style of the credited author. Similar blogs for clubs and societies are called club blogs, group blogs, or by similar names; typical use is to inform members and other interested parties of club and member activities., +, +, +,Aggregated blogs, +,Individuals or organization may aggregate selected feeds on specific topic, product or service and provide combined view for its readers. This allows readers to concentrate on reading instead of searching for quality on-topic content and managing subscriptions. Many such aggregation called planets from name of ,Planet (software), that perform such aggregation, hosting sites usually have ,planet., ,subdomain, in ,domain name, (like ,http://planet.gnome.org/,)., +, +, +,By ,genre, +,Some blogs focus on a particular subject, such as ,political blogs,, journalism blogs, ,health blogs,, ,travel blogs, (also known as ,travelogs,), gardening blogs, house blogs, ,book blogs,,,[32],[33], ,fashion blogs,, beauty blogs, lifestyle blogs, party blogs, wedding blogs, photography blogs, ,project blogs,, psychology blogs, sociology blogs, ,education blogs,, ,niche blogs,, ,classical music blogs,, quizzing blogs, ,legal blogs, (often referred to as a blawgs), or ,dreamlogs,. ,How-to,/,Tutorial, blogs are becoming increasing popular.,[34], Two common types of genre blogs are ,art blogs, and ,music blogs,. A blog featuring discussions especially about ,home, and ,family, is not uncommonly called a ,mom blog, and one made popular is by ,Erica Diamond, who created Womenonthefence.com which is syndicated to over two million readers monthly.,[35],[36],[37],[38],[39],[40], While not a legitimate type of blog, one used for the sole purpose of spamming is known as a ,splog,., +, +, +,By media type, +,A blog comprising videos is called a ,vlog,, one comprising links is called a ,linklog,, a site containing a portfolio of sketches is called a ,sketchblog, or one comprising photos is called a ,photoblog,. Blogs with shorter posts and mixed media types are called ,tumblelogs,. Blogs that are written on typewriters and then scanned are called ,typecast, or typecast blogs. A rare type of blog hosted on the ,Gopher Protocol, is known as a ,phlog,., +, +, +,By device, +,A blog can also be defined by which type of device is used to compose it. A blog written by a ,mobile device, like a ,mobile phone, or ,PDA, could be called a ,moblog,.,[41], One early blog was Wearable Wireless Webcam, an online shared diary of a person's personal life combining text, video, and pictures transmitted live from a wearable computer and ,EyeTap, device to a web site. This practice of semi-automated blogging with live video together with text was referred to as ,sousveillance,. Such journals have been used as evidence in legal matters.,[,citation needed,], +, +, +,Reverse blog, +,A reverse blog is composed by its users rather than a single blogger. This system has the characteristics of a blog, and the writing of several authors. These can be written by several contributing authors on a topic, or opened up for anyone to write. There is typically some limit to the number of entries to keep it from operating like a ,web forum,.,[,citation needed,], +, +,Community and cataloging, +, +, +, +, +An artist's depiction of the interconnections between blogs and blog authors in the "",blogosphere,"" in 2007., +, +, +, +,Blogosphere, +,The collective community of all blogs and blog authors, particularly notable and widely read blogs, is known as the ,blogosphere,. Since all blogs are on the internet by definition, they may be seen as interconnected and socially networked, through blogrolls, comments, ,linkbacks, (refbacks, trackbacks or pingbacks), and backlinks. Discussions ""in the blogosphere"" are occasionally used by the media as a gauge of public opinion on various issues. Because new, untapped communities of bloggers and their readers can emerge in the space of a few years, ,Internet marketers, pay close attention to ""trends in the blogosphere"".,[42], +, +, +,Blog search engines, +,Several blog search engines have been used to search blog contents, such as ,Bloglines,, ,BlogScope,, and ,Technorati,. Technorati was one of the more popular blog search engines, but the website stopped indexing blogs and assigning authority scores in May 2014. The research community is working on going beyond simple keyword search, by inventing new ways to navigate through huge amounts of information present in the ,blogosphere,, as demonstrated by projects like ,BlogScope,, which was shut down in 2012.,[,citation needed,], +, +, +,Blogging communities and directories, +,Several ,online communities, exist that connect people to blogs and bloggers to other bloggers. Some of these communities include Indiblogger, Blogadda, Blog Chatter, BlogCatalog and ,MyBlogLog,.,[43], Interest-specific blogging platforms are also available. For instance, Blogster has a sizable community of political bloggers among its members. ,Global Voices, aggregates international bloggers, ""with emphasis on voices that are not ordinarily heard in international mainstream media."",[44], +, +, +,Blogging and ,advertising, +,It is common for blogs to feature ,banner advertisements, or promotional content, either to financially benefit the blogger, support website hosting costs, or to promote the blogger's favorite causes or products. The popularity of blogs has also given rise to ,""fake blogs"", in which a company will create a fictional blog as a marketing tool to promote a product.,[45], +, +,As the popularity of blogging continues to rise, the commercialisation of blogging is rapidly increasing. Many corporations and companies collaborate with bloggers to increase advertising and engage online communities towards their products. In the book ,Fans, Bloggers, and Gamers,, Henry Jenkins stated that ""Bloggers take knowledge in their own hands, enabling successful navigation within and between these emerging knowledge cultures. One can see such behaviour as co-optation into commodity culture insofar as it sometimes collaborates with corporate interests, but one can also see it as increasing the diversity of media culture, providing opportunities for greater inclusiveness, and making more responsive to consumers."",[46], +,Popularity, +, +, +, +, +, +, +,This section needs to be ,updated,. ,Please update this article to reflect recent events or newly available information., ,(April 2016), +, +, +, +,As of 2008, blogging had become such a mania that a new blog was created every second of every minute of every hour of every day.,[47], Researchers have actively analyzed the dynamics of how blogs become popular. There are essentially two measures of this: popularity through citations, as well as popularity through affiliation (i.e., blogroll). The basic conclusion from studies of the structure of blogs is that while it takes time for a blog to become popular through blogrolls, ,permalinks, can boost popularity more quickly, and are perhaps more indicative of popularity and authority than blogrolls, since they denote that people are actually reading the blog's content and deem it valuable or noteworthy in specific cases.,[48], +,The ,blogdex, project was launched by researchers in the ,MIT Media Lab, to crawl the Web and gather data from thousands of blogs in order to investigate their social properties. Information was gathered by the tool for over four years, during which it autonomously tracked the most contagious information spreading in the blog community, ranking it by recency and popularity. It can, therefore,,[,original research?,], be considered the first instantiation of a ,memetracker,. The project was replaced by ,tailrank.com, which in turn has been replaced by spinn3r.com., +,Blogs are given rankings by ,Alexa Internet, (web hits of Alexa Toolbar users), and formerly by blog search engine ,Technorati, based on the number of incoming links (Technorati stopped doing this in 2014). In August 2006, Technorati found that the most linked-to blog on the internet was that of Chinese actress ,Xu Jinglei,.,[49], Chinese media ,Xinhua, reported that this blog received more than 50 million page views, claiming it to be the most popular blog in the world.,[50], Technorati rated ,Boing Boing, to be the most-read group-written blog.,[49], +,Blurring with the mass media, +,Many bloggers, particularly those engaged in ,participatory journalism,, are amateur journalists, and thus they differentiate themselves from the professional reporters and editors who work in ,mainstream media, organizations. Other bloggers are media professionals who are publishing online, rather than via a TV station or newspaper, either as an add-on to a traditional media presence (e.g., hosting a radio show or writing a column in a paper newspaper), or as their sole journalistic output. Some institutions and organizations see blogging as a means of ""getting around the filter"" of media "",gatekeepers,"" and pushing their ,messages, directly to the public. Many mainstream journalists, meanwhile, write their own blogs—well over 300, according to CyberJournalist.net's J-blog list.,[,citation needed,], The first known use of a blog on a news site was in August 1998, when ,Jonathan Dube, of The ,Charlotte Observer, published one chronicling ,Hurricane Bonnie,.,[51], +,Some bloggers have moved over to other media. The following bloggers (and others) have appeared on radio and television: ,Duncan Black, (known widely by his pseudonym, Atrios), ,Glenn Reynolds, (,Instapundit,), ,Markos Moulitsas Zúniga, (,Daily Kos,), ,Alex Steffen, (,Worldchanging,), ,Ana Marie Cox, (,Wonkette,), ,Nate Silver, (,FiveThirtyEight.com,), and ,Ezra Klein, (Ezra Klein blog in ,The American Prospect,,, now in the ,Washington Post,). In counterpoint, ,Hugh Hewitt, exemplifies a mass media personality who has moved in the other direction, adding to his reach in ""old media"" by being an influential blogger. Similarly, it was ,Emergency Preparedness and Safety Tips On Air and Online, blog articles that captured ,Surgeon General of the United States, ,Richard Carmona,'s attention and earned his kudos for the associated broadcasts by talk show host ,Lisa Tolliver, and Westchester Emergency Volunteer Reserves-,Medical Reserve Corps, Director Marianne Partridge.,[52],[53],[54],[55], +,Blogs have also had an influence on ,minority languages,, bringing together scattered speakers and learners; this is particularly so with blogs in ,Gaelic languages,. Minority language publishing (which may lack economic feasibility) can find its audience through inexpensive blogging. There are examples of bloggers who have published books based on their blogs, e.g., ,Salam Pax,, ,Ellen Simonetti,, ,Jessica Cutler,, ,ScrappleFace,. Blog-based books have been given the name ,blook,. A prize for the best blog-based book was initiated in 2005,,[56], the ,Lulu Blooker Prize,.,[57], However, success has been elusive offline, with many of these books not selling as well as their blogs. The book based on ,Julie Powell,'s blog ""The Julie/Julia Project"" was made into the film ,Julie & Julia,, apparently the first to do so., +,Consumer-generated advertising, +,Consumer-generated advertising, is a relatively new and controversial development, and it has created a new model of marketing communication from businesses to consumers. Among the various forms of advertising on blog, the most controversial are the ,sponsored posts,.,[58], These are blog entries or posts and may be in the form of feedback, reviews, opinion, videos, etc. and usually contain a link back to the desired site using a keyword or several keywords. Blogs have led to some ,disintermediation, and a breakdown of the traditional advertising model, where companies can skip over the advertising agencies (previously the only interface with the customer) and contact the customers directly via social media websites. On the other hand, new companies specialised in blog advertising have been established, to take advantage of this new development as well. However, there are many people who look negatively on this new development. Some believe that any form of commercial activity on blogs will destroy the blogosphere’s credibility.,[59], +,Legal and social consequences, +, Blogging can result in a range of legal liabilities and other unforeseen consequences.,[60], +,Defamation or liability, +,Several cases have been brought before the national courts against bloggers concerning issues of ,defamation or liability,. U.S. payouts related to blogging totaled $17.4 million by 2009; in some cases these have been covered by ,umbrella insurance,.,[61], The courts have returned with mixed verdicts. ,Internet Service Providers, (ISPs), in general, are immune from liability for information that originates with third parties (U.S. ,Communications Decency Act, and the EU Directive 2000/31/EC). In ,Doe v. Cahill,, the ,Delaware Supreme Court, held that stringent standards had to be met to unmask the ,anonymous bloggers,, and also took the unusual step of dismissing the libel case itself (as unfounded under American libel law) rather than referring it back to the ,trial court, for reconsideration.,[62], In a bizarre twist, the Cahills were able to obtain the identity of John Doe, who turned out to be the person they suspected: the town's mayor, Councilman Cahill's political rival. The Cahills amended their original complaint, and the mayor settled the case rather than going to trial., +,In January 2007, two prominent ,Malaysian, political bloggers, ,Jeff Ooi, and ,Ahirudin Attan,, were sued by a pro-government newspaper, The New Straits Times Press (Malaysia) Berhad, Kalimullah bin Masheerul Hassan, Hishamuddin bin Aun and Brenden John a/l John Pereira over an alleged defamation. The plaintiff was supported by the Malaysian government.,[63], Following the suit, the Malaysian government proposed to ""register"" all bloggers in Malaysia in order to better control parties against their interest.,[64], This is the first such legal case against bloggers in the country. In the United States, blogger Aaron Wall was sued by Traffic Power for ,defamation, and publication of ,trade secrets, in 2005.,[65], According to ,Wired, magazine, Traffic Power had been ""banned from Google for allegedly rigging search engine results."",[66], Wall and other "",white hat,"" ,search engine optimization, consultants had exposed Traffic Power in what they claim was an effort to protect the public. The case was dismissed for lack of personal jurisdiction, and Traffic Power failed to appeal within the allowed time.,[67], +,In 2009, ,NDTV, issued a legal notice to Indian blogger Kunte for a blog post criticizing their coverage of the ,Mumbai attacks,.,[68], The blogger unconditionally withdrew his post, which resulted in several Indian bloggers criticizing NDTV for trying to silence critics.,[69], +,Employment, +,Employees who blog about elements of their place of employment can begin to affect the reputation of their employer, either in a positive way, if the employee is praising the employer and its workplaces, or in a negative way, if the blogger is making negative comments about the company or its practices., +,In general, attempts by employee bloggers to protect themselves by maintaining anonymity have proved ineffective.,[70], In 2009, a controversial and landmark decision by ,The Hon. Mr Justice Eady, refused to grant an order to protect the anonymity of ,Richard Horton,. Horton was a police officer in the United Kingdom who blogged about his job under the name ""NightJack"".,[71], +,Delta Air Lines, fired ,flight attendant, ,Ellen Simonetti, because she posted photographs of herself in uniform on an airplane and because of comments posted on her blog ""Queen of Sky: Diary of a Flight Attendant"" which the employer deemed inappropriate.,[72],[73], This case highlighted the issue of personal blogging and freedom of expression versus employer rights and responsibilities, and so it received wide media attention. Simonetti took legal action against the airline for ""wrongful termination, defamation of character and lost future wages"".,[74], The suit was postponed while Delta was in bankruptcy proceedings.,[75], +,In early 2006, Erik Ringmar, a senior lecturer at the ,London School of Economics,, was ordered by the convenor of his department to ""take down and destroy"" his blog in which he discussed the quality of education at the school.,[76], +,Mark Jen was terminated in 2005 after 10 days of employment as an assistant product manager at ,Google, for discussing corporate secrets on his personal blog, then called 99zeros and hosted on the Google-owned ,Blogger, service.,[77], He blogged about unreleased products and company finances a week before the company's earnings announcement. He was fired two days after he complied with his employer's request to remove the sensitive material from his blog.,[78], +,In India, blogger Gaurav Sabnis resigned from ,IBM, after his posts questioned the claims made by a management school.,[79], ,Jessica Cutler,, aka ""The Washingtonienne"",,[80], blogged about her sex life while employed as a congressional assistant. After the blog was discovered and she was fired,,[81], she wrote a novel based on her experiences and blog: ,The Washingtonienne: A Novel,. As of 2006,[update],, Cutler is being sued by one of her former lovers in a case that could establish the extent to which bloggers are obligated to protect the privacy of their real life associates.,[82], +,Catherine Sanderson, a.k.a. ,Petite Anglaise,, lost her job in Paris at a British accountancy firm because of blogging.,[83], Although given in the blog in a fairly anonymous manner, some of the descriptions of the firm and some of its people were less than flattering. Sanderson later won a compensation claim case against the British firm, however.,[84], +,On the other hand, ,Penelope Trunk, wrote an upbeat article in the ,Boston Globe, in 2006, entitled ""Blogs 'essential' to a good career"".,[85], She was one of the first journalists to point out that a large portion of bloggers are professionals and that a well-written blog can help attract employers., +,Business owners, +,Business owners who blog about their business can also run into legal consequences. ,Mark Cuban,, owner of the ,Dallas Mavericks,, was fined during the 2006 ,NBA, playoffs for criticizing NBA officials on the court and in his blog.,[86], +,Political dangers, +,See also: ,Political repression of cyber-dissidents, +,Blogging can sometimes have unforeseen consequences in politically sensitive areas. In some countries, ,Internet police, or ,secret police, may monitor blogs and arrest blog authors of commentators. Blogs can be much harder to control than broadcast or print media, because a person can create a blog whose authorship is hard to trace, by using anonymity technology such as ,Tor,. As a result, ,totalitarian, and ,authoritarian, regimes often seek to suppress blogs and/or to punish those who maintain them., +,In ,Singapore,, two ethnic Chinese individuals were ,imprisoned, under the country’s ,anti-sedition law, for posting ,anti-Muslim, remarks in their blogs.,[87], ,Egyptian, blogger ,Kareem Amer, was charged with insulting the Egyptian president ,Hosni Mubarak, and an ,Islamic, ,institution, through his blog. It is the first time in the history of Egypt that a blogger was prosecuted. After a brief trial session that took place in ,Alexandria,, the blogger was found guilty and sentenced to prison terms of three years for insulting ,Islam, and inciting sedition, and one year for insulting Mubarak.,[88], Egyptian blogger Abdel Monem Mahmoud was arrested in April 2007 for anti-government writings in his blog.,[89], Monem is a member of the then banned ,Muslim Brotherhood,. After the ,2011 Egyptian revolution,, the Egyptian blogger ,Maikel Nabil Sanad, was charged with insulting the military for an article he wrote on his personal blog and sentenced to 3 years.,[90], +,After expressing opinions in his personal blog about the state of the Sudanese armed forces, ,Jan Pronk,, ,United Nations, Special Representative for the ,Sudan,, was given three days notice to leave Sudan. The Sudanese army had demanded his deportation.,[91],[92], In ,Myanmar,, Nay Phone Latt, a blogger, was sentenced to 20 years in jail for posting a cartoon critical of head of state ,Than Shwe,.,[93], +,Personal safety, +,See also: ,Cyberstalking, and ,Internet homicide, +,One consequence of blogging is the possibility of online or in-person attacks or threats against the blogger, sometimes without apparent reason. In some cases, bloggers have faced ,cyberbullying,. ,Kathy Sierra,, author of the blog ""Creating Passionate Users"",,[94], was the target of threats and ,misogynistic, insults to the point that she canceled her keynote speech at a technology conference in San Diego, fearing for her safety.,[95], While a blogger's anonymity is often tenuous, ,Internet trolls, who would attack a blogger with threats or insults can be emboldened by the anonymity of the online environment, where some users are known only by a ,pseudonymous, ""username"" (e.g., ""Hacker1984""). Sierra and supporters initiated an online discussion aimed at countering abusive online behavior,[96], and developed a ,Blogger's Code of Conduct,, which set out a ,rules for behaviour, in the online space., +,Behavior, +,The ,Blogger's Code of Conduct, is a proposal by ,Tim O'Reilly, for bloggers to enforce civility on their blogs by being civil themselves and moderating comments on their blog. The code was proposed in 2007 due to threats made to blogger ,Kathy Sierra,.,[97], The idea of the code was first reported by ,BBC News,, who quoted O'Reilly saying, ""I do think we need some code of conduct around what is acceptable behaviour, I would hope that it doesn't come through any kind of regulation it would come through self-regulation."",[98], +,O'Reilly and others came up with a list of seven proposed ideas:,[99],[100],[101],[102], +, +,Take responsibility not just for your own words, but for the comments you allow on your blog., +,Label your tolerance level for abusive comments., +,Consider eliminating anonymous comments., +,Ignore the ,trolls,., +,Take the conversation offline, and talk directly, or find an intermediary who can do so., +,If you know someone who is behaving badly, tell them so., +,Don't say anything online that you wouldn't say in person., +, +,These ideas were predictably intensely discussed on the Web and in the media. While the internet has continued to grow, with online activity and discourse only picking up both in positive and negative ways in terms of blog interaction, the proposed Code has drawn more widespread attention to the necessity of monitoring blogging activity and social norms being as important online as offline., +,See also, +, +, +,Internet portal, +,Journalism portal, +, +, +, +, +,Bitter Lawyer, +,Blog award, +,BROG, +,Chat room, +,Citizen journalism, +,Collaborative blog, +,Comparison of free blog hosting services, +,Customer engagement, +,Glossary of blogging, +,Interactive journalism, +,Internet think tank, +,Israblog, +,Bernando LaPallo, +,List of blogs, +,List of family-and-homemaking blogs, +,Mass collaboration, +,Prison blogs, +,Sideblog, +,Social blogging, +,Webmaster, +,Web template system, +,Web traffic, +, +, +,References, +, +, +,^, ,Blood, Rebecca (September 7, 2000). ,""Weblogs: A History And Perspective"",., , +,^, ,Mutum, Dilip; Wang, Qing (2010). ""Consumer Generated Advertising in Blogs"". In Neal M. Burns; Terry Daugherty; Matthew S. Eastin. ,Handbook of Research on Digital Media and Advertising: User Generated Content Consumption,. ,1,. IGI Global. pp. 248–261., , +,^, ,Gaudeul, Alexia & Peroni, Chiara (2010). ,""Reciprocal attention and norm of reciprocity in blogging networks"",. ,Economics Bulletin,. ,30, (3): 2230–2248., , +,^, ,""About Tumblr.com. Accessed February 20, 2014"",. Tumblr.com,. Retrieved ,2014-02-20,., , +,^, ,""Stats. Accessed February 20, 2014"",. Wordpress.com,. Retrieved ,2014-02-20,., , +,^, ,""The Most Reliable and Unreliable Blogging Services"",. Royal.pigdim.com., , +,^, ,""Five Best Blogging Platforms"",. LifeHacker.com., , +,^, ,""Technorati.com"",. Archived from ,the original, on 2014-02-22., , +,^, ,""After 10 Years of Blogs, the Future's Brighter Than Ever"",. ,Wired,. 2007-12-17,. Retrieved ,2008-06-05,., , +,^, ,""It's the links, stupid"",. The Economist. 2006-04-20,. Retrieved ,2008-06-05,., , +,^, ,Merholz, Peter (1999). ,""Peterme.com"",. ,Internet Archive,. Archived from ,the original, on 1999-10-13,. Retrieved ,2008-06-05,., , +,^, ,Kottke, Jason, (2003-08-26). ,""kottke.org"",. Retrieved ,2008-06-05,., , +,^, ,Origins of ""Blog"" and ""Blogger"",, American Dialect Society Mailing List (Apr. 20, 2008)., +,^, ,The term ""e-log"" has been used to describe journal entries sent out via e-mail since as early as March 1996.,Norman, David (2005-07-13). ,""Users confused by blogs"",. Archived from ,the original, ,( – ,Scholar search,), on 2007-06-07,. Retrieved ,2008-06-05,., , ,""Research staff and students welcome 'E-Log,',"",. University College London. December 2003. Archived from ,the original, on 2007-08-12,. Retrieved ,2008-06-05,., , +,^, ,What's New!,. Home.mcom.com. Retrieved on 2013-06-15., +,^, ,Harmanci, Reyhan (2005-02-20). ,""Time to get a life — pioneer blogger Justin Hall bows out at 31"",. San Francisco Chronicle,. Retrieved ,2008-06-05,., , +,^, ,Pournelle, Jerry. ,""Chaos Manor in Perspective"",. ,Jerry Pournelle's blog,. ,""I can make some claim to this being The Original Blog and Daybook. I certainly started keeping a day book well before most, and long before the term ""blog"" or Web Log was invented. BIX, the Byte information exchange, preceded the Web by a lot, and I also had a daily journal on GE Genie. All that was long before the World Wide Web."" -- Jerry Pournelle, , +,^, ,Paul Festa (2003-02-25). ,""Newsmaker: Blogging comes to Harvard"",. ,CNET,. Retrieved ,2007-01-25,., , +,^, ,""...Dave Winer... whose Scripting News (scripting.com) is one of the oldest blogs."",David F. Gallagher (2002-06-10). ,""Technology; A rift among bloggers"",. ,The New York Times,., , +,^, ,Australian Net Guide,. Web.archive.org (1996-11-12). Retrieved on 2013-06-15., +,^, ,""Archived copy"",. Archived from ,the original, on 2008-04-11,. Retrieved ,2008-03-29,., , +,^, ,Massing, Michael, (2009-08-13). ,""The News About the Internet"",. ,New York Review of Books,. ,The New York Review of Books,. ,56, (13): 29–32,. Retrieved ,2009-10-10,., , +,^, ,Daniel Sandford,, ,BBC News,: ""Russians tire of corruption spectacle"", ,http://www.bbc.co.uk/news/world-europe-15972326, +,^, ,Matthew Kaminski (March 3, 2012). ,""The Man Vladimir Putin Fears Most (the weekend interview)"",. ,The Wall Street Journal,., , +,^, ,Kirkpatrick, David; Roth, Daniel. ,""Why There's No Escaping the Blog"",. Fortune. Archived from ,the original, on 1 January 2005,. Retrieved ,30 January, 2014,., , +,^ ,a, ,b, ,Israel Video Blog aims to show the world 'the beautiful face of real Israel',, Ynet, February 24, 2008., +,^, ,Latest PR venture of Israel's diplomatic mission in New York attracts large Arab audience,, Ynet, June 21, 2007., +,^, ,Haviv Rettig Gur (December 30, 2008). ,""Battlefront Twitter"",. ,The Jerusalem Post,. Archived from ,the original, on 2011-11-10., , +,^, ,The Toughest Q’s Answered in the Briefest Tweets,, Noam Cohen, ,The New York Times,, January 3, 2009. Retrieved January 5, 2009., +,^, ,Journalists deserve subsidies too, ,Archived, 2014-03-24 at the ,Wayback Machine,., ,Robert W. McChesney, and ,John Nichols,, ,Delaware Online,, November 3, 2009. Retrieved November 10, 2009., +,^, ,""7 Things You Should Know About Microblogging"",. Educause.Edu. 2009-07-07,. Retrieved ,2012-10-25,., , +,^, ,Stephan Metcalf, ""Fixing a Hole"", ,The New York Times,, March 2006, +,^, ,Jennifer Saranow, ""Blogwatch: This Old House"", ,Wall Street Journal,, September 2007, +,^, ,""52 Types of Blog Posts that Are Proven to Work"",. ,Problogger.net,. Retrieved ,2017-07-18,., , +,^, ,Casserly, Meghan and Goudreau, Jenna. ,Top 100 Websites For Women 2011,, ,Forbes,, June 23, 2011, +,^, ,Paul, Pamela (2004-04-12). ,""The New Family Album"",. ,TIME,. Retrieved ,2010-03-31,., , +,^, ,Carpenter, MacKenzie (2007-10-31). ,""More women are entering the blogosphere — satirizing, sharing and reaching a key demographic"",. Post-gazette.com,. Retrieved ,2010-03-31,., , +,^, ,Brown, Jonathan (2005-02-05). ,""The drooling minutiae of childhood revealed for all to see as 'Mommy blogs' come of age"",. ,The Independent,. London,. Retrieved ,2010-03-30,., , +,^, ,""Living"",. ,Omaha.com,. Retrieved ,2010-03-31,., , +,^, ,Jesella, Kara (2008-07-27). ,""Blogging's Glass Ceiling"",. ,The New York Times,. Retrieved ,2010-03-26,., , +,^, ,""Blogging goes mobile"",. BBC News. 2003-02-23,. Retrieved ,2008-06-05,., , +,^, ,See for instance:, +, +,Mesure, Susie (2009-08-23). ,""Is it a diary? Is it an ad? It's a mummy blog"",. ,The Independent,. London. p. 11,. Retrieved ,2009-10-10,., , +, +, +,^, ,""About MyBlogLog"",. MyBlogLog. Archived from ,the original, on 2007-06-29,. Retrieved ,2007-06-29,., , +,^, ,""Global Voices: About"",. GlobalVoices.org,. Retrieved ,2011-04-02,., , +,^, ,Gogoi, Pallavi (2006-10-09). ,""Wal-Mart's Jim and Laura: The Real Story"",. ,BusinessWeek,. Archived from ,the original, on 2008-09-26,. Retrieved ,2008-08-06,., , +,^, ,Jenkins, Henry (2006). ,Fans, Bloggers, and Gamers,. New York: New York University Press. p. 151. ,ISBN, ,978-0814742853,., , +,^, ,Keen, Andrew (2008). ,The Cult of the Amateur: How Today’s Internet Is Killing Our Culture,. New York: Nicholas Brealey Publishing. p. 3. ,ISBN, ,978-1857885200,., , +,^, ,Marlow, C. ,Audience, structure and authority in the weblog community,. Presented at the ,International Communication Association, Conference, May, 2004, New Orleans, LA., +,^ ,a, ,b, ,Fickling, David, ,Internet killed the TV star,, ,The Guardian, NewsBlog, 15 August 2006, +,^, ,""Xu Jinglei most popular blogger in world"",. China Daily. 2006-08-24,. Retrieved ,2008-06-05,., , +,^, ,""Blogging Bonnie"",. ,Poynter.org,. 2003-09-18., , +,^, ,""National Safety Month"",. Nsc.org,. Retrieved ,2010-04-09,., , +,^, ,""Flavor Flav Celebrates National Safety Month"",. ,Blogcritics,. Archived from ,the original, on 2009-02-13., , +,^, ,""Lisa Tolliver show notes"",. ,Emergency Preparedness and Safety Tips On Air and Online,., , +,^, ,""Lisa Tolliver's Show Notes"",. ,Lisa Tolliver On Air and Online,., , +,^, ,""Blooker rewards books from blogs"",. BBC News. 2005-10-11,. Retrieved ,2008-06-05,., , +,^, ,""Blooker prize honours best blogs"",. BBC News. 2007-03-17,. Retrieved ,2008-06-05,., , +,^, ,Mutum, Dilip and Wang, Qing (2010). “Consumer Generated Advertising in Blogs”. In Neal M. Burns, Terry Daugherty, Matthew S. Eastin (Eds) Handbook of Research on Digital Media and Advertising: User Generated Content Consumption (Vol 1), IGI Global, 248-261., +,^, ,""PayPerPost.com offers to sell your soul"",. ,TechCrunch,. 2006-06-30,. Retrieved ,2017-07-18,., , +,^, ,""Article Window"",. Epaper.timesofindia.com,. Retrieved ,2012-10-25,., , +,^, ,McQueen MP. (2009). ,Bloggers, Beware: What You Write Can Get You Sued,. WSJ., +,^, ,Doe v. Cahill,, 884 A.2d 451 (Del. 2005)., +,^, ,""New Straits Times staffers sue two bloggers"",. ,Reporters Without Borders,. 2007-01-19. Archived from ,the original, on 2008-06-08,. Retrieved ,2008-06-05,., , +,^, ,""Government plans to force bloggers to register"",. ,Reporters Without Borders,. 2007-04-06. Archived from ,the original, on 2008-06-11,. Retrieved ,2008-06-05,., , +,^, ,Kesmodel, David (2005-08-31). ,""Blogger Faces Lawsuit Over Comments Posted by Readers"",. Wall Street Journal Online,. Retrieved ,2008-06-05,., , +,^, ,Wired Magazine,, ,Legal Showdown in Search Fracas,, Sept 8, 2005, +,^, ,Sullivan, Danny (2006-04-13). ,""SearchEngineWatch"",. Blog.searchenginewatch.com. Archived from ,the original, on 2009-02-04,. Retrieved ,2010-07-31,., , +,^, ,""Barkha versus blogger"",. The Hoot,. Retrieved ,2009-02-02,., , +,^, ,¬ (2009-02-08). ,""Indian bloggers criticizing NDTV"",. Abhishekarora.com,. Retrieved ,2013-04-21,., , +,^, ,Sanderson, Cathrine (2007-04-02). ,""Blogger beware!"",. London: Guardian Unlimited,. Retrieved ,2007-04-02,., , +,^, ,""Ruling on NightJack author Richard Horton kills blogger anonymity"",. Archived from ,the original, on 2011-08-29., , +,^, ,Twist, Jo (2004-11-03). ,""US Blogger Fired by her Airline"",. ,BBC News,. Retrieved ,2008-06-05,., , +,^, ,""Delta employee fired for blogging sues airline"",. ,USA Today,. 2005-09-08,. Retrieved ,2008-06-05,., , +,^, ,""Queen of the Sky gets marching orders"",. The Register. 2004-11-03,. Retrieved ,2008-06-05,., , +,^, ,""Twelfth Omnibus Claims Objection"", ,(PDF),. Retrieved ,8 July, 2014,., , +,^, ,MacLeod, Donald (2006-05-03). ,""Lecturer's Blog Sparks Free Speech Row"",. London: The Guardian. Archived from ,the original, on 2008-06-12,. Retrieved ,2008-06-05,., , See also ,""Forget the Footnotes"",. Archived from ,the original, on 2006-04-13., , +,^, ,Hansen, Evan (2005-02-08). ,""Google blogger has left the building"",. CNET News,. Retrieved ,2007-04-04,., , +,^, ,""Archived copy"",. Archived from ,the original, on 2008-07-25,. Retrieved ,2008-09-10,., , +,^, ,""Bloggers join hands against B-school"",. Cities.expressindia.com. Archived from ,the original, on 2005-12-14,. Retrieved ,2011-01-30,., , +,^, ,""Washingtoniennearchive.blogspot.com"",. Washingtoniennearchive.blogspot.com. 2005-02-11,. Retrieved ,2013-04-21,., , +,^, ,""The Hill's Sex Diarist Reveals All (Well, Some)"",. ,The Washington Post,. 2004-05-23,. Retrieved ,2008-06-05,., , +,^, ,""Steamy D.C. Sex Blog Scandal Heads to Court"",. ,Associated Press,, ,MSNBC,. 2006-12-27,. Retrieved ,2008-06-05,., , +,^, ,""Bridget Jones Blogger Fire Fury"",. ,CNN,. 2006-07-19,. Retrieved ,2008-06-05,., , +,^, ,""Sacked 'petite anglaise' blogger wins compensation claim"",. ,The Sydney Morning Herald,. 2007-03-31,. Retrieved ,2015-02-06,., , +,^, ,Trunk, Penelope (2006-04-16). ,""Boston.com"",. Boston.com,. Retrieved ,2013-04-21,., , +,^, ,""NBA fines Cuban $200K for antics on, off court"",. ESPN. 2006-05-11,. Retrieved ,2008-06-05,., , +,^, ,Kierkegaard, Sylvia, (2006). ""Blogs, lies and the doocing: The next hotbed of litigation?"". ,Computer Law & Security Report,. ,22, (2): 127. ,doi,:,10.1016/j.clsr.2006.01.002,., , +,^, ,""Egypt blogger jailed for insult"",. ,BBC News,. 2007-02-22,. Retrieved ,2008-06-05,., , +,^, ,عبدالمنعم محمود (2004-02-27). ,""Ana-ikhwan.blogspot.com"",. Ana-ikhwan.blogspot.com,. Retrieved ,2013-04-21,., , +,^, ,Knafo, Saki (2011-09-15). ,""Maikel Nabil Sanad, On Hunger Strike in Egypt, Is Dying"",. Huffingtonpost.com,. Retrieved ,2011-12-29,., , +,^, ,""Sudan expels U.N. envoy for blog"",. ,CNN,. 2006-10-22,. Retrieved ,2007-03-14,., , +,^, ,""UN envoy leaves after Sudan row"",. ,BBC NEWS,. BBC. 23 October 2006,. Retrieved ,2006-10-24,., , +,^, ,""Burma blogger jailed for 20 years"",. ,BBC News,. 2008-11-11,. Retrieved ,2010-03-26,., , +,^, ,""Headrush.typepad.com"",. Headrush.typepad.com,. Retrieved ,2013-04-21,., , +,^, ,Pham, Alex (2007-03-31). ,""Abuse, threats quiet bloggers' keyboards"", ,(PDF),. Los Angeles Times. Archived from ,the original, on 2008-06-25,. Retrieved ,2008-06-05,., , +,^, ,""Blog death threats spark debate"",. BBC News. 2007-03-27,. Retrieved ,2008-06-05,., , +,^, ,Tim O'Reilly, (2007-03-03). ,""Call for a Blogger's Code of Conduct"",. O'Reilly Radar,. Retrieved ,2013-04-26,., , +,^, ,""Call for blogging code of conduct"",. BBC News. 2007-03-28,. Retrieved ,2007-04-14,., , +,^, ,""Draft Blogger's Code of Conduct"",. Radar.oreilly.com,. Retrieved ,2013-04-26,., , +,^, ,""MilBlogs Rules of Engagement"",. ,yankeesailor.blogspot.ca,. 2005-05-20,. Retrieved ,2013-04-26,., , +,^, ,""Code of Conduct: Lessons Learned So Far - O'Reilly Radar"",. ,Radar.oreilly.com,. 2007-04-11,. Retrieved ,2017-07-18,., , +,^, ,""Blogger Content Policy"",. Blogger.com,. Retrieved ,2011-01-30,., , +, +, +,Further reading, +, +,Alavi, Nasrin. ,We Are Iran: The Persian Blogs,, Soft Skull Press, New York, 2005. ,ISBN, ,1-933368-05-5,., +,Bruns, Axel, and Joanne Jacobs, eds. ,Uses of Blogs,, Peter Lang, New York, 2006. ,ISBN, ,0-8204-8124-6,., +,Blood, Rebecca. ,""Weblogs: A History and Perspective"",. ""Rebecca's Pocket""., +,Kline, David; Burstein, Dan. ,Blog!: How the Newest Media Revolution is Changing Politics, Business, and Culture,, Squibnocket Partners, L.L.C., 2005. ,ISBN, ,1-59315-141-1,., +,Gorman, Michael,. ,""Revenge of the Blog People!"",. ,Library Journal,., +,Ringmar, Erik. ,A Blogger's Manifesto: Free Speech and Censorship in the Age of the Internet, (London: Anthem Press, 2007)., +,Rosenberg, Scott,, ,Say Everything: how blogging Began, what it's becoming, and why it matters,, New York : Crown Publishers, 2009. ,ISBN, ,978-0-307-45136-1, +,Weinberger, David, (August 31, 2015), ,""Why blogging still matters"",, ,Boston Globe, , +, +,External links, +, +, +, +,Look up ,blog, in Wiktionary, the free dictionary., +, +, +, +, +, +,Wikiquote has quotations related to: ,Blogging, +, +, +, +, +, +,Wikimedia Commons has media related to ,Blogs,., +, +, +, +,Computer Law and Security Report Volume 22 Issue 2, Pages 127-136, blogs, Lies and the Doocing by ,Sylvia Kierkegaard, (2006), +,Legal Guide for bloggers, by the ,Electronic Frontier Foundation, +,Law Library Legal Blawgs Web Archive, from the U.S. ,Library of Congress, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Web syndication, +, +, +, +, +, +, +,History, +,Blogging, +,Podcasting, +,Video blogging, +,Web syndication technology, +, +, +, +, +, +,Types, +, +, +, +, +, +, +, +,Art, +,Bloggernacle, +,Classical music, +,Corporate, +,Dream diary, +,Edublog, +,Electronic journal, +,Fake, +,Family, +,Fashion, +,Food, +,Health, +,Law, +,Lifelog, +,Litblog, +,MP3, +,News, +,Photoblog, +,Police, +,Political, +,Prayer, +,Project, +,Reverse, +,Travel, +,Warblog, +, +, +, +, +, +, +, +, +,Technology, +, +, +, +, +,General, +, +, +, +,BitTorrent, +,Feed URI scheme, +, +, +, +, +, +,Features, +, +, +, +,Linkback, +,Permalink, +,Ping, +,Pingback, +,Reblogging, +,Refback, +,Rollback, +,Trackback, +, +, +, +, +, +,Mechanism, +, +, +, +,Conversation threading, +,Geotagging, +,RSS enclosure, +,Synchronization, +, +, +, +, +, +,Memetics, +, +, +, +,Atom feed, +,Data feed, +,Photofeed, +,Product feed, +,RDF feed, +,Web feed, +, +, +, +, +, +,RSS, +, +, +, +,GeoRSS, +,MRSS, +,RSS TV, +, +, +, +, +, +,Social, +, +, +, +,Livemark, +,Mashup, +,., pooling, +,Referencing, +,RSS editor, +,RSS tracking, +,Streaming media, +, +, +, +, +, +,Standard, +, +, +, +,OML, +,OPML, +,RSS Advisory Board,—,Usenet,: ,.net, +,World Wide Web, + (,-let,), +,XBEL, +,XOXO, +, +, +, +, +, +, +, +, +,Form, +, +, +, +, +, +, +, +,Audio podcast, +,Enhanced podcast, +,Mobilecast, +,Narrowcasting, +,Peercasting, +,Screencast, +,Slidecasting, +,Videocast, +,Webcomic, +,Web series, +, +, +, +, +, +, +, +, +,Anonymous blogging, +,Collaborative blog, +,Columnist, +,Instant messaging, +,Liveblogging, +,Microblog, +,Mobile blogging, +,Roblog, +,Spam blog, +,Video blogging, +,Motovlogging, +, +, +, +, +, +, +, +, +,Media, +, +, +, +, +,Alternative media, +, +, +, +,Carnivals, +,Fiction, +,Journalism, +, +,Citizen, +,Database, +, +, +,Online diary, +,Search engines, +,Sideblog, +,Software, +,Web directory, +, +, +, +, +, +,Micromedia, +, +, +, +,Aggregation, +, +,News, +,Poll, +,Review, +,Search, +,Video, +, +, +,Atom, +,AtomPub, +,Broadcatching, +,Hashtag, +,NewsML, +, +,1, +,G2, +, +, +,Social communication, +,Social software, +,Web Slice, +, +, +, +, +, +,Related, +, +, +, +,Blogosphere, +,Escribitionist, +,Glossary of blogging, +,Pay per click, +,Posting style, +,Slashdot effect, +,Spam in blogs, +,Uses of podcasting, +, +, +, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Computer-mediated communication, +, +, +, +, +, +, +,Online chat, +,Online discussion, +,Communication software, +,Collaborative software, +,Social network service, +,Virtual learning environment, +, +, +, +, +, +,Asynchronous conferencing, +, +, +, +,Email, +,Electronic mailing list, +,FidoNet, +,Usenet, +,Internet forum, +, +,Textboard, +,Imageboard, +, +, +,Shoutbox, +,Bulletin board system, +,Online guestbook, +, +, +, +, +, +,Synchronous conferencing, +, +, +, +,Data conferencing, +,Instant messaging, +,Internet Relay Chat, +,LAN messenger, +,Talker, +,Videoconferencing, +,Voice over IP, +, +,Voice chat in online gaming, +, +, +,Web chat, +,Web conferencing, +, +, +, +, +, +,Publishing, +, +, +, +,Blog, +,Microblogging, +,Wiki, +, +, +, +, +, +, +, +, +, +, +, +, +,v, +,t, +,e, +, +, +,Internet slang, +, +, +, +,Abuse, +, +, +, +,cyberbullying, +,cyberstalking, +,doxing, +,flaming, +,griefer, +,hacker, +,keylogger, +,malware, +, +,spyware, +, +, +,phishing, +,script kiddie, +,Stealth banning, +,spamming, +,troll, +, +, +, +, +, +, +, +, +,Chatspeak, +, +, +, +,emoticon, +,emoji, +,leet, +, +,owned, +,Pr0n, +,pwn, +,teh, +,w00t, +, +, +,fap, +,LOL, +,nsfw, +,padonkaffsky jargon, +,sexting, +, +, +, +, +, +,Imageboard, +, +, +, +,4chan, +,anonymous, +,-chan, +,CP, +,goatse.cx, +,lolcat, +,lulz, +,lurk, +,newbie, +,OP, +,pedobear, +,rickrolling, +,Rule 34, +,tripcode, +,weeaboo, +, +, +, +, +, +,Memes, +, +, +, +,advertising and products, +,animation and comics, +,challenges, +,email, +,film, +,gaming, +,images, +,music, +,politics, +,videos, +,miscellaneous, +, +, +, +, +, +,Usenet, +, +, +, +,eternal September, +,PKB, +,plonk, +, +, +, +, +, +, +, +, +, ,Category, +, ,Portal, +, ,Wiktionary, +, +, +, +, +, +, +, +, +, +,Authority control, +, +, +, +,LCCN,: ,sh2003004628, +,NDL,: ,00959882, +, +, +, +, +, +, + + +, +, +, +, +",Blog diff --git a/Chapter08_Scrapy/wikiSpider/wikiSpider/articles.json b/Chapter08_Scrapy/wikiSpider/wikiSpider/articles.json new file mode 100644 index 0000000..58292dc --- /dev/null +++ b/Chapter08_Scrapy/wikiSpider/wikiSpider/articles.json @@ -0,0 +1,33 @@ +[ +{"title": "Benevolent dictator for life", "text": ["For the political term, see ", "Benevolent dictatorship", ".", "\n", "Benevolent Dictator For Life", " (", "BDFL", ") is a title given to a small number of ", "open-source software development", " leaders, typically project founders who retain the final say in disputes or arguments within the community. The phrase originated in 1995 with reference to ", "Guido van Rossum", ", creator of the ", "Python programming language", ".", "[1]", "[2]", " Shortly after van Rossum joined the ", "Corporation for National Research Initiatives", ", the term appeared in a follow-up mail by ", "Ken Manheimer", " to a meeting trying to create a semi-formal group that would oversee Python development and workshops; this initial use included the additional joke of naming van Rossum the \"", "First Interim", " BDFL\".", "[1]", "\n", "BDFL should not be confused with the more common term for open-source leaders, \"", "benevolent dictator", "\", which was popularized by ", "Eric S. Raymond", "'s essay \"", "Homesteading the Noosphere", "\" (1999).", "[3]", " Among other topics related to ", "hacker culture", ", Raymond elaborates on how the nature of open source forces the \"dictatorship\" to keep itself ", "benevolent", ", since a strong disagreement can lead to the ", "forking", " of the project under the rule of new leaders.", "\n", "Persons sometimes referred to as \"Benevolent dictators for life\"", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Project", "\n", "Type", "\n", "Reference", "\n", "\n", "\n", "Vitalik Buterin", "\n", "Ethereum", "\n", "blockchain-based cryptocurrency", "\n", "[4]", "\n", "\n", "\n", "Dries Buytaert", "\n", "Drupal", "\n", "content management framework", "\n", "[5]", "\n", "\n", "\n", "Shaun Walker", "\n", "DotNetNuke", "\n", "web application framework", "\n", "[6]", "\n", "\n", "\n", "David Heinemeier Hansson", "\n", "Ruby on Rails", "\n", "web framework", "\n", "[7]", "\n", "\n", "\n", "Adrian Holovaty", " and Jacob Kaplan-Moss", "\n", "Django", "\n", "web framework", "\n", "[8]", "\n", "\n", "\n", "Taylor Otwell", "\n", "Laravel", "\n", "web framework", "\n", "[9]", "[10]", "\n", "\n", "\n", "Theo de Raadt", "\n", "OpenBSD", "\n", "Unix", "-like operating system", "\n", "[11]", "\n", "\n", "\n", "Daniel Robbins", "\n", "Funtoo Linux", "\n", "Linux distribution", "\n", "[12]", "\n", "\n", "\n", "S\u00e9bastien Ros", "\n", "Orchard Project", "\n", "content management system", "\n", "[13]", "\n", "\n", "\n", "Guido van Rossum", "\n", "Python", "\n", "programming language", "\n", "[7]", "[14]", "\n", "\n", "\n", "Linus Torvalds", "\n", "Linux", "\n", "operating system kernel", "\n", "[7]", "[15]", "\n", "\n", "\n", "Patrick Volkerding", "\n", "Slackware", "\n", "Linux distribution", "\n", "[16]", "\n", "\n", "\n", "Mark Shuttleworth", "\n", "Ubuntu Linux", "\n", "Linux distribution", "\n", "[17]", "\n", "\n", "\n", "Larry Wall", "\n", "Perl", "\n", "programming language", "\n", "[18]", "\n", "\n", "\n", "Matt Mullenweg", "\n", "WordPress", "\n", "content management framework", "\n", "[19]", "\n", "\n", "\n", "Nathan Voxland", "\n", "Liquibase", "\n", "database schema management", "\n", "[20]", "\n", "\n", "\n", "Xavier Leroy", "\n", "OCaml", "\n", "programming language", "\n", "[21]", "[22]", "\n", "\n", "\n", "Ton Roosendaal", "\n", "Blender", "\n", "3D computer graphics software", "\n", "[23]", "\n", "\n", "\n", "Bram Moolenaar", "\n", "Vim", "\n", "text editor", "\n", "[24]", "\n", "\n", "\n", "Don Syme", "\n", "F#", "\n", "programming language", "\n", "[25]", "\n", "\n", "\n", "Rich Hickey", "\n", "Clojure", "\n", "programming language", "\n", "[26]", "\n", "\n", "\n", "Wes McKinney", "\n", "Pandas", "\n", "Python data analysis library", "\n", "[27]", "\n", "\n", "\n", "Martin Odersky", "\n", "Scala", "\n", "programming language", "\n", "[28]", "\n", "\n", "\n", "Yukihiro Matsumoto (Matz)", "\n", "Ruby", "\n", "programming language", "\n", "[29]", "\n", "\n", "\n", "Evan Czaplicki", "\n", "Elm", "\n", "front-end web framework", "\n", "[30]", "[31]", "\n", "\n", "\n", "Juan Benet", "\n", "InterPlanetary File System", "\n", "decentralized internet", "\n", "[32]", "\n", "\n", "\n", "Sylvain Benner", "\n", "Spacemacs", "\n", "community-driven ", "Emacs", " distribution", "\n", "[33]", "\n", "\n", "\n", "Pauli Virtanen", "\n", "SciPy", "\n", "Python", " library used for scientific and technical computing", "\n", "[34]", "[35]", "\n", "\n", "\n", "Jos\u00e9 Valim", "\n", "elixir", "\n", "programming language", "\n", "[36]", "\n", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "Guido van Rossum (July 31, 2008). ", "\"Origin of BDFL\"", ". Retrieved ", "August 1,", " 2008", ".", "\u00a0", "\n", "^", " ", "\"Python Creator Scripts Inside Google\"", ". www.eweek.com", ". Retrieved ", "May 13,", " 2008", ".", "\u00a0", "\n", "^", " ", "Eric S. Raymond. ", "\"Homesteading the Noosphere\"", ". Retrieved ", "August 1,", " 2008", ".", "\u00a0", "\n", "^", " ", "\"", "Ethereum's Boy King Is Thinking About Giving Up the Mantle", "\"", "\n", "^", " ", "Randy Fay, \"", "How Do Open Source Communities Govern Themselves?", "\"", "\n", "^", " ", "Book: Building Websites with DotNetNuke 5, Michael Washington and Ian Lackey, Packt Publishing. Page 14 \"The core team comprises individuals invited to join the team by Shaun Walker, whom they affectionately call the \"Benevolent Dictator\".\"", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Constine, Josh (December 7, 2012). ", "\"Dropbox Hires Away Google's Guido Van Rossum, The Father Of Python\"", ". TechCrunch", ". Retrieved ", "June 1,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Adrian and Jacob retiring as Django BDFLs\"", ". Adrian Holovaty. January 12, 2014", ". Retrieved ", "June 14,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Taylor Otwell, Twitter\"", ". Taylor Otwell. October 9, 2014", ". Retrieved ", "October 9,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Taylor Otwell, Creator of the Laravel PHP Framework\"", ". August 5, 2014", ". Retrieved ", "August 5,", " 2014", ".", "\u00a0", "\n", "^", " ", "Hildebrand, Matthew (July 5, 2005). ", "\"Interview: Theo de Raadt on Industry and Free Software\"", ". ", "The Epoch Times", ". The Epoch Times. Archived from ", "the original", " on June 21, 2015", ". Retrieved ", "June 20,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Welcome to Funtoo Linux\"", ".", "\u00a0", "\n", "^", " ", "\"Orchard Project Steering Committee\"", ". Archived from ", "the original", " on August 12, 2015.", "\u00a0", "\n", "^", " ", "\"The Four Hundred\u2014Next Up on the System i: Python\"", ". www.itjungle.com", ". Retrieved ", "May 13,", " 2008", ".", "\u00a0", "\n", "^", " ", "Dee-Ann LeBlanc (31 July 2006). ", "Linux For Dummies", " (7th ed.). John Wiley & Sons. p.\u00a015. ", "ISBN", "\u00a0", "978-0-470-04793-4", ".", "\u00a0", "\n", "^", " ", "\"Stories of Linux: A Look at Slackware Linux\"", ". ", "linux.com", ".", "\u00a0", "\n", "^", " ", "\"Ubuntu carves niche in Linux landscape\"", ". ", "CNET", ". Archived from ", "the original", " on 6 November 2015.", "\u00a0", "\n", "^", " ", "\"The Art of Ballistic Programming\"", ". Archived from ", "the original", " on June 17, 2013.", "\u00a0", "\n", "^", " ", "\"Thesis, Automattic, and WordPress | Post Status\"", ". Retrieved ", "2015-07-24", ".", "\u00a0", "\n", "^", " ", "\"User and Developer Community | Post Status\"", ". Retrieved ", "2015-08-13", ".", "\u00a0", "\n", "^", " ", "\"A History of OCaml | OCaml.org\"", ". Retrieved ", "2015-09-18", ".", "\u00a0", "\n", "^", " ", "\"OCaml Infrastructure mailing list\"", ". Retrieved ", "2015-09-18", ".", "\u00a0", "\n", "^", " ", "\"New Developer Info\"", ". Retrieved ", "21 September", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Why Neovim is Better than Vim\"", ". Retrieved ", "30 September", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Contributing to the F# Language and Compiler\"", ". Retrieved ", "29 September", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Clojure JIRA Workflow\"", ". Retrieved ", "3 October", " 2015", ".", "\u00a0", "\n", "^", " ", "\"pandas 0.20.3 documentation: Tutorials\"", ". Retrieved ", "2017-07-24", ".", "\u00a0", " \"Wes McKinney\u2019s (pandas BDFL) blog\"", "\n", "^", " ", "\"Programming in Scala Leaps onto the World Stage!\"", ". Retrieved ", "2015-11-25", ".", "\u00a0", "\n", "^", " ", "\"A Ruby Design Process\"", ". Retrieved ", "2016-04-17", ".", "\u00a0", "\n", "^", " ", "\"56: Ember vs. Elm: The Showdown with Philip Poots | The Frontside Podcast\"", ". ", "The Frontside Podcast", ". Retrieved ", "2017-08-14", ".", "\u00a0", "\n", "^", " ", "elm-conf (2016-09-19), ", "\"Code is the Easy Part\" by Evan Czaplicki", ", retrieved ", "2017-08-14", "\u00a0", "\n", "^", " ", "\"Understanding the IPFS White Paper part 2\"", ". Retrieved ", "2017-08-21", ".", "\u00a0", "\n", "^", " ", "\"Spacemacs COMMUNITY.org\"", ". Retrieved ", "2017-08-24", ".", "\u00a0", "\n", "^", " ", "\"SciPy 1.0.0\"", ". Retrieved ", "2017-10-27", ".", "\u00a0", "\n", "^", " ", "\"SciPy project governance\"", ". Retrieved ", "2017-10-27", ".", "\u00a0", "\n", "^", " ", "\"Elixir Companies\"", ". Retrieved ", "2017-11-01", ".", "\u00a0", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 13 December 2017, at 09:26."}, +{"title": "DotNetNuke", "text": ["\n", "DotNetNuke", "\n", "\n", "\n", "\n", "\n", "Developer(s)", "\n", "DNN Corporation", " ", "[1]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "\n", "9.1.1", "[2]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Development status", "\n", "Active", "\n", "\n", "\n", "Operating system", "\n", "Microsoft Windows", " or ", "Cloud", "\n", "\n", "\n", "Platform", "\n", "ASP.NET", " or ", "Cloud", "[3]", "\n", "\n", "\n", "Type", "\n", "Web framework", "\n", "\n", "\n", "License", "\n", "MIT", "[4]", "\n", "\n", "\n", "Website", "\n", "www", ".dnnsoftware", ".com", "\n", "\n", "\n", "DNN", " (formerly ", "DotNetNuke", ") is a ", "web content management system", " based on ", "Microsoft .NET", ". The DNN Platform Edition is ", "open source", ".", "\n", "DNN is written in ", "C#", ", though it existed for many years as a ", "VB.NET", " project.", "[5]", "[6]", " It is distributed under both a Community Edition ", "MIT", " license ", "[4]", " and commercial proprietary licenses as DNN Evoq Content and DNN Evoq Engage editions.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Editions", "\n", "2", " ", "Architecture", "\n", "\n", "2.1", " ", "Modules", "\n", "2.2", " ", "Skins", "\n", "\n", "\n", "3", " ", "Hosting", "\n", "4", " ", "Developer ecosystem community", "\n", "5", " ", "Project history", "\n", "6", " ", "See also", "\n", "7", " ", "References", "\n", "8", " ", "External links", "\n", "\n", "\n", "\n", "Editions", "[", "edit", "]", "\n", "DNN Platform (formerly \"DotNetNuke Community Edition\" ", "content management system", ") is open source software that is intended to allow management of websites without much technical knowledge, and to be extensible through a large number of third-party apps to provide functionality not included in the ", "DNN core modules", ". ", "Skins", " can be used to change the look of a website using DNN.", "\n", "There are two commercial editions of the software with increased functionality compared to DNN Platform, and technical support. The DotNetNuke ", "Professional Edition", " was introduced in February 2009 with version 4.9. In July 2013, DotNetNuke Professional Edition was renamed Evoq Content.", "[7]", " In addition, DotNetNuke Enterprise Edition was renamed Evoq Content: Enterprise.", "[8]", " Evoq version 9.0 was released in December 2016.", "[9]", "\n", "Architecture", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nDNN uses a three-tier architecture model.", "\n", "\n", "\n", "DotNetNuke uses a three-tier architecture model with a core framework providing support to the extensible modular structure.", "\n", "While traditionally DNN focused on providing server side functionality, recent projects strive to enhance client side experiences - along with the rest of the industry.", "[10]", " In recent years DNN migrated from using exclusively ", "Web Forms", " to also allowing ", "Model View Controller", " and ", "Single-page application", " architectures.", "[11]", " In the future, DNN faces the challenge of moving from ", "ASP.NET", " 4.6 to the cross-platform free and open source ", ".NET Core", ".", "\n", "DNN can be extended using 3rd-party modules and providers that add functionality at the server or client side. The appearance of individual pages and sites can be customized using skins.", "[12]", "\n", "Modules", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nDotNetNuke modules.", "\n", "\n", "\n", "The default functionality of DNN can be expanded by adding third-party modules, either from an existing module store,", "[13]", " from 3rd party authors,", "[14]", " or through ", "in-house development", " of custom functionality.", "[15]", " The DNN framework provides basic functionality such as ", "security", ", user administration, and ", "content management", ", while modules are used to tailor the web site for specific deployment needs.", "[16]", "\n", "A set of primary modules are included with the core DNN distribution. These modules provide the functionality required to create an e-commerce system, an intranet, a public web site or a custom web application. They are maintained by a volunteer team community. In 2015 and 2016 most projects were moved from the DotNetNuke Community Forge", "[17]", " to GitHub.", "[18]", "\n", "Web pages have skins which define regions of a page (plus their appearance) where page editors can place modules (or extensions) made available by site administrators. Pages and modules can inherit or set custom access permissions that define which groups of users can view or edit each item.", "\n", "Module can be created in various ways: compiled modules use the Web Application Project model and are written in C# or VB.NET,", "[19]", " dynamic modules use the Web Site Project model, and ", "Razor", " modules which use a C# or VB.NET scripting language.", "[20]", "\n", "Skins", "[", "edit", "]", "\n", "A skinning architecture provides a ", "separation of presentation and content", ", enabling a web designer to develop skins without requiring any specialist knowledge of development in ASP.NET: only knowledge of ", "HTML", " and an understanding of how to prepare and package the skins themselves is required. Skins consist of basic HTML files with placeholders (", "tokens", ") for content, menus and other functionality, along with support files such as images, ", "style sheets", " and ", "JavaScript", ", packaged in a ", "ZIP file", ".", "[21]", "\n", "Upon Microsoft's release of the ", ".NET Framework version 2", ", Microsoft had included functionality known as master pages. The principal idea behind master pages was to encourage ", "code recycling", " and consistent design and aesthetics throughout a site by creating a master page with placeholders, which at ", "runtime", " would be ", "compiled", " and replaced by content.", "\n", "Like modules, skins, can be uploaded and automatically installed through the administration pages. If the compiled skin does not contain an ASP.NET user control file, then the DNN skinning engine builds one based on various tokens included in the HTML file which refer to various sections, placeholders and/or modules of a DNN-produced page. Modern skins incorporate CSS3 and HTML5", "[22]", " with many authors' skins supporting ", "Responsive web design", ", various ", "JavaScript libraries", ". With no credentialing, a skin's quality may vary, but often trial periods are available to evaluate functionality.", "\n", "Hosting", "[", "edit", "]", "\n", "DNN 7.0 and above has a minimum requirement of Windows Vista, ", "SQL Server", " 2008, and ", ".NET", " 4.0 and ", "IIS", " 7+. These product's latest versions are supported.", "[23]", " As of version 6.0, DNN can also be installed in an ", "Azure", " ", "cloud computing", " environment.", "[24]", " Numerous web hosting companies offer DNN as an offering, and a 1 step installation process is available through Microsoft.", "[25]", " However DNN's requirement for an IIS medium trust environment has prevented broader adoption", "[26]", " among some mainstream hosting companies.", "\n", "Developer ecosystem community", "[", "edit", "]", "\n", "DNNSoftware.com has over 1 million registered members as of November 2013 and is used on some 750,000 websites globally.", "[27]", " Support for the Community Edition of DotNetNuke is provided by community members and developers can participate in the open-source project on GitHub.", "[28]", "\n", "API", " reference documents for modules", "[29]", " and skins", "[30]", " are available, although as of 2013, some documentation was still available only in task-oriented form.", "[31]", " A Wiki has been created to address this weakness, with 400 wiki pages as of May 2014.", "[32]", "\n", "Project history", "[", "edit", "]", "\n", "The DotNetNuke application originally evolved out of another project, the IBuySpy Workshop.", "[33]", " The IBuySpy Workshop application had been created by Shaun Walker ", "[34]", " as an enhancement to the IBuySpy Portal that started as a sample application for the ", ".NET Framework", ". Early versions of DotNetNuke were released by Walker's company, Perpetual Motion Inc, while later development was expanded by the open source community.", "[", "citation needed", "]", "\n", "The name DotNetNuke was coined by Walker by combining the term ", ".NET", " with the word \"nuke\", which had been popular with pre-existing frameworks such as ", "PHP-Nuke", " and PostNuke.", "[35]", " The term DotNetNuke and DNN are registered trademarks in the US (Search USPTO", "[36]", ") and Canada.", "[37]", "[38]", "\n", "In September 2006, four members of the project's board of directors formed a corporation to oversee the development of the project. The new DotNetNuke Corporation was co-founded by Walker,", "[39]", " Joe Brinkman,", "[40]", " Nik Kalyani,", "[41]", " and Scott Willhite", "[42]", " and replaced Perpetual Motion Interactive Systems Inc. as the corporate entity behind the project.", "[43]", "\n", "On November 25, 2008, DotNetNuke announced ", "Series A", " financing from Sierra Ventures and ", "August Capital", ", and in February 2009, after hiring Navin Nagiah as CEO, a Professional Edition version of DotNetNuke has been released for business and enterprise customers. In February 2010 DotNetNuke announced a Series B financing from Sierra Ventures, ", "August Capital", ", and Pelion Venture Partners.", "[44]", "\n", "In August 2009 a partner program was launched by DotNetNuke Corporation, aimed at providing support to the web design and development companies that build web sites using DotNetNuke. DotNetNuke Corporation also announced the acquisition of Snowcovered, an online market for DotNetNuke modules, skins, services and related products.", "[45]", "\n", "In October 2009, the 2009 Open Source CMS Market Share Report concluded that DotNetNuke was the leading .NET-based open source web content management system.", "[46]", "\n", "In 2013, the company was renamed to ", "DNN Corporation", ".", "[47]", "\n", "See also", "[", "edit", "]", "\n", "\n", "List of content management systems", " (CMS)", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"Web CMS - Online Community Software - DNN (DotNetNuke)\"", ". ", "dnnsoftware.com", ".", "\u00a0", "\n", "^", " ", "\"Releases \u00b7 dnnsoftware_Dnn.Platform\"", ". ", "GitHub", ". GitHub", ". Retrieved ", "27 September", " 2017", ".", "\u00a0", "\n", "^", " ", "Pranav Singh (2013-06-04). ", "\"Deploying DotNetNuke on Windows Azure\"", ". CodeProject", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"DNN CMS Platform - License\"", ". ", "Dotnetnuke.codeplex.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke Switches to C#\u00a0!! >\"", ". DNN Software. 2011-02-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "a (2007-05-11). ", "\"A conversion of the popular DotNetNuke web application to C#\"", ". CodeProject", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN Expands Product Suite, Services and SaaS Offering With DNN Evoq\"", ". DNN Corp", ". Retrieved ", "14 Aug", " 2013", ".", "\u00a0", "\n", "^", " ", "Mosher, Barb (2013-07-09). ", "\"DotNetNuke Rebrands to DNN Evoq, Focuses on Business Solutions + Platform\"", ". ", "Cmswire.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"New CMS Features in Evoq 9\"", ". ", "DNNSoftware", ". DNN Corp", ". Retrieved ", "6 March", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Client Resource Management API\"", ". ", "Dnnsoftware.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN Loves MVC: 1 - Introduction\"", ". ", "Charlesnurse.com", ". 2015-03-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke - the easy way to an ASP.NET website - .NET tutorial\"", ". Developer Fusion. 2010-06-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"The Official DNN Store - Modules, Skins and Extensions\"", ". ", "Store.dnnsoftware.com", ". 2017-02-11", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN Community\"", ". ", "Github.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke 4 - Module Developers Guide - Chapter 1\"", ". ", "Adefwebserver.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Amazon.com: dnn and dotnetnuke\"", ". ", "Smile.amazon.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"NET Forge CMS, Extensible CMS - DNN Software Forge\"", ". ", "Dotnetnuke.com", ". 2017-01-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Why DNN Community Extensions have Moved to GitHub\"", ". ", "Github.com", ". 2015-02-20", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke Development | DNN Developer | DNN Experts, DNN Module Development, DNN Skins India\"", ". ", "Swayamsoft.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Build CMS, Building a Product Roadmap, CMS Development Tools\"", ". ", "Dnnsoftware.com", ". 2017-01-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Top 5 DotNetNuke Manifest file Module Packaging Tips\"", ". iFinity", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"How to Create a Responsive HTML5 Skin for DotNetNuke\"", ". ", "Dnncreative.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN Cloud Demo - Install DNN Software | DNN DotNetNuke\"", ". ", "Dnnsoftware.com", ". 2017-01-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke in Azure Cloud\"", ". Elinext. 2012-04-14", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Microsoft Web Platform\"", ". ", "Microsoft.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Installing DotNetNuke 4.9.0 on Medium Trust Webservers\"", ". ", "Programmersanonymous.net", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN CMS Platform - Home\"", ". ", "Dotnetnuke.codeplex.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"dnnsoftware/Dnn.Platform: DNN Corp Platform Repository\"", ". GitHub", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN API Endpoint Documentation\"", ". ", "Endpoint.dnnapi.dnnsharp.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DNN Skinning Reference | DNN Skinning Tool | Dot Net Nuke Skinning\"", ". ", "10poundgorilla.com", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"About DNN - DNN Company Overview | DNN\"", ". DotNetNuke", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"CMS Wiki, Content Management Wiki\"", ". DNN Software. 2017-01-28", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Open Source CMS Project History - DNN CMS & Online Community Software\"", ". ", "dotnetnuke.com", ".", "\u00a0", "\n", "^", " ", "Book: Building Websites with DotNetNuke 5, Michael Washington and Ian Lackey, Packt Publishing. Page 14 \"The core team comprises individuals invited to join the team by Shaun Walker, whom they affectionately call the \"Benevolent Dictator\".\"", "\n", "^", " ", "\"About DNN - DNN Company Overview - DNN (DotNetNuke)\"", ". ", "dotnetnuke.com", ".", "\u00a0", "\n", "^", " ", "\"Trademark Electronic Search System (TESS)\"", ". ", "uspto.gov", ".", "\u00a0", "\n", "^", " ", "\"Basic search: 1192080 - Canadian trade-marks database - Intellectual property and copyright - Canadian Intellectual Property Office - Industry Canada\"", ". ", "ic.gc.ca", ".", "\u00a0", "\n", "^", " ", "\"Basic search: 1256752 - Canadian trade-marks database - Intellectual property and copyright - Canadian Intellectual Property Office - Industry Canada\"", ". ", "ic.gc.ca", ".", "\u00a0", "\n", "^", " ", "[1]", "[", "permanent dead link", "]", "\n", "^", " ", "[2]", "[", "permanent dead link", "]", "\n", "^", " ", "[3]", "[", "permanent dead link", "]", "\n", "^", " ", "[4]", "[", "permanent dead link", "]", "\n", "^", " ", "\"About DNN - DNN Company Overview - DNN (DotNetNuke)\"", ". ", "dotnetnuke.com", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke Raises $8 Million\"", ". PE Hub. 2010-02-09", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"DotNetNuke Buys Snowcovered\"", ". ", "Silicontap.com", ". 2009-08-27", ". Retrieved ", "2017-04-05", ".", "\u00a0", "\n", "^", " ", "\"Archived copy\"", ". Archived from ", "the original", " on 2010-06-18", ". Retrieved ", "2010-06-15", ".", "\u00a0", "\n", "^", " ", "Shaun Walker. ", "\"DNN: The Metamorphosis Continues..\"", " ", "DNN Software", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "DNN Corp.", " - The official DNN Corp Site", "\n", "Comparison of Evoq with other CMS systems", "\n", "DNN Plus.", " - DNN Persian Site", "\n", "DotNetNuke Development", " - Content Management System", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Web frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "\n", "\n", "\n", "\n", "\n", "C++", "\n", "\n", "\n", "\n", "CppCMS", "\n", "Wt", "\n", "\n", "\n", "\n", "\n", "\n", "CLI", "\n", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "Core", "\n", "AJAX", "\n", "Dynamic Data", "\n", "MVC", "\n", "Razor", "\n", "Web Forms", "\n", "\n", "\n", "DNN", "\n", "BFC", "\n", "MonoRail", "\n", "OpenRasta", "\n", "Umbraco", "\n", "\n", "\n", "\n", "\n", "\n", "ColdFusion", "\n", "\n", "\n", "\n", "CFWheels", "\n", "ColdBox Platform", "\n", "ColdSpring", "\n", "Fusebox", "\n", "Mach-II", "\n", "Model-Glue", "\n", "\n", "\n", "\n", "\n", "\n", "Common Lisp", "\n", "\n", "\n", "\n", "Caveman2", "\n", "CL-HTTP", "\n", "UnCommon Web", "\n", "Weblocks", "\n", "\n", "\n", "\n", "\n", "\n", "Haskell", "\n", "\n", "\n", "\n", "Happstack", "\n", "Yesod", "\n", "Snap", "\n", "\n", "\n", "\n", "\n", "\n", "Java", "\n", "\n", "\n", "\n", "AppFuse", "\n", "Flexive", "\n", "Grails", "\n", "GWT", "\n", "ICEfaces", "\n", "ItsNat", "\n", "JavaServer Faces", "\n", "JHipster", "\n", "Jspx", "\n", "JWt", "\n", "OpenXava", "\n", "Play", "\n", "Reasonable Server Faces", "\n", "Remote Application Platform", "\n", "RIFE", "\n", "Seam", "\n", "Sling", "\n", "Spring", "\n", "Stripes", "\n", "Struts", "\n", "Tapestry", "\n", "Vaadin", "\n", "Vert.x", "\n", "WebWork", "\n", "Wicket", "\n", "WaveMaker", "\n", "ZK", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "Ample SDK", "\n", "Angular", "/", "AngularJS", "\n", "Backbone.js", "\n", "Chaplin.js", "\n", "Closure", "\n", "Dojo Toolkit", "\n", "Ember.js", "\n", "Ext JS", "\n", "jQuery", "\n", "Meteor", "\n", "MooTools", "\n", "Node.js", "\n", "OpenUI5", "\n", "Prototype", "\n", "React", "\n", "Rico", "\n", "script.aculo.us", "\n", "Sencha Touch", "\n", "SproutCore", "\n", "Wakanda", "\n", "\n", "\n", "\n", "\n", "\n", "Perl", "\n", "\n", "\n", "\n", "Catalyst", "\n", "Dancer", "\n", "Mason", "\n", "Maypole", "\n", "Mojolicious", "\n", "WebGUI", "\n", "\n", "\n", "\n", "\n", "\n", "PHP", "\n", "\n", "\n", "\n", "CakePHP", "\n", "CodeIgniter", "\n", "Drupal", "\n", "Fat-Free", "\n", "FuelPHP", "\n", "Flow", "\n", "Gyroscope", "\n", "Horde", "\n", "Kohana", "\n", "Laravel", "\n", "Lithium", "\n", "Midgard", "\n", "MODX", "\n", "Nette", "\n", "Phalcon", "\n", "Pop PHP", "\n", "PRADO", "\n", "ProcessWire", "\n", "Qcodo", "\n", "Silex", "\n", "SilverStripe", "\n", "Symfony", "\n", "TYPO3", "\n", "Xaraya", "\n", "XOOPS", "\n", "Yii", "\n", "Zend Framework", "\n", "\n", "\n", "\n", "\n", "\n", "Python", "\n", "\n", "\n", "\n", "BlueBream", "\n", "CherryPy", "\n", "Django", "\n", "Flask", "\n", "Grok", "\n", "Nevow", "\n", "Pyjs", "\n", "Pylons", "\n", "Pyramid", "\n", "Quixote", "\n", "TACTIC", "\n", "Tornado", "\n", "TurboGears", "\n", "web2py", "\n", "Webware", "\n", "Zope 2", "\n", "\n", "\n", "\n", "\n", "\n", "Ruby", "\n", "\n", "\n", "\n", "Camping", "\n", "Merb", "\n", "Padrino", "\n", "Ruby on Rails", "\n", "Sinatra", "\n", "\n", "\n", "\n", "\n", "\n", "Scala", "\n", "\n", "\n", "\n", "Lift", "\n", "Play", "\n", "Scalatra", "\n", "\n", "\n", "\n", "\n", "\n", "Smalltalk", "\n", "\n", "\n", "\n", "AIDA/Web", "\n", "Seaside", "\n", "\n", "\n", "\n", "\n", "\n", "Other languages", "\n", "\n", "\n", "\n", "Vibe.d", " (", "D", ")", "\n", "Application Express", " (", "PL/SQL", ")", "\n", "Grails", " (", "Groovy", ")", "\n", "Kepler", " (", "Lua", ")", "\n", "Rocket", " (", "Rust", ")", "\n", "OpenACS", " (", "Tcl", ")", "\n", "Phoenix", " (", "Elixir", ")", "\n", "SproutCore", " (", "JavaScript", "-", "Ruby", ")", "\n", "Yaws", " (", "Erlang", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 17 January 2018, at 04:00."}, +{"title": "Drupal", "text": ["\n", "Drupal", "\n", "\n", "\n", "\n", "\n", "\n", "Drupal 8 in action. Showing in-context editing and previews (", "WYSIWYG", ").", "\n", "\n", "\n", "\n", "Original author(s)", "\n", "Dries Buytaert", "\n", "\n", "\n", "Initial release", "\n", "May\u00a018, 2000", "; 17 years ago", "\u00a0(", "2000-05-18", ")", "[1]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "\n", "8.4.2", "[2]", " / 3\u00a0November 2017", "; 2 months ago", "\u00a0(", "2017-11-03", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Repository", "\n", "\n", "\n", "\n", "http://cgit.drupalcode.org/drupal", "\n", "\n", "\n", "\n", "\n", "\n", "Development status", "\n", "Active", "\n", "\n", "\n", "Written in", "\n", "PHP", ", using ", "Symfony", "\n", "\n", "\n", "Operating system", "\n", "Unix-like", ", ", "Windows", "\n", "\n", "\n", "Platform", "\n", "Cross-platform", "\n", "\n", "\n", "Size", "\n", "80\u00a0MB (uncompressed Drupal 8 core)", "[2]", "\n", "\n", "\n", "Available in", "\n", "Multilingual", "\n", "\n", "\n", "Type", "\n", "Content management framework", ", ", "Content management system", ", ", "Community", " and ", "Blog software", "\n", "\n", "\n", "License", "\n", "GPLv2", " or later", "[3]", "\n", "\n", "\n", "Website", "\n", "www", ".drupal", ".org", "\n", "\n", "\n", "Drupal", " ", "/", "\u02c8", "d", "r", "u\u02d0", "p", "\u0259l", "/", " is ", "[4]", " a ", "free", " and ", "open source", " ", "content-management framework", " written in ", "PHP", " and distributed under the ", "GNU General Public License", ".", "[3]", "[5]", "[6]", " Drupal provides a ", "back-end", " framework for at least 2.3% of all ", "web sites", " worldwide", "[7]", "[8]", " \u2013 ranging from personal ", "blogs", " to corporate, political, and government sites.", "[9]", " Systems also use Drupal for ", "knowledge management", " and for business collaboration.", "[10]", "\n", "As of November 2017", "[update]", ", the Drupal community is composed of more than 1.3 million members,", "[11]", "[12]", " including 109,000 users actively contributing,", "[13]", " resulting in more than 39,000 free modules that extend and customize Drupal functionality,", "[14]", " over 2,500 free themes that change the look and feel of Drupal,", "[15]", " and at least 1,180 free distributions that allow users to quickly and easily set up a complex, use-specific Drupal in fewer steps.", "[16]", "\n", "The standard release of Drupal, known as ", "Drupal core", ", contains basic features common to ", "content-management systems", ". These include user account registration and maintenance, menu management, ", "RSS", " feeds, taxonomy, page layout customization, and system administration. The Drupal core installation can serve as a simple Web site, a single- or multi-user blog, an ", "Internet forum", ", or a community Web site providing for ", "user-generated content", ".", "\n", "Drupal also describes itself as a ", "Web application framework", ".", "[17]", " When compared with notable frameworks Drupal meets most of the generally accepted ", "feature requirements", " for such web frameworks.", "[18]", "[19]", "[20]", "\n", "Although Drupal offers a sophisticated ", "API", " for developers, basic Web-site installation and administration of the framework require no programming skills.", "[21]", "\n", "Drupal runs on any ", "computing platform", " that supports both a ", "Web server", " capable of running PHP and a ", "database", " to store content and configuration.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "2", " ", "Core", "\n", "\n", "2.1", " ", "Core modules", "\n", "2.2", " ", "Core themes", "\n", "2.3", " ", "Localization", "\n", "2.4", " ", "Auto-update notification", "\n", "2.5", " ", "Database abstraction", "\n", "2.6", " ", "Windows development", "\n", "2.7", " ", "Accessibility", "\n", "\n", "\n", "3", " ", "Extending the core", "\n", "\n", "3.1", " ", "Modules", "\n", "3.2", " ", "Themes", "\n", "3.3", " ", "Distributions", "\n", "\n", "\n", "4", " ", "Architecture", "\n", "5", " ", "Community", "\n", "6", " ", "Security", "\n", "7", " ", "Criticism", "\n", "8", " ", "See also", "\n", "9", " ", "References", "\n", "10", " ", "Further reading", "\n", "11", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "\n", "Latest major releases", "\n", "\n", "Version", "\n", "Release date", "\n", "\n", "\n", "8.4.2", "\n", "November 3, 2017", "[2]", "\n", "\n", "\n", "8.2.8", "\n", "April 19, 2017", "[2]", "\n", "\n", "\n", "7.56", "\n", "June 21, 2017", "[22]", "\n", "\n", "\n", "6.38", "\n", "February 24, 2016", "[23]", "\n", "\n", "\n", "5.23", "\n", "August 11, 2010", "[24]", "\n", "\n", "\n", "\n", "\n", "\n", "\nDrupal version 1-6 release history timeline", "\n", "\n", "\n", "Originally written by ", "Dries Buytaert", " as a ", "message board", ", Drupal became an ", "open source", " project in 2001.", "[25]", " The name ", "Drupal", " represents an English rendering of the ", "Dutch", " word ", "druppel", ", which means \"drop\" (as in a water droplet).", "[26]", " The name came from the now-defunct Drop.org Web site, whose code slowly evolved into Drupal. Buytaert wanted to call the site \"dorp\" (Dutch for \"village\") for its community aspects, but mistyped it when checking the domain name and thought the error sounded better.", "[25]", "\n", "Interest in Drupal got a significant boost in 2003 when it helped build \"DeanSpace\" for ", "Howard Dean", ", one of the candidates in the ", "U.S. Democratic Party", "'s primary campaign for the ", "2004 U.S. presidential election", ". DeanSpace used open-source sharing of Drupal to support a decentralized network of approximately 50 disparate, unofficial pro-Dean websites that allowed users to communicate directly with one another as well as with the campaign.", "[27]", " After Dean ended his campaign, members of his Web team continued to pursue their interest in developing a Web platform that could aid political activism by launching CivicSpace Labs in July 2004, \"...the first company with full-time employees that was developing and distributing Drupal technology.\"", "[28]", " Other companies began to also specialize in Drupal development.", "[29]", "[30]", " By 2013 the Drupal Web site listed hundreds of vendors that offered Drupal-related services.", "[31]", "\n", "As of 2014", "[update]", " Drupal is developed by a community,", "[32]", " and its popularity is growing rapidly.", "[", "citation needed", "]", " From July 2007 to June 2008 the Drupal.org site provided more than 1.4 million downloads of Drupal software, an increase of approximately 125% from the previous year.", "[33]", "[34]", "\n", "As of January 2017", "[update]", " more than 1,180,000 sites use Drupal.", "[35]", " These include hundreds of well-known organizations,", "[36]", " including corporations, media and publishing companies, governments, non-profits,", "[37]", " schools, and individuals. Drupal has won several ", "Packt", " Open Source CMS Awards", "[38]", " and won the ", "Webware 100", " ", "[", "clarification needed", "]", " three times in a row.", "[39]", "[40]", "\n", "On March 5, 2009 Buytaert announced a ", "code freeze", " for Drupal 7 for September 1, 2009.", "[41]", " Drupal 7 was released on January 5, 2011, with release parties in several countries.", "[42]", " After that, maintenance on Drupal 5 stopped, with only Drupal 7 and Drupal 6 maintained.", "[43]", " Drupal 7 series maintenance updates are released regularly.", "[44]", "\n", "On December 1, 2012, Drupal 8 started its feature completion.", "[45]", " About three years later, on October 7, 2015 Drupal 8 first release candidate (rc1) was announced.", "[46]", " Drupal 8 includes new features and improvements for both users and developers, including: a revamped user interface; WYSIWYG and in-place editing; improved mobile support; added and improved key contributed modules including Views, Date, and Entity Reference; introduced a new object-oriented backend leveraging Symfony components; revamped configuration management; and improved multilingual support. Drupal 8 rc1 is the collective work of over 3,200 core contributors.", "[47]", "\n", "Drupal 8.0.0 was released on November 19, 2015.", "[48]", " A subsequent upgrade to it is also available in the form of Drupal 8.1.0", "[49]", " that brings numerous improvements, including CKEditor WYSIWYG enhancements, added APIs, an improved help page, and two new experimental modules. Experimental modules are meant for testing purposes, but are not yet fully supported.", "\n", "Core", "[", "edit", "]", "\n", "In the Drupal community, \"core\" refers to the collaboratively built codebase that can be extended through contributory modules and for versions prior to Drupal 8 is kept outside of the \"sites\" folder of a Drupal installation.", "[50]", " (Starting with version 8, core is kept in its own 'core' sub-directory.) Drupal core is the stock element of Drupal. Bootstrap and Common libraries are defined as Drupal core and all other functionality is defined as Drupal modules including the system module itself.", "\n", "In a Drupal website's default configuration, authors can contribute content as either registered or anonymous users (at the discretion of the administrator). This content is accessible to web visitors through a variety of selectable criteria. As of Drupal 8, Drupal has adopted some ", "Symfony", " libraries into Drupal core.", "\n", "Core modules also includes a hierarchical ", "taxonomy", " system, which lets developers categorize content or ", "tagged", " with key words for easier access.", "[21]", "\n", "Drupal maintains a detailed ", "changelog", " of core feature updates by version.", "[51]", "\n", "Core modules", "[", "edit", "]", "\n", "Drupal core includes optional modules that can be enabled by the administrator to extend the functionality of the core website.", "[52]", "\n", "The core Drupal distribution provides a number of features, including:", "[52]", "\n", "\n", "\n", "Access statistics and logging", "\n", "Advanced search", "\n", "Blogs, books, comments, forums, and polls", "\n", "Caching and feature throttling for improved performance", "\n", "Descriptive URLs", "\n", "Multi-level menu system", "\n", "Multi-site support", "[53]", "\n", "Multi-user content creation and editing", "\n", "OpenID", " support", "\n", "RSS feed and feed aggregator", "\n", "Security and new release update notification", "\n", "User profiles", "\n", "Various access control restrictions (user roles, IP addresses, email)", "\n", "Workflow tools (triggers and actions)", "\n", "\n", "\n", "Core themes", "[", "edit", "]", "\n", "Drupal includes core themes, which customize the \"look and feel\" of Drupal sites,", "[54]", " for example, Garland and Bartik.", "\n", "The Color Module, introduced in Drupal core 5.0, allows administrators to change the color scheme of certain themes via a browser interface.", "[55]", "\n", "Localization", "[", "edit", "]", "\n", "As of January 2017", "[update]", ", Drupal had been made available in 100 languages and ", "English", " (the default).", "[56]", " Support is included for right-to-left languages such as ", "Arabic", ", ", "Persian", ", and ", "Hebrew", ".", "[57]", "\n", "Drupal localization is built on top of ", "gettext", ", the GNU ", "internationalization and localization", " (i18n) library.", "\n", "Auto-update notification", "[", "edit", "]", "\n", "Drupal can automatically notify the administrator about new versions of modules, themes, or the Drupal core.", "[57]", " It's important to update quickly after security updates are released.", "\n", "Before updating it is highly recommended to take backup of core, modules, theme, files and database. If there is any error shown after update or new updates is not compatible with a module, then it can be quickly replace by backup. There are several backup modules available in Drupal.", "\n", "On October 15, 2014, a sql injection vulnerability was announced and update released.", "[58]", " Two weeks later the Drupal security team released an advisory explaining that everyone should act under the assumption that any site not updated within 7 hours of the announcement are infected.", "[59]", " Thus, it can be extremely important to apply these updates quickly and usage of a tool to make this process easier like drush is highly recommended.", "\n", "Database abstraction", "[", "edit", "]", "\n", "Prior to version 7, Drupal had functions that performed tasks related to databases, such as SQL query cleansing, multi-site table name prefixing, and generating proper SQL queries. In particular, Drupal 6 introduced an abstraction layer that allowed programmers to create SQL queries without writing SQL.", "\n", "Drupal 7 extends the data abstraction layer so that a programmer no longer needs to write SQL queries as text strings. It uses ", "PHP Data Objects", " to abstract the database. ", "Microsoft", " has written a database driver for their ", "SQL Server", ".", "[60]", " Drupal 7 supports the file-based SQLite database engine, which is part of the standard PHP distribution.", "\n", "Windows development", "[", "edit", "]", "\n", "With Drupal 7's new database abstraction layer, and ability to run on the Windows web server ", "IIS", ", it is now easier for Windows developers to participate in the Drupal community.", "\n", "A group on Drupal.org is dedicated to Windows issues.", "[61]", "\n", "Accessibility", "[", "edit", "]", "\n", "With the release of Drupal 7, ", "Web accessibility", " has been greatly improved by the Drupal community.", "[62]", " Drupal is a good framework for building sites accessible to people with disabilities, because many of the best practices have been incorporated into the program code Core. The accessibility team is carrying on the work of identifying and resolving accessibility barriers and raising awareness within the community.", "\n", "Drupal 7 started the adoption of ", "WAI-ARIA", " support for ", "Rich Internet Applications", " and this has been carried further in Drupal 8. There have been many improvements to both the visitor and administrator sides of Drupal, especially:", "\n", "\n", "Drag and drop functionality", "\n", "Improved color contrast and intensity", "\n", "Adding skip navigation to core themes", "\n", "Adding labels by default for input forms", "\n", "Fixing CSS display:none with consistent methods for hiding and exposing text on focus.", "\n", "\n", "The community also added an accessibility gate for core issues in Drupal 8.", "[63]", "\n", "Extending the core", "[", "edit", "]", "\n", "Drupal core is ", "modular", ", defining a system of ", "hooks", " and ", "callbacks", ", which are accessed internally via an ", "API", ".", "[64]", " This design allows third-party contributed ", "modules", " and ", "themes", " to extend or override Drupal's default behaviors without changing Drupal core's code.", "\n", "Drupal isolates core files from contributed modules and themes. This increases flexibility and security and allows administrators to cleanly upgrade to new releases without overwriting their site's customizations.", "[65]", " The Drupal community has the saying, \"Never hack core,\" a strong recommendation that site developers do not change core files.", "[50]", "\n", "Modules", "[", "edit", "]", "\n", "Contributed modules offer such additional or alternate features as image galleries, custom content types and content listings, ", "WYSIWYG", " editors, private messaging, third-party integration tools,", "[66]", " integrating with BPM portals,", "[67]", " and more. As of January 2017", "[update]", " the Drupal website lists more than 36,500 free ", "modules", ".", "[14]", "\n", "Some of the most commonly used contributed modules include:", "[68]", "\n", "\n", "Content Construction Kit (CCK): allows site administrators to dynamically create content types by extending the database schema. \"Content type\" describes the kind of information. Content types include, but are not limited to, events, invitations, reviews, articles, and products. The CCK Fields API is in Drupal core in Drupal 7.", "[69]", "[70]", "\n", "Views: facilitates the retrieval and presentation, through a database abstraction system, of content to site visitors. Basic views functionality has been added to core in Drupal 8.", "[71]", "\n", "Panels: drag and drop layout manager that allows site administrators to visually design their site.", "\n", "Rules: conditionally executed actions based on recurring events.", "\n", "Features: enables the capture and management of features (entities, views, fields, configuration, etc.) into custom modules.", "\n", "Context: allows definition of sections of site where Drupal features can be conditionally activated", "\n", "Media: makes photo uploading and media management easier", "\n", "Services: provides an API for Drupal.", "\n", "Organic Groups Mailing List", "\n", "\n", "Themes", "[", "edit", "]", "\n", "As of January 2017", "[update]", ", there are more than 2,400", "[15]", " free community-contributed ", "themes", ". Themes adapt or replace a Drupal site's default look and feel.", "\n", "Drupal themes use standardized formats that may be generated by common third-party theme design engines. Many are written in the ", "PHPTemplate", " engine", "[72]", " or, to a lesser extent, the ", "XTemplate", " engine.", "[73]", " Some templates use hard-coded ", "PHP", ". Drupal 8 will integrate the ", "Twig", " templating engine.", "\n", "The inclusion of the PHPTemplate and XTemplate engines in Drupal addressed user concerns about flexibility and complexity.", "[74]", " The Drupal theming system utilizes a ", "template engine", " to further separate ", "HTML", "/", "CSS", " from PHP. A popular Drupal contributed module called 'Devel' provides GUI information to developers and themers about the page build.", "\n", "Community-contributed themes", "[75]", " at the Drupal website are released under a free ", "GPL", " license,", "[76]", " and the most installed Drupal themes are ", "listed on this page", ".", "[77]", "\n", "Distributions", "[", "edit", "]", "\n", "In the past, those wanting a fully customized installation of Drupal had to download a pre-tailored version separately from the official Drupal core. Today, however, a distribution defines a packaged version of Drupal that upon installation, provides a website or application built for a specific purpose.", "\n", "The distributions offer the benefit of a new Drupal site without having to manually seek out and install third-party contributed modules or adjust configuration settings.", "[78]", " They are collections of modules, themes, and associated configuration settings that prepare Drupal for custom operation. For example, a distribution could configure Drupal as a \"brochure\" site rather than a news site or ", "online store", ".", "\n", "Architecture", "[", "edit", "]", "\n", "Drupal is based on the ", "Presentation Abstraction Control", " architecture, or PAC.", "\n", "The ", "menu system", " acts as the Controller. It accepts input via a single source (", "HTTP GET", " and ", "POST", "), routes requests to the appropriate helper functions, pulls data out of the Abstraction (nodes and, from Drupal 5 onwards, forms), and then pushes it through a filter to get a Presentation of it (the theme system).", "\n", "It even has multiple, parallel PAC agents in the form of blocks that push data out to a common canvas (page.tpl.php).", "[79]", "\n", "Community", "[", "edit", "]", "\n", "Drupal.org has a large community of users and developers who provide active ", "community", " support by coming up with new updates to help improve the functionality of Drupal,", "[80]", " As of January 2017", "[update]", " more than 105,400 users are actively contributing.", "[13]", " The semiannual DrupalCon conference alternates between North America, Europe and Asia.", "[81]", " Attendance at DrupalCon grew from 500 at ", "Szeged", " in August 2008, to over 3,700 people at Austin, Texas in June, 2014.", "\n", "Smaller events, known as \"Drupal Camps\" or DrupalCamp,", "[82]", " occur throughout the year all over the world. The annual Florida DrupalCamp brings users together for ", "Coding for a Cause", " that benefits a local nonprofit organization, as does the annual GLADCamp (", "Greater Los Angeles Drupal", " Camp) event, ", "Coders with a Cause", ".", "\n", "The Drupal community also organizes professional and semi-professional gatherings called ", "meetups", " at a large number of venues around the world. In July, 2013, ", "Droplabs", ", a co-working space in Los Angeles, California, was recognized as the world's \"Top Drupal Location", "[83]", "\" (with 62 recorded events) when compared with other event venues over a 12-month period.", "\n", "There are a number of active Drupal forums,", "[84]", " mailing lists", "[85]", " and discussion groups.", "[86]", " Drupal also maintains several ", "IRC", " channels", "[87]", " on the ", "Freenode", " network.", "\n", "There are over 30 national communities", "[88]", " around drupal.org offering language-specific support.", "\n", "Notable Drupal users include ", "NBC", ", ", "Taboola", ", and ", "Patch", ".", "[89]", "\n", "Security", "[", "edit", "]", "\n", "Drupal's policy is to announce the nature of each security vulnerability once the fix is released.", "[90]", "[91]", "\n", "Administrators of Drupal sites are automatically notified of these new releases via the Update Status module (Drupal 6) or via the Update Manager (Drupal 7).", "[92]", "\n", "Drupal maintains a security announcement mailing list, a history of all security advisories,", "[93]", " a security team home page,", "[94]", " and an RSS feed", "[95]", " with the most recent security advisories.", "\n", "In mid-October 2014,", "[96]", " Drupal issued a \"highly critical\" security advisory regarding an ", "SQL injection", " bug in Drupal 7, also known as Drupalgeddon.", "[97]", "[98]", "\n", "Downloading and installing an upgrade to Drupal 7.32 fixes the vulnerability, but does not remove any ", "backdoor", " installed by hackers if the site has already been ", "compromised", ".", "[99]", " Attacks began soon after the vulnerability was announced. According to the Drupal security team, where a site was not patched within hours of the announcement, it should be considered compromised and taken offline by being replaced with a static HTML page while the administrator of its server must be told that other sites on the same server may also have been compromised.", "\n", "To solve the problem, the site must be restored using backups from before October 15, be patched and manually updated, and anything merged from the site must be audited.", "[100]", "\n", "Criticism", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This section needs to be ", "updated", ". ", "Please update this article to reflect recent events or newly available information.", " ", "(December 2014)", "\n", "\n", "\n", "\n", "In an article", "[101]", " about the adoption of Drupal by the Whitehouse.gov site, ", "Slate", " associate editor Chris Wilson", "[102]", " lists some common criticisms of Drupal. Other criticisms have included:", "\n", "\n", "Usability:", " Aspects of the Drupal 6 administration interface were confusing and intimidating to some, particularly for new administrators.", "[103]", "[104]", "[105]", " According to Dries Buytaert, Drupal 7 addressed 90% of the problems identified by usability tests conducted at the Universities of Minnesota and Baltimore.", "[106]", "[107]", " To achieve this, ", "Acquia", " (the company founded by the project lead of Drupal) hired ", "user experience", " designer Mark Boulton to work with the Drupal community to design an improved user interface for Drupal's administration interface.", "[108]", " The majority of his team's design work has been implemented by the community in Drupal 7. The 2011 usability test results from the University of Minnesota Office of Information Technology show that all of the major usability problems identified in Drupal 6 are either vastly improved or non-existent in Drupal 7. However, some new usability problems were identified.", "[109]", "[110]", " Since the release of Drupal 7 there are now various distributions and applications to enhance the Back-end Usability of Drupal such as Drupal Gardens,", "[111]", " Open Enterprise", "[112]", " and Mitkom Builder.", "[113]", "\n", "Learning curve:", " Some users describe Drupal as being difficult to master.", "[114]", "[115]", " Drupal's many contributed modules can have overlapping functionality and have been reported as overwhelming to new users.", "[116]", "\n", "Backward compatibility (for software development):", " Prior to 7, Drupal did not commit to backward compatibility across major revisions.", "[117]", " This means that module and theme developers may have to rework their code to make it compatible. However, Drupal's policy is to not change how it uses data. This means that data from previous versions is still usable without alteration in the new release.", "[118]", "[119]", " Drupal documents any incompatibilities, allowing the user to make informed decisions about when and whether to upgrade. Upgrades from 8 to 9 and beyond will require substantially less effort.\" ", "[120]", "\n", "Performance/scalability:", " In 2008, ", "performance", " tests between Drupal 6.1 and ", "Joomla", " 1.5 demonstrated that Drupal's pages were delivered \"significantly faster\" than those of Joomla.", "[121]", " Despite this, arguments over speed persist.", "[122]", " Drupal is likely to be slower than a special-purpose application for a given task. For example, ", "WordPress", " typically outperforms Drupal as a single-user blogging tool. Drupal positions itself for broader applications requirements that are outside the scope of more narrowly focused applications.", "[123]", " Drupal offers ", "caching", " to store various page elements, the use of which resulted in a 508% improvement in one benchmark.", "[124]", " When using Drupal's default Page Cache mechanism, the cached pages are delivered only to anonymous users, so contributed modules must be installed to allow caching content for logged in users.", "[125]", "[126]", " Like performance, ", "scalability", " (the ability to add servers to handle growing numbers of visitors with consistent response) can become a concern on large, interactive sites. ", "MySQL", "'s query caching can help reduce the load on the database server caused by Drupal's high ", "query rate", ".", "[127]", "[128]", " Drupal caches database schema ", "metadata", " as well as elements such as blocks, forms and menus.", "[129]", " Drupal 7 increases performance in database queries and reduces PHP code usage.", "[130]", "\n", "Integrability with hosting structures:", " Because of Drupal's demanding query requirements, Drupal-based websites can quickly become very taxing to hosts whose databases reside on a machine separate from their ", "HTTP server", ". While the issue can normally be addressed by implementing aggressive ", "caching", " as described above, such methods may be unimplementable in cases where the host does not offer access to ", "PHP accelerators", " like ", "XCache", " or ", "APC", ". Drupal has plugins that facilitate similar caching without requiring special PHP extensions.", "[131]", "[132]", "\n", "The Drupal core search is ineffective at searching content:", "[", "citation needed", "]", " There are contributed modules that will greatly improve the search functionality on a Drupal website, but they are not easily accessible due to a high learning curve and the difficulty users have in general of finding the right module.", "[", "citation needed", "]", " One of the faceted search options is ", "Apache Solr", " Search Integration module, however, the module requires a dedicated server or ", "virtual private server", " (VPS) to operate because Solr must run on a ", "servlet", " container, e.g. ", "Tomcat", ", ", "Jetty", " or ", "Resin", ". These requirements make it harder for a Drupal website to have a functional search feature. In response some companies have created Apache Solr ", "SaaS", " products.", "\n", "Many published, yet incomplete or outdated modules", "[133]", " While Drupal's site boasts over 30,000 downloadable modules, searching the Drupal module directory finds many that are incomplete abandoned projects and do not work at all, only work for an outdated version due to lack of backward compatibility, or are unusable due to serious bugs. This is due to the open source nature of Drupal, and the fact that anyone is free to start a module and publish it on drupal.org. Modules with an active maintenance team are often highly polished, secure, and nearly bug free. Recent changes to the drupal.org website now let users search for modules, themes, and distributions, while filtering results by stability. ", "[134]", "\n", "\n", "\n", "Difficult to unit test:", "[135]", " Drupal 7 doesn't follow MVC framework and stores all of its configurations in database and as a result, unit testing the code without touching the database becomes extremely difficult. As a result, developers have resorted to using integration testing frameworks such as Red Test or behavior-driven development framework such as Behat and Codeception. Drupal 8 has taken a great stride in making it easier for developers to write unit-testable code.", "\n", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Free software portal", "\n", "\n", "\n", "\n", "Comparison of web frameworks", "\n", "List of applications with iCalendar support", "\n", "List of content management systems", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "Earliest tagged releases", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Drupal 8 release history; drupal.org", "\n", "^ ", "a", " ", "b", " ", "\"Licensing FAQ\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "A query on ", "Drupal", "'", "s official website on March 2009: ", "How does one pronounce \"Drupal\"?", " (accessed 19 June 2013)", "\n", "^", " ", "\"The Drupal Overview\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"System Requirements\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "W3Techs (2011-07-15). ", "\"Usage of content management systems for websites\"", ". Retrieved ", "2011-07-15", ".", "\u00a0", "\n", "^", " ", "BuiltWith (2011-03-28). ", "\"Drupal Usage Statistics\"", ". Retrieved ", "2011-03-28", ".", "\u00a0", "\n", "^", " ", "\"The State of Drupal 2010 speech\"", ". Archive.org. 2001-03-10", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Knowledge management with Drupal\"", ".", "\u00a0", "\n", "^", " ", "\"Getting Involved | Drupal.org\"", ". ", "www.drupal.org", ". 2017-04-10", ". Retrieved ", "2017-04-11", ". ", "Drupal.org Activity", "\u00a0", "\n", "^", " ", "\"1 Million Users on Drupal.org!\"", ". ", "www.drupal.org", ". 2013-10-11.", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Drupal Homepage\"", ". ", "www.drupal.org", ". 2017-04-09", ". Retrieved ", "2017-04-09", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Module project\"", ". ", "www.drupal.org", ". 2017-04-09", ". Retrieved ", "2017-04-09", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Download & Extend: Themes\"", ". ", "www.drupal.org", ". 2017-04-09", ". Retrieved ", "2017-04-09", ".", "\u00a0", "\n", "^", " ", "\"Download & Extend: Distributions\"", ". ", "www.drupal.org", ". 2017-04-09", ". Retrieved ", "2017-04-09", ".", "\u00a0", "\n", "^", " ", "\"Drupal 7 as an enterprise web application framework\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "\"Comparison of web frameworks\"", ". ", "Wikipedia", ". 2017-04-07. ", "Comparison of features", "\u00a0", "\n", "^", " ", "O'Connor, William (2014-08-19). ", "\"The Drupal API turns a CMS into a true enterprise application - O'Reilly Radar\"", ". ", "O'Reilly Media", ". Retrieved ", "2017-04-11", ".", "\u00a0", "\n", "^", " ", "Diana, Dupuis (2013-05-15). ", "\"Drupal Is a Framework: Why Everyone Needs to Understand This\"", ". ", "Linux Journal", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Features\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Drupal 7 release history; drupal.org", "\n", "^", " ", "Drupal 6 release history; drupal.org", "\n", "^", " ", "Drupal 5 release history; drupal.org", "\n", "^ ", "a", " ", "b", " ", "\"History\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Druppel: Dutch to English Translation\"", ". ", "Babylon Translation", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Benjamin Melan\u00e7on; et al. (2011). ", "The Definitive Guide to Drupal 7", " (2nd ed.). Apress. p.\u00a0823. ", "ISBN", "\u00a0", "9781430231356", ". Retrieved ", "2012-05-27", ".", "\u00a0", "\n", "^", " ", "Critchley, Spencer (2006-05-03). ", "\"Digital Politics: An Interview With CivicSpace Founder Zack Rosen\"", ". ", "O'Reilly Media", ". Retrieved ", "2012-05-27", ".", "\u00a0", "\n", "^", " ", "Kreiss, Daniel (2012-03-05). ", "\"Dean, Romney, and Drupal: Values and Technological Adoption\"", ". ", "Culture Digitally", ". Retrieved ", "2012-05-27", ".", "\u00a0", "\n", "^", " ", "Samantha M. Shapiro, ", "\"The Dean Connection\"", ", ", "The New York Times", " December 7, 2003, accessed May 27, 2012.", "\n", "^", " ", "\"Marketplace\"", ". ", "drupal.org", ". Retrieved ", "2013-04-18", ".", "\u00a0", "\n", "^", " ", "Koenig, Josh. ", "\"Growth Graphs\"", ". ", "Groups.Drupal", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2008). ", "\"Drupal Download Statistics\"", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2007). ", "\"Drupal Download Statistics\"", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Usage statistics for Drupal core\"", ".", "\u00a0", "\n", "^", " ", "\"Drupal Sites\"", ". ", "Dries Buytaert", ". Retrieved ", "2010-07-20", ".", "\u00a0", "\n", "^", " ", "\"List of Nonprofit, NPO, NGO Websites Using Drupal\"", ". ", "ENGINE Industries", ". Archived from ", "the original", " on 2009-12-24", ". Retrieved ", "2010-07-20", ".", "\u00a0", "\n", "^", " ", "\"OSS CMS Award Previous Winners\"", ". ", "Packt Publishing", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Drupal is a Webware 100 winner for the third year in a row\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Cnet.com\"", ". News.cnet.com. 2009-05-19", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Buytaert.net\"", ". Buytaert.net", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupal 7 to be released on January 5 (with one ginormous party)\"", ". Buytaert.net", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Xplain Hosting Drupal 7 Quickstart training seminar\"", ". ", "Scoop", ". 2010-12-16.", "\u00a0", "\n", "^", " ", "\"drupal 7.24\"", ". ", "drupal.org", ". Retrieved ", "2013-11-20", ".", "\u00a0", "\n", "^", " ", "\"Drupal 8 In Marking The Biggest Change In Its Content Management History\"", ". ", "eyerys.com", ". Retrieved ", "19 November", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Drupal 8.0.0-rc1 announcement\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "\"Drupal 8.0.0-rc1 announcement\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "\"Drupal 8.0.0 released\"", ". ", "drupal.org", ". Retrieved ", "19 November", " 2015", ".", "\u00a0", "\n", "^", " ", "https://www.drupal.org/blog/drupal-8-1-0", "\n", "^ ", "a", " ", "b", " ", "\"Never hack core\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "\"Drupal 7.39 released\"", ". ", "drupal.org", ". Retrieved ", "2015-09-19", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Handbook: Core Modules\"", ". ", "drupal.org", ". Archived from ", "the original", " on 2008-07-28", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Drupal Multi-site installation recipes\"", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries. ", "\"Garland, the new default core theme\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Color: Allows the user to change the color scheme of certain themes\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Drupal core translation downloads\"", ". ", "drupal.org", ". Retrieved ", "2017-01-30", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Drupal 6.0 released\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"SA-CORE-2014-005 - Drupal core - SQL injection\"", ". ", "Https:", ". Retrieved ", "December 3,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Drupal Core - Highly Critical - Public Service announcement - PSA-2014-003\"", ". ", "Https:", ". Retrieved ", "December 3,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Install Drupal for Windows\"", ". ", "microsoft.com", ". Retrieved ", "2011-02-14", ".", "\u00a0", "\n", "^", " ", "\"Drupal on Windows Group\"", ". ", "drupal.org", ". Retrieved ", "2011-02-14", ".", "\u00a0", "\n", "^", " ", "Killesreiter, Gerhard (2013-02-25). ", "\"Accessibility statement\"", ". ", "drupal.org", ". Retrieved ", "2013-04-16", ".", "\u00a0", "\n", "^", " ", "Scholten, Roy (2012-12-10). ", "\"Drupal core gates\"", ". ", "drupal.org", ". Retrieved ", "2013-04-16", ".", "\u00a0", "\n", "^", " ", "\"API Reference\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"File and directory management\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "14 hours 40 min ago. (2009-05-20). ", "\"Integrating Drupal with External Systems\"", ". Appnovation.com. Archived from ", "the original", " on 2011-08-24", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupal Camunda BPM Integration\"", ". ", "Srijan Technologies", ". Srijan Technologies.", "\u00a0", "\n", "^", " ", "\"Project usage overview\"", ". ", "Drupal.org", ". Retrieved ", "2011-08-18", ".", "\u00a0", "\n", "^", " ", "\"DRUPAL 5 TO DRUPAL 7\"", ".", "\u00a0", "\n", "^", " ", "\"Field API\"", ". 2009", ". Retrieved ", "2009-05-08", ".", "\u00a0", "\n", "^", " ", "\"Views in Drupal Core initiative: Status report and roadmap\"", ". Retrieved ", "2014-11-04", ".", "\u00a0", "\n", "^", " ", "\"PHPTemplate theme engine\"", ". ", "drupal.org", ". Archived from ", "the original", " on 2009-03-08", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"XTemplate theme engine\"", ". ", "drupal.org", ". Archived from ", "the original", " on 2009-03-16", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"How does Drupal compare to Mambo? discussion thread\"", ". ", "drupal.org", ". 2005-01-17", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Drupal themes\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Adding your theme to Drupal.org\"", ". Drupal.org.", "\u00a0", "\n", "^", " ", "\"10 Best Drupal Themes\"", ". MAAN Softwares", ". Retrieved ", "2017-11-08", ".", "\u00a0", "\n", "^", " ", "\"Top Drupal Distributions\"", ". AGLOBALWAY Consulting Services Inc. Archived from ", "the original", " on 2014-04-13.", "\u00a0", "\n", "^", " ", "\"MVC vs. PAC\"", ".", "\u00a0", "\n", "^", " ", "Drupal - CMS Grew Overnight", " By MAAN Softwares, Retrieved, June 8th, 2017", "\n", "^", " ", "\"drupal.org discussion on DrupalCon event management\"", ". Groups.drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupal Camps and Cons\"", ". Retrieved ", "25 January", " 2013", ".", "\u00a0", "\n", "^", " ", "\"1 Year of Drupal Events Visualized\"", ". Retrieved ", "13 July", " 2013", ".", "\u00a0", "\n", "^", " ", "\"forums\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"mailing lists\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupal Groups\"", ". Groups.drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupal IRC channels on FreeNode\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Language specific communities\"", ". Drupal.org. 2011-08-26", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "Keller, Katherine (7 April 2017). ", "\"CMS Battle for Beginners: WordPress vs Joomla vs Drupal (Infographic)\"", ". ", "Entrepreneur", ". Retrieved ", "17 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Drupal. ", "\"Security announcement and release process\"", ".", "\u00a0", "\n", "^", " ", "Drupal. ", "\"How to report a security issue\"", ".", "\u00a0", "\n", "^", " ", "\"Update manager (and Update status)\"", ". ", "drupal.org", ". Retrieved ", "2011-07-01", ".", "\u00a0", "\n", "^", " ", "\"Security advisories\"", ". ", "drupal.org", ". Retrieved ", "2009-04-28", ".", "\u00a0", "\n", "^", " ", "\"Drupal security team\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupal Security RSS feed\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Drupalgeddon megaflaw raises questions over CMS bods' crisis mgmt\"", ".", "\u00a0", "\n", "^", " ", "\"SA-CORE-2014-005 - Drupal core - SQL injection\"", ". ", "Security advisories", ". Drupal security team.", "\u00a0", "\n", "^", " ", "\"Drupalgeddon strikes back: outdated Drupal allegedly linked to \"Panama Papers", "\"", "\"", ". ", "Blog", ". Drop Guard.", "\u00a0", "\n", "^", " ", "\"Drupal Core\u2014Highly Critical\u2014Public Service Announcement\u2014PSA-2014-003\"", ". ", "Security advisories", ". Drupal security team. October 29, 2014 \u2013 via Drupal.org. ", "\n", "You should proceed under the assumption that every Drupal 7 website was compromised unless updated or patched before Oct 15th, 11pm UTC, that is 7 hours after the announcement.", "\n", "Simply updating to Drupal 7.32 will not remove backdoors", "....updating to version 7.32 or applying the patch fixes the vulnerability but does not fix an already compromised website. If you find that your site is already patched but you didn\u2019t do it, that can be a symptom that the site was compromised - some attacks have applied the patch as a way to guarantee they are the only attacker in control of the site.", "\n", "\u00a0", "\n", "^", " ", "Robinson, Brian (2014-11-07). ", "\"Attacks on open source call for better software design -\"", ". ", "GCN", ". Retrieved ", "2016-07-29", ".", "\u00a0", "\n", "^", " ", "Why running the White House Web site on Drupal is a political disaster waiting to happen.", "\n", "^", " ", "Message Error, Why running the White House Web site on Drupal is a political disaster waiting to happen", " Chris Wilson. ", "Slate (magazine)", " October 27, 2009", "\n", "^", " ", "Scollan, Becca; Abby Byrnes; Malia Nagle; Paul Coyle; Cynthia York; Maleka Ingram (2008-05-01). ", "\"Drupal Usability Research Report\"", " ", "(PDF)", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Lal, Kieran (2008-06-26). ", "\"Drupal usability tests from the University of Baltimore with community solutions\"", ". ", "drupal.org", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2008-07-03). ", "\"Usability, usability, and usability\"", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2008-03-10). ", "\"First results from usability testing\"", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Report from Formal Drupal\"", " ", "(PDF)", ". 2008-03-03", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2009-02-04). ", "\"Mark Boulton to help with Drupal 7\"", ". Archived from ", "the original", " on 2010-04-13.", "\u00a0", "\n", "^", " ", "University of Minnesota Office of Information Technology (2011-05-23). ", "\"Usability test at University of Minnesota, may 2011\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "University of Minnesota Office of Information Technology (2011-06-01). ", "\"Report from the University of Minnesota Drupal Usability Testing\"", ". ", "drupal.org", ".", "\u00a0", "\n", "^", " ", "\"Drupal Gardens\"", ".", "\u00a0", "\n", "^", " ", "\"Open Enterprise\"", ".", "\u00a0", "\n", "^", " ", "\"Mitkom\"", ".", "\u00a0", "\n", "^", " ", "Howard, Brian C. (2007-01-25). ", "\"Harnessing Drupal for Citizen Journalism\"", ". ", "NewAssignment.Net", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Drupal Review\"", ". Archived from ", "the original", " on 2010-02-05.", "\u00a0", "\n", "^", " ", "James, Heather (2010-11-09). ", "\"203 people tell What I wish I knew when I started Drupal\"", ". ", "Acquia.com", ". Retrieved ", "2010-11-11", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2006-05-26). ", "\"Backward Compatibility\"", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2006-07-27). ", "\"The pain before the pay-off\"", ". Retrieved ", "2009-04-08", ".", "\u00a0", "\n", "^", " ", "\"Drupal's Upgrade Instructions (end-user)\"", ". Drupal.org", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "http://buytaert.net/making-drupal-upgrades-easy-forever", "\n", "^", " ", "\"Joomla 1.5 & Drupal 6.1 Performance Comparison\"", ". Archived from ", "the original", " on 2012-07-22.", "\u00a0", "\n", "^", " ", "\"Is Drupal Slow & Bloated?\"", ". Archived from ", "the original", " on 2012-09-09.", "\u00a0", "\n", "^", " ", "\"Is Drupal the right tool for the job?\"", ".", "\u00a0", "\n", "^", " ", "\"Drupal vs Joomla: performance | Dries Buytaert\"", ". Buytaert.net", ". Retrieved ", "2012-05-05", ".", "\u00a0", "\n", "^", " ", "\"Authenticated User Page Caching (Authcache)\"", ". ", "drupal.org", ". Retrieved ", "2009-09-23", ".", "\u00a0", "\n", "^", " ", "Buytaert, Dries (2006-08-11). ", "\"Drupal vs Joomla! performance\"", ". Retrieved ", "2009-05-20", ".", "\u00a0", "\n", "^", " ", "\"Speed up a Drupal web site by enabling MySQL query caching\"", ". ", "nadeausoftware.com", ". 2007-03-07", ". Retrieved ", "2009-06-21", ".", "\u00a0", "\n", "^", " ", "\"Book on Drupal Performance & Scalability\"", ". Books.tag1consulting.com. 2008-07-16. Archived from ", "the original", " on 2011-09-06", ". Retrieved ", "2011-08-31", ".", "\u00a0", "\n", "^", " ", "\"Caching in Drupal 6\"", ". ", "drupal.org", ". 2008-07-28", ". Retrieved ", "2009-06-21", ".", "\u00a0", "\n", "^", " ", "\"Drupal 6 vs Drupal 7 performance and comments vs nodes\"", ". ", "CivicActions.com", ". 2009-05-19", ". Retrieved ", "2009-06-21", ".", "\u00a0", "\n", "^", " ", "\"Boost\"", ". drupal.org. 2006-10-15", ". Retrieved ", "2012-05-05", ".", "\u00a0", "\n", "^", " ", "\"Memcache API and Integration\"", ". drupal.org", ". Retrieved ", "2012-05-05", ".", "\u00a0", "\n", "^", " ", "\"Dealing with unsupported (abandoned) projects\"", ". ", "While experienced Drupal users know to check the queue and the git commits to determine the health of a project, having broken and unmaintained/unsupported projects available can be confusing and off-putting for new users.", "\u00a0", "\n", "^", " ", "https://www.drupal.org/project/project_module", "\n", "^", " ", "\"Drupal Testing Methodologies Are Broken - Here's Why | Red Crackle\"", ". ", "redcrackle.com", ". Retrieved ", "2015-12-05", ".", "\u00a0", "\n", "\n", "\n", "Further reading", "[", "edit", "]", "\n", "\n", "Abbott/Jones (2016), Learning Drupal 8, England, Packt Publishing. ", "ISBN", "\u00a0", "978-1-78216-875-1", "\n", "Pol, Kristen (2012). ", "Drupal 7 Multilingual Sites", ". Birmingham, England: Packt Publishing. ", "ISBN", "\u00a0", "978-1-84951-818-5", ".", "\u00a0", "\n", "Mercer, David (2010). ", "Drupal 7", ". Birmingham, England: Packt Publishing. ", "ISBN", "\u00a0", "1-84951-286-8", ".", "\u00a0", "\n", "Travis, Brian (2011). ", "Pro Drupal 7 for Windows Developers", ". Berkeley: APress. ", "ISBN", "\u00a0", "978-1-4302-3153-0", ".", "\u00a0", "\n", "Butcher, Matt; Larry Garfield; John Wilkins; Matt Farina; Ken Rickard; Greg Dunlap (2010). ", "Drupal 7 Module Development", ". Birmingham, England: Packt Publishing. ", "ISBN", "\u00a0", "978-1-84951-116-2", ".", "\u00a0", "\n", "Bhavin, Patel (Aug 2010). ", "Drupal 6 Panel Cookbook", ". Canada: Packt Publishing. ", "ISBN", "\u00a0", "1-84951-118-7", ".", "\u00a0", "\n", "Beighley, Lynn (2009). ", "Drupal for Dummies", ". New York: For Dummies. ", "ISBN", "\u00a0", "978-0-470-55611-5", ".", "\u00a0", "\n", "Herremans, D. (2009). ", "Drupal 6: Ultimate Community Site Guide", ". Switzerland. ", "ISBN", "\u00a0", "978-2-8399-0490-2", ".", "\u00a0", "\n", "Peacock, Michael (2008). ", "Selling Online with Drupal e-Commerce", ". Birmingham, England: Packt Publishing. ", "ISBN", "\u00a0", "978-1-84719-406-0", ".", "\u00a0", "\n", "VanDyk, John K. (2008). ", "Pro Drupal Development, Second Edition", ". New York: Springer Verlag/Apress. ", "ISBN", "\u00a0", "1-4302-0989-5", ".", "\u00a0", "\n", "Kafer, Konstantin; Emma Hogbin (Apr 2009). ", "Front End Drupal: Designing, Theming, Scripting", ". Jersey, USA: Prentice Hall. ", "ISBN", "\u00a0", "0-13-713669-2", ".", "\u00a0", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Drupal", ".", "\n", "\n", "\n", "\n", "Official website", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Web frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "\n", "\n", "\n", "\n", "\n", "C++", "\n", "\n", "\n", "\n", "CppCMS", "\n", "Wt", "\n", "\n", "\n", "\n", "\n", "\n", "CLI", "\n", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "Core", "\n", "AJAX", "\n", "Dynamic Data", "\n", "MVC", "\n", "Razor", "\n", "Web Forms", "\n", "\n", "\n", "DNN", "\n", "BFC", "\n", "MonoRail", "\n", "OpenRasta", "\n", "Umbraco", "\n", "\n", "\n", "\n", "\n", "\n", "ColdFusion", "\n", "\n", "\n", "\n", "CFWheels", "\n", "ColdBox Platform", "\n", "ColdSpring", "\n", "Fusebox", "\n", "Mach-II", "\n", "Model-Glue", "\n", "\n", "\n", "\n", "\n", "\n", "Common Lisp", "\n", "\n", "\n", "\n", "Caveman2", "\n", "CL-HTTP", "\n", "UnCommon Web", "\n", "Weblocks", "\n", "\n", "\n", "\n", "\n", "\n", "Haskell", "\n", "\n", "\n", "\n", "Happstack", "\n", "Yesod", "\n", "Snap", "\n", "\n", "\n", "\n", "\n", "\n", "Java", "\n", "\n", "\n", "\n", "AppFuse", "\n", "Flexive", "\n", "Grails", "\n", "GWT", "\n", "ICEfaces", "\n", "ItsNat", "\n", "JavaServer Faces", "\n", "JHipster", "\n", "Jspx", "\n", "JWt", "\n", "OpenXava", "\n", "Play", "\n", "Reasonable Server Faces", "\n", "Remote Application Platform", "\n", "RIFE", "\n", "Seam", "\n", "Sling", "\n", "Spring", "\n", "Stripes", "\n", "Struts", "\n", "Tapestry", "\n", "Vaadin", "\n", "Vert.x", "\n", "WebWork", "\n", "Wicket", "\n", "WaveMaker", "\n", "ZK", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "Ample SDK", "\n", "Angular", "/", "AngularJS", "\n", "Backbone.js", "\n", "Chaplin.js", "\n", "Closure", "\n", "Dojo Toolkit", "\n", "Ember.js", "\n", "Ext JS", "\n", "jQuery", "\n", "Meteor", "\n", "MooTools", "\n", "Node.js", "\n", "OpenUI5", "\n", "Prototype", "\n", "React", "\n", "Rico", "\n", "script.aculo.us", "\n", "Sencha Touch", "\n", "SproutCore", "\n", "Wakanda", "\n", "\n", "\n", "\n", "\n", "\n", "Perl", "\n", "\n", "\n", "\n", "Catalyst", "\n", "Dancer", "\n", "Mason", "\n", "Maypole", "\n", "Mojolicious", "\n", "WebGUI", "\n", "\n", "\n", "\n", "\n", "\n", "PHP", "\n", "\n", "\n", "\n", "CakePHP", "\n", "CodeIgniter", "\n", "Drupal", "\n", "Fat-Free", "\n", "FuelPHP", "\n", "Flow", "\n", "Gyroscope", "\n", "Horde", "\n", "Kohana", "\n", "Laravel", "\n", "Lithium", "\n", "Midgard", "\n", "MODX", "\n", "Nette", "\n", "Phalcon", "\n", "Pop PHP", "\n", "PRADO", "\n", "ProcessWire", "\n", "Qcodo", "\n", "Silex", "\n", "SilverStripe", "\n", "Symfony", "\n", "TYPO3", "\n", "Xaraya", "\n", "XOOPS", "\n", "Yii", "\n", "Zend Framework", "\n", "\n", "\n", "\n", "\n", "\n", "Python", "\n", "\n", "\n", "\n", "BlueBream", "\n", "CherryPy", "\n", "Django", "\n", "Flask", "\n", "Grok", "\n", "Nevow", "\n", "Pyjs", "\n", "Pylons", "\n", "Pyramid", "\n", "Quixote", "\n", "TACTIC", "\n", "Tornado", "\n", "TurboGears", "\n", "web2py", "\n", "Webware", "\n", "Zope 2", "\n", "\n", "\n", "\n", "\n", "\n", "Ruby", "\n", "\n", "\n", "\n", "Camping", "\n", "Merb", "\n", "Padrino", "\n", "Ruby on Rails", "\n", "Sinatra", "\n", "\n", "\n", "\n", "\n", "\n", "Scala", "\n", "\n", "\n", "\n", "Lift", "\n", "Play", "\n", "Scalatra", "\n", "\n", "\n", "\n", "\n", "\n", "Smalltalk", "\n", "\n", "\n", "\n", "AIDA/Web", "\n", "Seaside", "\n", "\n", "\n", "\n", "\n", "\n", "Other languages", "\n", "\n", "\n", "\n", "Vibe.d", " (", "D", ")", "\n", "Application Express", " (", "PL/SQL", ")", "\n", "Grails", " (", "Groovy", ")", "\n", "Kepler", " (", "Lua", ")", "\n", "Rocket", " (", "Rust", ")", "\n", "OpenACS", " (", "Tcl", ")", "\n", "Phoenix", " (", "Elixir", ")", "\n", "SproutCore", " (", "JavaScript", "-", "Ruby", ")", "\n", "Yaws", " (", "Erlang", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Software in the Public Interest", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Bdale Garbee", " (President)", "\n", "\n", "\n", "\n", "\n", "\n", "Projects", "\n", "\n", "\n", "\n", "0 A.D.", "\n", "Arch Linux", "\n", "Debian", "\n", "Drizzle", "\n", "Drupal", "\n", "FFmpeg", "\n", "Fluxbox", "\n", "freedesktop.org", "\n", "FreedomBox", "\n", "Gallery Project", "\n", "GNU TeXmacs", "\n", "GNUstep", "\n", "Jenkins", "\n", "LibreOffice", "\n", "MinGW", "\n", "Open and Free Technology Community", "\n", "Open Bioinformatics Foundation", "\n", "Open64", "\n", "OpenEmbedded", "\n", "OpenVAS", "\n", "OpenWrt", "\n", "PostgreSQL", "\n", "Privoxy", "\n", "SproutCore", "\n", "X.Org Foundation", "\n", "YafaRay", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Authority control", "\n", "\n", "\n", "\n", "WorldCat Identities", "\n", "VIAF", ": ", "180810498", "\n", "LCCN", ": ", "n2009053036", "\n", "GND", ": ", "7522644-3", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 15 January 2018, at 11:32."}, +{"title": "OpenBSD", "text": ["\n", "OpenBSD", "\n", "\n", "\n", "\"Free, Functional, and Secure\"", "\n", "\n", "\n", "\n", "\n", "OpenBSD 5.9 desktop", "\n", "\n", "\n", "\n", "Developer", "\n", "The OpenBSD Project", "\n", "\n", "\n", "Written in", "\n", "Primarily ", "C", ", ", "assembly", ", ", "Perl", ", ", "Makefile", ", and ", "KornShell", "\n", "\n", "\n", "OS family", "\n", "Unix-like", " (", "BSD", ")", "\n", "\n", "\n", "Working state", "\n", "Current", "\n", "\n", "\n", "Source model", "\n", "Open source", "\n", "\n", "\n", "Initial release", "\n", "1\u00a0October 1996", "; 21 years ago", "\u00a0(", "1996-10-01", ")", "\n", "\n", "\n", "Latest release", "\n", "6.2 ", "(9\u00a0October 2017", "; 3 months ago", "\u00a0(", "2017-10-09", ")", ")", " ", "[\u00b1]", "\n", "\n", "\n", "Package manager", "\n", "OpenBSD package tools", "[1]", "\n", "\n", "\n", "Platforms", "\n", "Alpha", ", ", "x86-64", ", ", "ARMv7", ", ", "PA-RISC", ", ", "IA-32", ", ", "LANDISK", ", ", "Omron LUNA-88K", ", ", "MIPS64", ", ", "PowerPC", ", and ", "SPARC 64", "[2]", "\n", "\n", "\n", "Kernel", " type", "\n", "Monolithic", "\n", "\n", "\n", "Userland", "\n", "BSD", "\n", "\n", "\n", "Default ", "user interface", "\n", "Modified ", "pdksh", ", ", "FVWM", " ", "X11", "\n", "\n", "\n", "License", "\n", "BSD", ", ", "ISC", ", ATU,", "[3]", " and other custom licenses", "[4]", "\n", "\n", "\n", "Official website", "\n", "openbsd", ".org", "\n", "\n", "\n", "OpenBSD", " is a ", "free and open-source", " ", "Unix-like", " computer ", "operating system", " descended from ", "Berkeley Software Distribution", " (BSD), a ", "Research Unix", " derivative developed at the ", "University of California, Berkeley", ". In late 1995, ", "Theo de Raadt", " ", "forked", " it from ", "NetBSD", ". Besides the operating system as a whole, the project maintains portable versions of many subsystems, most notably ", "OpenSSH", ", which are available as packages in other operating systems.", "\n", "The project is known for its developers' insistence on ", "open-source", " code, good documentation, code correctness, and security. It has strict policies on ", "licensing", ", preferring the ", "ISC license", " and other variants of the ", "Simplified BSD License", ". Many of its ", "security features", " are optional or absent in other operating systems. Its developers frequently ", "audit", " the ", "source tree", " for software bugs and security holes.", "\n", "De Raadt coordinates the project from his home in ", "Calgary", ", Alberta, Canada. Its logo and mascot is a ", "pufferfish", " named Puffy.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History and popularity", "\n", "2", " ", "Uses", "\n", "\n", "2.1", " ", "Security", "\n", "2.2", " ", "Desktop", "\n", "2.3", " ", "Server", "\n", "\n", "\n", "3", " ", "Component projects", "\n", "4", " ", "Third-party components in the base system", "\n", "5", " ", "Development and release process", "\n", "6", " ", "Open-source and open documentation", "\n", "7", " ", "Licensing", "\n", "8", " ", "Funding", "\n", "9", " ", "Security and code auditing", "\n", "\n", "9.1", " ", "Alleged FBI backdoor investigated", "\n", "9.2", " ", "Slogan", "\n", "\n", "\n", "10", " ", "Distribution and marketing", "\n", "11", " ", "See also", "\n", "12", " ", "Notes", "\n", "13", " ", "References", "\n", "14", " ", "External links", "\n", "\n", "\n", "\n", "History and popularity", "[", "edit", "]", "\n", "See also: ", "Timeline of OpenBSD", "\n", "\n", "\n", "\n", "\n", "Bar chart", " showing the proportion of users of each ", "BSD", " variant from a 2005 BSD usage survey.", "[5]", "[n 1]", "\n", "\n", "\n", "In December 1994, NetBSD co-founder ", "Theo de Raadt", " was asked to resign from his position as a senior developer and member of the NetBSD core team.", "[6]", " The reason for this is not wholly clear, although there are claims that it was due to personality clashes within the NetBSD project and on its mailing lists.", "[6]", "\n", "In October 1995, de Raadt founded OpenBSD, a new project forked from NetBSD 1.0. The initial release, OpenBSD 1.2, was made in July 1996, followed by OpenBSD 2.0 in October of the same year.", "[7]", " Since then, the project has followed a schedule of a release every six months, each of which is supported for one year.", "\n", "On 25 July 2007, OpenBSD developer Bob Beck announced the formation of the ", "OpenBSD Foundation", ", a Canadian non-profit organization formed to \"act as a single point of contact for persons and organizations requiring a legal entity to deal with when they wish to support OpenBSD.\"", "[8]", "\n", "Just how widely OpenBSD is used is hard to determine as its developers do not publish or collect usage statistics. In September 2005, the BSD Certification Group performed a usage survey which revealed that 32.8% of BSD users (1420 of 4330 respondents) were using OpenBSD,", "[5]", " placing it second out of the four major BSD variants, behind ", "FreeBSD", " with 77% and ahead of NetBSD with 16.3%.", "[n 1]", "\n", "Uses", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nOpenBSD startup in console mode", "\n", "\n", "\n", "\n", "\n", "\n", "\nOpenBSD console login and welcome message", "\n", "\n", "\n", "\n", "\n", "\n", "\nInteraction with ", "pdksh", " in OpenBSD", "\n", "\n", "\n", "Security", "[", "edit", "]", "\n", "OpenBSD's security enhancements", ", built-in cryptography, and the pf ", "packet filter", " suit it for use in the security industry, such as on firewalls,", "[9]", " ", "intrusion-detection systems", ", and ", "VPN", " ", "gateways", ".", "\n", "Proprietary", " systems from several manufacturers are based on OpenBSD, including devices from ", "Armorlogic", " (Profense web application firewall), Calyptix Security,", "[10]", " GeNUA,", "[11]", " RTMX,", "[12]", " and .vantronix.", "[13]", " Later versions of ", "Microsoft", "'s ", "Services for UNIX", ", an extension to the ", "Windows", " operating system providing ", "Unix", "-like functionality, use large amounts of OpenBSD code.", "[14]", "\n", "Desktop", "[", "edit", "]", "\n", "OpenBSD ships with the ", "X Window System", "[15]", " and is suitable for use on the desktop.", "[16]", "[17]", ":", "xl", " There are a huge number of packages totalling 7814", "[18]", " in number. Packages are available for popular applications, including desktop environments such as ", "GNOME", ", ", "KDE", ", and ", "Xfce", ", and web browsers such as ", "Firefox", " and ", "Chromium", ".", "[19]", " The project also includes three window managers in the main distribution: ", "cwm", ", ", "FVWM", ", and ", "twm", ".", "[20]", "\n", "Server", "[", "edit", "]", "\n", "OpenBSD features a full server suite and can be easily configured as a ", "mail server", ", ", "web server", ", ", "FTP server", ", ", "DNS server", ", ", "router", ", ", "firewall", ", ", "NFS", " ", "file server", ", or any combination of these.", "\n", "Component projects", "[", "edit", "]", "\n", "Despite the small team size and relatively low usage of OpenBSD, the project maintains portable versions of many parts of the base system, including:", "\n", "\n", "LibreSSL", ", a free implementation of the ", "Secure Sockets Layer", " (SSL) and ", "Transport Layer Security", " (TLS) protocols, forked from the ", "OpenSSL", " 1.0.1g branch", "\n", "OpenBGPD", ", a free implementation of the ", "Border Gateway Protocol", " 4 (BGP-4)", "\n", "OpenOSPFD", ", a free implementation of the ", "Open Shortest Path First", " (OSPF) routing protocol", "\n", "OpenNTPD", ", a simple alternative to ntp.org's ", "Network Time Protocol", " (NTP) daemon", "\n", "OpenSMTPD", ", a free ", "Simple Mail Transfer Protocol", " (SMTP) daemon with ", "IPv4", "/", "IPv6", ", ", "PAM", ", ", "Maildir", " and virtual domains support", "\n", "httpd, an ", "HTTP", " server first included in the 5.6 release", "\n", "OpenSSH", ", a free implementation of the ", "Secure Shell", " (SSH) protocol", "\n", "OpenIKED", ", a free implementation of the ", "Internet Key Exchange", " (IKEv2) protocol", "\n", "Common Address Redundancy Protocol", " (CARP), a free alternative to ", "Cisco", "'s patented ", "HSRP", "/", "VRRP", " server redundancy protocols", "\n", "PF", ", an ", "IPv4", "/", "IPv6", " stateful firewall with ", "NAT", ", ", "PAT", ", ", "QoS", " and traffic normalization support", "\n", "pfsync", ", a firewall states synchronization protocol for ", "PF firewall", " with ", "High Availability", " support using ", "CARP", "\n", "spamd", ", a spam filter with ", "greylisting", " support designed to inter-operate with the ", "PF firewall", "\n", "sndio", ", a compact audio and MIDI framework", "\n", "Xenocara", ", a customized ", "X.Org", " build infrastructure", "\n", "cwm", ", a stacking window manager", "\n", "tmux", " virtual console multiplexer", "\n", "\n", "Some subsystems have been integrated into the base system of several other BSD projects,", "[21]", "[22]", "[23]", " while many are available as packages for use in other Unix-like systems.", "[24]", "[25]", "[26]", "\n", "Third-party components in the base system", "[", "edit", "]", "\n", "OpenBSD includes a number of ", "third-party software components", ", many with OpenBSD-specific patches;", "[19]", " examples include the ", "X.Org Server", ", ", "GNU Compiler Collection", "[27]", " (which acts as the default ", "compiler", "),", "[n 2]", " ", "Perl", ", ", "NSD", ", ", "Unbound", ", ", "Ncurses", ", ", "GNU Binutils", ", ", "GNU Debugger", " and ", "Awk", ".", "\n", "OpenBSD used to include a fork of ", "Apache 1.3", ", which was later replaced by ", "Nginx", ". In the 5.6 release, Nginx was replaced with ", "httpd", ", an ", "HTTP server", " with ", "FastCGI", " and ", "Transport Layer Security", " support.", "[28]", " As of May 2016", "[update]", ", Apache and Nginx are still available as ports.", "[29]", "[30]", "\n", "Development and release process", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nOpenBSD developers at c2k1 ", "hackathon", " at ", "MIT", "\n", "\n", "\n", "Development is continuous, and team management is open and tiered. Anyone with appropriate skills may contribute, with commit rights being awarded on merit and de Raadt acting as coordinator.", "[17]", ":", "xxxv", " Two official releases are made per year, with the version number incremented by 0.1,", "[31]", " and these are each supported for twelve months (two release cycles).", "[32]", " Snapshot releases are also available at frequent intervals.", "\n", "Maintenance patches for supported releases may be applied manually or by updating the system against the patch branch of the ", "CVS", " repository for that release.", "[33]", " Alternatively, a system administrator may opt to upgrade using a snapshot release and then regularly update the system against the ", "-current", " branch of the CVS repository, in order to gain pre-release access to recently added features.", "\n", "The standard OpenBSD kernel, as maintained by the project, is strongly recommended for end users; this is as opposed to kernels customized by the user.", "[34]", "\n", "Packages outside the base system are maintained by CVS through a ", "ports tree", " and are the responsibility of the individual maintainers, known as porters. As well as keeping the current branch up to date, porters are expected to apply appropriate bug-fixes and maintenance fixes to branches of their package for OpenBSD's supported releases. Ports are generally not subject to the same continuous auditing as the base system due to lack of manpower.", "\n", "Binary packages are built centrally from the ports tree for each architecture. This process is applied for the current version, for each supported release, and for each snapshot. Administrators are recommended to use the package mechanism rather than build the package from the ports tree, unless they need to perform their own source changes.", "\n", "OpenBSD's developers regularly meet at special events called ", "hackathons", ",", "[35]", " where they \"sit down and code\", emphasizing productivity.", "[36]", "\n", "Every new release includes a song.", "[37]", "\n", "The ", "OpenBSD Foundation", " was accepted as a mentoring organization for the 2014 Google Summer of Code.", "[38]", "[39]", "\n", "Open-source and open documentation", "[", "edit", "]", "\n", "The OpenBSD Project is noted for its high-quality user documentation, considered top among the BSD family operating systems, all of which have excellent documentation.", "[40]", "[41]", " When OpenBSD was created, de Raadt decided that the source should be easily available for anyone to read at any time, so, with the assistance of Chuck Cranor,", "[42]", " he set up the first public, anonymous ", "CVS", " server. At the time, the tradition was for only a small team of developers to have access to a project's source repository.", "[43]", " Cranor and de Raadt concluded that this practice \"runs counter to the open source philosophy\" and is inconvenient to contributors. De Raadt's decision allowed \"users to take a more active role\", and signaled the project's belief in open and public access to source code.", "[43]", "\n", "OpenBSD does not include ", "closed source", " binary drivers in the source tree, nor do they include code requiring the signing of ", "non-disclosure agreements", ".", "[44]", "\n", "Since OpenBSD is based in Canada, no United States export restrictions on cryptography apply, allowing the distribution to make full use of modern algorithms for encryption. For example, the swap space is divided into small sections and each section is encrypted with its own key, ensuring that sensitive data does not leak into an insecure part of the system.", "[9]", "\n", "OpenBSD randomizes various behaviors of applications, making them less predictable and thus more difficult to attack. For example, PIDs are created and associated randomly to processes; the ", "bind", " ", "system call", " uses random ", "port numbers", "; files are created with random ", "inode", " numbers; and IP datagrams have random identifiers.", "[45]", " This approach also helps expose bugs in the kernel and in user space programs.", "\n", "The OpenBSD policy on openness extends to hardware documentation: in the slides for a December 2006 presentation, de Raadt explained that without it \"developers often make mistakes writing drivers\", and pointed out that \"the [oh my god, I got it to work] rush is harder to achieve, and some developers just give up.\"", "[46]", " He went on to say that vendor-supplied binary drivers are unacceptable for inclusion in OpenBSD, that they have \"no trust of vendor binaries running in our kernel\" and that there is \"no way to fix [them] ... when they break.\"", "[46]", "\n", "Licensing", "[", "edit", "]", "\n", "See also: ", "BSD and GPL licensing", "\n", "A goal of the OpenBSD Project is to \"maintain the spirit of the original Berkeley Unix ", "copyrights", "\", which permitted a \"relatively un-encumbered Unix source distribution.\"", "[47]", " To this end, the ", "Internet Systems Consortium (ISC) license", " is preferred for new code, but the ", "MIT", " and BSD licenses are also accepted. The widely used ", "GNU General Public License", " is considered overly restrictive compared to these.", "[48]", "\n", "In June 2001, triggered by concerns over Darren Reed's modification of IPFilter's license wording, a systematic license audit of the OpenBSD ports and source trees was undertaken.", "[49]", " Code in more than a hundred files throughout the system was found to be unlicensed, ambiguously licensed or in use against the terms of the license. To ensure that all licenses were properly adhered to, an attempt was made to contact all the relevant copyright holders: some pieces of code were removed, many were replaced, and others, such as the ", "multicast", " ", "routing", " tools ", "mrinfo", " and ", "map-mbone", ", were ", "relicensed", " so that OpenBSD could continue to use them.", "[50]", "[51]", " Also removed during this audit was all software produced by ", "Daniel J. Bernstein", ". At the time, Bernstein requested that all modified versions of his code be approved by him prior to redistribution, a requirement to which OpenBSD developers were unwilling to devote time or effort.", "[52]", "[53]", "[54]", "\n", "Because of licensing concerns, the OpenBSD team has re-implemented software from scratch or adopted suitable existing software. Of particular note is the development, after license restrictions were imposed on ", "IPFilter", ", of the ", "pf", " ", "packet filter", ", which first appeared in OpenBSD 3.0", "[55]", " and is now available in other major BSDs.", "[56]", " OpenBSD developers have also replaced GPL licensed tools (such as ", "diff", ", ", "grep", " and ", "pkg-config", ") with BSD licensed equivalents.", "[", "citation needed", "]", "\n", "Funding", "[", "edit", "]", "\n", "Although the operating system and its portable components are used in commercial products, de Raadt says that little of the funding for the project comes from the industry: \"traditionally all our funding has come from user donations and users buying our CDs (our other products don't really make us much money). Obviously, that has not been a lot of money.\"", "[31]", "\n", "For a two-year period in the early 2000s, the project received ", "DARPA", " funding, which \"paid the salaries of 5 people to work completely full-time, bought about $30k in hardware, and paid for 3 hackathons\", from the ", "POSSE project", ".", "[31]", "\n", "In 2006, de Raadt expressed concern about the asymmetry of funding: \"I think that contributions should have come first from the vendors, secondly from the corporate users, and thirdly from individual users. But the response has been almost entirely the opposite, with almost a 15 to 1 dollar ratio in favor of the little people. Thanks a lot, little people!\"", "[31]", " However, since 2014 several large contributions to the ", "OpenBSD Foundation", " have come from corporations such as Microsoft,", "[57]", " Facebook, and Google as well as the ", "Core Infrastructure Initiative", ".", "[58]", "\n", "In 2006, the OpenBSD Project experienced financial danger.", "[59]", " The ", "Mozilla Foundation", "[60]", " and ", "GoDaddy", "[61]", " are among the organizations that helped the OpenBSD Project to overcome its financial troubles.", "\n", "On 14 January 2014, Bob Beck issued a request for funding to cover electrical costs. If sustainable funding was not found, Beck suggested the OpenBSD Project would shut down.", "[62]", " The project soon received a US$20,000 donation from Mircea Popescu, the Romanian creator of the MPEx bitcoin stock exchange, paid in ", "bitcoins", ".", "[63]", " The project raised US$150,000", "[64]", " in response to the appeal, enabling it to pay its bills and securing its short-term future.", "[63]", "\n", "Security and code auditing", "[", "edit", "]", "\n", "For more details on this topic, see ", "OpenBSD security features", ".", "\n", "Shortly after OpenBSD's creation, de Raadt was contacted by a local security software company named Secure Networks (SNI).", "[65]", "[66]", " They were developing a \"network security auditing tool\" called Ballista,", "[n 3]", " which was intended to find and attempt to ", "exploit", " possible software security flaws. This coincided with de Raadt's own interest in security, so for a time the two cooperated, a relationship that was of particular usefulness leading up to the release of OpenBSD 2.3", "[67]", " and helped to define security as the focal point of the project.", "[68]", "\n", "OpenBSD includes features designed to improve security, such as:", "\n", "\n", "secure alternatives to ", "POSIX", " functions in the C standard library, such as ", "strlcat", " for ", "strcat", " and ", "strlcpy", " for ", "strcpy", "[69]", "\n", "toolchain alterations, including a ", "static bounds checker", "[27]", "\n", "memory protection techniques to guard against invalid accesses, such as ", "ProPolice", " and the ", "W^X", " ", "page", " protection feature", "\n", "strong ", "cryptography", " and ", "randomization", "[70]", "\n", "\n", "To reduce the risk of a vulnerability or misconfiguration allowing ", "privilege escalation", ", many programs have been written or adapted to make use of ", "privilege separation", ", ", "privilege revocation", " and ", "chrooting", ". Privilege separation is a technique, pioneered on OpenBSD and inspired by the ", "principle of least privilege", ", where a program is split into two or more parts, one of which performs privileged operations and the other\u2014almost always the bulk of the code\u2014runs without privilege.", "[71]", " Privilege revocation is similar and involves a program performing any necessary operations with the privileges it starts with then dropping them. Chrooting involves restricting an application to one section of the ", "file system", ", prohibiting it from accessing areas that contain private or system files. Developers have applied these features to OpenBSD versions of many common applications, such as ", "tcpdump", ", ", "file", ", ", "tmux", ", ", "smtpd", ", and ", "syslogd", ".", "[72]", "\n", "OpenBSD developers were instrumental in the creation and development of ", "OpenSSH", ", which is developed in the OpenBSD CVS repositories. OpenSSH is based on the original ", "SSH", ".", "[73]", " It first appeared in OpenBSD 2.6 and is now by far the most popular SSH client and server, available on many operating systems.", "[74]", "\n", "The project has a policy of continually auditing source code for problems, work that developer Marc Espie has described as \"never finished ... more a question of process than of a specific bug being hunted.\" He went on to list several typical steps once a bug is found, including examining the entire source tree for the same and similar issues, \"try[ing] to find out whether the documentation ought to be amended\", and investigating whether \"it's possible to augment the ", "compiler", " to warn against this specific problem.\"", "[75]", "\n", "The default install is quite minimal, which the project states is to ensure novice users \"do not need to become security experts overnight\",", "[76]", " which fits with open-source and code auditing practices argued to be important elements of a security system.", "[77]", "\n", "Alleged FBI backdoor investigated", "[", "edit", "]", "\n", "On 11 December 2010, Gregory Perry, a former technical consultant for the ", "Federal Bureau of Investigation", " (FBI), emailed de Raadt alleging that the FBI had paid some OpenBSD ex-developers 10 years previously to insert backdoors into the ", "OpenBSD Cryptographic Framework", ". De Raadt made the email public on 14 December by forwarding it to the openbsd-tech mailing list and suggested an audit of the ", "IPsec", " codebase.", "[78]", "[79]", " De Raadt's response was skeptical of the report and he invited all developers to independently review the relevant code. In the weeks that followed, bugs were fixed but no evidence of backdoors were found.", "[80]", " De Raadt stated \"I believe that NetSec was probably contracted to write backdoors as alleged. If those were written, I don't believe they made it into our tree. They might have been deployed as their own product.\"", "[81]", "\n", "Slogan", "[", "edit", "]", "\n", "The OpenBSD website features a prominent reference to the security record of the default installation. Until June 2002, the wording read \"Five years without a remote hole in the default install!\"", "[82]", " An ", "OpenSSH", " bug was then discovered that made it possible for a remote attacker to gain ", "root privileges", " in OpenBSD and in any of the other systems running OpenSSH at the time. It was quickly fixed, as is normal with known security holes.", "[83]", "[84]", " The slogan was changed to \"One remote hole in the default install, in nearly 6 years!\" In 2007, a network-related remote vulnerability was found, which was also quickly fixed.", "[85]", " The quote was subsequently altered to \"Only two remote holes in the default install, in a heck of a long time!\" As of May 2017", "[update]", ", the wording remains.", "\n", "Distribution and marketing", "[", "edit", "]", "\n", "The name OpenBSD refers to the fact that OpenBSD's source code is freely available on the Internet. It also refers to the wide range of hardware platforms the operating system supports.", "[86]", "\n", "OpenBSD is freely available in various ways: the source can be retrieved by anonymous ", "CVS", ",", "[87]", " and binary releases and development snapshots can be downloaded by FTP, HTTP, and rsync.", "[88]", " Prepackaged CD-ROM sets through version 6.0 can be ordered online for a small fee, complete with an assortment of stickers and a copy of the release's theme song. These, with their artwork and other bonuses, have been one of the project's few sources of income, funding hardware, Internet service, and other expenses.", "[89]", " Beginning with version 6.1, CD-ROM sets are no longer released.", "\n", "In common with other operating systems, OpenBSD provides a ", "package management system", " for easy installation and management of programs which are not part of the base operating system.", "[90]", " Packages are binary files which are extracted, managed and removed using the package tools. On OpenBSD, the source of packages is the ports system, a collection of ", "Makefiles", " and other infrastructure required to create packages. In OpenBSD, the ports and base operating system are developed and released together for each version: this means that the ports or packages released with, for example, 4.6 are not suitable for use with 4.5 and vice versa.", "[90]", "\n", "\n", "\n", "\n", "\nAnimated OpenBSD mascot ", "Puffy", ", 3D-rendered with ", "Blender3D", "\n", "\n", "\n", "OpenBSD at first used the ", "BSD daemon", " mascot. A specialized version of the daemon, the haloed daemon was drawn by Erick Green. Green was asked by de Raadt to create the logo for the 2.3 and 2.4 versions of OpenBSD. At first, it was planned to create a full daemon, including head and body, but Green was only able to complete the head part for OpenBSD 2.3. The body as well as pitchfork and tail was completed for OpenBSD 2.4.", "[91]", " Subsequent releases saw variations, such as Cop daemon by Ty Semaka,", "[92]", " but eventually settling on Puffy,", "[93]", " described as a ", "pufferfish", ".", "[n 4]", " Since then Puffy has appeared on OpenBSD promotional material and featured in release songs and artwork. The promotional material of early OpenBSD releases did not have a cohesive theme or design, but later the CD-ROMs, release songs, posters and tee-shirts for each release have been produced with a single style and theme, sometimes contributed to by Ty Semaka of the ", "Plaid Tongued Devils", ".", "[37]", " These have become a part of OpenBSD ", "advocacy", ", with each release expounding a moral or political point important to the project, often through parody.", "[94]", " Past themes have included: in OpenBSD 3.8, the ", "Hackers of the Lost RAID", ", a parody of ", "Indiana Jones", " linked to the new RAID tools featured as part of the release; ", "The Wizard of OS", ", making its debut in OpenBSD 3.7, based on the work of ", "Pink Floyd", " and a parody of ", "The Wizard of Oz", " related to the project's recent work on wireless card drivers; and OpenBSD 3.3's ", "Puff the Barbarian", ", including an 80s rock-style song and parody of ", "Conan the Barbarian", ", alluding to open documentation.", "[37]", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Free software portal", "\n", "Cryptography portal", "\n", "Computer science portal", "\n", "\n", "\n", "\n", "\n", "Category:Computing mascots", "\n", "Comparison of BSD operating systems", "\n", "Comparison of open-source operating systems", "\n", "KAME project", "\u00a0\u2013 responsible for OpenBSD's IPv6 support", "\n", "List of computing mascots", "\n", "OpenBSD Journal", "\u00a0\u2013 online newspaper dedicated to OpenBSD news", "\n", "OpenBSD version history", "\n", "Security-focused operating system", "\n", "\n", "\n", "Notes", "[", "edit", "]", "\n", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "Multiple selections were permitted as a user may use multiple BSD variants side by side.", "\n", "^", " ", "As of OpenBSD 6.0", "[update]", ", either 4.2.1 or 3.3.6 is shipped, depending on the platform.", "[27]", "\n", "^", " ", "Later renamed to Cybercop Scanner after SNI was purchased by ", "Network Associates", ".", "\n", "^", " ", "Pufferfish do not, in fact, possess spikes; images of Puffy are closer to a similar species, the ", "porcupinefish", ".", "\n", "\n", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"Package Management\"", ". ", "OpenBSD Frequently Asked Questions", ". Retrieved ", "1 June", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Platforms\"", ". ", "OpenBSD", ". Retrieved ", "3 September", " 2016", ".", "\u00a0", "\n", "^", " ", "\"src/sys/dev/microcode/atmel/atu-license \u2013 view \u2013 1.3\"", ". ", "cvsweb.openbsd.org", ". Retrieved ", "20 May", " 2016", ". ", "Redistribution [...] is permitted provided that the following conditions are met: [...] Firmware is redistributed in object code only.", "\u00a0", "\n", "^", " ", "\"src/sys/dev/microcode/tigon/tigon-license \u2013 view \u2013 1.5\"", ". ", "cvsweb.openbsd.org", ". Retrieved ", "20 May", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "BSD Usage Survey", " ", "(PDF)", " (Report). The BSD Certification Group. 31 October 2005. p.\u00a09", ". Retrieved ", "16 September", " 2012", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Glass, Adam (23 December 1994). ", "\"Theo De Raadt\"", ". ", "netbsd-users", " (Mailing list).", "\u00a0", "\n", "^", " ", "de Raadt, Theo", " (18 October 1996). ", "\"The OpenBSD 2.0 release\"", ". ", "openbsd-announce", " (Mailing list).", "\u00a0", "\n", "^", " ", "\"Announcing \u2013 The OpenBSD Foundation\"", ". ", "OpenBSD Journal", ". 26 July 2007.", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "McIntire, Tim (8 August 2006). ", "\"Take a closer look at OpenBSD\"", ". ", "Developerworks", ". ", "IBM", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"AccessEnforcer Model AE800\"", ". ", "Calyptix Security", ". Retrieved ", "28 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"High Resistance Firewall genugate\"", ". ", "GeNUA", ". Retrieved ", "29 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"RTMX O/S IEEE Real Time POSIX Operating Systems\"", ". ", "RTMX", ". Retrieved ", "13 December", " 2011", ". ", "RTMX O/S is a product extension to OpenBSD Unix-like operating system with emphasis on embedded, dedicated applications.", "\u00a0", "\n", "^", " ", "\".vantronix secure system\"", ". ", "Compumatica secure networks", ". Retrieved ", "13 December", " 2011", ". ", "The Next Generation Firewall is not a standalone device, it is a Router for operation in security critical environments with high requirements for availability, comprehensive support as well as reliable and trusted systems powered by OpenBSD.", "\u00a0", "\n", "^", " ", "Dohnert, Roberto J. (21 January 2004). ", "\"Review of Windows Services for UNIX 3.5\"", ". ", "OSNews", ". David Adams.", "\u00a0", "\n", "^", " ", "\"About Xenocara\"", ". ", "Xenocara", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Tzanidakis, Manolis (21 April 2006). ", "\"Using OpenBSD on the desktop\"", ". ", "Linux.com", ". Retrieved ", "9 March", " 2012", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Lucas, Michael W. (April 2013). ", "Absolute OpenBSD: Unix for the Practical Paranoid", " (2nd ed.). San Francisco, California: ", "No Starch Press", ". ", "ISBN", "\u00a0", "978-1-59327-476-4", ".", "\u00a0", "\n", "^", " ", "http://openports.se/statistics.php", ".", "\u00a0", " ", "Missing or empty ", "|title=", " (", "help", ");", " ", "External link in ", "|website=", " (", "help", ");", " ", "Missing or empty ", "|url=", " (", "help", ")", "\n", "^ ", "a", " ", "b", " ", "\"OpenBSD 6.0\"", ". ", "OpenBSD", ". Retrieved ", "1 November", " 2016", ".", "\u00a0", "\n", "^", " ", "\"The X Windows System\"", ". ", "OpenBSD Frequently Asked Questions", ". Retrieved ", "22 May", " 2016", ". ", "OpenBSD ships with the cwm(1), fvwm(1) and twm(1) window managers, [...]", "\u00a0", "\n", "^", " ", "\"Contents of /stable/10/crypto/openssh/README\"", ". ", "svnweb.freebsd.org", ". Retrieved ", "19 May", " 2016", ". ", "This is the port of OpenBSD's excellent OpenSSH to Linux and other Unices.", "\u00a0", "\n", "^", " ", "\"src/crypto/external/bsd/openssh/dist/README \u2013 view \u2013 1.4\"", ". ", "NetBSD CVS Repositories", ". Retrieved ", "19 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"dragonfly.git/blob \u2013 crypto/openssh/README\"", ". ", "gitweb.dragonflybsd.org", ". Retrieved ", "19 May", " 2016", ". ", "This is the port of OpenBSD's excellent OpenSSH to Linux and other Unices.", "\u00a0", "\n", "^", " ", "\"Arch Linux \u2013 openssh 7.2p2-1 (x86_64)\"", ". ", "Arch Linux", ". Retrieved ", "17 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"openssh\"", ". ", "OpenSUSE", ". Retrieved ", "17 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Debian \u2013 Details of package openssh-client in jessie\"", ". ", "Debian", ". Retrieved ", "17 May", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "\"gcc-local \u2013 local modifications to gcc\"", ". ", "OpenBSD manual pages", ". Retrieved ", "1 November", " 2016", ".", "\u00a0", "\n", "^", " ", "\"httpd \u2013 HTTP daemon\"", ". ", "OpenBSD manual pages", ". Retrieved ", "1 November", " 2016", ".", "\u00a0", "\n", "^", " ", "\"OpenBSD ports \u2234 www/apache-httpd,-main\"", ". ", "ports.su", ". Retrieved ", "18 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"OpenBSD ports \u2234 www/nginx\"", ". ", "ports.su", ". Retrieved ", "18 May", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Andrews, Jeremy (2 May 2006). ", "\"Interview: Theo de Raadt\"", ". ", "KernelTrap", ". Archived from ", "the original", " on 24 April 2013.", "\u00a0", "\n", "^", " ", "\"OpenBSD's flavors\"", ". ", "OpenBSD Frequently Asked Questions", ". Retrieved ", "22 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Applying patches in OpenBSD\"", ". ", "OpenBSD Frequently Asked Questions", ". Retrieved ", "15 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Migrating to OpenBSD\"", ". ", "OpenBSD Frequently Asked Questions", ". Retrieved ", "4 January", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Hackathons\"", ". ", "OpenBSD", ". Retrieved ", "18 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Interview: Theo de Raadt of OpenBSD\"", ". ", "NewsForge", ". 28 March 2006", ". Retrieved ", "31 March", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "\"Release Songs\"", ". ", "OpenBSD", ". Retrieved ", "22 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Beck, Bob (25 February 2014). ", "\"Google Summer of Code 2014\"", ". ", "openbsd-misc", " (Mailing list)", ". Retrieved ", "4 March", " 2014", ".", "\u00a0", "\n", "^", " ", "\"GSOC 2014 with the OpenBSD Foundation\"", ". ", "Google Summer of Code 2014", ". Retrieved ", "4 March", " 2014", ".", "\u00a0", "\n", "^", " ", "Chisnall, David (20 January 2006). ", "\"BSD: The Other Free UNIX Family\"", ". ", "InformIT", ". ", "Archived", " from the original on 14 March 2014.", "\u00a0", "\n", "^", " ", "Smith, Jesse (18 November 2013). ", "\"OpenBSD 5.4: Puffy on the Desktop\"", ". ", "Archived", " from the original on 30 April 2014.", "\u00a0", "\n", "^", " ", "Cranor, Chuck D. ", "\"Chuck Cranor's Home Page\"", ". Retrieved ", "13 December", " 2011", ". ", "I also hosted and helped create the first Anonymous CVS server on the Internet (the original ", "anoncvs", ".openbsd", ".org", " [...]", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Cranor, Chuck D.; ", "de Raadt, Theo", " (6 June 1999). ", "Opening the Source Repository with Anonymous CVS", ". ", "USENIX", " Annual Technical Conference. Monterey, California", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"Project Goals\"", ". ", "OpenBSD", ". Retrieved ", "18 May", " 2016", ". ", "Integrate good code from any source with acceptable licenses. [...], NDAs are never acceptable.", "\u00a0", "\n", "^", " ", "de Raadt, Theo", "; Hallqvist, Niklas; Grabowski, Artur; Keromytis, Angelos D.; ", "Provos, Niels", " (6 June 1999). ", "\"Randomness Used Inside the Kernel\"", ". ", "Cryptography in OpenBSD: An Overview", ". ", "USENIX", " Annual Technical Conference. Monterey, California", ". Retrieved ", "1 February", " 2014", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "de Raadt, Theo", " (5 December 2006). ", "\"Presentation at OpenCON\"", ". ", "OpenBSD", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"Copyright Policy\"", ". ", "OpenBSD", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Matzan, Jem (15 June 2005). ", "\"BSD cognoscenti on Linux\"", ". ", "NewsForge", ". ", "Linux.com", ". Retrieved ", "28 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Gasperson, Tina (6 June 2001). ", "\"OpenBSD and ipfilter still fighting over license disagreement\"", ". ", "Linux.com", ". Archived from ", "the original", " on 26 June 2008.", "\u00a0", "\n", "^", " ", "\"src/usr.sbin/mrinfo/mrinfo.c \u2013 view \u2013 1.7\"", ". ", "cvsweb.openbsd.org", ". 31 July 2001", ". Retrieved ", "24 May", " 2016", ". ", "New license from Xerox! This code is now FREE! Took a while and a lot of mails, but it is worth it.", "\u00a0", "\n", "^", " ", "\"src/usr.sbin/map-mbone/mapper.c \u2013 view \u2013 1.5\"", ". ", "cvsweb.openbsd.org", ". 31 July 2001", ". Retrieved ", "24 May", " 2016", ". ", "New license from Xerox! This code is now FREE! Took a while and a lot of mails, but it is worth it.", "\u00a0", "\n", "^", " ", "de Raadt, Theo", " (24 August 2001). ", "\"Re: Why were all DJB's ports removed? No more qmail?\"", ". ", "openbsd-misc", " (Mailing list). Archived from ", "the original", " on 19 April 2016.", "\u00a0", "\n", "^", " ", "Bernstein, Daniel J.", " (27 August 2001). ", "\"Re: Why were all DJB's ports removed? No more qmail?\"", ". ", "openbsd-misc", " (Mailing list). Archived from ", "the original", " on 4 February 2012.", "\u00a0", "\n", "^", " ", "Espie, Marc (28 August 2001). ", "\"Re: Why were all DJB's ports removed? No more qmail?\"", ". ", "openbsd-misc", " (Mailing list). Archived from ", "the original", " on 19 April 2016.", "\u00a0", "\n", "^", " ", "Hartmeier, Daniel (10 June 2002). ", "Design and Performance of the OpenBSD Stateful Packet Filter (pf)", ". ", "USENIX", " Annual Technical Conference. Monterey, California", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "The OpenBSD PF Packet Filter Book: PF for NetBSD, FreeBSD, DragonFly and OpenBSD", ". Reed Media Services. ", "ISBN", "\u00a0", "0-9790342-0-5", ". Retrieved ", "19 May", " 2016", ".", "\u00a0", "\n", "^", " ", "McAllister, Neil (8 July 2015). ", "\"Microsoft rains cash on OpenBSD Foundation, becomes top 2015 donor\"", ". ", "The Register", ". Retrieved ", "27 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Contributors\"", ". ", "OpenBSD Foundation", ". Retrieved ", "27 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"OpenBSD Project in Financial Danger\"", ". ", "Slashdot", ". 21 March 2006", ". Retrieved ", "12 December", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Mozilla Foundation Donates $10K to OpenSSH\"", ". ", "Slashdot", ". 4 April 2006", ". Retrieved ", "12 December", " 2014", ".", "\u00a0", "\n", "^", " ", "\"GoDaddy.com Donates $10K to Open Source Development Project\"", ". ", "The Hosting News", ". 19 April 2006. Archived from ", "the original", " on 11 November 2006.", "\u00a0", "\n", "^", " ", "Beck, Bob (14 January 2014). ", "\"Request for Funding our Electricity\"", ". ", "openbsd-misc", " (Mailing list)", ". Retrieved ", "17 May", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Bright, Peter (20 January 2014). ", "\"OpenBSD rescued from unpowered oblivion by $20K bitcoin donation\"", ". ", "Ars Technica", ". Retrieved ", "20 January", " 2014", ".", "\u00a0", "\n", "^", " ", "\"The OpenBSD Foundation 2014 Fundraising Campaign\"", ". ", "OpenBSD Foundation", ". Retrieved ", "24 May", " 2014", ".", "\u00a0", "\n", "^", " ", "Varghese, Sam (8 October 2004). ", "\"Staying on the cutting edge\"", ". ", "The Age", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Laird, Cameron; Staplin, George Peter (17 July 2003). ", "\"The Essence of OpenBSD\"", ". ", "ONLamp", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "de Raadt, Theo", " (19 December 2005). ", "\"2.3 release announcement\"", ". ", "openbsd-misc", " (Mailing list). ", "Without [SNI's] support at the right time, this release probably would not have happened.", "\u00a0", "\n", "^", " ", "Wayner, Peter (13 July 2000). ", "\"18.3 Flames, Fights, and the Birth of OpenBSD\"", ". ", "Free For All: How Linux and the Free Software Movement Undercut the High Tech Titans", " (1st ed.). ", "HarperBusiness", ". ", "ISBN", "\u00a0", "978-0-06-662050-3", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Miller, Todd C.; ", "de Raadt, Theo", " (6 June 1999). ", "strlcpy and strlcat\u00a0- Consistent, Safe, String Copy and Concatenation", ". ", "USENIX", " Annual Technical Conference. Monterey, California", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "de Raadt, Theo", "; Hallqvist, Niklas; Grabowski, Artur; Keromytis, Angelos D.; ", "Provos, Niels", " (6 June 1999). ", "Cryptography in OpenBSD: An Overview", ". ", "USENIX", " Annual Technical Conference. Monterey, California", ". Retrieved ", "27 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Provos, Niels", " (9 August 2003). ", "\"Privilege Separated OpenSSH\"", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"Innovations\"", ". ", "OpenBSD", ". Retrieved ", "18 May", " 2016", ". ", "Privilege separation: [...] The concept is now used in many OpenBSD programs, for example [...] etc.", "\u00a0", "\n", "^", " ", "\"Project History and Credits\"", ". ", "OpenSSH", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"SSH usage profiling\"", ". ", "OpenSSH", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Biancuzzi, Federico (18 March 2004). ", "\"An Interview with OpenBSD's Marc Espie\"", ". ", "ONLamp", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"Security\"", ". ", "OpenBSD", ". Retrieved ", "13 December", " 2011", ". ", "Secure by Default.", "\u00a0", "\n", "^", " ", "Wheeler, David A.", " (3 March 2003). ", "\"2.4. Is Open Source Good for Security?\"", ". ", "Secure Programming for Linux and Unix HOWTO", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "de Raadt, Theo", " (14 December 2010). ", "\"Allegations regarding OpenBSD IPSEC\"", ". ", "openbsd-tech", " (Mailing list)", ". Retrieved ", "28 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Holwerda, Thom (14 December 2010). ", "\"FBI Added Secret Backdoors to OpenBSD IPSEC\"", ". ", "OSNews", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Ryan, Paul (23 December 2010). ", "\"OpenBSD code audit uncovers bugs, but no evidence of backdoor\"", ". ", "Ars Technica", ". Retrieved ", "9 January", " 2011", ".", "\u00a0", "\n", "^", " ", "Mathew J. Schwartz (22 December 2010). ", "\"OpenBSD Founder Believes FBI Built IPsec Backdoor\"", ". ", "InformationWeek: DARKreading", ".", "\u00a0", "\n", "^", " ", "\"OpenBSD\"", ". ", "OpenBSD", ". Archived from ", "the original", " on 28 May 2002.", "\u00a0", "\n", "^", " ", "\"OpenSSH Remote Challenge Vulnerability\"", ". ", "Internet Security Systems", ". 26 June 2002", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"OpenSSH 'Challenge-Response' authentication buffer overflow\"", ". ", "Internet Security Systems", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"OpenBSD's IPv6 mbufs remote kernel buffer overflow\"", ". ", "Core Security Technologies", ". 13 March 2007", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "Grimes, Roger A. (29 December 2006). ", "\"New year's resolution No. 1: Get OpenBSD\"", ". ", "InfoWorld", ".", "\u00a0", "\n", "^", " ", "\"Anonymous CVS\"", ". ", "OpenBSD", ". Retrieved ", "13 December", " 2011", ".", "\u00a0", "\n", "^", " ", "\"Mirrors\"", ". ", "OpenBSD", ". Retrieved ", "22 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Orders\"", ". ", "OpenBSD", ". Retrieved ", "20 May", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Packages and Ports\"", ". ", "OpenBSD Frequently Asked Questions", ". Retrieved ", "22 May", " 2016", ".", "\u00a0", "\n", "^", " ", "\"OpenBSD\"", ". ", "mckusick.com", ". Retrieved ", "12 December", " 2014", ".", "\u00a0", "\n", "^", " ", "de Raadt, Theo", " (19 May 1999). ", "\"OpenBSD 2.5 Release Announcement\"", ". ", "openbsd-announce", " (Mailing list). Archived from ", "the original", " on 14 March 2014. ", "OpenBSD 2.5 introduces the new Cop daemon image done by cartoonist Ty Semeka.", "\u00a0", "\n", "^", " ", "\"OpenBSD 2.7\"", ". ", "OpenBSD", ". Retrieved ", "22 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Matzan, Jem (1 December 2006). ", "\"OpenBSD 4.0 review\"", ". ", "Software in Review", ". Retrieved ", "13 December", " 2011", ". ", "Each OpenBSD release has a graphical theme and a song that goes with it. The theme reflects a major concern that the OpenBSD programmers are addressing or bringing to light.", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Listen to this article", " (", "info/dl", ")\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This audio file was created from a revision of the article \"", "OpenBSD", "\" dated 2011-10-23, and does not reflect subsequent edits to the article. (", "Audio help", ")", "\n", "More spoken articles", "\n", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "OpenBSD", ".", "\n", "\n", "\n", "\n", "\n", "\n", "The Wikibook ", "Guide to Unix", " has a page on the topic of: ", "OpenBSD", "\n", "\n", "\n", "\n", "Official website", "\n", "OpenBSD", " at ", "DistroWatch", "\n", "OpenBSD ports & packages", " ", "latest package info", "\n", "OpenBSD source code search", "\n", "old list of OpenBSD commands", "\n", "Video \u2013 An OpenBSD talk by Michael Lucas", " on ", "YouTube", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "The ", "OpenBSD", " Project", "\n", "\n", "\n", "\n", "Operating system", "\n", "\n", "\n", "\n", "OpenBSD", "\n", "\n", "version history", "\n", "security", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Related projects", "\n", "\n", "\n", "\n", "CARP", "\n", "LibreSSL", "\n", "mandoc", "\n", "OpenSSH", "\n", "OpenBGPD", "\n", "OpenIKED", "\n", "OpenOSPFD", "\n", "OpenNTPD", "\n", "OpenSMTPD", "\n", "PF", "\n", "sndio", "\n", "spamd", "\n", "Systrace", "\n", "tmux", "\n", "Xenocara", "\n", "\n", "cwm", "\n", "\n", "\n", "W^X", "\n", "\n", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Theo de Raadt", "\n", "Niels Provos", "\n", "OpenBSD Foundation", "\n", "Plaid Tongued Devils", "\n", "\n", "\n", "\n", "\n", "\n", "Resources", "\n", "\n", "\n", "\n", "OpenBSD Journal", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Berkeley Software Distribution", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Bob Fabry", "\n", "Keith Bostic", "\n", "Marshall Kirk McKusick", "\n", "Michael J. Karels", "\n", "Bill Joy", "\n", "Samuel Leffler", "\n", "Jordan Hubbard", "\n", "Theo de Raadt", "\n", "Poul-Henning Kamp", "\n", "Lynne", " and ", "William Jolitz", "\n", "\n", "\n", "\n", "\n", "\n", "Derivatives", "\n", "\n", "\n", "\n", "\n", "Active", "\n", "\n", "\n", "\n", "FreeBSD", "\n", "OpenBSD", "\n", "NetBSD", "\n", "DragonFly BSD", "\n", "TrueOS", "\n", "Junos OS", "\n", "Darwin", "\n", "PS3", "/", "PS4", "/", "PSP", "/", "PS Vita operating system", "\n", "Nintendo Switch operating system", "\n", "Full list", "\n", "\n", "\n", "\n", "\n", "\n", "Discontinued", "\n", "\n", "\n", "\n", "386BSD", "\n", "BSD/OS", "\n", "SunOS", "\n", "Ultrix", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Companies", "\n", "\n", "\n", "\n", "Sleepycat Software", "\n", "Walnut Creek CDROM", "\n", "Berkeley Software Design", "\n", "iXsystems", "\n", "\n", "\n", "\n", "\n", "\n", "Other topics", "\n", "\n", "\n", "\n", "Comparison", "\n", "History", "\n", "Licensing", "\n", "BSD Daemon", "\n", "Computer Systems Research Group", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Unix", " and ", "Unix-like", " ", "operating systems", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "BSD", "\n", "\n", "386BSD", "\n", "\n", "FreeBSD", "\n", "NetBSD", "\n", "OpenBSD", "\n", "DragonFly BSD", "\n", "\n", "\n", "NeXTSTEP", "\n", "Darwin", "\n", "\n", "macOS", "\n", "iOS", "\n", "\n", "\n", "SunOS", "\n", "Ultrix", "\n", "\n", "\n", "Coherent", "\n", "GNU", "\n", "Linux", "\n", "\n", "Android", "\n", "Chrome OS", "\n", "\n", "\n", "LynxOS", "\n", "MINIX", "\n", "QNX", "\n", "\n", "BlackBerry 10", "\n", "\n", "\n", "Research Unix", "\n", "System V", "\n", "\n", "A/UX", "\n", "AIX", "\n", "HP-UX", "\n", "illumos", "\n", "IRIX", "\n", "OpenServer", "\n", "Solaris", "\n", "Tru64 UNIX", "\n", "UnixWare", "\n", "\n", "\n", "Xenix", "\n", "more...", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Category", "\n", " ", "Commons", "\n", " ", "Book", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Authority control", "\n", "\n", "\n", "\n", "MusicBrainz", ": ", "1ffebdcd-b78e-463d-9ce9-f2536be58db5", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 19 January 2018, at 07:22."}, +{"title": "David Heinemeier Hansson", "text": ["Not to be confused with ", "David Hanson (computer scientist)", ".", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article has multiple issues.", " Please help ", "improve it", " or discuss these issues on the ", "talk page", ". ", "(", "Learn how and when to remove these template messages", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "is written like a\u00a0personal reflection or opinion essay", " that states a Wikipedia editor's personal feelings about a topic. ", "Please ", "help improve it", " by rewriting it in an ", "encyclopedic style", ".", " ", "(July 2017)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "reads like ", "a press release", " or ", "a news article", " or ", "is entirely based on ", "routine coverage", ". ", "Please ", "expand this article", " with ", "properly sourced content", " to meet Wikipedia's ", "quality standards", ", ", "event notability guideline", ", or ", "encyclopedic content policy", ".", " ", "(July 2017)", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "The topic of this article ", "may not meet Wikipedia's ", "notability guideline for biographies", ". ", "Please help to establish notability by citing ", "reliable secondary sources", " that are ", "independent", " of the topic and provide significant coverage of it beyond its mere trivial mention. If notability cannot be established, the article is likely to be ", "merged", ", ", "redirected", ", or ", "deleted", ".", "\n", "Find sources:", "\u00a0", "\"David Heinemeier Hansson\"", "\u00a0\u2013\u00a0", "news", "\u00a0", "\u00b7", " ", "newspapers", "\u00a0", "\u00b7", " ", "books", "\u00a0", "\u00b7", " ", "scholar", "\u00a0", "\u00b7", " ", "JSTOR", " ", "(July 2017)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Some of this article's ", "listed sources", " ", "may not be ", "reliable", ". ", "Please help this article by looking for better, more reliable sources. Unreliable citations may be challenged or deleted.", " ", "(July 2017)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "David Heinemeier Hansson", "\n", "\n", "\n", "\n", "Hansson at the 2006 O'Reilly Emerging Technology Conference", "\n", "\n", "\n", "\n", "Born", "\n", "(", "1979-10-15", ")", " 15 October 1979 ", "(age\u00a038)", "[1]", "\n", "Copenhagen", ", ", "Denmark", "\n", "\n", "\n", "Residence", "\n", "Benahav\u00eds", ", ", "Spain", "\n", "\n", "\n", "Other\u00a0names", "\n", "DHH", "\n", "\n", "\n", "Occupation", "\n", "Programmer", "[2]", "\n", "\n", "\n", "Employer", "\n", "Basecamp", "\n", "\n", "\n", "Known\u00a0for", "\n", "Ruby on Rails", "\n", "\n", "\n", "Website", "\n", "david", ".heinemeierhansson", ".com", "\n", "\n", "\n", "David Heinemeier Hansson", " (born 15 October 1979; known to the ", "Ruby", " and car racing communities as ", "DHH", ") is a ", "Danish", " ", "programmer", " and the creator of the popular ", "Ruby on Rails", " ", "web development", " ", "framework", " and the ", "Instiki wiki", ".", "[3]", " He is also a partner at the web-based software development firm ", "Basecamp", " (formerly ", "37signals", ").", "\n", "Hansson co-wrote ", "Agile Web Development with Rails", " with ", "Dave Thomas", " in 2005 as part of ", "The Facets of Ruby Series", ". He also co-wrote ", "Getting Real", ", ", "Rework", ", and ", "Remote", " with ", "Jason Fried", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Programming", "\n", "2", " ", "Personal life", "\n", "\n", "2.1", " ", "24 Hours of Le Mans results", "\n", "2.2", " ", "Complete FIA World Endurance Championship results", "\n", "\n", "\n", "3", " ", "Recognition", "\n", "4", " ", "See also", "\n", "5", " ", "References", "\n", "6", " ", "External links", "\n", "\n", "\n", "\n", "Programming", "[", "edit", "]", "\n", "In 1999, Hansson founded and built a Danish online gaming news website and community called Daily Rush, which he ran until 2001.", "[4]", "\n", "After attracting the attention of ", "Jason Fried", " by offering him help with PHP coding, Hansson was hired by Fried to build a web-based ", "project management", " tool, which ultimately became 37signals' ", "Basecamp", " ", "software as a service", " product.", "\n", "To aid the development process, Hansson used the then-obscure Ruby programming language to develop a custom ", "web framework", ". He released the framework separately from the project management tool in 2004 as the ", "open source", " project ", "Ruby on Rails", ". In 2005, Hansson was recognized by ", "Google", " and ", "O'Reilly", " with the \"Hacker of the Year\" award for his creation of Ruby on Rails.", "[5]", "\n", "After graduating from the ", "Copenhagen Business School", " and receiving his ", "bachelor's degree", " in Computer Science and Business Administration, Hansson moved from ", "Denmark", " to ", "Chicago", ", Illinois, ", "U.S.", " in November 2005.", "[6]", "\n", "Personal life", "[", "edit", "]", "\n", "\n", "\n", "24 Hours of Le Mans", " career", "\n", "\n", "\n", "Years", "\n", "2012 -", "\n", "\n", "\n", "Teams", "\n", "OAK Racing", ", ", "Aston Martin Racing", ", ", "Extreme Speed Motorsports", ", ", "Proton Competition", ", ", "Rebellion Racing", "\n", "\n", "\n", "Best finish", "\n", "8th ", "(", "2013", ")", "\n", "\n", "\n", "Class wins", "\n", "1", "\n", "\n", "\n", "David Heinemeier Hansson lists photography and race car driving amongst his hobbies.", "[7]", " He took part in the ", "2012 24 Hours of Le Mans", " driving for ", "OAK Racing", ".", "[8]", " He also drove a Morgan-Nissan P2 car for ", "Conquest Racing", " in the ", "American Le Mans Series", " (ALMS), winning two races in the season. Heinemeier Hansson joined OAK Racing full-time in 2013, taking five 2nd-place finishes to finish 2nd in the Trophy for LMP2 Drivers.", "\n", "In July 2010 it was revealed that Heinemeier Hansson was the person that had commissioned the one-off ", "Pagani Zonda HH", " supercar.", "[9]", " He also owns the one-off ", "Koenigsegg Agera", " HH car.", "[10]", "\n", "24 Hours of Le Mans results", "[", "edit", "]", "\n", "\n", "\n", "Year", "\n", "Team", "\n", "Co-Drivers", "\n", "Car", "\n", "Class", "\n", "Laps", "\n", "Pos.", "\n", "Class", "\nPos.", "\n", "\n", "\n", "2012", "\n", " ", "OAK Racing", "\n", " ", "Bas Leinders", "\n", " ", "Maxime Martin", "\n", "Morgan LMP2", "-", "Nissan", "\n", "LMP2", "\n", "341", "\n", "14th", "\n", "7th", "\n", "\n", "\n", "2013", "\n", " ", "OAK Racing", "\n", " ", "Olivier Pla", "\n", " ", "Alex Brundle", "\n", "Morgan LMP2", "-", "Nissan", "\n", "LMP2", "\n", "328", "\n", "8th", "\n", "2nd", "\n", "\n", "\n", "2014", "\n", " ", "Aston Martin Racing", "\n", " ", "Kristian Poulsen", "\n", " ", "Nicki Thiim", "\n", "Aston Martin Vantage GTE", "\n", "GTE", "\nAm", "\n", "334", "\n", "17th", "\n", "1st", "\n", "\n", "\n", "2015", "\n", " ", "Extreme Speed Motorsports", "\n", " ", "Scott Sharp", "\n", " ", "Ryan Dalziel", "\n", "Ligier JS P2", "-", "Honda", "\n", "LMP2", "\n", "329", "\n", "28th", "\n", "10th", "\n", "\n", "\n", "2016", "\n", " ", "Abu Dhabi-Proton Racing", "\n", " Khaled Al Qubaisi", "\n", " ", "Patrick Long", "\n", "Porsche 911 RSR", "\n", "GTE", "\nAm", "\n", "330", "\n", "28th", "\n", "3rd", "\n", "\n", "\n", "2017", "\n", " ", "Vaillante Rebellion", "\n", " ", "Nelson Piquet Jr.", "\n", " ", "Mathias Beche", "\n", "Oreca 07", "-", "Gibson", "\n", "LMP2", "\n", "364", "\n", "DSQ", "\n", "DSQ", "\n", "\n", "\n", "Complete FIA World Endurance Championship results", "[", "edit", "]", "\n", "\n", "\n", "Year", "\n", "Entrant", "\n", "Class", "\n", "Car", "\n", "Engine", "\n", "Tyres", "\n", "1", "\n", "2", "\n", "3", "\n", "4", "\n", "5", "\n", "6", "\n", "7", "\n", "8", "\n", "9", "\n", "Rank", "\n", "Points", "\n", "\n", "\n", "2013", "\n", "OAK Racing", "\n", "LMP2", "\n", "Morgan LMP2", "\n", "Nissan", " VK45DE 4.5 L V8", "\n", "D", "\n", "SIL", "\n", "2", "\n", "SPA", "\n", "2", "\n", "LMS", "\n", "2", "\n", "S\u00c3O", "\n", "6", "\n", "COA", "\n", "6", "\n", "FUJ", "\n", "3", "\n", "SHA", "\n", "2", "\n", "BHR", "\n", "2", "\n", "\n", "2nd", "\n", "132.5", "\n", "\n", "\n", "2014", "\n", "Aston Martin Racing", "\n", "LMGTE", "\nAm", "\n", "Aston Martin Vantage V8 GTE", "\n", "Aston Martin", " 4.5 L V8", "\n", "M", "\n", "SIL", "\n", "1", "\n", "SPA", "\n", "2", "\n", "LMS", "\n", "1", "\n", "COA", "\n", "2", "\n", "FUJ", "\n", "1", "\n", "SHA", "\n", "2", "\n", "BHR", "\n", "1", "\n", "S\u00c3O", "\n", "2", "\n", "\n", "1st", "\n", "198", "\n", "\n", "\n", "2015", "\n", "Extreme Speed Motorsports", "\n", "LMP2", "\n", "HPD ARX-03b", "\n", "Ligier JS P2", "\n", "Honda", " HR28TT 2.8 L Turbo V6", "\n", "D", "\n", "SIL", "\n", "EX", "\n", "SPA", "\n", "8", "\n", "LMS", "\n", "5", "\n", "N\u00dcR", "\n", "6", "\n", "COA", "\n", "4", "\n", "FUJ", "\n", "4", "\n", "SHA", "\n", "Ret", "\n", "BHR", "\n", "7", "\n", "\n", "7th", "\n", "62", "\n", "\n", "\n", "2016", "\n", "Abu Dhabi-Proton Racing", "\n", "LMGTE", "\nAm", "\n", "Porsche 911 RSR", "\n", "Porsche", " 4.0\u00a0L Flat-6", "\n", "M", "\n", "SIL", "\n", "5", "\n", "SPA", "\n", "6", "\n", "LMS", "\n", "2", "\n", "N\u00dcR", "\n", "4", "\n", "MEX", "\n", "1", "\n", "COA", "\n", "5", "\n", "FUJ", "\n", "5", "\n", "SHA", "\n", "4", "\n", "BHR", "\n", "1", "\n", "2nd", "\n", "151", "\n", "\n", "\n", "2017", "\n", "Vaillante Rebellion", "\n", "LMP2", "\n", "Oreca 07", "\n", "Gibson", " GK-428 4.2 litre ", "V8", "\n", "D", "\n", "SIL", "\n", "9", "\n", "SPA", "\n4", "\n", "LMS", "\n", "DSQ", "\n", "N\u00dcR", "\n", "4", "\n", "MEX", "\n", "5", "\n", "COA", "\n", "2", "\n", "FUJ", "\n", "DSQ", "\n", "SHA", "\n", "3", "\n", "BHR", "\n", "3", "\n", "8th", "\n", "85", "\n", "\n", "\n", "Recognition", "[", "edit", "]", "\n", "\n", "2005: Won Best Hacker of the Year 2005 at ", "OSCON", " from ", "Google", " and ", "O'Reilly", " for the work on Rails.", "[11]", "\n", "2006: Accepted the ", "Jolt Award", " of product excellence for Rails 1.0.", "[11]", "\n", "2012: Named ", "ALMS", " Rookie of the year.", "[12]", "\n", "\n", "See also", "[", "edit", "]", "\n", "\n", "Basecamp", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "David Heinemeier Hansson, ed. (October 2001). ", "\"Turning Another Year (Loud Thinking)\"", ". Archived from ", "the original", " on 1 November 2007", ". Retrieved ", "2 October", " 2007", ".", "\u00a0", "\n", "^", " ", "The home screens of 37signals", "\n", "^", " ", "DHH", " interviewed on the TV show Triangulation on the ", "TWiT.tv", " network", "\n", "^", " ", "Daily Rush", "\n", "^", " ", "\"Google-O'Reilly Open Source Awards - Hall of Fame\"", ". Google Code", ". Retrieved ", "2010-09-03", ". ", "Best Hacker: David Heinemeier Hansson (Ruby on Rails and 37Signals)", "\u00a0", "\n", "^", " ", "Staff writer (March 9, 2014). ", "\"David Heinemeier Hansson: Basecamp, Remote and the next big thing\"", ". eTalks", ". Retrieved ", "April 30,", " 2015", ".", "\u00a0", "[", "permanent dead link", "]", "\n", "^", " ", "\"DHH weblog\"", ". Retrieved ", "2012-07-02", ".", "\u00a0", "\n", "^", " ", "Mercier, Laurent (2012-04-18). ", "\"L'\u00e9quipage de la Morgan 2012 LMP2 #35 affiche complet\"", " [The crew of the #35 LMP2 2012 Morgan sold out]. ", "Endurance-Info", " (in French). Infomaniak Network SA", ". Retrieved ", "2012-04-18", ".", "\u00a0", "\n", "^", " ", "\"Pagani Zonda HH\"", ". secretentourage.com. August 2010", ". Retrieved ", "2011-01-02", ".", "\u00a0", "\n", "^", " ", "Gary Bonanni (Oct 7, 2014). ", "\"One-of-a-Kind Koenigsegg Agera HH Spotted\"", ". ", "carbuzz.com", ". Retrieved ", "7 October", " 2014", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "About David Heinemeier Hansson", " ", "Archived", " 2011-06-02 at the ", "Wayback Machine", ".. Loudthinking.com. Retrieved on 2014-05-30.", "\n", "^", " ", "\"Archived copy\"", ". Archived from ", "the original", " on 2013-06-02", ". Retrieved ", "2013-06-23", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Loud Thinking", " - Hansson's weblog", "\n", "37signals", "\n", "Ruby on Rails", "\n", "Video of David Heinemeier Hansson presentation at Startup School", "\n", "David Heinemeier Hansson - The Pareto Principle and Stoic Philosophy", " on Developer on Fire", "\n", "David Heinemeier Hansson interview", " on the Inside the Net Podcast", "\n", "Martin Fowler and David Heinemeier Hansson interview", " on Hanselminutes Podcast", "\n", "David Heinemeier Hansson interview in Danish", " on Builder.dk Podcast", "\n", "Podcast interview with David Heinemeier Hansson", " on the Web 2.0 Show", "\n", "Ruby on Rails video", "[", "permanent dead link", "]", " David Heinemeier Hansson explains Ruby on Rails at the university of Roskilde, in 2004", "\n", "Keynote 2007 - RailsConf Europe 2007 - Berlin", "\n", "RailsConf Keynote", " on REST. July 9, 2006", "\n", "The Great Surplus - Keynote at RailsConf 2008 - Portland", "[", "permanent dead link", "]", "\n", "Living with legacy software - Keynote at RailsConf Europe 2008 - Berlin", "\n", "FLOSS Weekly podcast 79", " and its ", "transcription", "\n", "Podcast interview with David Heinemeier Hansson", " on This Developer's Life", "\n", "\n", "\n", "\n", "Sporting positions", "\n", "\n", "\n", "Preceded\u00a0by", "\n", "Jamie Campbell-Walter", "\n", "Stuart Hall", "\n", "FIA Endurance Trophy for LMGTE Am Drivers", "\n", "2014", " ", "with:", "\n", "Kristian Poulsen", "\n", "Succeeded\u00a0by", "\n", "Aleksey Basov", "\n", "Andrea Bertolini", "\nViktor Shaitar", "\n", "\n", "\n", "\n", "\n", "\n", "Authority control", "\n", "\n", "\n", "\n", "WorldCat Identities", "\n", "VIAF", ": ", "24888522", "\n", "LCCN", ": ", "no2006071728", "\n", "ISNI", ": ", "0000 0001 1609 5882", "\n", "GND", ": ", "173789617", "\n", "SELIBR", ": ", "264350", "\n", "SUDOC", ": ", "097530417", "\n", "BNF", ": ", "cb150608725", " ", "(data)", "\n", "BIBSYS", ": ", "5081149", "\n", "NDL", ": ", "01034410", "\n", "NKC", ": ", "stk2007383215", "\n", "BNE", ": ", "XX4895045", "\n", "CiNii", ": ", "DA1757643X", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 7 January 2018, at 05:36."}, +{"title": "Dries Buytaert", "text": ["\n", "\n", "\n", "\nDries Buytaert at ", "FOSDEM", " 2008.", "\n", "\n", "\n", "Dries Buytaert", " (born 19 November 1978 in ", "Wilrijk", ", ", "Antwerp", ", ", "Belgium", ")", "[1]", " is an ", "open-source software", " ", "programmer", " notable as founder and lead developer of the ", "Drupal", " ", "CMS", ".", "[2]", "[3]", "[4]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Career", "\n", "2", " ", "References", "\n", "3", " ", "External links", "\n", "\n", "3.1", " ", "Interviews", "\n", "3.2", " ", "Talks", "\n", "\n", "\n", "\n", "\n", "\n", "Career", "[", "edit", "]", "\n", "Buytaert defended his PhD dissertation in ", "Computer Science", " on 27 January 2008", "[5]", " at ", "Ghent University", " in Belgium.", "[6]", "\n", "From 1999-2000 he was the maintainer of the ", "Linux", "-", "WLAN", " FAQ", ".", "[7]", "\n", "It was during this time that he founded the concept of Drupal. At first, Dries maintained a small news site and a web board, but it developed to attract more audience.", "[8]", "\n", "On 1 December 2007, Dries", "[9]", " announced, together with co-founder ", "Jay Batson", " the launch of a start-up called ", "Acquia", ".", "[10]", " Acquia is a commercial open-source software company providing products, services, and technical support for ", "Drupal", ". Acquia wants to be to Drupal what ", "Red Hat", " has been to ", "Linux", ".", "[11]", " In 2009, Acquia helped re-launch Whitehouse.gov on Drupal.", "[12]", "\n", "On 31 March 2008, Dries launched ", "Mollom", ", a service dedicated to stopping website spam: \"Mollom's purpose is to dramatically reduce the effort of keeping your site clean and the quality of your content high. Currently, Mollom is a spam-killing one-two punch combination of a state-of-the-art spam filter and CAPTCHA server.\" Over 59,000 websites are protected by the Mollom service,", "[13]", " including all of ", "Netlog", "'s messages.", "[14]", "\n", "In 2008, Buytaert was elected \"Young Entrepreneurs of Tech\" by ", "BusinessWeek", ".", "[15]", " He was also named to the ", "MIT", " ", "Technology Review", " ", "TR35", " as one of the top 35 innovators in the world under the age of 35.", "[16]", "[17]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "Curriculum Vitae", " ", "Archived", " 21 August 2010 at the ", "Wayback Machine", ".", "\n", "^", " ", "\"History\"", ". Drupal.org", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"The Drupal core\"", ". Drupal.org. Archived from ", "the original", " on 3 May 2012", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Revamp of MAINTAINERS.txt\"", ". Groups.drupal.org", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Dr. Dre, Dries Buytaert\"", ". Buytaert.net", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"conferences.oreilly.com\"", ". Conferences.oreillynet.com", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Linux-Wlan Faq (Old)\"", ". Linux-wlan.org. 6 March 2000", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"The Drop By Dries Buytaert\"", ". Eyerys. 30 December 2016.", "\u00a0", "\n", "^", " ", "\"Acquia, my Drupal startup, Dries Buytaert\"", ". Buytaert.net", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Acquia\"", ". Acquia", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"With $30M in funding, Acquia edges closer to an IPO\"", ". Venturebeat.com. 29 November 2012", ". Retrieved ", "20 January", " 2013", ".", "\u00a0", "\n", "^", " ", "\"Whitehouse goes Drupal\"", ". Techpresident.com. 24 October 2009", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Mollom Scorecard\"", ". Retrieved ", "27 January", " 2013", ".", "\u00a0", "\n", "^", " ", "\"Mollom filtering millions of messages for Netlog\"", ". Buytaert.net. 20 May 2009", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "Kharif, Olga (17 April 2008). ", "\"Young Entrepreneurs of Tech 2008\"", ". Businessweek.com", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "\n", "^", " ", "\"2008 Young Innovators Under 35\"", ". ", "Technology Review", ". 2008", ". Retrieved ", "15 August", " 2011", ".", "\u00a0", "\n", "^", " ", "Christopher Chang, 33 University of California, Berkeley. ", "\"TR35 2008 Young Innovator\"", ". Technologyreview.com", ". Retrieved ", "23 April", " 2012", ".", "\u00a0", "CS1 maint: Multiple names: authors list (", "link", ")", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Dries Buytaert", ".", "\n", "\n", "\n", "\n", "\n", "\n", "Wikinews", " has\u00a0:", "\n", "\n", "\n", "\n", "\n", "an ", "interview with Dries Buytaert", ".", "\n", "\n", "\n", "\n", "\n", "\n", "Personal website", "\n", "Acquia", "\n", "Mollom", "\n", "\n", "Interviews", "[", "edit", "]", "\n", "\n", "An In-Depth Interview With Dries", " Drupal Watchdog interview (February 2011)", "\n", "Drupal founder, Dries Buytaert Interview", " CMS Critic interview (January 2009)", "\n", "Video interview", " with Dries Buytaert by Noel Hidalgo in Antwerp, Belgium (26 July 2007)", "\n", "\n", "Talks", "[", "edit", "]", "\n", "\n", "DrupalCon Los Angeles 2015: Driesnote Keynote", " - Dries' talk at DrupalCon 2015 in Los Angeles, United States (May 2015)", "\n", "The State of Drupal", " - Dries' talk at ", "FOSDEM", " 2007 in Brussels, Belgium (February 2007)", "\n", "Video of talk", " delivered by Dries Buytaert titled the ", "State of Drupal", " from OSCMS conference on Yahoo campus in Sunnyvale, California (late March 2007)", "\n", "The State of Drupal", " - Dries' State of Drupal talk at Drupalcon 2007 in Barcelona, Spain (September 2007)", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 6 January 2018, at 06:23."}, +{"title": "Ruby on Rails", "text": ["Not to be confused with ", "Ruby (programming language)", ".", "\n", "\n", "Ruby on Rails", "\n", "\n", "\n", "\n", "\n", "Original author(s)", "\n", "David Heinemeier Hansson", "\n", "\n", "\n", "Initial release", "\n", "13\u00a0December 2005", "; 12 years ago", "\u00a0(", "2005-12-13", ")", "[1]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "5.1.4 ", "(September\u00a07, 2017", "; 4 months ago", "\u00a0(", "2017-09-07", ")", "[2]", ")", " ", "[\u00b1]", "\n", "\n", "\n", "\n", "\n", "\n", "Repository", "\n", "\n", "\n", "\n", "https://github.com/rails/rails", "\n", "\n", "\n", "\n", "\n", "\n", "Development status", "\n", "Active", "\n", "\n", "\n", "Written in", "\n", "Ruby", "\n", "\n", "\n", "Operating system", "\n", "Cross-platform", "\n", "\n", "\n", "Size", "\n", "18.2 ", "MB", "[3]", "\n", "\n", "\n", "Type", "\n", "Web application framework", "\n", "\n", "\n", "License", "\n", "MIT License", "\n", "\n", "\n", "Website", "\n", "rubyonrails", ".org", "\n", "\n", "\n", "Ruby on Rails", ", or ", "Rails", ", is a server-side ", "web application framework", " written in ", "Ruby", " under the ", "MIT License", ". Rails is a ", "model\u2013view\u2013controller", " (MVC) framework, providing default structures for a ", "database", ", a ", "web service", ", and ", "web pages", ". It encourages and facilitates the use of ", "web standards", " such as ", "JSON", " or ", "XML", " for data transfer, and ", "HTML", ", ", "CSS", " and ", "JavaScript", " for display and user interfacing. In addition to MVC, Rails emphasizes the use of other well-known ", "software engineering", " ", "patterns", " and paradigms, including ", "convention over configuration", " (CoC), ", "don't repeat yourself", " (DRY), and the ", "active record pattern", ".", "[4]", "\n", "Ruby on Rails' emergence in the 2000s greatly influenced web app development, through innovative features such as seamless database table creations, migrations, and scaffolding of views to enable rapid application development. Ruby on Rails' influence on other web frameworks remains apparent today, with many frameworks in other languages borrowing its ideas, including ", "Django", " in ", "Python", ", ", "Laravel", " in ", "PHP", ", Phoenix in ", "Elixir", ", and ", "Sails.js", " in ", "Node.js", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "2", " ", "Technical overview", "\n", "\n", "2.1", " ", "Framework structure", "\n", "2.2", " ", "Deployment", "\n", "\n", "\n", "3", " ", "Philosophy and design", "\n", "4", " ", "Trademarks", "\n", "5", " ", "Reception", "\n", "\n", "5.1", " ", "Scalability", "\n", "5.2", " ", "Security", "\n", "\n", "\n", "6", " ", "References", "\n", "7", " ", "Bibliography", "\n", "8", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "David Heinemeier Hansson", " extracted Ruby on Rails from his work on the project management tool ", "Basecamp", " at the ", "web application", " company also called ", "Basecamp", ".", "[5]", " Hansson first released Rails as open source in July 2004, but did not share ", "commit", " rights to the project until February 2005.", "[", "citation needed", "]", " In August 2006, the framework reached a milestone when ", "Apple", " announced that it would ship Ruby on Rails with ", "Mac OS X v10.5 \"Leopard\"", ",", "[6]", " which was released in October 2007.", "\n", "Rails version 2.3 was released on March 15, 2009 with major new developments in templates, engines, ", "Rack", " and nested model forms. Templates enable the developer to generate a skeleton application with custom ", "gems", " and configurations. Engines give developers the ability to reuse application pieces complete with routes, view paths and models. The Rack web server interface and Metal allow one to write optimized pieces of code that route around Action Controller.", "[7]", "\n", "On December 23, 2008, ", "Merb", ", another web application framework, was launched, and Ruby on Rails announced it would work with the Merb project to bring \"the best ideas of Merb\" into Rails 3, ending the \"unnecessary duplication\" across both communities.", "[8]", " Merb was merged with Rails as part of the Rails 3.0 release.", "[9]", "[10]", "\n", "Rails 3.1 was released on August 31, 2011, featuring Reversible Database Migrations, Asset Pipeline, Streaming, ", "jQuery", " as default ", "JavaScript", " library and newly introduced ", "CoffeeScript", " and ", "Sass", " into the stack.", "[11]", "\n", "Rails 3.2 was released on January 20, 2012 with a faster development mode and routing engine (also known as Journey engine), Automatic Query Explain and Tagged Logging.", "[12]", " Rails 3.2.x is the last version that supports Ruby 1.8.7.", "[13]", " Rails 3.2.12 supports Ruby 2.0.", "[14]", "\n", "Rails 4.0 was released on June 25, 2013, introducing Russian Doll Caching, Turbolinks, Live Streaming as well as making Active Resource, Active Record Observer and other components optional by splitting them as gems.", "[15]", "\n", "Rails 4.1 was released on April 8, 2014, introducing Spring, Variants, Enums, Mailer previews, and secrets.yml.", "[16]", "\n", "Rails 4.2 was released on December 19, 2014, introducing Active Job, asynchronous emails, Adequate Record, Web Console, and ", "foreign keys", ".", "[17]", "\n", "Rails 5.0 was released on June 30, 2016, introducing Action Cable, API mode, and Turbolinks 5.", "[18]", "\n", "Rails 5.0.0.1 was released on August 10, 2016 with Exclusive use of rails CLI over Rake and supports Ruby 2.2.2+ versions", "\n", "Rails 5.1 was released on April 27, 2017, introducing ", "JavaScript", " integration changes (management of JavaScript dependencies from NPM via Yarn, optional compilation of JavaScript using ", "Webpack", ", and a rewrite of Rails UJS to use vanilla JavaScript instead of depending on jQuery), system tests using ", "Capybara", ", encrypted secrets, parameterized mailers, direct & resolved routes, and a unified form_with helper replacing the form_tag/form_for helpers.", "[19]", "\n", "\n", "Version history", "\n", "\n", "Version", "\n", "Date", "\n", "Notes", "\n", "\n", "\n", "Old version, no longer supported:", " 1.0", "[20]", "\n", "000000002005-12-13-0000", "December 13, 2005", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 1.2", "[21]", "\n", "000000002007-01-19-0000", "January 19, 2007", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 2.0", "[22]", "\n", "000000002007-12-07-0000", "December 7, 2007", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 2.1", "[23]", "\n", "000000002008-06-01-0000", "June 1, 2008", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 2.2", "[24]", "\n", "000000002008-11-21-0000", "November 21, 2008", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 2.3", "[25]", "\n", "000000002009-03-16-0000", "March 16, 2009", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 3.0", "[26]", "\n", "000000002010-08-29-0000", "August 29, 2010", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 3.1", "[27]", "\n", "000000002011-08-31-0000", "August 31, 2011", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 3.2", "[28]", "\n", "000000002012-01-20-0000", "January 20, 2012", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 4.0", "[29]", "\n", "000000002013-06-25-0000", "June 25, 2013", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 4.1", "[16]", "\n", "000000002014-04-08-0000", "April 8, 2014", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 4.2", "[17]", "\n", "000000002014-12-19-0000", "December 19, 2014", "\n", "\n", "\n", "\n", "Older version, yet still supported:", " 5.0", "[18]", "\n", "000000002016-06-30-0000", "June 30, 2016", "\n", "\n", "\n", "\n", "Current stable version:", " ", "5.1", "[19]", "\n", "000000002017-05-10-0000", "May 10, 2017", "\n", "\n", "\n", "\n", "Latest preview version of a future release:", " 5.2", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Legend:", "\n", "Old version", "\n", "Older version, still supported", "\n", "Latest version", "\n", "Latest preview version", "\n", "Future release", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Technical overview", "[", "edit", "]", "\n", "Like many web frameworks, Ruby on Rails uses the ", "model\u2013view\u2013controller", " (MVC) pattern to organize application programming.", "\n", "In a default configuration, a ", "model", " in the Ruby on Rails framework maps to a table in a database and to a Ruby file. For example, a model class ", "User", " will usually be defined in the file 'user.rb' in the app/models directory, and linked to the table 'users' in the database. While developers are free to ignore this convention and choose differing names for their models, files, and database table, this is not common practice and is usually discouraged in accordance with the \"convention-over-configuration\" philosophy.", "\n", "A ", "controller", " is a server-side component of Rails that responds to external requests from the web server to the application, by determining which view file to render. The controller may also have to query one or more models for information and pass these on to the view. For example, in an airline reservation system, a controller implementing a flight-search function would need to query a model representing individual flights to find flights matching the search, and might also need to query models representing airports and airlines to find related secondary data. The controller might then pass some subset of the flight data to the corresponding view, which would contain a mixture of static HTML and logic that use the flight data to create an HTML document containing a table with one row per flight. A controller may provide one or more actions. In Ruby on Rails, an action is typically a basic unit that describes how to respond to a specific external web-browser request. Also, note that the controller/action will be accessible for external web requests only if a corresponding route is mapped to it. Rails encourages developers to use ", "RESTful", " routes, which include actions such as create, new, edit, update, destroy, show, and index. These mappings of incoming requests/routes to controller actions can be easily set up in the routes.rb configuration file.", "\n", "A ", "view", " in the default configuration of Rails is an ", "erb", " file, which is evaluated and converted to ", "HTML", " at run-time. Alternatively, many other templating systems can be used for views.", "\n", "Ruby on Rails includes tools that make common development tasks easier \"out-of-the-box\", such as ", "scaffolding", " that can automatically construct some of the models and views needed for a basic ", "website", ".", "[30]", " Also included are ", "WEBrick", ", a simple Ruby web server that is distributed with Ruby, and ", "Rake", ", a build system, distributed as a ", "gem", ". Together with Ruby on Rails, these tools provide a basic development environment.", "\n", "Ruby on Rails is most commonly not connected to the Internet directly, but through some front-end ", "web server", ". ", "Mongrel", " was generally preferred", "[", "by whom?", "]", " over WEBrick in the early days,", "[", "citation needed", "]", " but it can also run on ", "Lighttpd", ", ", "Apache", ", ", "Cherokee", ", ", "Hiawatha", ", ", "Nginx", " (either as a module \u2013 ", "Phusion Passenger", " for example \u2013 or via ", "CGI", ", ", "FastCGI", " or ", "mod_ruby", "), and many others. From 2008 onward, Passenger replaced Mongrel as the most-used web server for Ruby on Rails.", "[31]", " Ruby is also supported natively on the ", "IBM i", ".", "[32]", "\n", "Ruby on Rails is also noteworthy for its extensive use of the ", "JavaScript", " libraries, ", "Prototype", " and ", "Script.aculo.us", ", for scripting ", "Ajax", " actions.", "[33]", " Ruby on Rails initially utilized lightweight ", "SOAP", " for web services; this was later replaced by RESTful ", "web services", ". Ruby on Rails 3.0 uses a technique called ", "Unobtrusive JavaScript", " to separate the functionality (or logic) from the structure of the web page. jQuery is fully supported as a replacement for Prototype and is the default JavaScript library in Rails 3.1, reflecting an industry-wide move towards jQuery. Additionally, ", "CoffeeScript", " was introduced in Rails 3.1 as the default JavaScript language.", "\n", "Since version 2.0, Ruby on Rails offers both HTML and XML as standard output formats. The latter is the facility for RESTful web services.", "\n", "Rails 3.1 introduced ", "Sass", " as standard ", "CSS", " templating.", "\n", "By default, the server uses ", "Embedded Ruby", " in the HTML views, with files having an html.erb extension. Rails supports swapping-in alternative templating languages, such as ", "HAML", " and ", "Mustache", ".", "\n", "Ruby on Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and ", "JRuby", " 1.5.2+; earlier versions are not supported.", "[34]", "\n", "Ruby on Rails 3.2 is the last series of releases that support Ruby 1.8.7.", "\n", "Framework structure", "[", "edit", "]", "\n", "Ruby on Rails is separated into various packages, namely ", "ActiveRecord", " (an ", "object-relational mapping", " system for database access), Active Resource (provides web services), Action Pack, Active Support and Action Mailer. Prior to version 2.0, Ruby on Rails also included the Action Web Service package that is now replaced by Active Resource. Apart from standard packages, developers can make ", "plugins", " to extend existing packages. Earlier Rails supported plugins within their own custom framework; version 3.2 deprecates these in favor of standard Ruby \"gems\".", "[35]", "\n", "Deployment", "[", "edit", "]", "\n", "Ruby on Rails is often installed using ", "RubyGems", ", a package manager", "[36]", " which is included with current versions of Ruby. Many free ", "Unix-like systems", " also support installation of Ruby on Rails and its dependencies through their native ", "package management system", ".", "\n", "Ruby on Rails is typically deployed with a database server such as ", "MySQL", " or ", "PostgreSQL", ", and a web server such as ", "Apache", " running the ", "Phusion Passenger", " module.", "\n", "Philosophy and design", "[", "edit", "]", "\n", "Ruby on Rails is intended to emphasize ", "Convention over Configuration", " (CoC), and the ", "Don't Repeat Yourself", " (DRY) principle.", "\n", "\"Convention over Configuration\" means a developer only needs to specify unconventional aspects of the application. For example, if there is a class ", "Sales", " in the model, the corresponding table in the database is called ", "sales", " by default. It is only if one deviates from this convention, such as calling the table \"products sold\", that the developer needs to write code regarding these names. Generally, Ruby on Rails conventions lead to less code and less repetition.", "[37]", "\n", "\"Don't repeat yourself\" means that information is located in a single, unambiguous place. For example, using the ", "ActiveRecord", " module of Rails, the developer does not need to specify database column names in class definitions. Instead, Ruby on Rails can retrieve this information from the database based on the class name.", "\n", "\"Fat models, skinny controllers\" means that most of the application logic should be placed within the model while leaving the controller as light as possible.", "\n", "Trademarks", "[", "edit", "]", "\n", "In March 2007, ", "David Heinemeier Hansson", " filed three Ruby on Rails-related ", "trademark", " applications to the ", "USPTO", ". These applications regard the phrase \"RUBY ON RAILS\",", "[38]", " the word \"RAILS\",", "[39]", " and the official Rails logo.", "[40]", " As a consequence, in the summer of 2007, Hansson denied permission to ", "Apress", " to use the Ruby on Rails logo on the cover of a new Ruby on Rails book written by some authoritative community members. The episode gave rise to a polite protest in the Ruby on Rails community.", "[41]", "[42]", " In response to this criticism, Hansson replied:", "\n", "\n", "I only grant promotional use [of the Rails logo] for products I'm directly involved with. Such as books that I've been part of the development process for or conferences where I have a say in the execution. I would most definitely seek to enforce all the trademarks of Rails.", "[41]", "\n", "\n", "Reception", "[", "edit", "]", "\n", "Scalability", "[", "edit", "]", "\n", "Rails running on ", "Matz's Ruby Interpreter", " (the ", "de facto", " reference interpreter for Ruby) had been criticized for issues with scalability.", "[43]", " These critics often mentioned various ", "Twitter", " outages in 2007 and 2008, which spurred Twitter's partial transition to ", "Scala", " (which runs on the ", "Java Virtual Machine", ") for their ", "queueing system", " and other ", "middleware", ".", "[44]", "[45]", " The user interface aspects of the site continued to run Ruby on Rails", "[46]", " until 2011 when it was replaced due to concerns over performance", "[47]", "\n", "In 2011, ", "Gartner Research", " noted that despite criticisms and comparisons to Java, many high-profile consumer web firms are using Ruby on Rails to build scalable web applications. Some of the largest sites running Ruby on Rails include ", "Airbnb", ", ", "GitHub", ", ", "Scribd", ", ", "Shopify", ", ", "Hulu", ", and ", "Basecamp", ".", "[48]", " As of January 2016, it is estimated that more than 1.2 million web sites are running Ruby on Rails.", "[49]", "[50]", "\n", "Security", "[", "edit", "]", "\n", "In March 2012, security researcher Egor Homakov discovered a \"mass assignment\" vulnerability that allowed certain Rails applications to be remotely exploited, and demonstrated it by non-maliciously hacking ", "GitHub", " after his earlier attempts at responsible disclosure were dismissed.", "[51]", "\n", "On September 24, 2013, a session cookie persistence security flaw was reported in Ruby on Rails. In a default configuration, the entire session hash is stored within a session cookie known as ", "CookieStore", ", allowing any authenticated session possessing the session cookie to log in as the target user at any time in the future. As a workaround, administrators are advised to configure cookies to be stored on the server using mechanisms such as ", "ActiveRecordStore", ".", "[52]", "\n", "Researchers Daniel Jackson and Joseph Near developed a data debugger they called \"Space\" that can analyze the data access of a Rails program and determine if the program properly adheres to rules regarding access restrictions. On April 15, 2016, Near reported that an analysis of 50 popular Web applications using Space uncovered 23 previously unknown security flaws.", "[53]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "David. ", "\"Rails 1.0: Party like it's one oh oh!\"", ". ", "Ruby on Rails", ". Retrieved ", "2017-03-01", ".", "\u00a0", "\n", "^", " ", "matthewd. ", "\"Rails 5.1.4 and 5.0.6 released\"", ". ", "Ruby on Rails", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "^", " ", "\"Release v5.1.1 \u00b7 rails/rails \u00b7 GitHub\"", ". Retrieved ", "25 June", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Getting Started with Rails: What Is Rails?\"", ". ", "Ruby on Rails Guides", ". Retrieved ", "10 August", " 2014", ".", "\u00a0", "\n", "^", " ", "Grimmer, Lenz\u2212\u2212 (February 2006). ", "\"Interview with David Heinemeier Hansson from Ruby on Rails\"", ". ", "MySQL AB", ". Archived from ", "the original", " on February 25, 2013", ". Retrieved ", "2008-06-08", ".", "\u00a0", "\n", "^", " ", "Hansson, David (August 7, 2006). ", "\"Ruby on Rails will ship with OS X 10.5 (Leopard)\"", ". Retrieved ", "2008-06-08", ".", "\u00a0", "\n", "^", " ", "Hansson, David (March 16, 2009). ", "\"Rails 2.3: Templates, Engines, Rack, Metal, much more!\"", ".", "\u00a0", "\n", "^", " ", "\"The day Merb joined Rails\"", ". 2008-12-27. Archived from ", "the original", " on 2013-02-09.", "\u00a0", "\n", "^", " ", "\"Ruby on Rails 3.0 Release Notes \u2014 Ruby on Rails Guides\"", ". ", "Edgeguides.rubyonrails.org", ". Retrieved ", "2017-05-24", ".", "\u00a0", "\n", "^", " ", "\"Ruby on Rails 3.0 goes modular\"", ". sdtimes.com. 2010-02-10", ". Retrieved ", "2010-08-06", ".", "\u00a0", "\n", "^", " ", "\"Ruby on Rails 3.1 Release Notes\"", ". 2012-09-01.", "\u00a0", "\n", "^", " ", "\"Ruby on Rails 3.2 Release Notes\"", ". 2012-09-01.", "\u00a0", "\n", "^", " ", "\"Rails/master is now 4.0.0.beta\"", ". 2012-09-01.", "\u00a0", "\n", "^", " ", "Rails 3.2.x is now compatible with Ruby 2.0.0 by sikachu \u00b7 Pull Request #9406 \u00b7 rails/rails \u00b7 GitHub", ". Github.com. Retrieved on 2014-05-30.", "\n", "^", " ", "\"Rails 4.0: Final version released! | Riding Rails\"", ". ", "Weblog.rubyonrails.org", ". 2013-06-25", ". Retrieved ", "2017-05-24", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Rails 4.1.0: Spring, Variants, Enums, Mailer previews, secrets.yml\"", ". ", "weblog.rubyonrails.org", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Rails 4.2: Active Job, Asynchronous Mails, Adequate Record, Web Console, Foreign Keys\"", ". ", "Ruby on Rails", ". Retrieved ", "5 Dec", " 2015", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Rails 5.0: Action Cable, API mode, and so much more\"", ". ", "Ruby on Rails", ". Retrieved ", "19 Nov", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Rails 5.1: Loving JavaScript, System Tests, Encrypted Secrets, and more\"", ". ", "Ruby on Rails", ". Retrieved ", "10 May", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Rails 1.0: Party like it's one oh oh!\"", ". Riding Rails. Retrieved June 9, 2010.", "\n", "^", " ", "\"Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations\"", ". Riding Rails. Retrieved June 9, 2010.", "\n", "^", " ", "\"Rails 2.0: It's done!\"", ". Riding Rails. Retrieved June 9, 2010.", "\n", "^", " ", "Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc", ". Riding Rails. Retrieved June 9, 2010.", "\n", "^", " ", "\"Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs\"", ". Riding Rails. Retrieved June 9, 2010.", "\n", "^", " ", "\"Rails 2.3: Templates, Engines, Rack, Metal, much more!\"", ". Riding Rails. Retrieved June 9, 2010.", "\n", "^", " ", "\"Rails 3.0: It's ready!\"", ". Riding Rails. Retrieved August 30, 2010.", "\n", "^", " ", "\"bumping to 3.1.0\"", ". ", "Github.com", ".", "\u00a0", "\n", "^", " ", "\"Preparing for 3.2.0 release\"", ". ", "Github.com", ".", "\u00a0", "\n", "^", " ", "\"Rails 4 in 30", "'", "\"", ". ", "blog.wyeworks.com", ".", "\u00a0", "\n", "^", " ", "Sean Lynch (2007-12-15). ", "\"fairleads: Rails 2.0 and Scaffolding Step by Step\"", ". ", "Fairleads.blogspot.com", ". Retrieved ", "2017-05-24", ".", "\u00a0", "\n", "^", " ", "\"Archived copy\"", ". Archived from ", "the original", " on 2009-07-07", ". Retrieved ", "2012-12-03", ".", "\u00a0", "\n", "^", " ", "Maxcer, Chris. ", "\"PowerRuby Brings Enterprise Ruby on Rails Support to IBM i\"", ". iPro Developer. Archived from ", "the original", " on 9 October 2013", ". Retrieved ", "9 May", " 2014", ".", "\u00a0", "\n", "^", " ", "Js_Escape_Map. ", "\"ActionView::Helpers::JavaScriptHelper\"", ". ", "Api.rubyonrails.org", ". Retrieved ", "2017-05-24", ".", "\u00a0", "\n", "^", " ", "\"Rails 3.0: It's ready!\"", ". rubyonrails.org", ". Retrieved ", "2010-08-30", ". ", "Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and JRuby 1.5.2+.", "\u00a0", "\n", "^", " ", "\"Rails 3.2.0.rc2 has been released!\"", ". ", "Weblog.rubyonrails.org", ". 2012-09-01.", "\u00a0", "\n", "^", " ", "\"Ruby on Rails: Download\"", ". RubyonRails.org. Archived from ", "the original", " on 2009-12-12.", "\u00a0", "\n", "^", " ", "\"Getting Started with Rails\"", ". Rubyonrails.org", ". Retrieved ", "2014-03-10", ".", "\u00a0", "\n", "^", " ", "\"", "\"", "Ruby on Rails\" Trademark Status\"", ". ", "USPTO", ". Retrieved ", "2007-08-01", ".", "\u00a0", "\n", "^", " ", "\"", "\"", "Rails\" Trademark Status\"", ". ", "USPTO", ". Retrieved ", "2007-08-01", ".", "\u00a0", "\n", "^", " ", "\"Rails Logo Trademark Status\"", ". ", "USPTO", ". Retrieved ", "2007-08-01", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Forde, Pete (2007-07-23). ", "\"Beginning Rails: From Novice to Professional\"", ". Archived from ", "the original", " on August 5, 2007", ". Retrieved ", "2007-08-01", ".", "\u00a0", "\n", "^", " ", "Cooper, Peter (2007-07-24). ", "\"David Heinemeier Hansson says No to Use of Rails Logo\"", ". Retrieved ", "2007-08-01", ".", "\u00a0", "\n", "^", " ", "\"5 Question Interview with Twitter Developer Alex Payne\"", ". radicalbehavior.com. 2007-03-29. Archived from ", "the original", " on April 23, 2009", ". Retrieved ", "2014-11-04", ". ", "By various metrics Twitter is the biggest Rails site on the net right now. Running on Rails has forced us to deal with scaling issues - issues that any growing site eventually contends with \u2013 far sooner than I think we would on another framework.", "\u00a0", "\n", "^", " ", "Steve Jenson; Alex Payne & Robey Pointer interview (2009-04-03). ", "\"Twitter on Scala\"", ". artima.com", ". Retrieved ", "2009-07-18", ". ", "We had a Ruby-based queuing system that we used for communicating between the Rails front ends and the daemons, and we ended up replacing that with one written in Scala. The Ruby one actually worked pretty decently in a normal steady state, but the startup time and the crash behavior were undesirable.", "\u00a0", "\n", "^", " ", "\"Twitter jilts Ruby for Scala\"", ". theregister.co.uk. 2009-04-01", ". Retrieved ", "2009-07-18", ". ", "By the end of this year, Payne said, Twitter hopes to have its entire middleware infrastructure and its APIs ported to the new language. Ruby will remain, but only on the front end. \"We're still happy with Rails for building user facing features... performance-wise, it's fine for people clicking around web pages. It's the heavy lifting, asynchronous processing type of stuff that we've moved away from.\"", "\u00a0", "\n", "^", " ", "ryan king (2009-09-25). ", "\"Twitter on Ruby\"", ". evan weaver", ". Retrieved ", "2009-09-29", ". ", "We use Scala for a few things at Twitter, but the majority of the site is Ruby.", "\u00a0", "\n", "^", " ", "\"Twitter Search is Now 3x Faster\"", ". Twitter", ". Retrieved ", "June 6,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Here's Why Ruby On Rails Is Hot\"", ". Business Insider. Archived from ", "the original", " on December 21, 2011", ". Retrieved ", "February 10,", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Ruby on Rails Usage Statistics\"", ". ", "trends.builtwith.com", ". Retrieved ", "2016-01-04", ".", "\u00a0", "\n", "^", " ", "\"Ruby on Rails Token Usage Statistics\"", ". ", "trends.builtwith.com", ". Retrieved ", "2016-01-04", ".", "\u00a0", "\n", "^", " ", "Protalinski, Emil. ", "\"How GitHub handled getting hacked\"", ". ", "Zdnet.com", ". Retrieved ", "2017-05-24", ".", "\u00a0", "\n", "^", " ", "Brook, Chris (2013-09-25). ", "\"Security Issue in Ruby on Rails Could Expose Cookies\"", ". ", "Threat Post", ". The Kaspersky Lab Security News Service", ". Retrieved ", "2014-06-04", ".", "\u00a0", "\n", "^", " ", "\"Patching up Web applications\"", ". ", "MIT News", ". Retrieved ", "2016-04-21", ".", "\u00a0", "\n", "\n", "\n", "Bibliography", "[", "edit", "]", "\n", "\n", "\n", "Ruby, Sam; Thomas, Dave; Hansson, David (March 28, 2009). ", "\"Agile Web Development with Rails\"", " (Third ed.). ", "Pragmatic Bookshelf", ": 850. ", "ISBN", "\u00a0", "1-934356-16-6", ".", "\u00a0", "\n", "Laurent, Simon St.; Dumbill, Edd (November 28, 2008). ", "\"Learning Rails\"", " (First ed.). ", "O'Reilly Media", ": 442. ", "ISBN", "\u00a0", "0-596-51877-3", ".", "\u00a0", "\n", "Lenz, Patrick (May 1, 2008). ", "\"Simply Rails 2\"", " (Second ed.). ", "SitePoint", ": 450. ", "ISBN", "\u00a0", "0-9804552-0-0", ".", "\u00a0", "\n", "Tate, Bruce; Hibbs, Curt (August 22, 2006). ", "\"Ruby on Rails: Up and Running\"", " (First ed.). ", "O'Reilly Media", ": 182. ", "ISBN", "\u00a0", "0-596-10132-5", ".", "\u00a0", "\n", "Holzner Ph.D., Steve (November 29, 2006). ", "\"Beginning Ruby on Rails\"", " (First ed.). ", "Wrox", ": 380. ", "ISBN", "\u00a0", "0-470-06915-5", ".", "\u00a0", "\n", "Allan Hardy, Jeffrey; Carneiro Jr, Cloves; Catlin, Hampton (July 20, 2007). ", "\"Beginning Ruby on Rails E-Commerce: From Novice to Professional\"", " (First ed.). ", "Wrox", ": 361. ", "ISBN", "\u00a0", "1-59059-686-2", ".", "\u00a0", "\n", "Clark, Mike (May 15, 2008). ", "\"Advanced Rails Recipes\"", " (First ed.). Pragmatic Bookshelf: 464. ", "ISBN", "\u00a0", "0-9787392-2-1", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikibooks has more on the topic of: ", "Ruby on Rails", "\n", "\n", "\n", "\n", "Official website", "\n", "The Rails Tutorial", " \u2013 The Ruby on Rails Tutorial book and screencast series teach you how to develop and deploy Ruby on Rails apps", "\n", "Rails source code", "\n", "Rails guides", "\n", "Rails API", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Ruby programming language", "\n", "\n", "\n", "\n", "Implementations", "\n", "\n", "\n", "\n", "\n", "Active", "\n", "\n", "\n", "\n", "Ruby MRI", " / ", "YARV", "\n", "mruby", "\n", "JRuby", "\n", "Rubinius", "\n", "MagLev", "\n", "RubyMotion", "\n", "\n", "\n", "\n", "\n", "\n", "Discontinued", "\n", "\n", "\n", "\n", "MacRuby", "\n", "IronRuby", "\n", "XRuby", "\n", "RubyJS", "\n", "HotRuby", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "IDE", "\n", "\n", "\n", "\n", "Komodo", "\n", "NetBeans", "\n", "RadRails", "\n", "RubyMine", "\n", "\n", "\n", "\n", "\n", "\n", "Applications", "\n", "\n", "\n", "\n", "Capistrano", "\n", "Chef", "\n", "Hackety Hack", "\n", "Homebrew", "\n", "Interactive Ruby Shell", "\n", "Pry", "\n", "Puppet", "\n", "Rake", "\n", "Redmine", "\n", "RSpec", "\n", "RubyGems", "\n", "RVM", "\n", "\n", "\n", "\n", "\n", "\n", "Libraries and frameworks", "\n", "\n", "\n", "\n", "Adhearsion", "\n", "Camping", "\n", "eRuby", " (RHTML)", "\n", "Merb", "\n", "Padrino", "\n", "RubyCocoa", "\n", "Ruby on Rails", "\n", "Shoes", "\n", "Sinatra", "\n", "QtRuby", "\n", "\n", "\n", "\n", "\n", "\n", "Server software", "\n", "\n", "\n", "\n", "mod_ruby", "\n", "Mongrel", "\n", "Phusion Passenger", " (mod_rails/mod_rack)", "\n", "Rack", "\n", "WEBrick", "\n", "\n", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Yukihiro Matsumoto", "\n", "David Heinemeier Hansson", "\n", "why the lucky stiff", "\n", "\n", "\n", "\n", "\n", "\n", "Other", "\n", "\n", "\n", "\n", "Document format", "\n", "why's (poignant) Guide to Ruby", "\n", "Ruby Central", "\n", "RubyKaigi", "\n", "RubyForge", "\n", "Ruby License", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Category", "\n", " ", "Commons", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Web frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "\n", "\n", "\n", "\n", "\n", "C++", "\n", "\n", "\n", "\n", "CppCMS", "\n", "Wt", "\n", "\n", "\n", "\n", "\n", "\n", "CLI", "\n", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "Core", "\n", "AJAX", "\n", "Dynamic Data", "\n", "MVC", "\n", "Razor", "\n", "Web Forms", "\n", "\n", "\n", "DNN", "\n", "BFC", "\n", "MonoRail", "\n", "OpenRasta", "\n", "Umbraco", "\n", "\n", "\n", "\n", "\n", "\n", "ColdFusion", "\n", "\n", "\n", "\n", "CFWheels", "\n", "ColdBox Platform", "\n", "ColdSpring", "\n", "Fusebox", "\n", "Mach-II", "\n", "Model-Glue", "\n", "\n", "\n", "\n", "\n", "\n", "Common Lisp", "\n", "\n", "\n", "\n", "Caveman2", "\n", "CL-HTTP", "\n", "UnCommon Web", "\n", "Weblocks", "\n", "\n", "\n", "\n", "\n", "\n", "Haskell", "\n", "\n", "\n", "\n", "Happstack", "\n", "Yesod", "\n", "Snap", "\n", "\n", "\n", "\n", "\n", "\n", "Java", "\n", "\n", "\n", "\n", "AppFuse", "\n", "Flexive", "\n", "Grails", "\n", "GWT", "\n", "ICEfaces", "\n", "ItsNat", "\n", "JavaServer Faces", "\n", "JHipster", "\n", "Jspx", "\n", "JWt", "\n", "OpenXava", "\n", "Play", "\n", "Reasonable Server Faces", "\n", "Remote Application Platform", "\n", "RIFE", "\n", "Seam", "\n", "Sling", "\n", "Spring", "\n", "Stripes", "\n", "Struts", "\n", "Tapestry", "\n", "Vaadin", "\n", "Vert.x", "\n", "WebWork", "\n", "Wicket", "\n", "WaveMaker", "\n", "ZK", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "Ample SDK", "\n", "Angular", "/", "AngularJS", "\n", "Backbone.js", "\n", "Chaplin.js", "\n", "Closure", "\n", "Dojo Toolkit", "\n", "Ember.js", "\n", "Ext JS", "\n", "jQuery", "\n", "Meteor", "\n", "MooTools", "\n", "Node.js", "\n", "OpenUI5", "\n", "Prototype", "\n", "React", "\n", "Rico", "\n", "script.aculo.us", "\n", "Sencha Touch", "\n", "SproutCore", "\n", "Wakanda", "\n", "\n", "\n", "\n", "\n", "\n", "Perl", "\n", "\n", "\n", "\n", "Catalyst", "\n", "Dancer", "\n", "Mason", "\n", "Maypole", "\n", "Mojolicious", "\n", "WebGUI", "\n", "\n", "\n", "\n", "\n", "\n", "PHP", "\n", "\n", "\n", "\n", "CakePHP", "\n", "CodeIgniter", "\n", "Drupal", "\n", "Fat-Free", "\n", "FuelPHP", "\n", "Flow", "\n", "Gyroscope", "\n", "Horde", "\n", "Kohana", "\n", "Laravel", "\n", "Lithium", "\n", "Midgard", "\n", "MODX", "\n", "Nette", "\n", "Phalcon", "\n", "Pop PHP", "\n", "PRADO", "\n", "ProcessWire", "\n", "Qcodo", "\n", "Silex", "\n", "SilverStripe", "\n", "Symfony", "\n", "TYPO3", "\n", "Xaraya", "\n", "XOOPS", "\n", "Yii", "\n", "Zend Framework", "\n", "\n", "\n", "\n", "\n", "\n", "Python", "\n", "\n", "\n", "\n", "BlueBream", "\n", "CherryPy", "\n", "Django", "\n", "Flask", "\n", "Grok", "\n", "Nevow", "\n", "Pyjs", "\n", "Pylons", "\n", "Pyramid", "\n", "Quixote", "\n", "TACTIC", "\n", "Tornado", "\n", "TurboGears", "\n", "web2py", "\n", "Webware", "\n", "Zope 2", "\n", "\n", "\n", "\n", "\n", "\n", "Ruby", "\n", "\n", "\n", "\n", "Camping", "\n", "Merb", "\n", "Padrino", "\n", "Ruby on Rails", "\n", "Sinatra", "\n", "\n", "\n", "\n", "\n", "\n", "Scala", "\n", "\n", "\n", "\n", "Lift", "\n", "Play", "\n", "Scalatra", "\n", "\n", "\n", "\n", "\n", "\n", "Smalltalk", "\n", "\n", "\n", "\n", "AIDA/Web", "\n", "Seaside", "\n", "\n", "\n", "\n", "\n", "\n", "Other languages", "\n", "\n", "\n", "\n", "Vibe.d", " (", "D", ")", "\n", "Application Express", " (", "PL/SQL", ")", "\n", "Grails", " (", "Groovy", ")", "\n", "Kepler", " (", "Lua", ")", "\n", "Rocket", " (", "Rust", ")", "\n", "OpenACS", " (", "Tcl", ")", "\n", "Phoenix", " (", "Elixir", ")", "\n", "SproutCore", " (", "JavaScript", "-", "Ruby", ")", "\n", "Yaws", " (", "Erlang", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 29 December 2017, at 03:58."}, +{"title": "Ethereum", "text": ["\n", "\n", "Ethereum", "\n", "\n", "\n", "\n", "The Ethereum Project's logo", "\n", "\n", "\n", "\n", "Denominations", "\n", "\n", "\n", "Symbol", "\n", "\u039e", "\n", "\n", "\n", "Ticker symbol", "\n", "ETH", "\n", "\n", "\n", "\u2002", "\n", "Ether", "\n", "\n", "\n", "Development", "\n", "\n", "\n", "Original author(s)", "\n", "Vitalik Buterin, ", "Ethereum Foundation", "\n", "\n", "\n", "White paper", "\n", "[2]", "\n", "\n", "\n", "Implementation(s)", "\n", "GEth, Parity", "\n", "\n", "\n", "Initial release", "\n", "30\u00a0July 2015 ", "(2 years ago)", "\u00a0(", "2015-07-30", ")", "\n", "\n", "\n", "Written in", "\n", "C++", ", ", "Go", ", ", "Rust", "\n", "\n", "\n", "Operating System", "\n", "Clients available for ", "Linux", ", ", "Windows", ", ", "macOS", ", ", "POSIX", ", ", "Raspbian", "\n", "\n", "\n", "License", "\n", "GPLv3", ", ", "LGPLv", "3, ", "MIT", "[1]", "[2]", "\n", "\n", "\n", "Website", "\n", "ethereum", ".org", "\n", "\n", "\n", "Ledger", "\n", "\n", "\n", "Timestamping scheme", "\n", "Proof-of-work", "\n", "\n", "\n", "Hash function", "\n", "Ethash", "\n", "\n", "\n", "Block explorer", "\n", "ethstats", ".net", "\n", "\n", "\n", "Circulating supply", "\n", "\u039e96,939,025 (as of 12 January 2018", "[update]", ")", "\n", "\n", "\n", "Valuation", "\n", "\n", "\n", "Exchange rate", "\n", " ", "US$", "1,263.35\u00a0thousand", " (as of 12 January 2018", "[update]", ")", "\n", "\n", "\n", "Market cap", "\n", " ", "US$122,4\u00a0billion", " (as of 12 January 2018", "[update]", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Ethereum", " is an ", "open-source", ", public, ", "blockchain", "-based ", "distributed computing", " platform featuring ", "smart contract", " (scripting) functionality.", "[3]", " It provides a decentralized ", "Turing-complete", " ", "virtual machine", ", the Ethereum Virtual Machine (EVM), which can execute scripts using an international network of public nodes. Ethereum also provides a ", "cryptocurrency", " token called \"ether\", which can be transferred between accounts and used to compensate participant nodes for computations performed.", "[4]", " \"Gas\", an internal transaction pricing mechanism, is used to mitigate ", "spam", " and allocate resources on the network.", "[3]", "[5]", " Colloquially, ", "Ethereum", " also refers to a ", "cryptocurrency", " associated with the Ethereum platform, although the technically correct term for the currency is ", "Ether", ".", "\n", "Ethereum was proposed in late 2013 by ", "Vitalik Buterin", ", a ", "cryptocurrency", " researcher and programmer. Development was funded by an online ", "crowdsale", " that took place between July and August 2014. ", "[6]", " The system went live on 30 July 2015, with 11.9\u00a0million coins \"premined\" for the crowdsale.", "[7]", " This accounts for approximately 13 percent of the total circulating supply.", "\n", "In 2016, as a result of the collapse of ", "The DAO", " project, Ethereum was split into two separate blockchains \u2013 the new separate version became Ethereum (ETH), and the original continued as ", "Ethereum Classic", " (ETC).", "[8]", "[9]", "[10]", " The value of the Ethereum currency grew over 13,000 percent in 2017.", "[11]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Etymology", "\n", "2", " ", "History", "\n", "\n", "2.1", " ", "Milestones", "\n", "2.2", " ", "The DAO event", "\n", "2.3", " ", "Hard Forks", "\n", "\n", "\n", "3", " ", "Architecture", "\n", "\n", "3.1", " ", "Ether", "\n", "3.2", " ", "Ethereum Virtual Machine", "\n", "3.3", " ", "Smart contracts", "\n", "3.4", " ", "Performance", "\n", "3.5", " ", "Proposed uses", "\n", "\n", "\n", "4", " ", "Ecosystem", "\n", "\n", "4.1", " ", "Clients and wallets", "\n", "4.2", " ", "Decentralized applications", "\n", "4.3", " ", "Enterprise software", "\n", "\n", "4.3.1", " ", "Enterprise Ethereum Alliance (EEA)", "\n", "4.3.2", " ", "Permissioned ledgers", "\n", "\n", "\n", "\n", "\n", "5", " ", "Criticisms", "\n", "6", " ", "References", "\n", "7", " ", "External links", "\n", "\n", "\n", "\n", "Etymology", "[", "edit", "]", "\n", "Vitalik Buterin picked the name Ethereum after browsing Wikipedia articles about elements and science fiction, when he found the name, noting, \"I immediately realized that I liked it better than all of the other alternatives that I had seen; I suppose it was the fact that sounded nice and it had the word \"ether\", referring to the hypothetical invisible medium that permeates the universe and allows light to travel.\"", "[12]", "\n", "History", "[", "edit", "]", "\n", "Ethereum was initially described in a white paper by ", "Vitalik Buterin", ",", "[13]", " a programmer involved with ", "Bitcoin Magazine", ", in late 2013 with a goal of building decentralized applications.", "[14]", "[15]", " Buterin had argued that Bitcoin needed a ", "scripting language", " for application development. Failing to gain agreement, he proposed development of a new platform with a more general scripting language.", "[16]", ":", "88", "\n", "At the time of public announcement in January 2014, the core Ethereum team was Vitalik Buterin, Mihai Alisie, Anthony Di Iorio, and Charles Hoskinson.", "[17]", " Formal development of the Ethereum software project began in early 2014 through a ", "Swiss", " company, ", "Ethereum Switzerland GmbH", " (", "EthSuisse", ").", "[18]", "[19]", " Subsequently, a Swiss non-profit foundation, the Ethereum Foundation (", "Stiftung Ethereum", "), was created as well. Development was funded by an online public ", "crowdsale", " during July\u2013August 2014, with the participants buying the Ethereum value token (ether) with another digital currency, ", "bitcoin", ".", "[6]", " While there was early praise for the technical innovations of Ethereum, questions were also raised about its security and scalability.", "[14]", "\n", "Milestones", "[", "edit", "]", "\n", "Several codenamed prototypes of the Ethereum platform were developed by the Foundation, as part of their Proof-of-Concept series, prior to the official launch of the Frontier network. \"Olympic\" was the last of these prototypes, and public beta pre-release.", "[20]", "[21]", " The Olympic network provided users with a ", "bug bounty", " of 25,000 ether for stress testing the limits of the Ethereum blockchain. \"Frontier\" marked the tentative experimental release of the Ethereum platform in July 2015.", "[22]", "[23]", "\n", "\"Homestead\" was the first to be considered ", "stable", ".", "[24]", "[25]", " It includes improvements to transaction processing, gas pricing, and security.", "[26]", "[24]", "[27]", " Since the initial launch, Ethereum has undergone several planned protocol upgrades, which are important changes affecting the underlying functionality and/or ", "incentive structures", " of the platform.", "[28]", "[29]", "\n", "There are at least two other protocol upgrades planned in the future: \"Metropolis\" is intended to reduce the complexity of the EVM and provide more flexibility for smart contract developers.", "[29]", " Metropolis also adds supports for zkSnarks (from ", "Zcash", "); with the first zksnarks transaction occurring on testnet on September 19, 2017.", "[30]", " \"Serenity\" should include a fundamental change to Ethereum's consensus algorithm to enable a basic transition from hardware mining (", "proof-of-work", ") to virtual mining (", "proof-of-stake", ").", "[29]", "[31]", " Improvements to ", "scalability", ", specifically ", "sharding", ", are also said to be a key objective on the development roadmap.", "[32]", "[33]", "\n", "\n", "\n", "Version", "\n", "Code name", "\n", "Release date", "\n", "\n", "\n", "Old version, no longer supported:", " 0", "\n", "Olympic", "\n", "May, 2015", "\n", "\n", "\n", "Old version, no longer supported:", " 1", "\n", "Frontier", "\n", "30 July 2015", "\n", "\n", "\n", "Old version, no longer supported:", " 2", "\n", "Homestead", "\n", "14 March 2016", "\n", "\n", "\n", "Current stable version:", " ", "3", "\n", "Metropolis (vByzantium)", "\n", "16 October 2017", "\n", "\n", "\n", "Future release:", " 3.5", "\n", "Metropolis (vConstantinople)", "\n", "TBA", "[30]", "\n", "\n", "\n", "Future release:", " 4", "\n", "Serenity", "\n", "TBA", "\n", "\n", "\n", "\n", "\n", "Legend:", "\n", "Old version", "\n", "Older version, still supported", "\n", "Latest version", "\n", "Latest preview version", "\n", "Future release", "\n", "\n", "\n", "\n", "\n", "\n", "The DAO event", "[", "edit", "]", "\n", "In 2016 a ", "decentralized autonomous organization", " called ", "The DAO", ", a set of ", "smart contracts", " developed on the platform, raised a record ", "US$150 million", " in a ", "crowdsale", " to fund the project.", "[34]", " The DAO was exploited in June when ", "US$50 million", " in ether were claimed by an anonymous entity.", "[35]", "[36]", " The event sparked a debate in the crypto-community about whether Ethereum should perform a contentious \"hard fork\" to reappropriate the affected funds.", "[37]", " As a result of the dispute, the network split in two. Ethereum (the subject of this article) continued on the forked blockchain, while ", "Ethereum Classic", " continued on the original blockchain.", "[38]", " The hard fork created a rivalry between the two networks.", "[39]", "\n", "Hard Forks", "[", "edit", "]", "\n", "After the hard fork related to The DAO, Ethereum subsequently forked twice in the fourth quarter of 2016 to deal with other attacks.", "[40]", " By the end of November 2016, Ethereum had increased its ", "DDoS", " protection, de-bloated the blockchain, and thwarted further spam attacks by hackers.", "[27]", "\n", "Architecture", "[", "edit", "]", "\n", "Ether", "[", "edit", "]", "\n", "\n", "\n", "Ether", "\n", "\n", "\n", "Denominations", "\n", "\n", "\n", "Symbol", "\n", "\u039e or ETH", "\n", "\n", "\n", "Demographics", "\n", "\n", "\n", "User(s)", "\n", "Worldwide", "\n", "\n", "\n", "Issuance", "\n", "\n", "\n", "Currency type", "\n", "Cryptocurrency", "\n", "\n", "\n", "The value token of the Ethereum blockchain is called ether. It is listed under the code ETH and traded on ", "cryptocurrency", " exchanges, and the ", "Greek", " ", "uppercase Xi", " character (\u039e) is generally used for its ", "currency symbol", ". It is also used to pay for transaction fees and computational services on the Ethereum network.", "[41]", "\n", "The supply of Ether was projected to increase by 14.75% in 2017, with an algorithm in place to gradually decline to 1.59% by 2065.", "[42]", "[", "unreliable source?", "]", " However, a new implementation of Ethereum named \"Casper\" based on ", "proof of stake", " rather than ", "proof of work", " is expected to reduce the inflation rate to between 0.5% to 2%.", "[43]", "[44]", "\n", "Ethereum Virtual Machine", "[", "edit", "]", "\n", "The Ethereum Virtual Machine (EVM)", "[45]", "[46]", " is the runtime environment for smart contracts in Ethereum. The formal definition of the EVM is specified in the Ethereum Yellow Paper, original version by ", "Gavin Wood", ".", "[47]", "[", "better\u00a0source\u00a0needed", "]", "[48]", " It is sandboxed and also completely isolated from the network, filesystem or other processes of the host computer system. Every Ethereum node in the network runs an EVM implementation and executes the same instructions. Ethereum Virtual Machines have been implemented in ", "C++", ", ", "Go", ", ", "Haskell", ", ", "Java", ", ", "JavaScript", ", ", "Python", ", ", "Ruby", ", ", "Rust", ", and ", "WebAssembly", " (currently under development).", "[49]", "[50]", "\n", "Smart contracts", "[", "edit", "]", "\n", "Ethereum's ", "smart contracts", " are based on computer language, which developers use to program their own functionalities.", "[51]", " Smart contracts are ", "high-level", " programming ", "abstractions", " that are compiled down to EVM ", "bytecode", " and deployed to the Ethereum blockchain for execution. They can be written in ", "Solidity", " (a language library with similarities to ", "C", " and ", "JavaScript", "), Serpent (similar to ", "Python", "), LLL (a ", "low-level", " ", "Lisp", "-like language), and Mutan (", "Go", "-based, but deprecated). There is also a research-oriented language under development called Viper (a ", "strongly-typed", " ", "Python", "-derived ", "decidable language", ").", "[52]", "\n", "Smart contracts can be public, which opens up the possibility to prove functionality, e.g. self-contained ", "provably fair", " casinos.", "[53]", "\n", "One issue related to using smart contracts on a public blockchain is that bugs, including security holes, are visible to all but cannot be fixed quickly.", "[54]", " One example of this is the 17 June 2016 attack on The DAO, which could not be quickly stopped or reversed.", "[35]", "\n", "There is ongoing research on how to use formal verification to express and prove non-trivial properties. A ", "Microsoft Research", " report noted that writing solid smart contracts can be extremely difficult in practice, using The DAO hack to illustrate this problem. The report discussed tools that Microsoft had developed for verifying contracts, and noted that a large-scale analysis of published contracts is likely to uncover widespread vulnerabilities. The report also stated that it is possible to verify the equivalence of a Solidity program and the EVM code.", "[55]", "\n", "Performance", "[", "edit", "]", "\n", "In Ethereum all smart contracts are stored publicly on every node of the blockchain, which has trade-offs.", "[56]", " Being a ", "blockchain", " means it is\u00a0", "secure by design", "\u00a0and is an example of a distributed computing system with high\u00a0", "Byzantine fault tolerance", ". The downside is that performance issues arise in that every node is calculating all the smart contracts in real time, resulting in lower speeds.", "[56]", " As of January 2016, the Ethereum protocol could process 25 transactions per second.", "[56]", " On 19 December 2016, Ethereum exceeded one million transactions in a single day for the first time.", "[57]", "\n", "\n", "Micro Raiden was launched November 2017.", "[58]", "\n", "Buterin and Joseph Poon (a co-author of ", "Bitcoin", "'s lightning network whitepaper) announced in 2017 their plan to launch a scaling solution called Plasma which creates \"child\" blockchains to the \"main\" parent blockchain.", "[59]", " The plasma project is not without skeptics, specifically Vlad Zamfir (Ethereum's lead researcher on proof of stake) has publicly questioned the plasma project's viability.", "[59]", "\n", "Ethereum engineers have been working on ", "sharding", " the calculations, and the next step (called Ethereum 2) was presented at Devcon 3.", "[60]", "\n", "\n", "Ethereum's blockchain uses ", "Merkle Patricia trees", ", for security reasons, to improve scalability, and to optimize transaction hashing.", "[61]", "\n", "Proposed uses", "[", "edit", "]", "\n", "Many uses have been proposed for Ethereum platform, including ones that are impossible or unfeasible.", "[62]", "[63]", "[41]", " Use case proposals have included finance, the ", "internet-of-things", ", ", "farm-to-table", " produce, ", "electricity sourcing and pricing", ", and ", "sports betting", ".", "[41]", "[64]", " Ethereum is (as of 2017) the leading ", "blockchain", " platform for ", "initial coin offering", " projects, with over 50% market share.", "[65]", "\n", "Ecosystem", "[", "edit", "]", "\n", "The projects listed in this section are not exhaustive and may be outdated.", "\n", "Clients and wallets", "[", "edit", "]", "\n", "These ", "cryptocurrency wallets", " support Ethereum:", "\n", "\n", "Jaxx: Desktop wallet", "[66]", "\n", "KeepKey: Hardware wallet", "[67]", "\n", "Ledger Nano S: Hardware wallet", "[68]", "\n", "Mist: Desktop wallet", "[69]", "\n", "Blockchain Online and iOS/Android Wallet", "[70]", "\n", "Trust Wallet", "[71]", "\n", "TREZOR: Hardware wallet", "[72]", "\n", "\n", "Decentralized applications", "[", "edit", "]", "\n", "\n", "Digital signatures", " that ensure authenticity and proof of existence of documents: the ", "Luxembourg Stock Exchange", " has developed such a system", "[73]", "\n", "Slock.It", " is developing ", "smart locks", "[74]", "\n", "Digital tokens ", "pegged", " to ", "fiat currencies", ": Dai, stablecoin pegged to US dollar.", "[75]", " ", "Decentralized Capital.", "[76]", " Spanish bank ", "Santander", " is also involved in such a project", "[77]", ".", "\n", "Digital tokens ", "pegged", " to ", "gold", ": ", "Digix", "[6]", "[78]", "\n", "Improved ", "digital rights management", " for music: ", "Imogen Heap", " used the technology", "[79]", "\n", "Platforms for ", "prediction markets", ": ", "Augur", ", Gnosis", "[80]", "[81]", " Stox", "[82]", "[83]", "\n", "Platforms for ", "crowdfunding", ": ", "the DAO", "[84]", "[85]", "[34]", "\n", "Social media platforms with economic incentives: ", "Backfeed,", "[86]", " ", "Akasha", "[87]", "\n", "Decentralized marketplaces: ", "FreeMyVunk,", "[88]", " ", "Etheropt,", "[89]", " ", "TransActive Grid", "[90]", "\n", "Remittance: ", "Everex", "[91]", "\n", "Online ", "gambling", ": ", "Etheroll", "[92]", "\n", "Electric car charging management: RWE", "[93]", "\n", "Secure ", "identity systems", " for the Internet: ", "uPort", "[94]", "[95]", "\n", "Labour economics", ": ", "Blocklancer", ",", "[96]", " ", "Ethlance", "[97]", "\n", "Video Games", ": ", "Cryptokitties", " popularity in December 2017 caused the Ethereum network to slow down.", "[98]", "\n", "\n", "Enterprise software", "[", "edit", "]", "\n", "Ethereum-based customized software and networks, independent from the public Ethereum chain, are being tested by ", "enterprise software", " companies.", "[99]", " Interested parties include ", "Microsoft", ", ", "IBM", ", ", "JPMorgan Chase", ",", "[41]", "[100]", " ", "Deloitte", ",", "[101]", " ", "R3", ",", "[102]", " ", "Innovate UK", " (cross-border payments prototype).", "[103]", "[104]", " Barclays, UBS and Credit Suisse are experimenting with Ethereum blockchain to automate Markets in Financial Instruments Directive (MiFID) II requirements.", "[105]", "\n", "Enterprise Ethereum Alliance (EEA)", "[", "edit", "]", "\n", "In March 2017, various blockchain start-ups, research groups, and Fortune 500 companies announced the creation of the Enterprise Ethereum Alliance (EEA) with 30 founding members.", "[106]", " By May, the nonprofit organization had 116 enterprise members\u2014including ", "ConsenSys", ", ", "CME Group", ", ", "Cornell University's research group", ", ", "Toyota Research Institute", ", ", "Samsung SDS", ", ", "Microsoft", ", ", "Intel", ", ", "J.P. Morgan", ", ", "Cooley LLP", ", ", "Merck KGaA", ", ", "DTCC", ", ", "Deloitte", ", ", "Accenture", ", ", "Banco Santander", ", ", "BNY Mellon", ", ", "ING", ", and ", "National Bank of Canada", ".", "[107]", "[108]", "[109]", "\n", "The purpose of the EEA is to coordinate the engineering of an open-source reference standard and private \"permissioned\" version of the Ethereum blockchain that can address the common interests of enterprises in banking, management, consulting, automotive, pharmaceutical, health, technology, mobile, entertainment, and other industries, while working with developers from the Ethereum ecosystem. Certain members of the alliance have also indicated a desire to investigate and collaborate on hybrid architectures to potentially anchor private blockchains to the public Ethereum blockchain in the future, although concerns remain over the security, compliance, and regulations involved in bridging such permissioned and \"permissionless\" blockchains.", "[106]", "\n", "By July 2017, there were over 150 members in the alliance, including recent additions ", "MasterCard", ", ", "Cisco Systems", ", and ", "Scotiabank", ".", "[110]", "\n", "Permissioned ledgers", "[", "edit", "]", "\n", "Ethereum-based ", "permissioned blockchain", " variants are used and being investigated for various projects.", "\n", "\n", "J.P. Morgan Chase", " is developing a permissioned-variant of Ethereum blockchain dubbed \"Quorum.\"", "[111]", " It's designed to toe the line between private and public in the realm of shuffling derivatives and payments. The idea is to satisfy regulators who need seamless access to financial goings-on, while protecting the privacy of parties that don't wish to reveal their identities nor the details of their transactions to the general public.", "[112]", "\n", "Royal Bank of Scotland", " has announced that it has built a Clearing and Settlement Mechanism (CSM) based on the Ethereum distributed ledger and smart contract platform.", "[113]", "[114]", "\n", "\n", "Criticisms", "[", "edit", "]", "\n", "A finance blogger on ", "FT Alphaville", " has pointed out that criminals are using Ethereum to run ", "Ponzi schemes", " and other forms of investment fraud.", "[115]", " The article was based on a paper from the ", "University of Cagliari", ", which placed the number of Ethereum smart contracts which facilitate Ponzi schemes at nearly 10% of 1384 smart contracts examined. However, it also estimated that only 0.05% of the transactions on the network were related to such contracts.", "[116]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"ethereum\"", ". ", "GitHub", ". Retrieved ", "11 January", " 2018", ".", "\u00a0", "\n", "^", " ", "\"Go Ethereum GitHub repository\"", ". ", "Archived", " from the original on 3 October 2016.", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Understanding Ethereum (Report). CoinDesk. 24 June 2016.", "\u00a0", "\n", "^", " ", "Cryptocurrencies: A Brief Thematic Review", " ", "Archived", " 25 December 2017 at the ", "Wayback Machine", ".. Social Science Research Network. Date accessed 28 august 2017.", "\n", "^", " ", "ConsenSys (23 June 2016). ", "\"Ethereum, Gas, Fuel, & Fees\"", ". ", "ConsenSys Media", ". ", "Archived", " from the original on 23 May 2017", ". Retrieved ", "15 January", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Aitken, Roger (23 April 2016). ", "\"Digital Gold 'Done Right' With DigixDAO Crypto-Trading on OpenLedger\"", ". ", "Forbes", ". ", "Archived", " from the original on 28 April 2016", ". Retrieved ", "28 April", " 2016", ".", "\u00a0", "\n", "^", " ", "etherchain.org. ", "\"Accounts - etherchain.org - The ethereum blockchain explorer\"", ". ", "www.etherchain.org", ". ", "Archived", " from the original on 7 August 2017", ". Retrieved ", "30 May", " 2017", ".", "\u00a0", "\n", "^", " ", "De Jesus, Cecille (19 July 2016). ", "\"The DAO Heist Undone: 97% of ETH Holders Vote for the Hard Fork\"", ". Futurism, LLC. ", "Archived", " from the original on 7 August 2017", ". Retrieved ", "16 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Quentson, Andrew (17 July 2016). ", "\"Miners Vote Overwhelmingly in Support of Ethereum's Hardfork\"", ". Cryptocoinnews. ", "Archived", " from the original on 26 June 2017", ". Retrieved ", "14 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Bradley, Miles (17 November 2016). ", "\"CoinDesk Research: Ethereum Hard Fork Had Little Impact on Sentiment\"", ". Coindesk. ", "Archived", " from the original on 8 July 2017", ". Retrieved ", "14 May", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Ethereum hits a fresh record high and is up over 13,000% in a year\"", ". ", "CNBC", ". January 8, 2017.", "\u00a0", "\n", "^", " ", "Vitalik Buterin (2014). ", "\"So where did the name Ethereum come from?\"", ".", "\u00a0", "\n", "^", " ", "\"White Paper\u00b7 ethereum/wiki Wiki \u00b7 GitHub\"", ". ", "Archived", " from the original on 28 March 2015.", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Finley, Klint (27 January 2014). ", "\"Out in the Open: Teenage Hacker Transforms Web Into One Giant Bitcoin Network\"", ". ", "Wired", ". ", "Archived", " from the original on 18 March 2016", ". Retrieved ", "21 March", " 2016", ".", "\u00a0", "\n", "^", " ", "Schneider, Nathan (7 April 2014). ", "\"Code your own utopia: Meet Ethereum, bitcoin's most ambitious successor\"", ". Al Jazeera. ", "Archived", " from the original on 23 February 2016", ". Retrieved ", "21 February", " 2016", ".", "\u00a0", "\n", "^", " ", "Tapscott, Don; Tapscott, Alex (2016-05-07). ", "The Blockchain Revolution: How the Technology Behind Bitcoin is Changing Money, Business, and the World", ". Portfolio. ", "ISBN", "\u00a0", "978-0670069972", ".", "\u00a0", "\n", "^", " ", "Vitalik Buterin (23 January 2014). ", "\"Ethereum: Now Going Public\"", ". Archived from ", "the original", " on 2 March 2014.", "\u00a0", "\n", "^", " ", "Schmid, Valentin (10 May 2014). ", "\"The Entrepreneur: Joe Lubin, COO of Ethereum\"", ". ", "Epoch Times", ". ", "Archived", " from the original on 25 April 2016", ". Retrieved ", "31 March", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Company Overview of Ethereum Switzerland GmbH\"", ". Bloomberg. 20 August 2016. ", "Archived", " from the original on 20 August 2016", ". Retrieved ", "20 August", " 2016", ". ", "The company was founded in 2014 and is based in Baar, Switzerland.", "\u00a0", "\n", "^", " ", "Buterin, Vitalik (9 May 2015). ", "\"Olympic: Frontier Pre-Release\"", ". Ethereum Foundation. ", "Archived", " from the original on 2 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Lombardo, Hans (17 May 2015). ", "\"Ethereum Debuts \"e\u03c0\" Ethereum-on-Raspberry Pi as Olympic Whirs before Frontier Release\"", ". Allcoinsnews. ", "Archived", " from the original on 20 August 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Gupta, Vinay (12 March 2015). ", "\"Getting to the Frontier\"", ". Ethereum Foundation. ", "Archived", " from the original on 8 May 2015", ". Retrieved ", "5 June", " 2015", ".", "\u00a0", "\n", "^", " ", "Vigna, Paul (31 July 2015). ", "\"BitBeat: Ethereum Opens Its 'Frontier' for Business\"", ". The Wall Street Journal. ", "Archived", " from the original on 6 September 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Ethereum Homestead Documentation: The Homestead Release\"", ". Ethereum Foundation. n.d. ", "Archived", " from the original on 6 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Donnelly, Jacob (14 March 2016). ", "\"Ethereum Blockchain Project Launches First Production Release\"", ". CoindDesk. ", "Archived", " from the original on 6 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Wilcke, Jeffrey (29 February 2016). ", "\"Homestead Release\"", ". Ethereum Foundation. ", "Archived", " from the original on 3 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Hertig, Alyssa (22 November 2016). ", "\"Ethereum's Fourth Blockchain Fork: So Far, So Good\"", ". CoinDesk. ", "Archived", " from the original on 27 May 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Gupta, Vinay (3 March 2015). ", "\"The Ethereum Launch Process\"", ". Ethereum Foundation. ", "Archived", " from the original on 6 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Silva, Los (25 February 2017). ", "\"Ethereum's Road Map for 2017\"", ". ETHNews. ", "Archived", " from the original on 2 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "O'Leary, Rachel Rose (19 September 2017). ", "\"Ethereum's Byzantium Testnet Just Verified A Private Transaction\"", ". CoinDesk. ", "Archived", " from the original on 23 September 2017", ". Retrieved ", "24 September", " 2017", ".", "\u00a0", "\n", "^", " ", "Hertig, Alyssa (18 January 2017). ", "\"Where's Casper? Inside Ethereum's Race to Reinvent its Blockchain\"", ". CoinDesk. ", "Archived", " from the original on 30 May 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Hertig, Alyssa (n.d.). ", "\"How Will Ethereum Scale?\"", ". CoinDesk. ", "Archived", " from the original on 10 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Rizzo, Pete (19 September 2016). ", "\"Ethereum's Creator Proves Blockchain Scaling Vision is No Joke\"", ". CoinDesk. ", "Archived", " from the original on 6 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Vigna, Paul (16 May 2016). ", "\"Chiefless Company Rakes in More than $100 Million\"", ". ", "Wall Street Journal", ". ", "Archived", " from the original on 25 June 2017", ". Retrieved ", "14 May", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Popper, Nathaniel (18 June 2016). ", "\"Hacker May Have Taken $50 Million From Cybercurrency Project\"", ". ", "The New York Times", ". ", "Archived", " from the original on 20 June 2017", ". Retrieved ", "14 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Price, Rob (17 June 2016). ", "\"Digital Currency Ethereum is Cratering Amid Claims of a $50 Million Hack\"", ". ", "Business Insider", ". Business Insider. ", "Archived", " from the original on 11 June 2017", ". Retrieved ", "14 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Peck, Morgan (19 July 2016). ", "\"", "\"", "Hard Fork\" Coming to Restore Ethereum Funds to Investors of Hacked DAO\"", ". ", "IEEE Spectrum: Technology, Engineering, and Science News", ". IEEE. ", "Archived", " from the original on 3 March 2017", ". Retrieved ", "14 May", " 2017", ".", "\u00a0", "\n", "^", " ", "\"What is Ethereum? | The Ultimate Beginners' Guide \u2013 CoinCentral\"", ". ", "coincentral.com", ". ", "Archived", " from the original on 11 September 2017", ". Retrieved ", "11 September", " 2017", ".", "\u00a0", "\n", "^", " ", "Hertig, Alyssa (28 July 2016). ", "\"Ethereum's Two Ethereums Explained\"", ". CoinDesk. ", "Archived", " from the original on 24 May 2017", ". Retrieved ", "15 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Redman, Jamie (14 October 2016). ", "\"Ethereum to Hard Fork Two More Times Following Recent Attacks\"", ". ", "Bitcoin.com", ". Bitcoin.com. ", "Archived", " from the original on 2 November 2016", ". Retrieved ", "22 November", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Popper, Nathaniel (27 March 2016). ", "\"Ethereum, a Virtual Currency, Enables Transactions That Rival Bitcoin's\"", ". ", "New York Times", ". ", "Archived", " from the original on 24 July 2016", ". Retrieved ", "2 September", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Spreadsheet of Ether inflation rate\"", ". ", "Presale", ". ", "Google Docs", ". Retrieved ", "2017-07-04", ".", "\u00a0", "\n", "^", " ", "Hertig, Alyssa (18 January 2017). ", "\"Where's Casper? Inside Ethereum's Race to Reinvent its Blockchain\"", ". CoinDesk. ", "Archived", " from the original on 27 June 2017", ". Retrieved ", "4 July", " 2017", ".", "\u00a0", "\n", "^", " ", "Buterin, Vitalik (27 June 2017). ", "\"Once Casper comes out, ~0.5-2% annual seems feasible. Once we add partial tx fee burning and if fees go up, may go to 0 or lower\"", ". ", "Twitter", ". ", "Archived", " from the original on 5 September 2017", ". Retrieved ", "4 July", " 2017", ".", "\u00a0", "\n", "^", " ", "\"What Is Ethereum?\u2014Ethereum Homestead 0.1 documentation\"", ". ", "ethdocs.org", ". ", "Archived", " from the original on 27 April 2017.", "\u00a0", "\n", "^", " ", "Dannen, Chris (2017). \"The EVM\". ", "Introducing Ethereum and Solidity: Foundations of Cryptocurrency and Blockchain Programming for Beginners", ". Apress. pp.\u00a047\u201367. ", "ISBN", "\u00a0", "9781484225356", ".", "\u00a0", "\n", "^", " ", "Ethereum Yellow Paper", " ", "Archived", " 18 February 2015 at the ", "Wayback Machine", ". by Gavin Wood", "\n", "^", " ", "Triantafyllidis, Nikolaos Petros (19 February 2016). \"The Ethereum Project: Ethereum History\". Developing an Ethereum Blockchain Application (Report). University of Amsterdam. p.\u00a020.", "\u00a0", "\n", "^", " ", "Dannen, Chris (27 March 2017). ", "\"Ethereum Devs Publish Roadmap for EVM Upgrade\"", ". CryptoNews. ", "Archived", " from the original on 25 December 2017.", "\u00a0", "\n", "^", " ", "\"Ethereum Client Implementations - EntEthAlliance - Confluence\"", ". ", "entethalliance.atlassian.net", ".", "\u00a0", "\n", "^", " ", "\"How Do Ethereum Smart Contracts Work?\"", ". ", "CoinDesk", ".", "\u00a0", "\n", "^", " ", "Rivlin, Brianne (14 November 2016). ", "\"Geth, Viper, and Wafr: New Ethereum Developments\"", ". ETHNews. ", "Archived", " from the original on 4 September 2017.", "\u00a0", "\n", "^", " ", "Piasecki, Piotr J. (2016). ", "\"Gaming Self-Contained Provably Fair Smart Contract Casinos\"", ". ", "Ledger", ". ", "1", ": 99\u2013110. ", "doi", ":", "10.5195/ledger.2016.29", ". ", "Archived", " from the original on 24 December 2016.", "\u00a0", "\n", "^", " ", "Peck, M. (28 May 2016). ", "\"Ethereum's $150-Million Blockchain-Powered Fund Opens Just as Researchers Call For a Halt\"", ". ", "IEEE Spectrum", ". ", "Institute of Electrical and Electronics Engineers", ". ", "Archived", " from the original on 30 May 2016.", "\u00a0", "\n", "^", " ", "\"Short Paper: Formal Verification of Smart Contracts\"", " ", "(PDF)", ". ", "microsoft.com/", ". Microsoft. Archived from ", "the original", " ", "(PDF)", " on 27 August 2016", ". Retrieved ", "25 August", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Allison, Ian (25 January 2016). ", "\"How are banks actually going to use blockchains and smart contracts?\"", ". ", "International Business Times", ". ", "Archived", " from the original on 8 May 2016", ". Retrieved ", "4 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Filiba, Jack. ", "\"Ethereum Breaks One Million Transactions in a Single Day\"", ". ", "Archived", " from the original on 22 December 2017.", "\u00a0", "\n", "^", " ", "Higgins, Stan. ", "\"", "'", "Microraiden' Payment Channels Go Live on Ethereum Network\"", ". ", "Archived", " from the original on 22 December 2017.", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Hertig, Alyssa (12 August 2017). ", "\"Ethereum + Lightning? Buterin and Poon Unveil 'Plasma' Scaling Plan\"", ". CoinDesk. ", "Archived", " from the original on 24 August 2017", ". Retrieved ", "23 August", " 2017", ".", "\u00a0", "\n", "^", " ", "Galeon, Dom. ", "\"Ethereum's Co-Founder Just Unveiled His Plan for the Future of Cryptocurrency\"", ". ", "Archived", " from the original on 9 November 2017.", "\u00a0", "\n", "^", " ", "Vitalik Buterin. ", "\"Merkling in Ethereum\"", ". ", "Ethereum.org", ".", "\u00a0", "\n", "^", " ", "Greenspan, Gideon (17 April 2016). ", "\"Why Many Smart Contract Use Cases Are Simply Impossible - CoinDesk\"", ". ", "CoinDesk", ". ", "Archived", " from the original on 7 August 2017.", "\u00a0", "\n", "^", " ", "\"This Is Your Company on Blockchain\"", ". ", "Bloomberg Businessweek", ". ", "Archived", " from the original on 14 September 2016", ". Retrieved ", "14 September", " 2016", ".", "\u00a0", "\n", "^", " ", "Bordet, Juli\u00e1n (21 March 2016). ", "\"Decentralized Autonomous Organizations: Ethereum Sparks Up Googles of Tomorrow\"", ". ", "The Cointelegraph", ". ", "Archived", " from the original on 27 June 2016", ". Retrieved ", "21 July", " 2016", ".", "\u00a0", "\n", "^", " ", "\"ICO Market Research: The Leading Blockchain Platforms Of 2017 - ICO Watch List Blog\"", ". ", "ICO Watch List Blog", ". 17 August 2017. ", "Archived", " from the original on 17 August 2017", ". Retrieved ", "20 August", " 2017", ".", "\u00a0", "\n", "^", " ", "Redman, Jamie (13 February 2016). ", "\"Jaxx: The New Fleet of Bitcoin & Ethereum Wallets\"", ". Saint Bitts LLC. ", "Archived", " from the original on 5 August 2017.", "\u00a0", "\n", "^", " ", "Silva, Los (23 November 2016). ", "\"KeepKey Hard Wallet Supports Ethereum\"", ". ETHNews. ", "Archived", " from the original on 19 February 2017.", "\u00a0", "\n", "^", " ", "Faife, Corin (26 November 2016). ", "\"Ledger Launches Hardware Wallet for the Smart Contract Era\"", ". CoinDesk. ", "Archived", " from the original on 30 June 2017.", "\u00a0", "\n", "^", " ", "\"A Review of The Best Ethereum Wallets\"", ". ", "Archived", " from the original on 26 March 2017.", "\u00a0", "\n", "^", " ", "\"Blockchain Digital Wallet\"", ".", "\u00a0", "\n", "^", " ", "\"Trust Wallet\"", ".", "\u00a0", "\n", "^", " ", "\"TREZOR integration with MyEtherWallet\"", ". 3 February 2017.", "\u00a0", "\n", "^", " ", "\"Luxembourg Stock Exchange introduces blockchain into reporting service\"", ". 2016-10-18", ". Retrieved ", "2016-11-04", ".", "\u00a0", "\n", "^", " ", "Allison, Ian. ", "\"Ethereum-based Slock.it reveals first ever lock opened with money\"", ". ", "International Business Times UK", ". ", "Archived", " from the original on 2 April 2016.", "\u00a0", "\n", "^", " ", "Prince, Eliot. ", "\"MakerDAO Launches New Dai Stablecoin on the Ethereum Blockchain\"", ". ", "Cryptoslate", ".", "\u00a0", "\n", "^", " ", "Allison, Ian (12 September 2016). ", "\"Decentralized Capital issuing fiat-backed digital assets on the Ethereum blockchain\"", ". ", "International Business Times", ". ", "Archived", " from the original on 18 September 2016.", "\u00a0", "\n", "^", " ", "\"Santander Confirms Fiat-backed Token Project on Ethereum Blockchain\"", ". ", "CoinTelegraph", ". ", "Archived", " from the original on 17 December 2016", ". Retrieved ", "15 January", " 2017", ".", "\u00a0", "\n", "^", " ", "Buntinx, JP (28 April 2016). ", "\"DigixDAO DGD Assets To Be Listed on OpenLedger\"", ". The Merkle. ", "Archived", " from the original on 2 June 2016", ". Retrieved ", "29 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Allison, Ian (4 October 2015). ", "\"Imogen Heap shows how smart music contracts work using Ethereum\"", ". ", "International Business Times", ". ", "Archived", " from the original on 21 March 2016", ". Retrieved ", "24 March", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Ethereum Prediction Market Service Takes First Steps With Beta Launch - CoinDesk\"", ". ", "CoinDesk", ". 17 August 2016. ", "Archived", " from the original on 7 February 2017", ". Retrieved ", "6 February", " 2017", ".", "\u00a0", "\n", "^", " ", "\"ICO Roundup 2017 by Cointelegraph: Cashing In On Blockchain Apps' Mainstream Year\"", ". ", "CoinTelegraph", ". ", "Archived", " from the original on 7 February 2017", ". Retrieved ", "6 February", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Stox Prediction Platform Closes ICO after One Day; Raises over $30 Million\"", ". CryptoCoinsNews. 2 August 2017. ", "Archived", " from the original on 29 September 2017", ". Retrieved ", "17 November", " 2017", ".", "\u00a0", "\n", "^", " ", "[1]", "[", "dead link", "]", "\n", "^", " ", "Rennie, Ellie (12 May 2016). ", "\"The radical DAO experiment\"", ". ", "Swinburne News", ". Swinburne University of Technology. ", "Archived", " from the original on 16 May 2016", ". Retrieved ", "12 May", " 2016", ". ", "When it reaches the end of the funding phase on 28 May, it will begin contracting blockchain-based start-ups to create innovative technologies. The extraordinary thing about The DAO is that no single entity owns it, and it has no conventional management structure or board of directors.", "\u00a0", "\n", "^", " ", "Allison, Ian (30 April 2016). ", "\"Ethereum reinvents companies with launch of The DAO\"", ". ", "International Business Times", ". ", "Archived", " from the original on 1 May 2016", ". Retrieved ", "1 May", " 2016", ".", "\u00a0", "\n", "^", " ", "Weinglass, Simona (19 August 2015). ", "\"Backfeed wants to decentralize the Internet and help you earn what you deserve\"", ". Geektime.com. ", "Archived", " from the original on 14 March 2016", ". Retrieved ", "24 March", " 2016", ".", "\u00a0", "\n", "^", " ", "CFA, Adam Hayes, (3 February 2017). ", "\"This New Social Network is Powered by Ethereum Technology\"", ". ", "Investopedia", ". ", "Archived", " from the original on 6 February 2017", ". Retrieved ", "6 February", " 2017", ".", "\u00a0", "\n", "^", " ", "Allison, Ian (22 December 2015). ", "\"Game-changers FreeMyVunk and Digix allow video gamers to trade virtual assets for physical gold\"", ". ", "International Business Times", ". ", "Archived", " from the original on 17 March 2016", ". Retrieved ", "24 March", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Decentralized Options Exchange Etheropt Uses Automated Ethereum Smart Contract\"", ". ", "Archived", " from the original on 8 January 2017.", "\u00a0", "\n", "^", " ", "Rutkin, Aviva (2 March 2016). ", "\"Blockchain-based microgrid gives power to consumers in New York\"", ". ", "New Scientist", ". ", "Archived", " from the original on 22 March 2016", ". Retrieved ", "24 March", " 2016", ".", "\u00a0", "\n", "^", " ", "Mizrahi, Avi (1 December 2016). ", "\"Everex Helps Migrant Workers Send Remittance Back to Myanmar via Ethereum\"", ". ", "Finance Magnates", ". ", "Archived", " from the original on 20 December 2016", ". Retrieved ", "14 December", " 2016", ".", "\u00a0", "\n", "^", " ", "Bitcoinist. ", "\"Ethereum Dice Game Etheroll Announces Crowdfund Opening Feb. 13\"", ". ", "bitcoinist.com", ". ", "Archived", " from the original on 19 August 2017", ". Retrieved ", "18 August", " 2017", ".", "\u00a0", "\n", "^", " ", "Higgins, Stan. ", "\"Why a German Power Company is Using Ethereum to Test Blockchain Car Charging\"", ". ", "CoinDesk", ". ", "Archived", " from the original on 2 July 2017", ". Retrieved ", "2 May", " 2017", ".", "\u00a0", "\n", "^", " ", "EconoTimes. ", "\"ConsenSys uPort wins International Blockchain Summit - EconoTimes\"", ". ", "EconoTimes", ". ", "Archived", " from the original on 8 February 2017", ". Retrieved ", "6 February", " 2017", ".", "\u00a0", "\n", "^", " ", "Allison, Ian (23 September 2016). ", "\"ConsenSys uPort scoops first prize in International Blockchain Summit Demo Day\"", ". ", "International Business Times UK", ". ", "Archived", " from the original on 8 February 2017", ". Retrieved ", "6 February", " 2017", ".", "\u00a0", "\n", "^", " ", "Tkatchuk, Ralph (20 November 2017). ", "\"Can Blockchain Supercharge the Gig Economy?\"", ". ", "Dataconomy", ". ", "Archived", " from the original on 20 November 2017.", "\u00a0", "\n", "^", " ", "Gebron, Hunter (12 February 2017). ", "\"Ethlance and the Rise of the On-Demand Economy\"", ". ", "Archived", " from the original on 1 December 2017.", "\u00a0", "\n", "^", " ", "\"CryptoKitties craze slows down transactions on Ethereum\"", ". 12 May 2017.", "\u00a0", "\n", "^", " ", "\"Big Business Giants From Microsoft to J.P. Morgan Are Getting Behind Ethereum\"", ". ", "Fortune", ". ", "Archived", " from the original on 29 September 2017", ". Retrieved ", "8 November", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Hyperledger blockchain code almost comes together for IoT\"", ". Rethink Research. ", "Archived", " from the original on 16 August 2016", ". Retrieved ", "23 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Allison, Ian (3 May 2016). ", "\"Deloitte to build Ethereum-based 'digital bank' with New York City's ConsenSys\"", ". ", "International Business Times", ". ", "Archived", " from the original on 6 May 2016.", "\u00a0", "\n", "^", " ", "Allison, Ian (20 January 2016). ", "\"R3 connects 11 banks to distributed ledger using Ethereum and Microsoft Azure\"", ". ", "International Business Times", ". ", "Archived", " from the original on 23 February 2016", ". Retrieved ", "23 February", " 2016", ".", "\u00a0", "\n", "^", " ", "\"UK Government Awards \u00a3248k for Ethereum Prototype\"", ". ", "CoinDesk", ". ", "Archived", " from the original on 5 June 2016.", "\u00a0", "\n", "^", " ", "\"Settlement using blockchain to Automate Foreign Exchange in a Regulated environment (SAFER)\"", ". ", "Innovate UK", ". ", "Archived", " from the original on 4 May 2016.", "\u00a0", "\n", "^", " ", "\"Barclays, UBS, Credit Suisse Seek Ethereum Blockchain Solution For MiFID II Regulations\"", ". ", "ETHNews.com", ". Retrieved ", "2017-12-29", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Popper, Nathaniel (27 February 2017). ", "\"Business Giants to Announce Creation of a Computing System Based on Ethereum\"", ". ", "New York Times", ". ", "Archived", " from the original on 20 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Peck, Morgan (2 March 2017). ", "\"Corporate Titans Unite to Build an Enterprise Version of the Ethereum Blockchain\"", ". Institute of Electrical and Electronics Engineers (IEEE). ", "Archived", " from the original on 17 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Enterprise Ethereum Alliance expands dramatically announcing 86 new members\"", " ", "(PDF)", " (Press release). Enterprise Ethereum Alliance (EEA). 19 May 2017. ", "Archived", " ", "(PDF)", " from the original on 7 June 2017", ". Retrieved ", "5 June", " 2017", ".", "\u00a0", "\n", "^", " ", "Shin, Laura (22 May 2017). ", "\"Ethereum Enterprise Alliance Adds 86 New Members Including DTCC, State Street And Infosys\"", ". Forbes. ", "Archived", " from the original on 22 May 2017", ". Retrieved ", "22 May", " 2017", ".", "\u00a0", "\n", "^", " ", "https://www.inc.com/brian-d-evans/the-enterprise-ethereum-alliance-just-got-a-whole-.html", "\n", "^", " ", "\"JP Morgan's Quorum blockchain powers new correspondent banking network \" Banking Technology\"", ". ", "www.bankingtech.com", ". ", "Archived", " from the original on 9 November 2017", ". Retrieved ", "8 November", " 2017", ".", "\u00a0", "\n", "^", " ", "Hacket, Robert. ", "\"Why J.P. Morgan Chase Is Building a Blockchain on Ethereum\"", ". ", "Fortune", ". ", "Archived", " from the original on 2 February 2017.", "\u00a0", "\n", "^", " ", "\"Proving Ethereum for the Clearing Use Case\"", " ", "(PDF)", ". ", "Archived", " ", "(PDF)", " from the original on 10 October 2016.", "\u00a0", "\n", "^", " ", "Allison, Ian (7 December 2016). ", "\"Blockchain: RBS builds Ethereum-based distributed clearing house\"", ". ", "IB Times", ". ", "Archived", " from the original on 13 April 2017", ". Retrieved ", "8 May", " 2017", ".", "\u00a0", "\n", "^", " ", "Kaminska, Izabella (1 June 2017). ", "\"It's not a ponzi, it's a smart ponzi\"", ". ", "FT Alphaville", ". ", "Archived", " from the original on 23 July 2017.", "\u00a0", "\n", "^", " ", "Bartoletti, Carta; et al. ", "\"Dissecting Ponzi schemes on Ethereum: identification, analysis, and impact\"", " ", "(PDF)", ". Universita di Cagliari. ", "Archived", " ", "(PDF)", " from the original on 17 August 2017", ". Retrieved ", "30 July", " 2017", ".", "\u00a0", "CS1 maint: Explicit use of et al. (", "link", ")", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Ethereum", ".", "\n", "\n", "\n", "\n", "Official website", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Cryptocurrencies", "\n", "\n", "\n", "\n", "SHA-256", "-based", "\n", "\n", "\n", "\n", "Bitcoin", "\n", "Bitcoin Cash", "\n", "Factom", "\n", "Namecoin", "\n", "NuBits", "\n", "Peercoin", "\n", "Titcoin", "\n", "\n", "\n", "\n", "\n", "\n", "Scrypt", "-based", "\n", "\n", "\n", "\n", "Auroracoin", "\n", "Dogecoin", "\n", "Litecoin", "\n", "PotCoin", "\n", "\n", "\n", "\n", "\n", "\n", "Zerocoin", "-based", "\n", "\n", "\n", "\n", "Zcash", "\n", "Zcoin", "\n", "Zclassic", "\n", "ZeroVert", "\n", "Bitcoin Gold", "\n", "\n", "\n", "\n", "\n", "\n", "CryptoNote", "-based", "\n", "\n", "\n", "\n", "Boolberry", "\n", "Bytecoin", "\n", "Monero", "\n", "\n", "\n", "\n", "\n", "\n", "Ethash", "-based", "\n", "\n", "\n", "\n", "Ethereum", "\n", "Ethereum Classic", "\n", "KodakCoin", "\n", "Ubiq", "\n", "\n", "\n", "\n", "\n", "\n", "Other ", "proof-of-work", "\n", "\n", "\n", "\n", "Dash", "\n", "Decred", "\n", "DigiByte", "\n", "IOTA", "\n", "Myriadcoin", "\n", "Primecoin", "\n", "Sia", "\n", "Zerocash", "\n", "\n", "\n", "\n", "\n", "\n", "Non ", "proof-of-work", "\n", "\n", "\n", "\n", "Ardor", "\n", "BitShares", "\n", "BlackCoin", "\n", "Burstcoin", "\n", "Cardano", "\n", "Counterparty", "\n", "Enigma", "\n", "FunFair", "\n", "Gridcoin", "\n", "Lisk", "\n", "Melonport", "\n", "NEM", "\n", "NEO", "\n", "Nxt", "\n", "OmiseGO", "\n", "Polkadot", "\n", "Qtum", "\n", "RChain", "\n", "Ripple", "\n", "Shadow", "\n", "Simple Token", "\n", "Stellar", "\n", "Steem", "\n", "Waves Platform", "\n", "\n", "\n", "\n", "\n", "\n", "Consensus", " mechanisms", "\n", "\n", "\n", "\n", "Proof-of-authority", "\n", "Proof-of-space", "\n", "Proof-of-stake", "\n", "Proof-of-work system", "\n", "\n", "\n", "\n", "\n", "\n", "Technology", "\n", "\n", "\n", "\n", "Blockchain", "\n", "Fork", "\n", "Cryptocurrency tumbler", "\n", "Zerocoin", "\n", "Lightning Network", "\n", "Atomic swap", "\n", "\n", "\n", "\n", "\n", "\n", "Related topics", "\n", "\n", "\n", "\n", "Anonymous Internet banking", "\n", "Bitcoin network", "\n", "Complementary currency", "\n", "Crypto-anarchism", "\n", "Cryptocurrency exchange", "\n", "Digital currency", "\n", "Double-spending", "\n", "Electronic money", "\n", "Initial coin offering", "\n", "Airdrop", "\n", "Virtual currency", "\n", "Crypto Valley", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Category", "\n", " ", "Commons", "\n", " ", "List", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 20 January 2018, at 06:38."}, +{"title": "Laravel", "text": ["\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article has multiple issues.", " Please help ", "improve it", " or discuss these issues on the ", "talk page", ". ", "(", "Learn how and when to remove these template messages", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "relies too much on ", "references", " to ", "primary sources", ". ", "Please improve this by adding ", "secondary or tertiary sources", ".", " ", "(September 2015)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Some of this article's ", "listed sources", " ", "may not be ", "reliable", ". ", "Please help this article by looking for better, more reliable sources. Unreliable citations may be challenged or deleted.", " ", "(September 2015)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "has an unclear citation style", ". ", "The references used may be made clearer with a different or consistent style of ", "citation", ", ", "footnoting", ", or ", "external linking", ". ", "Violates Wikipedia:External links: \"Wikipedia articles may include links to web pages outside Wikipedia (external links), but they should not normally be used in the body of an article.\".", " ", "(November 2017)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "Laravel", "\n", "\n", "\n", "\n", "\n", "Developer(s)", "\n", "Taylor Otwell", "\n", "\n", "\n", "Initial release", "\n", "June\u00a02011", "; 6\u00a0years ago", "\u00a0(", "2011-06", ")", "[1]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "\n", "5.5.0", "[2]", " / August\u00a030, 2017", "; 4 months ago", "\u00a0(", "2017-08-30", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Repository", "\n", "\n", "\n", "\n", "https://github.com/laravel/framework", "\n", "\n", "\n", "\n", "\n", "\n", "Development status", "\n", "Active", "\n", "\n", "\n", "Written in", "\n", "PHP", "\u00a07", "[a]", "\n", "\n", "\n", "Operating system", "\n", "Cross-platform", "\n", "\n", "\n", "Type", "\n", "Web framework", "\n", "\n", "\n", "License", "\n", "MIT License", "\n", "\n", "\n", "Website", "\n", "laravel", ".com", "\n", "\n", "\n", "Laravel", " is a ", "free", ", open-source", "[4]", " PHP ", "web framework", ", created by Taylor Otwell and intended for the development of web applications following the ", "model\u2013view\u2013controller", " (MVC) ", "architectural pattern", ". Some of the features of Laravel are a modular ", "packaging system", " with a dedicated dependency manager, different ways for accessing ", "relational databases", ", utilities that aid in ", "application deployment", " and maintenance, and its orientation toward ", "syntactic sugar", ".", "[5]", "[6]", ":", "2,5\u20139", "[7]", "[8]", "\n", "As of March 2015", "[update]", ", Laravel is regarded as one of the most popular ", "PHP", " frameworks, together with ", "Symfony", ", Zend, ", "CodeIgniter", ", ", "Yii2", " and others.", "[6]", ":", "1", "[9]", "\n", "The ", "source code", " of Laravel is hosted on ", "GitHub", " and licensed under the terms of ", "MIT License", ".", "[10]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "\n", "1.1", " ", "Release history", "\n", "\n", "\n", "2", " ", "Features", "\n", "\n", "2.1", " ", "Featured packages", "\n", "2.2", " ", "Artisan CLI", "\n", "\n", "\n", "3", " ", "Conferences", "\n", "4", " ", "Laravel Partners", "\n", "5", " ", "See also", "\n", "6", " ", "Notes", "\n", "7", " ", "References", "\n", "8", " ", "Further reading", "\n", "9", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "Taylor Otwell created Laravel as an attempt to provide a more advanced alternative to the CodeIgniter framework, which did not provide certain features such as built-in support for user ", "authentication", " and ", "authorization", ". Laravel's first ", "beta release", " was made available on June 9, 2011, followed by the Laravel\u00a01 release later in the same month. Laravel\u00a01 included built-in support for authentication, ", "localisation", ", ", "models", ", ", "views", ", ", "sessions", ", routing and other mechanisms, but lacked support for ", "controllers", " that prevented it from being a true ", "MVC", " framework.", "[1]", "\n", "Laravel\u00a02 was released in September 2011, bringing various improvements from the author and community. Major new features included the support for controllers, which made Laravel\u00a02 a fully MVC-compliant framework, built-in support for the ", "inversion of control", " (IoC) principle, and a ", "templating system", " called ", "Blade", ". As a downside, support for third-party ", "packages", " was removed in Laravel\u00a02.", "[1]", "\n", "Laravel\u00a03 was released in February 2012 with a set of new features including the ", "command-line interface", " (CLI) named ", "Artisan", ", built-in support for more ", "database management systems", ", database migrations as a form of ", "version control", " for database layouts, support for handling ", "events", ", and a packaging system called ", "Bundles", ". An increase of Laravel's userbase and popularity lined up with the release of Laravel\u00a03.", "[1]", "\n", "Laravel\u00a04, codenamed ", "Illuminate", ", was released in May 2013. It was made as a complete rewrite of the Laravel framework, migrating its layout into a set of separate packages distributed through ", "Composer", ", which serves as an ", "application-level package manager", ". Such a layout improved the extensibility of Laravel\u00a04, which was paired with its official regular release schedule spanning six months between minor ", "point releases", ". Other new features in the Laravel\u00a04 release include ", "database seeding", " for the initial population of databases, support for ", "message queues", ", built-in support for sending different types of email, and support for delayed deletion of database records called ", "soft deletion", ".", "[1]", "[11]", ":", "18\u201319", "\n", "Laravel\u00a05 was released in February 2015 as a result of internal changes that ended up in renumbering the then-future Laravel\u00a04.3 release. New features in the Laravel\u00a05 release include support for scheduling periodically executed tasks through a package called ", "Scheduler", ", an abstraction layer called ", "Flysystem", " that allows remote storage to be used in the same way as local ", "file systems", ", improved handling of package assets through ", "Elixir", ", and simplified externally handled authentication through the optional ", "Socialite", " package. Laravel\u00a05 also introduced a new internal ", "directory tree", " structure for developed applications.", "[6]", ":", "13\u201314", "[12]", "\n", "Laravel\u00a05.1, released in June 2015, is the first release of Laravel to receive ", "long-term support", " (LTS), with planned availability of ", "bug fixes", " for two years and ", "security patches", " for three years. LTS releases of Laravel are planned to be released every two years.", "[13]", "\n", "Laravel\u00a05.3, released in August 23, 2016, The new features in 5.3 are focused on improving developer speed by adding additional out of the box improvements for common tasks.", "[14]", " ", "[15]", "\n", "Laravel 5.4, released in January 24, 2017, This release has many new features, like Laravel Dusk, Laravel Mix, Blade Components and Slots, Markdown Emails, Automatic Facades, Route Improvements, Higher Order Messaging for Collections, and many others.", "[16]", "\n", "Laravel 5.5, released in August 30, 2017", "\n", "Release history", "[", "edit", "]", "\n", "For LTS releases, such as Laravel 5.1, bug fixes are provided for 2 years and security fixes are provided for 3 years. These releases provide the longest window of support and maintenance. For general releases, bug fixes are provided for 6 months and security fixes are provided for 1 year.", "[17]", "\n", "\n", "\n", "\n", "Version", "\n", "Release date", "\n", "Notes", "\n", "\n", "\n", "Old version, no longer supported:", " 1.0", "\n", "June 2011", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 2.0", "\n", "September 2011", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 3.0", "\n", "February 22, 2012", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 3.1", "\n", "March 27, 2012", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 3.2", "\n", "May 22, 2012", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 4.0", "\n", "May 28, 2013", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 4.1", "\n", "December 11, 2013", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 4.2", "\n", "June 1, 2014", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 5.0", "\n", "February 4, 2015", "\n", "NA", "\n", "\n", "\n", "Older version, yet still supported:", " 5.1 LTS", "\n", "June 9, 2015", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 5.2", "\n", "December 21, 2015", "\n", "NA", "\n", "\n", "\n", "Old version, no longer supported:", " 5.3", "\n", "August 23, 2016", "\n", "NA", "\n", "\n", "\n", "Older version, yet still supported:", " 5.4", "\n", "January 24, 2017", "\n", "NA", "\n", "\n", "\n", "Current stable version:", " ", "5.5 LTS", "\n", "August 30, 2017", "\n", "NA", "\n", "\n", "\n", "Future release:", " 5.6", "\n", "February, 2018", "\n", "NA", "\n", "\n", "\n", "\n", "\n", "Legend:", "\n", "Old version", "\n", "Older version, still supported", "\n", "Current stable version", "\n", "Latest preview version", "\n", "Future release", "\n", "\n", "\n", "Source: GitHub", "[18]", "\n", "Features", "[", "edit", "]", "\n", "The following features serve as Laravel's key design points (where not specifically noted, descriptions refer to the features of Laravel\u00a03):", "[5]", "[6]", ":", "5\u20139", "[7]", "[8]", "[19]", "\n", "\n", "Bundles", " provide a modular ", "packaging system", " since the release of Laravel\u00a03, with bundled features already available for easy addition to applications. Furthermore, Laravel\u00a04 uses Composer as a dependency manager to add framework-agnostic and Laravel-specific PHP packages available from the ", "Packagist", " repository.", "[20]", "\n", "Eloquent ORM", " (", "object-relational mapping", ") is an advanced PHP implementation of the ", "active record pattern", ", providing at the same time internal methods for enforcing constraints on the relationships between ", "database", " objects. Following the active record pattern, Eloquent ORM presents ", "database tables", " as ", "classes", ", with their ", "object instances", " tied to single ", "table rows", ".", "[21]", "[22]", "\n", "Query builder", ", available since Laravel\u00a03, provides a more direct database access alternative to the Eloquent ORM. Instead of requiring ", "SQL queries", " to be written directly, Laravel's query builder provides a set of classes and ", "methods", " capable of building queries programmatically. It also allows selectable ", "caching", " of the results of executed queries.", "[23]", "\n", "Application logic", " is an integral part of developed applications, implemented either by using ", "controllers", " or as part of the route declarations. The ", "syntax", " used to define application logic is similar to the one used by ", "Sinatra", " framework.", "\n", "Reverse routing", " defines a relationship between the links and routes, making it possible for later changes to routes to be automatically propagated into relevant links. When the links are created by using names of existing routes, the appropriate ", "uniform resource identifiers", " (URIs) are automatically created by Laravel.", "\n", "Restful controllers", " provide an optional way for separating the logic behind serving ", "HTTP GET", " and ", "POST", " requests.", "\n", "Class auto loading", " provides automated loading of PHP classes without the need for manual maintenance of inclusion paths. On-demand loading prevents inclusion of unnecessary components, so only the actually used components are loaded.", "\n", "View", " composers", " serve as customizable logical code units that can be executed when a view is loaded.", "\n", "Blade", " ", "templating engine", " combines one or more templates with a ", "data model", " to produce resulting views, doing that by ", "transpiling", " the templates into cached PHP code for improved performance. Blade also provides a set of its own ", "control structures", " such as ", "conditional statements", " and ", "loops", ", which are internally mapped to their PHP counterparts. Furthermore, Laravel services may be called from Blade templates, and the templating engine itself can be extended with custom directives.", "[24]", "[25]", "\n", "IoC containers", " make it possible for new objects to be generated by following the ", "inversion of control", " (IoC) principle, in which the framework calls into the application- or task-specific code, with optional instantiating and referencing of new objects as ", "singletons", ".", "\n", "Migrations", " provide a ", "version control", " system for ", "database schemas", ", making it possible to associate changes in the application's ", "codebase", " and required changes in the database layout. As a result, this feature simplifies the ", "deployment", " and updating of Laravel-based applications.", "[26]", "\n", "Database seeding", " provides a way to populate database tables with selected default data that can be used for application ", "testing", " or be performed as part of the initial application setup.", "[26]", "\n", "Unit testing", " is provided as an integral part of Laravel,", "[11]", ":", "61\u201362", " which itself contains unit tests that detect and prevent ", "regressions", " in the framework. Unit tests can be run through the provided ", "artisan", " ", "command-line utility", ".", "\n", "Automatic pagination", " simplifies the task of implementing pagination, replacing the usual manual implementation approaches with automated methods integrated into Laravel.", "\n", "Form request", " is a feature of Laravel\u00a05 that serves as the base for ", "form", " input validation by internally binding ", "event", " listeners, resulting in automated invoking of the form validation methods and generation of the actual form.", "[27]", "\n", "Homestead", " - a ", "Vagrant", " ", "virtual machine", " that provides Laravel developers with all the tools necessary to develop Laravel straight out of the box, including, ", "Ubuntu", ", ", "Gulp", " , Bower and other development tools that are useful in developing full scale web applications.", "[28]", "\n", "\n", "Featured packages", "[", "edit", "]", "\n", "Ready-to-use bundles provided by Laravel through Composer and Packagist include the following:", "[3]", "\n", "\n", "Cashier", ", introduced in Laravel\u00a04.2, provides an interface for managing subscription billing services provided by ", "Stripe", ", such as handling ", "coupons", " and generating ", "invoices", ".", "\n", "SSH", ", introduced in Laravel\u00a04.1, allows programmatic execution of ", "CLI", " commands on remote servers using the ", "Secure Shell", " (SSH) as an encrypted ", "network protocol", ".", "\n", "Scheduler", ", introduced in Laravel\u00a05.0, is an addition to the Artisan that allows programmatic scheduling of periodically executed tasks. Internally, Scheduler relies on the ", "cron", " daemon to run a single Artisan job that, in turn, executes the configured tasks.", "\n", "Flysystem", ", introduced in Laravel\u00a05.0, is a ", "file system", " abstraction layer that allows local file systems and ", "cloud", "-based storage services provided by ", "Amazon\u00a0S3", " and ", "Rackspace Cloud", " to be used transparently and in the same way.", "\n", "Socialite", ", introduced in Laravel\u00a05.0 as an optional package, provides simplified mechanisms for authentication with different ", "OAuth", " providers, including ", "Facebook", ", ", "Twitter", ", ", "Google", ", ", "GitHub", " and ", "Bitbucket", ".", "[6]", ":", "13", "\n", "\n", "Artisan CLI", "[", "edit", "]", "\n", "Laravel's ", "command-line interface", " (CLI), called ", "Artisan", ", was initially introduced in Laravel\u00a03 with a limited set of capabilities. Laravel's later migration to a Composer-based architecture allowed Artisan to incorporate different components from the ", "Symfony", " framework, resulting in the availability of additional Artisan features in Laravel\u00a04.", "[11]", ":", "73\u201383", "[29]", "\n", "The features of Artisan are mapped to different subcommands of the ", "artisan", " command-line utility, providing functionality that aids in managing and building Laravel-based applications. Common uses of Artisan include managing database migrations and seeding, publishing package assets, and generating ", "boilerplate code", " for new controllers and migrations; the latter frees the developer from creating proper code ", "skeletons", ". The functionality and capabilities of Artisan can also be expanded by implementing new custom commands, which, for example, may be used to automate application-specific recurring tasks.", "[11]", ":", "73\u201383", "[29]", "\n", "Server requirements", "\n", "The Laravel framework has a few system requirements. Of course, all of these requirements are satisfied by the Laravel Homestead virtual machine, so it is highly recommended that you use Homestead as your local Laravel development environment.", "\n", "However, if you are not using Homestead, you will need to make sure your server meets the following requirements:", "\n", "\n ", "\u2022 PHP >= 7.0.0", "\n \u2022 OpenSSL PHP Extension\n \u2022 PDO PHP Extension\n \u2022 Mbstring PHP Extension\n \u2022 Tokenizer PHP Extension\n \u2022 XML PHP Extension\n", "\n", "Conferences", "[", "edit", "]", "\n", "Laracon", " is the official Laravel conference centered around the Laravel framework, covering its development, uses, and related general ", "software development", " topics. Laracon has taken place in the ", "United States", ", ", "Europe", " and online in the past.", "[30]", "[31]", " Typically, the conference happens in the ", "United States", " and ", "Europe", " every year. 2017 was the first year a Laracon was held as an online event only. As of March 2017, there are plans for more Laracons to be held online in the future.", "[32]", " Each year the conference has a different variety of sponsors and organizers, but Laravel, Laravel News and UserScape are usually the primary organizers. As of March 2017", "[update]", ", the following Laracons have been held or are announced:", "\n", "\n", "\n", "\n", "\nTaylor Otwell at the 2013 US Laracon", "\n", "\n", "\n", "\n", "\n", "Date", "\n", "Location", "\n", "\n", "\n", "February 22\u201323, 2013", "\n", "Washington, D.C.", "\n", "\n", "\n", "August 30\u201331, 2013", "[33]", "\n", "Amsterdam", "\n", "\n", "\n", "May 15\u201316, 2014", "\n", "New York City", "\n", "\n", "\n", "August 28\u201330, 2014", "[34]", "\n", "Amsterdam", "\n", "\n", "\n", "August 11\u201312, 2015", "[35]", "\n", "Louisville, Kentucky", "\n", "\n", "\n", "August 25\u201326, 2015", "[36]", "\n", "Amsterdam", "\n", "\n", "\n", "July 27\u201329, 2016", "[37]", "\n", "Louisville, Kentucky", "\n", "\n", "\n", "August 23\u201324, 2016", "[38]", "\n", "Amsterdam", "\n", "\n", "\n", "March 8, 2017", "[39]", "\n", "Online", "\n", "\n", "\n", "July 25\u201326, 2017", "[40]", "\n", "New York City", "\n", "\n", "\n", "August 28\u201330, 2017", "[41]", "[42]", "\n", "Amsterdam", "\n", "\n", "\n", "Laravel Partners", "[", "edit", "]", "\n", "On April 7, 2017, Taylor Otwell announced the Partners section of the Laravel website. The intention was to provide the Laravel community a recommended list of trusted companies who provide best-in-class Laravel development and guidance.", "[43]", " As of September, 2017, the current list of Laravel Partners includes", "\n", "\n", "Vehikl", "\n", "Tighten Co.", "\n", "Kirschbaum Development Group", "\n", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Computer programming portal", "\n", "Free software portal", "\n", "\n", "\n", "\n", "Comparison of web frameworks", "\n", "Comparison of web template engines", "\n", "\n", "Notes", "[", "edit", "]", "\n", "\n", "\n", "\n", "^", " ", "PHP version 5.3.7 or newer is required for Laravel versions 4.1 and older, Laravel\u00a04.2 and 5.0 require at least PHP\u00a05.4, while Laravel\u00a05.1 requires PHP\u00a05.5.9 or newer. Laravel\u00a05.5 requires PHP\u00a07.0.0 or newer.", "[3]", "\n", "\n", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "Maks Surguy (July 27, 2013). ", "\"History of Laravel PHP framework, Eloquence emerging\"", ". ", "maxoffsky.com", ". Retrieved ", "May 10,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"laravel/framework: Release v5.5.0\"", ". ", "github.com", ". August 30, 2017", ". Retrieved ", "August 30,", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Laravel documentation (version 5.3): Release notes\"", ". ", "laravel.com", ". Retrieved ", "August 29,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"The real-time community site Voten goes open-source\"", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Daniel Gafitescu (June 6, 2013). ", "\"Goodbye CodeIgniter, Hello Laravel\"", ". ", "sitepoint.com", ". Retrieved ", "December 21,", " 2013", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "Martin Bean (April 2015). ", "Laravel\u00a05 Essentials", ". ", "books.google.com", ". ", "Packt", ". ", "ISBN", "\u00a0", "978-1785283017", ". Retrieved ", "September 2,", " 2015", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Laravel Documentation (versions 3.0\u20133.2.14)\"", ". ", "three.laravel.com", ". Retrieved ", "August 30,", " 2014", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Laravel Documentation (version 4.2)\"", ". ", "laravel.com", ". Retrieved ", "August 30,", " 2014", ".", "\u00a0", "\n", "^", " ", "Bruno Skvorc (March 28, 2015). ", "\"Best PHP Framework for 2015 \u2013 SitePoint Survey Results\"", ". ", "sitepoint.com", ". Retrieved ", "June 14,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"laravel/laravel: laravel/readme.md at master\"", ". ", "github.com", ". April 22, 2015", ". Retrieved ", "May 10,", " 2015", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Rapha\u00ebl Saunier (January 2014). ", "Getting Started with Laravel\u00a04", ". ", "worldcat.org", ". ", "Packt", ". ", "ISBN", "\u00a0", "978-1783287031", ". Retrieved ", "September 2,", " 2015", ".", "\u00a0", "\n", "^", " ", "Eric Barnes (January 30, 2015). ", "\"Laravel\u00a05\"", ". ", "laravel-news.com", ". Retrieved ", "May 10,", " 2015", ".", "\u00a0", "\n", "^", " ", "Eric L. Barnes (June 9, 2015). ", "\"Laravel\u00a05.1 is released\"", ". ", "laravel-news.com", ". Retrieved ", "June 14,", " 2015", ".", "\u00a0", "\n", "^", " ", "Eric L. Barnes (August 23, 2016). ", "\"Laravel\u00a0 5.3 is now released\"", ". ", "laravel-news.com", ". Retrieved ", "August 23,", " 2016", ".", "\u00a0", "\n", "^", " ", "David oscar (August 23, 2016). ", "\"What's new in laravel\u00a0 5.3\"", ". ", "digitalsoft.in", ". Retrieved ", "August 23,", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Laravel 5.4 Is Now Released\"", ". ", "Laravel News", ". 2017-01-24", ". Retrieved ", "2017-02-21", ".", "\u00a0", "\n", "^", " ", "\"Laravel Documentation: Releases\"", ". Laravel", ". Retrieved ", "February 26,", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Github: Laravel\"", ". Laravel", ". Retrieved ", "February 26,", " 2017", ".", "\u00a0", "\n", "^", " ", "Jeffrey Way (November 28, 2012). ", "\"Why Laravel is Taking the PHP Community by Storm\"", ". ", "code.tutsplus.com", ". Retrieved ", "May 9,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Laravel documentation (version 4.2): Package development\"", ". ", "laravel.com", ". Retrieved ", "August 30,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Eloquent ORM in Laravel: What and Why!\"", ". ", "enukesoftware.com", ". Retrieved ", "December 19,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Develop Faster with the Laravel PHP Framework\"", ". ", "developer.com", ". Retrieved ", "April 17,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Laravel documentation (version 4.0): Query builder\"", ". ", "laravel.com", ". Retrieved ", "April 27,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Laravel documentation (version 5.1): Blade Templates\"", ". ", "laravel.com", ". Retrieved ", "June 10,", " 2015", ".", "\u00a0", "\n", "^", " ", "Dayle Rees (2014). ", "\"Laravel Blade engine\"", ". ", "daylerees.com", ". Retrieved ", "June 10,", " 2015", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Laravel documentation (version 5.0): Migrations and seeding\"", ". ", "laravel.com", ". Retrieved ", "April 27,", " 2015", ".", "\u00a0", "\n", "^", " ", "Manmeet Anand. ", "\"Creating a Contact Form in Laravel\u00a05 Using the Form Request Feature!\"", ". ", "tisindia.com", ". Retrieved ", "March 2,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Laravel Homestead - Laravel the PHP Framework for Web artisans\"", ". Retrieved ", "30 October", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Jason Lewis (February 28, 2013). ", "\"Your One-Stop Guide to Laravel Commands\"", ". ", "code.tutsplus.com", ". Retrieved ", "May 9,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Laracon Online | The official worldwide Laravel online conference\"", ". ", "laracon.net", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "\"Search Results\"", ". ", "laravel-news.com", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "\"Supporting Laravel\"", ". ", "Medium", ". 2017-03-13", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "\"Laracon EU 2013\"", ". ", "laracon.eu", ". Retrieved ", "January 2,", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Laracon EU 2014\"", ". ", "laracon.eu", ". Retrieved ", "August 30,", " 2014", ".", "\u00a0", "\n", "^", " ", "Eric L. Barnes (January 15, 2015). ", "\"Laracon 2015 will be in Louisville KY\"", ". ", "laravel-news.com", ". Retrieved ", "July 9,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Laracon EU 2015\"", ". ", "laracon.eu", ". Retrieved ", "July 9,", " 2015", ".", "\u00a0", "\n", "^", " ", "Eric L. Barnes (January 6, 2016). ", "\"Laracon tickets are now on sale\"", ". ", "laravel-news.com", ". Retrieved ", "January 7,", " 2016", ".", "\u00a0", "\n", "^", " ", "Eric L. Barnes (January 7, 2016). ", "\"Laracon EU tickets on sale\"", ". ", "laravel-news.com", ". Retrieved ", "April 7,", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Announcing Laracon Online\"", ". ", "Laravel News", ". 2017-02-06", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "\"Laracon 2017 \u2013 Location and dates have been announced\"", ". ", "Laravel News", ". 2016-11-09", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "WebEngineers. ", "\"Announcing Laracon EU 2017 the official European Laravel conference\"", ". ", "Laracon EU 2017", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "\"Laracon EU 2017 is Announced\"", ". ", "Laravel News", ". 2017-01-16", ". Retrieved ", "2017-03-24", ".", "\u00a0", "\n", "^", " ", "Otwell, Taylor (2017-04-07). ", "\"Laravel Partners\"", ". ", "Taylor Otwell", ". Retrieved ", "2017-09-04", ".", "\u00a0", "\n", "\n", "\n", "[1]", "\n", "Further reading", "[", "edit", "]", "\n", "\n", "Laravel Design Patterns and Best Practices, Packt, ", "ISBN", "\u00a0", "978-1783287987", ", July 2014, by Arda K\u0131l\u0131\u00e7da\u011f\u0131 and H. \u0130brahim Yilmaz", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Laravel", ".", "\n", "\n", "\n", "\n", "Official website", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "PHP", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Andi Gutmans", "\n", "Rasmus Lerdorf", "\n", "Zeev Suraski", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Resources", "\n", "\n", "\n", "\n", "Accelerator", " (", "List", ")", "\n", "Composer", "\n", "Editors", "\n", "Libraries", "\n", "PEAR", "\n", "\n", "\n", "\n", "\n", "\n", "Implementations", "\n", "\n", "\n", "\n", "HHVM", "\n", "HPHPc", "\n", "Parrot", "\n", "Phalanger", "\n", "Project Zero", "\n", "Quercus", "\n", "Zend Engine", "\n", "\n", "\n", "\n", "\n", "\n", "Web frameworks", "\n", "\n", "\n", "\n", "CakePHP", "\n", "CodeIgniter", "\n", "Drupal", "\n", "eZ Publish", "\n", "Fat-Free", "\n", "FuelPHP", "\n", "Horde", "\n", "Joomla!", "\n", "Laravel", "\n", "Lithium", "\n", "Midgard", "\n", "MODx", "\n", "Nette Framework", "\n", "Phalcon", "\n", "Pop PHP", "\n", "PRADO", "\n", "Qcodo", "\n", "Silex", "\n", "SilverStripe", "\n", "Symfony", "\n", "TYPO3", "\n", "WordPress", "\n", "Xaraya", "\n", "XOOPS", "\n", "Yii", "\n", "Zend Framework", "\n", "Zeta Components", "\n", "\n", "\n", "\n", "\n", "\n", "Testing", "\n", "\n", "\n", "\n", "Behat", "\n", "PHPUnit", "\n", "PHP Unit Testing Framework", "\n", "Lime", " (", "Symfony", ")", "\n", "\n", "\n", "\n", "\n", "\n", "ORMs", "\n", "\n", "\n", "\n", "Doctrine", "\n", "Propel", "\n", "\n", "\n", "\n", "\n", "\n", "IDEs", "\n", "\n", "\n", "\n", "Aptana", "\n", "Codelobster", "\n", "Eclipse PDT", "\n", "NetBeans", "\n", "PHPEdit", "\n", "PhpStorm", "\n", "RadPHP", "\n", "Zend Studio", "\n", "\n", "\n", "\n", "\n", "\n", "Widget toolkit", "\n", "\n", "\n", "\n", "PHP-GTK", "\n", "PHP-Qt", "\n", "wxPHP", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Category", "\n", " ", "Commons", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Web frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "\n", "\n", "\n", "\n", "\n", "C++", "\n", "\n", "\n", "\n", "CppCMS", "\n", "Wt", "\n", "\n", "\n", "\n", "\n", "\n", "CLI", "\n", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "Core", "\n", "AJAX", "\n", "Dynamic Data", "\n", "MVC", "\n", "Razor", "\n", "Web Forms", "\n", "\n", "\n", "DNN", "\n", "BFC", "\n", "MonoRail", "\n", "OpenRasta", "\n", "Umbraco", "\n", "\n", "\n", "\n", "\n", "\n", "ColdFusion", "\n", "\n", "\n", "\n", "CFWheels", "\n", "ColdBox Platform", "\n", "ColdSpring", "\n", "Fusebox", "\n", "Mach-II", "\n", "Model-Glue", "\n", "\n", "\n", "\n", "\n", "\n", "Common Lisp", "\n", "\n", "\n", "\n", "Caveman2", "\n", "CL-HTTP", "\n", "UnCommon Web", "\n", "Weblocks", "\n", "\n", "\n", "\n", "\n", "\n", "Haskell", "\n", "\n", "\n", "\n", "Happstack", "\n", "Yesod", "\n", "Snap", "\n", "\n", "\n", "\n", "\n", "\n", "Java", "\n", "\n", "\n", "\n", "AppFuse", "\n", "Flexive", "\n", "Grails", "\n", "GWT", "\n", "ICEfaces", "\n", "ItsNat", "\n", "JavaServer Faces", "\n", "JHipster", "\n", "Jspx", "\n", "JWt", "\n", "OpenXava", "\n", "Play", "\n", "Reasonable Server Faces", "\n", "Remote Application Platform", "\n", "RIFE", "\n", "Seam", "\n", "Sling", "\n", "Spring", "\n", "Stripes", "\n", "Struts", "\n", "Tapestry", "\n", "Vaadin", "\n", "Vert.x", "\n", "WebWork", "\n", "Wicket", "\n", "WaveMaker", "\n", "ZK", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "Ample SDK", "\n", "Angular", "/", "AngularJS", "\n", "Backbone.js", "\n", "Chaplin.js", "\n", "Closure", "\n", "Dojo Toolkit", "\n", "Ember.js", "\n", "Ext JS", "\n", "jQuery", "\n", "Meteor", "\n", "MooTools", "\n", "Node.js", "\n", "OpenUI5", "\n", "Prototype", "\n", "React", "\n", "Rico", "\n", "script.aculo.us", "\n", "Sencha Touch", "\n", "SproutCore", "\n", "Wakanda", "\n", "\n", "\n", "\n", "\n", "\n", "Perl", "\n", "\n", "\n", "\n", "Catalyst", "\n", "Dancer", "\n", "Mason", "\n", "Maypole", "\n", "Mojolicious", "\n", "WebGUI", "\n", "\n", "\n", "\n", "\n", "\n", "PHP", "\n", "\n", "\n", "\n", "CakePHP", "\n", "CodeIgniter", "\n", "Drupal", "\n", "Fat-Free", "\n", "FuelPHP", "\n", "Flow", "\n", "Gyroscope", "\n", "Horde", "\n", "Kohana", "\n", "Laravel", "\n", "Lithium", "\n", "Midgard", "\n", "MODX", "\n", "Nette", "\n", "Phalcon", "\n", "Pop PHP", "\n", "PRADO", "\n", "ProcessWire", "\n", "Qcodo", "\n", "Silex", "\n", "SilverStripe", "\n", "Symfony", "\n", "TYPO3", "\n", "Xaraya", "\n", "XOOPS", "\n", "Yii", "\n", "Zend Framework", "\n", "\n", "\n", "\n", "\n", "\n", "Python", "\n", "\n", "\n", "\n", "BlueBream", "\n", "CherryPy", "\n", "Django", "\n", "Flask", "\n", "Grok", "\n", "Nevow", "\n", "Pyjs", "\n", "Pylons", "\n", "Pyramid", "\n", "Quixote", "\n", "TACTIC", "\n", "Tornado", "\n", "TurboGears", "\n", "web2py", "\n", "Webware", "\n", "Zope 2", "\n", "\n", "\n", "\n", "\n", "\n", "Ruby", "\n", "\n", "\n", "\n", "Camping", "\n", "Merb", "\n", "Padrino", "\n", "Ruby on Rails", "\n", "Sinatra", "\n", "\n", "\n", "\n", "\n", "\n", "Scala", "\n", "\n", "\n", "\n", "Lift", "\n", "Play", "\n", "Scalatra", "\n", "\n", "\n", "\n", "\n", "\n", "Smalltalk", "\n", "\n", "\n", "\n", "AIDA/Web", "\n", "Seaside", "\n", "\n", "\n", "\n", "\n", "\n", "Other languages", "\n", "\n", "\n", "\n", "Vibe.d", " (", "D", ")", "\n", "Application Express", " (", "PL/SQL", ")", "\n", "Grails", " (", "Groovy", ")", "\n", "Kepler", " (", "Lua", ")", "\n", "Rocket", " (", "Rust", ")", "\n", "OpenACS", " (", "Tcl", ")", "\n", "Phoenix", " (", "Elixir", ")", "\n", "SproutCore", " (", "JavaScript", "-", "Ruby", ")", "\n", "Yaws", " (", "Erlang", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "^", " ", "http://www.mindinventory.com/blog/laravel-the-best-php-framework-for-web-development/", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 9 January 2018, at 10:32."}, +{"title": "Django (web framework)", "text": ["For other uses, see ", "Django", ".", "\n", "\n", "Django", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Original author(s)", "\n", "Lawrence Journal-World", "\n", "\n", "\n", "Developer(s)", "\n", "Django Software Foundation", "\n", "\n", "\n", "Initial release", "\n", "21\u00a0July 2005", "; 12 years ago", "\u00a0(", "2005-07-21", ")", "[1]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "2.0.1", "[2]", " ", "(1\u00a0January 2018", "; 17 days ago", "\u00a0(", "2018-01-01", ")", ")", " ", "[\u00b1]", "\n", "\n", "\n", "Preview release", "\n", "2.0 release candidate 1", "[3]", " ", "[\u00b1]", "\n", "\n", "\n", "\n", "\n", "\n", "Repository", "\n", "\n", "\n", "\n", "https://github.com/django/django", "\n", "\n", "\n", "\n", "\n", "\n", "Development status", "\n", "Active", "\n", "\n", "\n", "Written in", "\n", "Python", "\n", "\n", "\n", "Size", "\n", "7.6 ", "MB", "[4]", "\n", "\n", "\n", "Type", "\n", "Web framework", "\n", "\n", "\n", "License", "\n", "3-clause BSD", "\n", "\n", "\n", "Website", "\n", "www", ".djangoproject", ".com", "\n", "\n", "\n", "Django", " (", "/", "\u02c8", "d\u0292", "\u00e6", "\u014b", "\u0261", "o\u028a", "/", " ", "JANG", "-goh", ")", "[5]", " is a ", "free and open-source", " ", "web framework", ", written in ", "Python", ", which follows the model-view-template (MVT) ", "architectural pattern", ".", "[6]", "[7]", " It is maintained by the ", "Django Software Foundation", " (DSF), an independent organization established as a ", "501(c)(3)", " non-profit.", "\n", "Django's primary goal is to ease the creation of complex, database-driven websites. Django emphasizes ", "reusability", " and \"pluggability\" of components, rapid development, and the principle of ", "don't repeat yourself", ". Python is used throughout, even for settings files and data models. Django also provides an optional administrative ", "create, read, update and delete", " interface that is generated dynamically through ", "introspection", " and configured via admin models.", "\n", "Some well-known sites that use Django include the ", "Public Broadcasting Service", ",", "[8]", " ", "Instagram", ",", "[9]", " ", "Mozilla", ",", "[10]", " ", "The Washington Times", ",", "[11]", " ", "Disqus", ",", "[12]", " ", "Bitbucket", ",", "[13]", " and ", "Nextdoor", ".", "[14]", " It was used on ", "Pinterest", ",", "[15]", " but later the site moved to a framework built over ", "Flask", ".", "[16]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "2", " ", "Features", "\n", "\n", "2.1", " ", "Components", "\n", "2.2", " ", "Bundled applications", "\n", "2.3", " ", "Extensibility", "\n", "2.4", " ", "Server arrangements", "\n", "\n", "\n", "3", " ", "Version history", "\n", "4", " ", "Development tools with Django support", "\n", "5", " ", "Community", "\n", "6", " ", "Ports to other languages", "\n", "7", " ", "Bibliography", "\n", "8", " ", "See also", "\n", "9", " ", "References", "\n", "10", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "Django was created in the fall of 2003, when the ", "web programmers", " at the ", "Lawrence Journal-World", " newspaper, ", "Adrian Holovaty", " and ", "Simon Willison", ", began using Python to build applications.", "[17]", " It was released publicly under a ", "BSD license", " in July 2005. The framework was named after guitarist ", "Django Reinhardt", ".", "[17]", "\n", "In June 2008, it was announced that a newly formed ", "Django Software Foundation", " (DSF) would maintain Django in the future.", "[18]", "\n", "Features", "[", "edit", "]", "\n", "Components", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nScreenshot of the Django admin interface for modifying a user account.", "\n", "\n", "\n", "Despite having its own nomenclature, such as naming the callable objects generating the ", "HTTP", " responses \"views\",", "[6]", " the core Django framework can be seen as an ", "MVC", " architecture.", "[7]", " It consists of an ", "object-relational mapper", " (ORM) that mediates between ", "data models", " (defined as Python classes) and a ", "relational database", " (\"", "M", "odel\"), a system for processing HTTP requests with a ", "web templating system", " (\"", "V", "iew\"), and a ", "regular-expression", "-based ", "URL", " dispatcher (\"", "C", "ontroller\").", "\n", "Also included in the core framework are:", "\n", "\n", "a lightweight and standalone web server for development and testing", "\n", "a form serialization and validation system that can translate between ", "HTML", " forms and values suitable for storage in the database", "\n", "a template system that utilizes the concept of ", "inheritance", " borrowed from object-oriented programming", "\n", "a ", "caching", " framework that can use any of several cache methods", "\n", "support for ", "middleware", " classes that can intervene at various stages of request processing and carry out custom functions", "\n", "an internal dispatcher system that allows components of an application to communicate events to each other via pre-defined signals", "\n", "an ", "internationalization", " system, including translations of Django's own components into a variety of languages", "\n", "a ", "serialization", " system that can produce and read ", "XML", " and/or ", "JSON", " representations of Django model instances", "\n", "a system for extending the capabilities of the template engine", "\n", "an interface to Python's built-in ", "unit test", " framework", "\n", "\n", "Bundled applications", "[", "edit", "]", "\n", "The main Django distribution also bundles a number of applications in its \"contrib\" package, including:", "\n", "\n", "an extensible authentication system", "\n", "the dynamic administrative interface", "\n", "tools for generating ", "RSS", " and ", "Atom", " syndication feeds", "\n", "a site's framework that allows one Django installation to run multiple websites, each with their own content and applications", "\n", "tools for generating ", "Google Sitemaps", "\n", "built-in mitigation for ", "cross-site request forgery", ", ", "cross-site scripting", ", ", "SQL injection", ", ", "password cracking", " and other typical web attacks, most of them turned on by default", "[19]", "[20]", "\n", "a framework for creating ", "GIS", " applications", "\n", "\n", "Extensibility", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This section ", "relies too much on ", "references", " to ", "primary sources", ". ", "Please improve this section by adding ", "secondary or tertiary sources", ".", " ", "(January 2015)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "Django's configuration system allows third party code to be plugged into a regular project, provided that it follows the reusable app", "[21]", " conventions. More than 2500 packages", "[22]", " are available to extend the framework's original behavior, providing solutions to issues the original tool didn't tackle: registration, search, ", "API", " provision and consumption, ", "CMS", ", etc.", "\n", "This extensibility is, however, mitigated by internal components dependencies. While the Django philosophy implies loose coupling,", "[23]", " the template filters and tags assume one engine implementation, and both the auth and admin bundled applications require the use of the internal ", "ORM", ". None of these filters or bundled apps are mandatory to run a Django project, but reusable apps tend to depend on them, encouraging developers to keep using the official stack in order to benefit fully from the apps ecosystem.", "\n", "Server arrangements", "[", "edit", "]", "\n", "Django can be run in conjunction with ", "Apache", ", ", "Nginx", " using ", "WSGI", ", ", "Gunicorn", ", or ", "Cherokee", " using flup (a Python module).", "[24]", "[25]", " Django also includes the ability to launch a ", "FastCGI", " server, enabling use behind any web server which supports FastCGI, such as ", "Lighttpd", " or ", "Hiawatha", ". It is also possible to use other ", "WSGI", "-compliant web servers.", "[26]", " Django officially supports four database backends: ", "PostgreSQL", ", ", "MySQL", ", ", "SQLite", ", and ", "Oracle", ". ", "Microsoft SQL Server", " can be used with django-mssql on ", "Microsoft", " ", "operating systems", ",", "[27]", " while similarly external backends exist for ", "IBM Db2", ",", "[28]", " ", "SQL Anywhere", "[29]", " and ", "Firebird", ".", "[30]", " There is a ", "fork", " named django-nonrel, which supports ", "NoSQL", " databases, such as ", "MongoDB", " and ", "Google App Engine", "'s Datastore.", "[31]", "\n", "Django may also be run in conjunction with ", "Jython", " on any ", "Java EE", " application server such as ", "GlassFish", " or ", "JBoss", ". In this case django-jython must be installed in order to provide ", "JDBC", " drivers for database connectivity, which also can provide functionality to compile Django in to a .war suitable for deployment.", "[32]", "\n", "Google App Engine", " includes support for Django version 1.x.x", "[33]", " as one of the bundled frameworks.", "\n", "Version history", "[", "edit", "]", "\n", "The Django team will occasionally designate certain releases to be \u201cLong-term support\u201d (LTS) releases.", "[34]", " LTS releases will get security and data loss fixes applied for a guaranteed period of time, typically 3+ years, regardless of the pace of releases afterwards.", "\n", "\n", "\n", "Version", "\n", "Date", "[35]", "\n", "Notes", "[36]", "\n", "\n", "\n", "Old version, no longer supported:", " 0.90", "[37]", "\n", "000000002005-11-16-0000", "16 Nov 2005", "\n", "\n", "\n", "\n", "Old version, no longer supported:", " 0.91", "[38]", "\n", "000000002006-01-11-0000", "11 Jan 2006", "\n", "\"new-admin\"", "\n", "\n", "\n", "Old version, no longer supported:", " 0.95", "[39]", "\n", "000000002006-07-29-0000", "29 Jul 2006", "\n", "\"magic removal\"", "\n", "\n", "\n", "Old version, no longer supported:", " 0.96", "[40]", "\n", "000000002007-03-23-0000", "23 Mar 2007", "\n", "\"newforms\", testing tools", "\n", "\n", "\n", "Old version, no longer supported:", " 1.0", "[41]", "\n", "000000002008-09-03-0000", "3 Sep 2008", "\n", "API stability, decoupled admin, unicode", "\n", "\n", "\n", "Old version, no longer supported:", " 1.1", "[42]", "\n", "000000002009-07-29-0000", "29 Jul 2009", "\n", "Aggregates, transaction based tests", "\n", "\n", "\n", "Old version, no longer supported:", " 1.2", "[43]", "\n", "000000002010-05-17-0000", "17 May 2010", "\n", "Multiple db connections, ", "CSRF", ", model validation", "\n", "\n", "\n", "Old version, no longer supported:", " 1.3", "[44]", "\n", "000000002011-03-23-0000", "23 Mar 2011", "\n", "Class based views, staticfiles", "\n", "\n", "\n", "Old version, no longer supported:", " 1.4 LTS", "[45]", "\n", "000000002012-03-23-0000", "23 Mar 2012", "\n", "Timezones, in browser testing, app templates.", "\n", "\n", "\n", "Old version, no longer supported:", " 1.5", "[46]", "\n", "000000002013-02-26-0000", "26 Feb 2013", "\n", "Python 3 Support, configurable user model", "\n", "\n", "\n", "Old version, no longer supported:", " 1.6", "[47]", "\n", "000000002013-11-06-0000", "6 Nov 2013", "\n", "Dedicated to Malcolm Tredinnick, db transaction management, connection pooling.", "\n", "\n", "\n", "Old version, no longer supported:", " 1.7", "[48]", "\n", "000000002014-09-02-0000", "2 Sep 2014", "\n", "Migrations, application loading and configuration.", "\n", "\n", "\n", "Older version, yet still supported:", " 1.8 LTS", "[49]", "\n", "000000002015-04-01-0000", "1 Apr 2015", "\n", "Native support for multiple template engines. ", "Supported until at least April 2018", "\n", "\n", "\n", "Old version, no longer supported:", " 1.9", "[50]", "\n", "000000002015-12-01-0000", "1 Dec 2015", "\n", "Automatic password validation. New styling for admin interface.", "\n", "\n", "\n", "Old version, no longer supported:", " 1.10", "[51]", "\n", "000000002016-08-01-0000", "1 Aug 2016", "\n", "Full text search for PostgreSQL. New-style middleware.", "\n", "\n", "\n", "Older version, yet still supported:", " 1.11 LTS", "[52]", "\n", "000000002017-04-04-0000", "4 Apr 2017", "\n", "Last version to support Python 2.7. ", "Supported until at least April 2020", "\n", "\n", "\n", "Current stable version:", " ", "2.0", "[53]", "\n", "000000002017-12-01-0000", "Dec 2017", "\n", "First Python 3-only release, Simplified URL routing syntax, Mobile friendly admin.", "\n", "\n", "\n", "Future release:", " 2.1", "[53]", "\n", "000000002018-08-01-0000", "Aug 2018", "\n", "\n", "\n", "\n", "Future release:", " 2.2 LTS", "[53]", "\n", "000000002019-04-01-0000", "Apr 2019", "\n", "Supported until at least April 2022", "\n", "\n", "\n", "Future release:", " 3.0", "[53]", "\n", "000000002019-12-01-0000", "Dec 2019", "\n", "\n", "\n", "\n", "Future release:", " 3.1", "[53]", "\n", "000000002020-08-01-0000", "Aug 2020", "\n", "\n", "\n", "\n", "Future release:", " 3.2 LTS", "[53]", "\n", "000000002021-04-01-0000", "Apr 2021", "\n", "Supported until at least April 2024", "\n", "\n", "\n", "\n", "\n", "Legend:", "\n", "Old version", "\n", "Older version, still supported", "\n", "Latest version", "\n", "Latest preview version", "\n", "Future release", "\n", "\n", "\n", "\n", "\n", "\n", "Development tools with Django support", "[", "edit", "]", "\n", "For developing a Django project, no special tools are necessary, since the source code can be edited with any conventional ", "text editor", ". Nevertheless, editors specialized on ", "computer programming", " can help increase the productivity of development, e.g. with features such as ", "syntax highlighting", ". Since Django is written in Python, text editors which are aware of Python syntax are beneficial in this regard.", "\n", "Integrated development environments", " (IDE) add further functionality, such as debugging, refactoring, unit testing, etc. As with plain editors, IDEs with support for Python can be beneficial. Some IDEs that are specialized on Python additionally have integrated support for Django projects, so that using such an IDE when developing a Django project can help further increase productivity. For comparison of such Python IDEs, see the main article:", "\n", "Main article: ", "Comparison of integrated development environments \u00a7\u00a0Python", "\n", "Community", "[", "edit", "]", "\n", "There is a semiannual conference for Django developers and users, named \"DjangoCon\", that has been held since September 2008. DjangoCon is held annually in Europe, in May or June;", "[54]", " while another is held in the United States in August or September, in various cities.", "[55]", " The 2012 DjangoCon took place in Washington D.C. from 3 to 8 September. 2013 DjangoCon was held in Chicago at the Hyatt Regency Hotel and the post-conference ", "Sprints", " were hosted at Digital Bootcamp, computer training center.", "[56]", " The 2014 DjangoCon US returned to Portland, OR from 30 August to 6 September. The 2015 DjangoCon US was held in Austin, TX from 6 to 11 September at the AT&T Executive Center. The 2016 DjangoCon US was held in Philadelphia, PA at The ", "Wharton School of the University of Pennsylvania", " from 17 to 22 July.", "[57]", "\n", "Django mini-conferences were held in ", "Hobart", ", Australia in July 2013, in ", "Brisbane", ", Australia in August 2014 and 2015, and in ", "Melbourne", ", Australia in 2016.", "[58]", "\n", "Ports to other languages", "[", "edit", "]", "\n", "Programmers have ported Django's template design from Python to other languages, providing decent cross-platform support. Some of these options are more direct ports; others, though inspired by Django and retaining its concepts, take the liberty to deviate from Django's design:", "\n", "\n", "Liquid for ", "Ruby", "[59]", "\n", "Template::Swig for ", "Perl", "[60]", "\n", "Twig for ", "PHP", "[61]", "\n", "Jinja for ", "Python", "[62]", "\n", "ErlyDTL for ", "Erlang", "[63]", "\n", "\n", "Bibliography", "[", "edit", "]", "\n", "\n", "\n", "Roy Greenfeld, Daniel; Roy Greenfeld, Audrey (2015), ", "Two Scoops of Django: Best Practices for Django 1.8", " (3rd ed.), Two Scoops Press, p.\u00a0531, ", "ISBN", "\u00a0", "0981467342", "\u00a0", "\n", "Jaiswal, Sanjeev; Kumar, Ratan (22 June 2015), ", "Learning Django Web Development", " (1st ed.), Packt, p.\u00a0405, ", "ISBN", "\u00a0", "1783984406", "\u00a0", "\n", "Ravindrun, Arun (31 March 2015), ", "Django Design Patterns and Best Practices", " (1st ed.), Packt, p.\u00a0180, ", "ISBN", "\u00a0", "1783986646", "\u00a0", "\n", "Osborn, Tracy (May 2015), ", "Hello Web App", " (1st ed.), Tracy Osborn, p.\u00a0142, ", "ISBN", "\u00a0", "0986365912", "\u00a0", "\n", "Bendoraitis, Aidas (October 2014), ", "Web Development with Django Cookbook", " (1st ed.), Packt, p.\u00a0294, ", "ISBN", "\u00a0", "178328689X", "\u00a0", "\n", "Baumgartner, Peter; Malet, Yann (2015), ", "High Performance Django", " (1st ed.), Lincoln Loop, p.\u00a0184, ", "ISBN", "\u00a0", "1508748128", "\u00a0", "\n", "Elman, Julia; Lavin, Mark (2014), ", "Lightweight Django", " (1st ed.), O'Reilly Media, p.\u00a0246, ", "ISBN", "\u00a0", "149194594X", "\u00a0", "\n", "Percival, Harry (2014), ", "Test-Driven Development with Python", " (1st ed.), O'Reilly Media, p.\u00a0480, ", "ISBN", "\u00a0", "1449364829", "\u00a0", "\n", "\n", "\n", "This list is an extraction from ", "Current Django Books", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Free software portal", "\n", "\n", "\n", "\n", "Flask (web framework)", "\n", "Pylons project", "\n", "Comparison of web frameworks", "\n", "Web2py", "\n", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"Django FAQ\"", ". Retrieved ", "2 September", " 2014", ".", "\u00a0", "\n", "^", " ", "Graham, Tim (1 January 2018). ", "\"Django bugfix releases: 2.0.1 and 1.11.9\"", ". ", "Django Weblog", ". Retrieved ", "2 January", " 2018", ".", "\u00a0", "\n", "^", " ", "Graham, Tim (15 November 2017). ", "\"Django 2.0 release candidate 1 released\"", ". ", "Django Weblog", ". Retrieved ", "16 November", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Django Download\"", ". Retrieved ", "2 January", " 2018", ".", "\u00a0", "\n", "^", " ", "\"FAQ: General - Django documentation - Django\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"FAQ: General - Django documentation - Django\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Adrian Holovaty, Jacob Kaplan-Moss; et al. ", "The Django Book", ". ", "Django follows this MVC pattern closely enough that it can be called an MVC framework", "\u00a0", "\n", "^", " ", "\"20 Creative Websites Running Django\"", ".", "\u00a0", "\n", "^", " ", "\"What Powers Instagram: Hundreds of Instances, Dozens of Technologies\"", ".", "\u00a0", "\n", "^", " ", "\"Python\"", ". ", "Mozilla Developer Network", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Opensource.washingtontimes.com", ". Retrieved on 2014-05-30.", "\n", "^", " ", "\"Scaling Django to 8 Billion Page Views\"", ".", "\u00a0", "\n", "^", " ", "\"DjangoSuccessStoryBitbucket \u2013 Django\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"The anti-Facebook: one in four American neighborhoods are now using this private social network\"", ". ", "The Verge", ". Retrieved ", "16 June", " 2016", ".", "\u00a0", "\n", "^", " ", "\"What is the technology stack behind Pinterest?\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Sai Deep Chand G's answer to What is the technology stack behind Pinterest? - Quora\"", ". ", "www.quora.com", ". Retrieved ", "2017-05-20", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Django's History\"", ". The Django Book", ". Retrieved ", "6 June", " 2013", ".", "\u00a0", "\n", "^", " ", "\"Announcing the Django Software Foundation - Weblog - Django\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Security in Django\"", ". Django Project", ". Retrieved ", "25 March", " 2013", ".", "\u00a0", "\n", "^", " ", "Socol, James (2012). ", "\"Best Basic Security Practices (Especially with Django)\"", ". Retrieved ", "25 March", " 2013", ".", "\u00a0", "\n", "^", " ", "\"What is a reusable app? \u2014 django-reusable-app-docs 0.1.0 documentation\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Django Packages\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Design philosophies - Django documentation - Django\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Django documentation of deployment", " ", "Archived", " 11 January 2012 at the ", "Wayback Machine", ".", "\n", "^", " ", "\"Cherokee Web Server - Cookbook Setting up Django - Cherokee Documentation\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "How to use Django with Apache and mod_wsgi", " ", "Archived", " 8 March 2013 at the ", "Wayback Machine", ".. Official Django documentation.", "\n", "^", " ", "\"Manfre / django-mssql / source / \u2014 Bitbucket\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "ibmdb. ", "\"GitHub - ibmdb/python-ibmdb: Automatically exported from code.google.com/p/ibm-db\"", ". ", "GitHub", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Google Code Archive - Long-term storage for Google Code Project Hosting\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "maxirobaina. ", "\"GitHub - maxirobaina/django-firebird: Firebird SQL backend for django\"", ". ", "GitHub", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Django non-rel\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "beachmachine. ", "\"GitHub - beachmachine/django-jython: Database backends and extensions for Django development on top of Jython\"", ". ", "GitHub", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Running Pure Django Projects on Google App Engine", ". Code.google.com (2010-11-01). Retrieved on 5 December 2011.", "\n", "^", " ", "\"Django's release process - Django documentation - Django\"", ". Retrieved ", "30 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Supported Versions", "\n", "^", " ", "What Python version can I use with Django?", "\n", "^", " ", "\"Introducing Django 0.90\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 0.91 released\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Introducing Django 0.95\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Announcing Django 0.96!\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 1.0 released!\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 1.1 released\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 1.2 released\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 1.3 released\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 1.4 released\"", ". Django weblog. Retrieved 2 February 2013.", "\n", "^", " ", "\"Django 1.5 released\"", " Django weblog. Retrieved 27 February 2013.", "\n", "^", " ", "\"Django 1.6 released\"", " Django weblog. Retrieved 6 November 2013.", "\n", "^", " ", "\"Django 1.7 released\"", " Django weblog. Retrieved 4 September 2014.", "\n", "^", " ", "\"Django 1.8 released\"", " Django weblog. Retrieved 2 April 2015.", "\n", "^", " ", "\"Django 1.9 released\"", " Django weblog. Retrieved 1 December 2015.", "\n", "^", " ", "\"Django 1.10 released\"", " Django weblog. Retrieved 1 August 2016.", "\n", "^", " ", "\"Django 1.11 released\"", " Django weblog. Retrieved 4 April 2017.", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "f", " ", "\"Django 2.0 released\"", " Django weblog. Retrieved 3 December 2017.", "\n", "^", " ", "DjangoCon EU series", ", Lanyrd.com", "\n", "^", " ", "DjangoCon US series", ", Lanyrd.com", "\n", "^", " ", "\"DjangoCon\"", ". DjangoCon. Archived from ", "the original", " on 5 August 2012", ". Retrieved ", "29 July", " 2012", ".", "\u00a0", "\n", "^", " ", "\"DjangoCon\"", ". DjangoCon", ". Retrieved ", "1 December", " 2016", ".", "\u00a0", "\n", "^", " ", "DjangoCon AU", ". Djangocon.com.au. Retrieved on 2016-09-23.", "\n", "^", " ", "http://liquidmarkup.org", "\n", "^", " ", "https://metacpan.org/pod/Template::Swig", "\n", "^", " ", "http://twig.sensiolabs.org", "\n", "^", " ", "http://jinja.pocoo.org", "\n", "^", " ", "https://github.com/erlydtl/erlydtl/wiki", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Django (web framework)", ".", "\n", "\n", "\n", "\n", "Official website", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Python", " ", "web frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "BlueBream", "\n", "Bottle", "\n", "CherryPy", "\n", "Django", "\n", "Flask", "\n", "Grok", "\n", "Nagare", "\n", "Nevow", "\n", "Pyjs", "\n", "Pylons", "\n", "Pyramid", "\n", "Quixote", "\n", "Spyce", "\n", "TACTIC", "\n", "Tornado", "\n", "TurboGears", "\n", "TwistedWeb", "\n", "Webware", "\n", "web2py", "\n", "Zope 2", "\n", "more", "...", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Web frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "\n", "\n", "\n", "\n", "\n", "C++", "\n", "\n", "\n", "\n", "CppCMS", "\n", "Wt", "\n", "\n", "\n", "\n", "\n", "\n", "CLI", "\n", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "Core", "\n", "AJAX", "\n", "Dynamic Data", "\n", "MVC", "\n", "Razor", "\n", "Web Forms", "\n", "\n", "\n", "DNN", "\n", "BFC", "\n", "MonoRail", "\n", "OpenRasta", "\n", "Umbraco", "\n", "\n", "\n", "\n", "\n", "\n", "ColdFusion", "\n", "\n", "\n", "\n", "CFWheels", "\n", "ColdBox Platform", "\n", "ColdSpring", "\n", "Fusebox", "\n", "Mach-II", "\n", "Model-Glue", "\n", "\n", "\n", "\n", "\n", "\n", "Common Lisp", "\n", "\n", "\n", "\n", "Caveman2", "\n", "CL-HTTP", "\n", "UnCommon Web", "\n", "Weblocks", "\n", "\n", "\n", "\n", "\n", "\n", "Haskell", "\n", "\n", "\n", "\n", "Happstack", "\n", "Yesod", "\n", "Snap", "\n", "\n", "\n", "\n", "\n", "\n", "Java", "\n", "\n", "\n", "\n", "AppFuse", "\n", "Flexive", "\n", "Grails", "\n", "GWT", "\n", "ICEfaces", "\n", "ItsNat", "\n", "JavaServer Faces", "\n", "JHipster", "\n", "Jspx", "\n", "JWt", "\n", "OpenXava", "\n", "Play", "\n", "Reasonable Server Faces", "\n", "Remote Application Platform", "\n", "RIFE", "\n", "Seam", "\n", "Sling", "\n", "Spring", "\n", "Stripes", "\n", "Struts", "\n", "Tapestry", "\n", "Vaadin", "\n", "Vert.x", "\n", "WebWork", "\n", "Wicket", "\n", "WaveMaker", "\n", "ZK", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "Ample SDK", "\n", "Angular", "/", "AngularJS", "\n", "Backbone.js", "\n", "Chaplin.js", "\n", "Closure", "\n", "Dojo Toolkit", "\n", "Ember.js", "\n", "Ext JS", "\n", "jQuery", "\n", "Meteor", "\n", "MooTools", "\n", "Node.js", "\n", "OpenUI5", "\n", "Prototype", "\n", "React", "\n", "Rico", "\n", "script.aculo.us", "\n", "Sencha Touch", "\n", "SproutCore", "\n", "Wakanda", "\n", "\n", "\n", "\n", "\n", "\n", "Perl", "\n", "\n", "\n", "\n", "Catalyst", "\n", "Dancer", "\n", "Mason", "\n", "Maypole", "\n", "Mojolicious", "\n", "WebGUI", "\n", "\n", "\n", "\n", "\n", "\n", "PHP", "\n", "\n", "\n", "\n", "CakePHP", "\n", "CodeIgniter", "\n", "Drupal", "\n", "Fat-Free", "\n", "FuelPHP", "\n", "Flow", "\n", "Gyroscope", "\n", "Horde", "\n", "Kohana", "\n", "Laravel", "\n", "Lithium", "\n", "Midgard", "\n", "MODX", "\n", "Nette", "\n", "Phalcon", "\n", "Pop PHP", "\n", "PRADO", "\n", "ProcessWire", "\n", "Qcodo", "\n", "Silex", "\n", "SilverStripe", "\n", "Symfony", "\n", "TYPO3", "\n", "Xaraya", "\n", "XOOPS", "\n", "Yii", "\n", "Zend Framework", "\n", "\n", "\n", "\n", "\n", "\n", "Python", "\n", "\n", "\n", "\n", "BlueBream", "\n", "CherryPy", "\n", "Django", "\n", "Flask", "\n", "Grok", "\n", "Nevow", "\n", "Pyjs", "\n", "Pylons", "\n", "Pyramid", "\n", "Quixote", "\n", "TACTIC", "\n", "Tornado", "\n", "TurboGears", "\n", "web2py", "\n", "Webware", "\n", "Zope 2", "\n", "\n", "\n", "\n", "\n", "\n", "Ruby", "\n", "\n", "\n", "\n", "Camping", "\n", "Merb", "\n", "Padrino", "\n", "Ruby on Rails", "\n", "Sinatra", "\n", "\n", "\n", "\n", "\n", "\n", "Scala", "\n", "\n", "\n", "\n", "Lift", "\n", "Play", "\n", "Scalatra", "\n", "\n", "\n", "\n", "\n", "\n", "Smalltalk", "\n", "\n", "\n", "\n", "AIDA/Web", "\n", "Seaside", "\n", "\n", "\n", "\n", "\n", "\n", "Other languages", "\n", "\n", "\n", "\n", "Vibe.d", " (", "D", ")", "\n", "Application Express", " (", "PL/SQL", ")", "\n", "Grails", " (", "Groovy", ")", "\n", "Kepler", " (", "Lua", ")", "\n", "Rocket", " (", "Rust", ")", "\n", "OpenACS", " (", "Tcl", ")", "\n", "Phoenix", " (", "Elixir", ")", "\n", "SproutCore", " (", "JavaScript", "-", "Ruby", ")", "\n", "Yaws", " (", "Erlang", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 2 January 2018, at 02:25."}, +{"title": "Vitalik Buterin", "text": ["\n", "\n", "Vitalik Buterin", "\n", "\n", "\n", "\n", "Vitalik Buterin, 2016", "\n", "\n", "\n", "\n", "Native\u00a0name", "\n", "\u0412\u0438\u0442\u0430\u043b\u0438\u0439 \u0414\u043c\u0438\u0442\u0440\u0438\u0435\u0432\u0438\u0447 \u0411\u0443\u0442\u0435\u0440\u0438\u043d", "\n", "\n", "\n", "Born", "\n", "(", "1994-01-31", ")", " January 31, 1994 ", "(age\u00a023)", "\n", "Kolomna", ", ", "Russia", "\n", "\n", "\n", "Nationality", "\n", "Russian-Canadian", "\n", "\n", "\n", "Alma\u00a0mater", "\n", "University of Waterloo", "\n(Dropped Out)", "\n", "\n", "\n", "Known\u00a0for", "\n", "Ethereum", ", ", "Bitcoin Magazine", "\n", "\n", "\n", "Awards", "\n", "Thiel Fellowship", "\n", "\n", "\n", "Website", "\n", "http://vitalik.ca", "\n", "\n", "\n", "Scientific career", "\n", "\n", "\n", "Fields", "\n", "Digital contracts", ", ", "Digital currencies", ", ", "Game Theory", "\n", "\n", "\n", "\n", "\n", "\n", "Vitalik Buterin", " (Born January 31, 1994. ", "Russian", ": ", "\u0412\u0438\u0442\u0430\u043b\u0438\u0439 \u0414\u043c\u0438\u0442\u0440\u0438\u0435\u0432\u0438\u0447 \u0411\u0443\u0442\u0435\u0440\u0438\u043d", ") is a ", "Russian", "-", "Canadian", " ", "programmer", " and writer primarily known as a co-founder of ", "Ethereum", " and as a co-founder of ", "Bitcoin Magazine", ".", "[1]", "[2]", "[3]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Personal life", "\n", "2", " ", "Endeavors", "\n", "\n", "2.1", " ", "Beginnings at ", "Bitcoin Magazine", "\n", "2.2", " ", "Ethereum", "\n", "2.3", " ", "Open source software", "\n", "\n", "\n", "3", " ", "Awards and recognition", "\n", "4", " ", "See also", "\n", "5", " ", "References", "\n", "6", " ", "External links", "\n", "\n", "\n", "\n", "Personal life", "[", "edit", "]", "\n", "Buterin was born in ", "Kolomna", ", ", "Moscow Oblast", ", ", "Russia", " to Dmitry Buterin, a computer scientist, and Natalia Ameline (n\u00e9e Chistyakova).", "[", "citation needed", "]", " He lived in the area until the age of six when his parents emigrated to ", "Canada", " in search of better employment opportunities. While in grade three of elementary school in Canada, Buterin was placed into a class for gifted children and started to understand that he was drawn to math, programming, and economics. He also had the ability to add three-digit numbers in his head at twice the speed of his peers.", "[4]", " Buterin attended the ", "Abelard School", ", a private high school in Toronto, for four years,", "[5]", " which he said, \"proved to be among the most interesting and productive years of my life; the closer connection between students and teachers [&] the level of depth at which the material was taught, made me want to learn, and to focus on learning as my primary goal\".", "[5]", " Buterin has written that although he was \"never particularly inspired by the traditional education system\",", "[5]", " when subjects were presented with \"dedication and focus on intellectual inquiry\", he said he:", "\n", "\n", "\"noticed my attitude and my results almost immediately and drastically change. Education is ultimately much more than simply memorizing individual facts, or even learning individual concepts. [What] matters most: learning how to think, learning how to reason and learning how to learn.\"", "[5]", "\n", "\n", "Buterin learned about Bitcoin, from his father, at age 17.", "[4]", " In 2012, he obtained a Bronze Medal in the International Olympiad in Informatics.", "[6]", " In 2013 he visited developers in other countries who shared his enthusiasm for code. He returned to Toronto later that year and published a white paper proposing Ethereum.", "[7]", " He attended the ", "University of Waterloo", " but dropped out in 2014, when he received the ", "Thiel Fellowship", " in the amount of $100,000,", "[8]", " and went to work on Ethereum full-time.", "[8]", "\n", "On June 25, 2017, Buterin was the subject of a ", "death hoax", " originating from ", "4chan", ".", "[9]", "\n", "Endeavors", "[", "edit", "]", "\n", "\n", "Pybitcointools", " (2013\u2013)", "\n", "Bitcoin Magazine", " (2011\u20132014)", "\n", "Ethereum", " (2013\u2013)", "\n", "\n", "Beginnings at ", "Bitcoin Magazine", "[", "edit", "]", "\n", "Main article: ", "Bitcoin Magazine", "\n", "Buterin met a person on a bitcoin chat forum trying to start a bitcoin blog. The owner offered five bitcoin (about $3.50) to anyone who would write an article for him. Buterin wrote for the site until its website shut down soon thereafter due to Bitcoin's lack of mainstream attention.", "[10]", "\n", "In September 2011, another person reached out to Buterin about a new publication called ", "Bitcoin Magazine", ", a position which Buterin would accept as the first co-founder, and contribute as a leading writer.", "\n", "In addition Buterin wrote about bitcoin-related topics for other publications, including ", "Bitcoin Weekly", ".", "[1]", "[11]", " ", "Bitcoin Magazine", " in 2012 later began publishing a print edition and has been referred to as the first serious publication dedicated to cryptocurrencies.", "[12]", " ", "Bitcoin Magazine", " was then purchased by ", "BTC Media", ", where Buterin continued to write until mid-2014.", "\n", "In addition, he held a position on the editorial board of ", "Ledger", ", a peer-reviewed scholarly journal that publishes full-length original research articles on the subjects of cryptocurrency and blockchain technology.", "[13]", "\n", "Ethereum", "[", "edit", "]", "\n", "Main article: ", "Ethereum", "\n", "He is a co-creator and inventor of Ethereum, described as a \u201cdecentralised mining network and software development platform rolled into one\u201d that facilitates the creation of new cryptocurrencies and programs that share a single ", "blockchain", " (a cryptographic transaction ledger).", "[14]", "[15]", "[16]", "\n", "Ethereum was first described in Buterin's white paper, in late 2013. Buterin argued that bitcoin needed a scripting language for application development. But when he failed to gain agreement, he proposed development of a new platform with a more general scripting language.", "[17]", " About the Ethereum Project, Buterin has said: \"I am truly grateful to have the opportunity to work in such an interesting and interdisciplinary area of industry, where I have the chance to interact with cryptographers, mathematicians and economists prominent in their fields, to help build software and tools that already affect tens of thousands of people around the world, and to work on advanced problems in computer science, economics and philosophy every week.\"", "[5]", "\n", "Open source software", "[", "edit", "]", "\n", "Vitalik has contributed as a developer to other open source software projects.", "[1]", " Some early examples are: Kryptokit, pybitcointools, multisig.info, and btckeysplit.", "[18]", " He also contributed to DarkWallet", "[19]", " by ", "Cody Wilson", ", ", "Bitcoin", " ", "Python", " libraries,", "[20]", " and the ", "cryptocurrency", " marketplace site Egora.", "[2]", "\n", "Awards and recognition", "[", "edit", "]", "\n", "\n", "Thiel Fellowship", " Award, 2014 ", "[21]", "\n", "World Technology Award in the IT Software category, 2014 ", "[22]", "\n", "Fortune", " 40 under 40 list, 2016.", "[23]", "\n", "Forbes", " 30 under 30 list, 2018.", "[24]", "\n", "\n", "See also", "[", "edit", "]", "\n", "\n", "Joseph Lubin", " \u2013 Ethereum co-founder", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Finley, Klint (27 January 2014). ", "\"Out in the open: Teenage hacker transforms web into one giant Bitcoin network\"", ". ", "Wired", ". Retrieved ", "7 February", " 2014", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Melendez, Steven (10 February 2014). ", "\"Could this 20-Year-Old kid make Bitcoin obsolete?\"", ". ", "Fast Company", ". Retrieved ", "22 February", " 2014", ".", "\u00a0", "\n", "^", " ", "del Castillo, Michael (24 September 2014). ", "\"Dark wallet: A radical way to Bitcoin\"", ". ", "The New Yorker", ". Retrieved ", "24 January", " 2014", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Peck, Morgen (2016-06-13). ", "\"The Uncanny Mind That Built Ethereum\"", ". ", "Backchannel", ". Retrieved ", "2016-06-15", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "\"Students\"", ". ", "Abelard School", ". Retrieved ", "7 October", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Results | IOI 2012\"", ". ", "www.ioi2012.org", ". Retrieved ", "2016-07-21", ".", "\u00a0", "\n", "^", " ", "Braga, Matthew (13 Oct 2016). ", "\"Change Agents 2016: Vitalik Buterin, Ethereum\"", ". Canadian Business", ". Retrieved ", "6 June", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Elliot, Josh (July 2, 2014). ", "\"Why a 20-year-old Toronto drop-out accepted $100,000 to stay out of school\"", ". ", "CTV", ". Retrieved ", "25 April", " 2016", ".", "\u00a0", "\n", "^", " ", "\"4chan's Vitalik Buterin Death Hoax Crashes Ethereum Price\"", ". ", "Bitsonline", ". 2017-06-25", ". Retrieved ", "2017-06-25", ".", "\u00a0", "\n", "^", " ", "\"Interview with Vitalik Buterin\"", ". Bitcorati, Inc. January 10, 2014", ". Retrieved ", "June 3,", " 2017", ".", "\u00a0", "\n", "^", " ", "\"About us \u2013 Bitcoin Magazine\"", ". ", "Bitcoin Magazine", ". Coin Publishing Ltd", ". Retrieved ", "23 February", " 2014", ".", "\u00a0", "\n", "^", " ", "Vigna, Paul; Casey, Michael J. (2015). \"Community\". ", "The Age of Cryptocurrency: How Bitcoin and the Blockchain Are Challenging ..", " ", "Macmillan Publishers", ". p.\u00a088. ", "ISBN", "\u00a0", "9781250065636", ".", "\u00a0", "\n", "^", " ", "\"Ledger\"", ". Retrieved ", "4 February", " 2016", ".", "\u00a0", "\n", "^", " ", "Aron, Jacob (6 February 2014). ", "\"Bitcoin: How its core technology will change the world\"", ". ", "New Scientist", " (2955)", ". Retrieved ", "22 February", " 2014", ".", "\u00a0", "\n", "^", " ", "Hajdarbegovic, Nermin (23 February 2014). ", "\"Ethereum launches 'Cryptocurrency 2.0' network\"", ". ", "CoinDesk", ". Retrieved ", "22 February", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Vitalik Buterin on Ethereum and The Decentralized Future\"", ". ", "Future Thinkers Podcast", ". 2015-04-21", ". Retrieved ", "2016-05-13", ".", "\u00a0", "\n", "^", " ", "\"Facilitating Online Contractual Agreements With Vitalik Buterin\"", ". ", "Eyerys.com", ". 2017-06-29", ". Retrieved ", "2017-06-30", ".", "\u00a0", "\n", "^", " ", "Southurst, Jon (7 January 2014). ", "\"Roger Ver and Erik Voorhees Back Bitcoin Wallet KryptoKit\"", ". ", "CoinDesk", ". Retrieved ", "25 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Kelly, Brian (2015). \"Smart Money, set it and forget it\". ", "The Bitcoin Big Bang: How Alternative Currencies Are About to Change the World", ". ", "Wiley Publishing", ". p.\u00a0156. ", "ISBN", "\u00a0", "978-1118963661", ".", "\u00a0", "\n", "^", " ", "Antonopoulos, Andreas M. (December 20, 2014). \"#4. Keys, Addresses, and Wallets\". ", "Mastering Bitcoin: Unlocking Digital Cryptocurrencies", ". ", "O'Reilly Media", ". p.\u00a082. ", "ISBN", "\u00a0", "978-1449374044", ".", "\u00a0", "\n", "^", " ", "Finley, Klint (5 June 2014). ", "\"$100k Peter Thiel Fellowship Awarded to Ethereum's Vitalik Buterin\"", ". ", "CoinDesk", ". Retrieved ", "11 August", " 2014", ".", "\u00a0", "\n", "^", " ", "The 2014 World Technology Award Winner", "\n", "^", " ", "40 under 40: Vitalik Buterin, 22", ", ", "Fortune", ", September 2016.", "\n", "^", " ", "Forbes 30 under 30", ", ", "Forbes", ", November 2017.", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Decentralizing Everything with Ethereum's Vitalik Buterin | Disrupt SF 2017", " (YouTube)", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 11 January 2018, at 13:32."}, +{"title": "Fork (software development)", "text": ["\n", "\n", "\n", "\nA timeline chart of how ", "Linux distributions", " forked.", "\n", "\n", "\n", "In ", "software engineering", ", a ", "project fork", " happens when developers take a copy of ", "source code", " from one ", "software package", " and start independent development on it, creating a distinct and separate piece of software. The term often implies not merely a ", "development branch", ", but also a split in the developer community, a form of ", "schism", ".", "[1]", "\n", "Free and open-source software", " is that which, by definition, may be forked from the original development team without prior permission, without violating ", "copyright", " law. However, licensed forks of proprietary software (", "e.g.", " ", "Unix", ") also happen.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Etymology", "\n", "2", " ", "Forking of free and open source software", "\n", "3", " ", "Forking proprietary software", "\n", "4", " ", "See also", "\n", "5", " ", "References", "\n", "6", " ", "External links", "\n", "\n", "\n", "\n", "Etymology", "[", "edit", "]", "\n", "The word fork stems from the Latin word furca, meaning a \"fork or similarly shaped instrument.\"", "[2]", " \"Fork\" in the meaning of \"to divide in branches, go separate ways\" has been used as early as the 14th century.", "[3]", " In the software environment, the word evokes the ", "fork", " system call, which causes a running process to split itself into two (almost) identical copies that (typically) diverge to perform different tasks.", "[4]", "\n", "In the context of software development, \"fork\" was used in the sense of creating a revision control \"", "branch", "\" by ", "Eric Allman", " as early as 1980, in the context of ", "SCCS", ":", "[5]", "\n", "\n", "Creating a branch \"forks off\" a version of the program.", "\n", "\n", "The term was in use on ", "Usenet", " by 1983 for the process of creating a subgroup to move topics of discussion to.", "[6]", "\n", "\"Fork\" is not known to have been used in the sense of a community schism during the origins of Lucid Emacs (now ", "XEmacs", ") (1991) or the ", "BSDs", " (1993\u20131994); ", "Russ Nelson", " used the term \"shattering\" for this sort of fork in 1993, attributing it to ", "John Gilmore", ".", "[7]", " However, \"fork\" was in use in the present sense by 1995 to describe the XEmacs split,", "[8]", " and was an understood usage in the ", "GNU", " Project by 1996.", "[9]", "\n", "Forking of free and open source software", "[", "edit", "]", "\n", "Free and open source software may be legally forked without prior approval of those currently developing, managing, or distributing the software per both ", "The Free Software Definition", " and ", "The Open Source Definition", ":", "[10]", "\n", "\n", "The freedom to distribute copies of your modified versions to others (freedom 3). By doing this, you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.", "\n", "\u2014\u2009", "The Free Software Definition", "[11]", "\n", "\n", "\n", "3. Derived Works: The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software.", "\n", "\u2014\u2009", "The Open Source Definition", "[12]", "\n", "\n", "In free software, forks often result from a schism over different goals or personality clashes. In a fork, both parties assume nearly identical code bases, but typically only the larger group, or whoever controls the Web site, will retain the full original name and the associated user community. Thus, there is a reputation penalty associated with forking.", "[10]", " The relationship between the different teams can be cordial or very bitter.", "\n", "Eric S. Raymond", ", in his essay ", "Homesteading the Noosphere", ",", "[13]", " stated that \"The most important characteristic of a fork is that it spawns competing projects that cannot later exchange code, splitting the potential developer community\". He notes in the ", "Jargon File", ":", "[14]", "\n", "\n", "Forking is considered a Bad Thing\u2014not merely because it implies a lot of wasted effort in the future, but because forks tend to be accompanied by a great deal of strife and acrimony between the successor groups over issues of legitimacy, succession, and design direction. There is serious social pressure against forking. As a result, major forks (such as the ", "Gnu-Emacs", "/", "XEmacs", " split, the fissioning of the ", "386BSD", " group into three daughter projects, and the short-lived GCC/EGCS split) are rare enough that they are remembered individually in hacker folklore.", "\n", "\n", "David A. Wheeler", " notes", "[10]", " four possible outcomes of a fork, with examples:", "\n", "\n", "The death of the fork. This is by far the most common case. It is easy to declare a fork, but considerable effort to continue independent development and support.", "\n", "A re-merging of the fork (", "e.g.", ", ", "egcs", " becoming \"blessed\" as the new version of ", "gcc", ".)", "\n", "The death of the original (", "e.g.", " the ", "X.Org Server", " succeeding and ", "XFree86", " dying.)", "\n", "Successful branching, typically with differentiation (", "e.g.", ", ", "OpenBSD", " and ", "NetBSD", ".)", "\n", "\n", "Distributed revision control", " (DVCS) tools have popularised a less emotive use of the term \"fork\", blurring the distinction with \"branch\".", "[15]", " With a DVCS such as ", "Mercurial", " or ", "Git", ", the normal way to contribute to a project, is to first create a personal branch of the repository, independent of the main repository, and later seek to have your changes integrated with it. Sites such as ", "GitHub", ", ", "Bitbucket", " and ", "Launchpad", " provide free DVCS hosting expressly supporting independent branches, such that the technical, social and financial barriers to forking a source code repository are massively reduced, and GitHub uses \"fork\" as its term for this method of contribution to a project.", "\n", "Forks often restart version numbering from 0.1 or 1.0 even if the original software was at version 3.0, 4.0, or 5.0. An exception is when the forked software is designed to be a drop-in replacement for the original project, ", "e.g.", " ", "MariaDB", " for ", "MySQL", "[16]", " or ", "LibreOffice", " for ", "OpenOffice.org", ".", "\n", "Forking proprietary software", "[", "edit", "]", "\n", "In ", "proprietary software", ", the copyright is usually held by the employing entity, not by the individual software developers. Proprietary code is thus more commonly forked when the owner needs to develop two or more versions, such as a ", "windowed", " version and a ", "command line", " version, or versions for differing operating systems, such as a ", "word processor", " for ", "IBM PC", " compatible machines and ", "Macintosh", " computers. Generally, such internal forks will concentrate on having the same look, feel, data format, and behavior between platforms so that a user familiar with one can also be productive or share documents generated on the other. This is almost always an economic decision to generate a greater ", "market share", " and thus pay back the associated extra development costs created by the fork.", "\n", "A notable proprietary fork not of this kind is the many varieties of proprietary ", "Unix", "\u2014almost all derived from AT&T Unix under license and all called \"Unix\", but increasingly mutually incompatible.", "[17]", " ", "See", " ", "UNIX wars", ".", "\n", "The ", "BSD licenses", " permit forks to become proprietary software, and some say", "[", "who?", "]", " that commercial incentives thus make proprietisation almost inevitable. Examples include ", "macOS", " (based on the proprietary ", "NeXTSTEP", " and the open source ", "FreeBSD", "), ", "Cedega", " and ", "CrossOver", " (proprietary forks of ", "Wine", ", though CrossOver tracks Wine and contributes considerably), EnterpriseDB (a fork of ", "PostgreSQL", ", adding Oracle compatibility features", "[18]", "), Supported PostgreSQL with their proprietary ESM storage system,", "[19]", " and Netezza's", "[20]", " proprietary highly scalable derivative of PostgreSQL. Some of these vendors contribute back changes to the community project, while some keep their changes as their own competitive advantages.", "\n", "See also", "[", "edit", "]", "\n", "\n", "List of software forks", "\n", "Source port", "\n", "Downstream (software development)", "\n", "Group decision-making", "\n", "Modular programming", "\n", "\n", "Modding", "\n", "\n", "\n", "Custom software", "\n", "Personalization", "\n", "Team effectiveness", "\n", "\n", "Duplicate code", "\n", "\n", "\n", "ROM Hacking", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"Schism\", with its connotations, is a common usage, ", "e.g.", " ", "\"the Lemacs/FSFmacs schism\"", " (", "Jamie Zawinski", ", 2000), ", "\"Behind the KOffice split\"", " (Joe Brockmeier, ", "Linux Weekly News", ", 2010-12-14), ", "\"Copyright assignment - once bitten, twice shy\"", " (Richard Hillesley, ", "H-Online", ", 2010-08-06), ", "\"Forking is a feature\"", " (", "Anil Dash", ", 2010-09-10), ", "\"The Great Software Schism\"", " (", "Glyn Moody", ", ", "Linux Journal", ", 2006-09-28), ", "\"To Fork Or Not To Fork: Lessons From Ubuntu and Debian\"", " (", "Benjamin Mako Hill", ", 2005).", "\n", "^", " ", "See, e.g., ", "\"furca\" from Etymological Dictionary of Latin by Michiel de Vaan (Ph.D. 2002)", "\n", "^", " ", "Entry 'fork' in Online Etymology Dictionary", "\n", "^", " ", "\"The term fork is derived from the POSIX standard for operating systems: the system call used so that a process generates a copy of itself is called fork().\" ", "Robles, Gregorio; Gonz\u00e1lez-Barahona, Jes\u00fas M. (2012). ", "A Comprehensive Study of Software Forks: Dates, Reasons and Outcomes", " ", "(PDF)", ". OSS 2012 The Eighth International Conference on Open Source Systems", ". Retrieved ", "20 Oct", " 2012", ".", "\u00a0", "\n", "^", " ", "Allman, Eric. ", "\"An Introduction to the Source Code Control System.\"", " Project Ingres, University of California at Berkeley, 1980.", "\n", "^", " ", "Can somebody fork off a \"net.philosophy\"?", " (", "John Gilmore", ", net.misc, 18 January 1983)", "\n", "^", " ", "Shattering\u00a0\u2014 good or bad?", " (Russell Nelson, gnu.misc.discuss, 1 October 1993)", "\n", "^", " ", "Re: Hey Franz: 32K Windows SUCK!!!!!", " (Bill Dubuque, cu.cs.macl.info, 21 September 1995)", "\n", "^", " ", "Lignux?", " (Marcus G. Daniels, gnu.misc.discuss, 7 June 1996)", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Why Open Source Software / Free Software (OSS/FS, FLOSS, or FOSS)? Look at the Numbers!: Forking", " (", "David A. Wheeler", ")", "\n", "^", " ", "Stallman, Richard. ", "\"The Free Software Definition\"", ". Free Software Foundation", ". Retrieved ", "2013-10-15", ".", "\u00a0", "\n", "^", " ", "\"The Open Source Definition\"", ". The Open Source Initiative", ". Retrieved ", "15 October", " 2013", ".", "\u00a0", "\n", "^", " ", "Raymond, Eric S.", " (15 August 2002). ", "\"Promiscuous Theory, Puritan Practice\"", ".", "\u00a0", "\n", "^", " ", "Forked", " (", "Jargon File", "), first added to ", "v4.2.2", ", 20 Aug 2000)", "\n", "^", " ", "e.g.", " ", "Willis, Nathan (15 January 2015). ", "\"An \"open governance\" fork of Node.js\"", ". ", "LWN.net", ". Retrieved ", "15 January", " 2015", ". ", "Forks are a natural part of the open development model\u2014so much so that GitHub famously plasters a \"fork your own copy\" button on almost every page.", "\u00a0", " See also ", "Nyman, Linus (2015). ", "\"Understanding Code Forking in Open Source Software\"", " (Ph.D.). Hanken School of Economics. p.\u00a057. ", "Where practitioners have previously had rather narrow definitions of a fork, [...] the term now appears to be used much more broadly. Actions that would traditionally have been called a branch, a new distribution, code fragmentation, a pseudo-fork, etc. may all now be called forks by some developers. This appears to be in no insignificant part due to the broad definition and use of the term fork by GitHub.", "\u00a0", "\n", "^", " ", "Forked a project, where do my version numbers start?", "\n", "^", " ", "Fear of forking", " - An essay about forking in ", "free software", " projects, by Rick Moen", "\n", "^", " ", "EnterpriseDB", "\n", "^", " ", "Fujitsu Supported PostgreSQL", " ", "Archived", " 20 August 2006 at the ", "Wayback Machine", ".", "\n", "^", " ", "Netezza", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Right to Fork", " at ", "Meatball Wiki", "\n", "A PhD examining forking: ", "(Nyman, 2015)", " \"Understanding Code Forking in Open Source Software - An examination of code forking, its effect on open source software, and how it is viewed and practiced by developers\"", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Free and open-source software", "\n", "\n", "\n", "\n", "General", "\n", "\n", "\n", "\n", "Alternative terms for free software", "\n", "Comparison of open-source and closed-source software", "\n", "Comparison of source code hosting facilities", "\n", "Free software", "\n", "Free software project directories", "\n", "Gratis versus libre", "\n", "Long-term support", "\n", "Open-source software", "\n", "Open-source software development", "\n", "Outline", "\n", "\n", "\n", "\n", "\n", "\n", "Software", "\npackages", "\n", "\n", "\n", "\n", "Audio", "\n", "Bioinformatics", "\n", "Codecs", "\n", "Collaboration", "\n", "Configuration management", "\n", "Device drivers", "\n", "\n", "Graphics", "\n", "Wireless", "\n", "\n", "\n", "Geophysics", "\n", "Health", "\n", "Mathematics", "\n", "Operating systems", "\n", "Programming languages", "\n", "Routing", "\n", "Statistics", "\n", "Television", "\n", "Video games", "\n", "Web applications", "\n", "\n", "Content management systems", "\n", "E-commerce", "\n", "\n", "\n", "Word processors", "\n", "Android apps", "\n", "iOS apps", "\n", "Commercial", "\n", "Trademarked", "\n", "Formerly proprietary", "\n", "\n", "\n", "\n", "\n", "\n", "Community", "\n", "\n", "\n", "\n", "Free software movement", "\n", "History", "\n", "Open-source software movement", "\n", "Organizations", "\n", "Events", "\n", "\n", "\n", "\n", "\n", "\n", "Licenses", "\n", "\n", "\n", "\n", "AFL", "\n", "Apache", "\n", "APSL", "\n", "Artistic", "\n", "Beerware", "\n", "Boost", "\n", "BSD", "\n", "CC0", "\n", "CDDL", "\n", "EPL", "\n", "GNU GPL", "\n", "GNU LGPL", "\n", "ISC", "\n", "MIT", "\n", "MPL", "\n", "Ms-PL/RL", "\n", "Python", "\n", "Python Software Foundation", "\n", "Sleepycat", "\n", "Unlicense", "\n", "WTFPL", "\n", "zlib", "\n", "\n", "\n", "\n", "\n", "\n", "License types", "\nand standards", "\n", "\n", "\n", "\n", "Comparison of free and open-source software licenses", "\n", "Contributor License Agreement", "\n", "Copyfree", "\n", "Copyleft", "\n", "Debian Free Software Guidelines", "\n", "Definition of Free Cultural Works", "\n", "Free license", "\n", "The Free Software Definition", "\n", "The Open Source Definition", "\n", "Open-source license", "\n", "Permissive software licence", "\n", "Public domain", "\n", "Viral license", "\n", "\n", "\n", "\n", "\n", "\n", "Challenges", "\n", "\n", "\n", "\n", "Binary blob", "\n", "Digital rights management", "\n", "Hardware restrictions", "\n", "License proliferation", "\n", "Mozilla software rebranding", "\n", "Proprietary software", "\n", "SCO/Linux controversies", "\n", "Secure boot", "\n", "Software patents", "\n", "Software security", "\n", "Trusted Computing", "\n", "\n", "\n", "\n", "\n", "\n", "Related topics", "\n", "\n", "\n", "\n", "The Cathedral and the Bazaar", "\n", "Forking", "\n", "Microsoft Open Specification Promise", "\n", "Revolution OS", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Book", "\n", " ", "Category", "\n", " ", "Commons", "\n", " ", "Portal", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 20 November 2017, at 16:38."}, +{"title": "Theo de Raadt", "text": ["\n", "\n", "Theo de Raadt", "\n", "\n", "\n", "\n", "Theo de Raadt in 2013", "\n", "\n", "\n", "\n", "Born", "\n", "(", "1968-05-19", ")", " May 19, 1968 ", "(age\u00a049)", "\n", "Pretoria", ", ", "South Africa", "\n", "\n", "\n", "Residence", "\n", "Calgary", ", ", "Alberta", ", ", "Canada", "\n", "\n", "\n", "Nationality", "\n", "Canadian", "\n", "\n", "\n", "Alma\u00a0mater", "\n", "University of Calgary", "\n", "\n", "\n", "Known\u00a0for", "\n", "NetBSD", ", ", "OpenBSD", ", ", "OpenSSH", ", advocacy", "\n", "\n", "\n", "Awards", "\n", "Award for the Advancement of Free Software", "\n", "\n", "\n", "Scientific career", "\n", "\n", "\n", "Fields", "\n", "computer science, free software development", "\n", "\n", "\n", "Institutions", "\n", "FSA Corporation", "\n", "\n", "\n", "\n", "\n", "\n", "Theo de Raadt", " (", "/", "\u02c8", "\u03b8", "i\u02d0", ".", "o\u028a", " ", "d", "\u025b", "\u02c8", "r", "\u0254\u02d0", "t", "/", "; ", "Dutch:\u00a0", "[\u02c8te\u02d0.jo\u02d0 d\u0259\u02c8ra\u02d0t]", "; born May 19, 1968) is a ", "software engineer", " who lives in ", "Calgary", ", ", "Alberta", ", ", "Canada", ". He is the founder and leader of the ", "OpenBSD", " and ", "OpenSSH", " projects, and was also a founding member of the ", "NetBSD", " project.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Childhood", "\n", "2", " ", "NetBSD", "\n", "3", " ", "OpenBSD", "\n", "4", " ", "Outspokenness", "\n", "\n", "4.1", " ", "DARPA funding cancellation", "\n", "4.2", " ", "Free driver advocacy", "\n", "4.3", " ", "Clash with Linux developers", "\n", "\n", "\n", "5", " ", "References", "\n", "6", " ", "External links", "\n", "\n", "\n", "\n", "Childhood", "[", "edit", "]", "\n", "Theo de Raadt is the eldest of four children to a ", "Dutch", " father and a ", "South African", " mother, with two sisters and a brother. Concern over the mandatory two-year armed forces ", "conscription", " in South Africa led the family to emigrate to Calgary, Alberta, Canada in November 1977. In 1983, the ", "largest recession in Canada", " since the ", "Great Depression", " sent the family to the ", "Yukon", ". Prior to the move, De Raadt got his first computer, a ", "Commodore VIC-20", ", which was soon followed by an ", "Amiga", ". It is with these computers that he first began to develop software.", "[1]", "\n", "In 1992, he obtained a ", "BSc", " in ", "Computer Science", " from the ", "University of Calgary", ".", "\n", "NetBSD", "[", "edit", "]", "\n", "The ", "NetBSD", " project was founded in 1993 by Chris Demetriou, Adam Glass, Charles Hannum, and De Raadt, who collectively felt frustration at the speed and quality of ", "Jolix", ", the standard Berkeley software distribution then, and believed that a more open development model would be of greater benefit to development of an operating system. Jolix, also known as ", "386BSD", ", was derived from the original University of California Berkeley's 4.3BSD release, while the new NetBSD project would merge relevant code from the Networking/2 and 386BSD releases. The new project would centre its focus on clean, portable, correct code with the goal being to produce a unified, multi-platform, production-quality, BSD-based operating system.", "\n", "Because of the importance of networks such as the Internet in the distributed, collaborative nature of its development, De Raadt suggested the name \"NetBSD\", which the three other founders agreed upon.", "[", "citation needed", "]", "\n", "The first NetBSD source code repository was established on March 21, 1993 and the initial release, NetBSD 0.8, was made in April 1993. This was derived from 386BSD 0.1 plus the version 0.2.2 unofficial patchkit, with several programs from the Net/2 release missing from 386BSD re-integrated, and various other improvements. In August 1993, NetBSD 0.9 was released, which contained many enhancements and bug fixes. This was still a ", "PC", "-platform-only release, although by this time work was underway to add support for other architectures.", "\n", "NetBSD 1.0 was released in October, 1994. This was the first multi-platform release, supporting the ", "IBM PC compatible", ", ", "HP 9000", " Series 300, ", "Amiga", ", ", "68k", " ", "Macintosh", ", ", "Sun-4c", " series and ", "PC532", ". Also in this release, the legally encumbered Net/2-derived source code was replaced with equivalent code from 4.4BSD-lite, in accordance with the ", "USL v BSDi", " lawsuit settlement. De Raadt played a vital role in the creation of the ", "SPARC", " port, as together with Chuck Cranor,", "[2]", " he implemented much of the initial code.", "\n", "OpenBSD", "[", "edit", "]", "\n", "In December 1994, De Raadt was asked to resign his position as a senior developer and member of the NetBSD core team, and his access to the source code repository was revoked. The reason for this is not wholly clear, although there are claims that it was due to personality clashes within the NetBSD project and on its ", "mailing lists", ".", "[3]", " De Raadt has been criticized for having a somewhat abrasive personality: in his book, ", "Free for All", ", Peter Wayner claims that De Raadt \"began to rub some people the wrong way\" before the split from NetBSD;", "[4]", " while ", "Linus Torvalds", " has described him as \"difficult\".", "[5]", " Many have different feelings: the same interviewer describes De Raadt's \"transformation\" on founding OpenBSD and his \"desire to take care of his team,\" some find his straightforwardness refreshing, and few deny he is a talented ", "hacker", "[6]", " and security \"guru\".", "[7]", "\n", "In October 1995, De Raadt founded OpenBSD, a new project ", "forked", " from NetBSD 1.0. The initial ", "release", ", OpenBSD 1.2, was made in July 1996, followed in October of the same year by OpenBSD 2.0.", "[8]", " Since then, the project has followed a schedule of a release every six months, each of which is maintained and supported for one year.", "\n", "Outspokenness", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "Jon \"maddog\" Hall", " presents De Raadt with ", "daemon", " horns at ", "FISL8", "\n", "\n", "\n", "De Raadt has been a vocal advocate of free software since the inception of OpenBSD, but he is also a strong proponent of free speech, having on occasion had rather public disputes with various groups, from Linux advocates to governments. This outspoken attitude, while sometimes the cause of conflict, has also led him to acclaim; De Raadt has given presentations at open source, free software and security conferences around the world\u2014including ", "FOSDEM", " in ", "Brussels", ", ", "Belgium", ", ", "Usenix", " in ", "San Antonio, Texas", ", ", "U.S.", ", ", "AUUG", " Conference in ", "Melbourne", ", ", "Australia", " and ", "FISL", " in ", "Porto Alegre", ", RS, ", "Brazil", ".", "\n", "DARPA funding cancellation", "[", "edit", "]", "\n", "After De Raadt stated his disapproval of the U.S.-led ", "occupation of Iraq", " in an April, 2003 ", "interview", "[9]", " with ", "Toronto", "'s ", "Globe and Mail", ", a multi-million-dollar ", "US Department of Defense", " grant to the ", "University of Pennsylvania", "'s ", "POSSE project", " was cancelled, effectively ending the project. Funding from the grant had been used in the development of OpenSSH and OpenBSD, as well as many other projects and was to be used to pay for the ", "hackathon", " planned for May 8, 2003. Despite money from the grant already having been used to secure accommodations for sixty developers for a week, the money was reclaimed by the government at a loss and the hotel was told not to allow the developers to pay the reclaimed money to resecure the rooms.", "[10]", " This resulted in criticism among some that the US military held an anti-", "free speech", " attitude. The grant termination was, however, not as bad a blow as some portrayed it. The project's supporters rallied to help and the hackathon went on almost as planned. The funding was cut mere months before the end of the grant, further fueling the speculations regarding the situation surrounding the grant's termination.", "\n", "Free driver advocacy", "[", "edit", "]", "\n", "De Raadt is also well known for his advocacy of ", "free software", " ", "drivers", ". He has long been critical of developers of ", "Linux", " and other free platforms for their tolerance of non-free drivers and acceptance of ", "non-disclosure agreements", ".", "\n", "In particular, De Raadt has worked to convince ", "wireless", " hardware vendors to allow the ", "firmware", " images of their products to be freely redistributed. These efforts have been largely successful, particularly in negotiations with ", "Taiwanese", " companies, leading to many new wireless drivers. De Raadt has commented that \"most Taiwanese vendors give us documentation almost immediately\", allowing open source drivers to reliably support devices, as opposed to the lack of willingness from US companies like ", "Intel", " and ", "Broadcom", " to release firmware images free from ", "licensing", " restrictions.", "[11]", "\n", "For this De Raadt was awarded the ", "Free Software Foundation", "'s 2004 ", "Award for the Advancement of Free Software", ".", "[12]", "\n", "Clash with Linux developers", "[", "edit", "]", "\n", "In April 2007, De Raadt was involved in a controversy involving the use of ", "GPL", " code from the Linux ", "bcm43xx", " driver in the BSD ", "bcw", " driver.", "[13]", "[14]", " Linux developers accused the BSD community of infringing GPL code, but De Raadt denied infringement, arguing that the BSD driver was not \"released\". He also maintained that the conflict was not about GPL, but the way Linux developer ", "Michael Buesch", " handled the situation. To Buesch's email, he responded:", "[15]", "\n", "\n", "It will be resolved in our tree, but it is up to him which way he does it. But when you approach issues like this with comments like \"We'd like you to start contacting us to resolve the issue now\" and your first mail is cc'd to a couple hundred people.... in the future, please think more carefully, ok?", "\n", "Because right now, in that mail, you've pretty much done Broadcom's job for them. You've told the entire BSD community who may want to use a driver for this chip later, that because of a few GPL issues you are willing to use very strong words\u2014published very widely\u2014to disrupt the efforts of one guy who is trying to do things for them. And, you are going to do this using the GPL, even. You did not privately mail that developer. No, you basically went public with it.", "\n", "That is how about half the user and developer community will see it. They will see your widely posted mail as an overly strong position.", "\n", "\n", "Another clash occurred in August 2007, when a group of Linux developers attempted to modify the license of dual-licensed ath5k driver. De Raadt summarized the issue as follows:", "[16]", "\n", "\n", "GPL fans said the great problem we would face is that companies would take our BSD code, modify it, and not give back. Nope\u2014the great problem we face is that people would wrap the GPL around our code, and lock us out in the same way that these supposed companies would lock us out. Just like the Linux community, we have many companies giving us code back, all the time. But once the code is GPL'd, we cannot get it back.", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "The Age article: ", "\"Staying on the cutting edge\"", ". October 8, 2004. Accessed April 5, 2006.", "\n", "^", " ", "\"Chuck Cranor's Home Page\"", ".", "\u00a0", "\n", "^", " ", "Glass, Adam. Message to netbsd-users: ", "Theo De Raadt(sic)", ",", " December 23, 1994. Visited January 8, 2006.", "\n", "^", " ", "Wayner, Peter. ", "Free For All: How Linux and the Free Software Movement Undercut the High Tech Titans,", " ", "18.3 Flames, Fights, and the Birth of OpenBSD", ", 2000. Visited January 6, 2006.", "\n", "^", " ", "Forbes. ", "Is Linux For Losers?", " June 16, 2005. Visited January 8, 2006.", "\n", "^", " ", "In ", "this message", " the NetBSD core team acknowledge De Raadt's \"positive contributions\" to the project despite their problems with him.", "\n", "^", " ", "Tux Journal. ", "A good morning with: Theo de Raadt", ",", " June 2, 2005. Visited April 21, 2006 (original is ", "404", "; please see a ", "cached copy on archive.org", ")", "\n", "^", " ", "Raadt, Theo de. Mail to openbsd-announce: ", "The OpenBSD 2.0 release", ",", " October 18, 1996. Visited December 10, 2005.", "\n", "^", " ", "Globe and Mail article: ", "\"U.S. military helps fund Calgary hacker\"", ". April 6, 2003. Accessed October 30, 2006.", "\n", "^", " ", "LWN.net article: ", "\"DARPA Cancels OpenBSD Funding\"", ". April 24, 2003. Accessed April 5, 2006.", "\n", "^", " ", "Andrews, Jeremy (May 2, 2006). ", "\"Interview: Theo de Raadt\"", ". Archived from ", "the original", " on April 24, 2013.", "\u00a0", "\n", "^", " ", "Lee, Matt (February 26, 2005). ", "\"Theo de Raadt presented with the 2004 Free Software Award\"", ". Free Software Foundation.", "\u00a0", "\n", "^", " ", "LXer article: ", "Broadcom Driver Dispute Uglier Than Necessary", ". April 7, 2007. Accessed April 8, 2007.", "\n", "^", " ", "Thread on gmane.linux.kernel.wireless.general: ", "OpenBSD bcw: Possible GPL license violation issues", " Various dates beginning April 4, 2007. Accessed April 8, 2007.", "\n", "^", " ", "Theo de Raadt (4 April 2007). ", "\"OpenBSD bcw: Possible GPL license violation issues\"", ". Retrieved ", "28 May", " 2017", " \u2013 via ", "marc.info", ".", "\u00a0", "\n", "^", " ", "de Raadt, Theo (August 31, 2007). ", "\"That whole \"Linux stealing our code\" thing\"", ". LKML.org.", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "Free software portal", "\n", "\n", "\n", "\n", "\n", "\n", "Wikiquote has quotations related to: ", "Theo de Raadt", "\n", "\n", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Theo de Raadt", ".", "\n", "\n", "\n", "\n", "Theo de Raadt's Web site", "\n", "Interview (2006): Theo de Raadt", ", at ", "KernelTrap.org", " (copy at Internet Archive).", "\n", "Theo de Raadt Responds", ", interview at ", "Slashdot", ".", "\n", "Interview (2001): Theo de Raadt", ", at ", "KernelTrap.org", " (copy at Internet Archive).", "\n", "Is Linux For Losers?", ", interview at ", "Forbes.com", ".", "\n", "Theo de Raadt presented with the 2004 Free Software Award", "\n", "NNDB: Theo de Raadt", "\n", "Staying on the cutting edge", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "The ", "OpenBSD", " Project", "\n", "\n", "\n", "\n", "Operating system", "\n", "\n", "\n", "\n", "OpenBSD", "\n", "\n", "version history", "\n", "security", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Related projects", "\n", "\n", "\n", "\n", "CARP", "\n", "LibreSSL", "\n", "mandoc", "\n", "OpenSSH", "\n", "OpenBGPD", "\n", "OpenIKED", "\n", "OpenOSPFD", "\n", "OpenNTPD", "\n", "OpenSMTPD", "\n", "PF", "\n", "sndio", "\n", "spamd", "\n", "Systrace", "\n", "tmux", "\n", "Xenocara", "\n", "\n", "cwm", "\n", "\n", "\n", "W^X", "\n", "\n", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Theo de Raadt", "\n", "Niels Provos", "\n", "OpenBSD Foundation", "\n", "Plaid Tongued Devils", "\n", "\n", "\n", "\n", "\n", "\n", "Resources", "\n", "\n", "\n", "\n", "OpenBSD Journal", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Authority control", "\n", "\n", "\n", "\n", "WorldCat Identities", "\n", "VIAF", ": ", "106072661", "\n", "MusicBrainz", ": ", "11ff06a3-6127-4b6d-9b43-bafcd8c650da", "\n", "DBLP", ": ", "54/954", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 18 January 2018, at 07:07."}, +{"title": "Altruism", "text": ["For the concept in behavioral ecology, see ", "Altruism (biology)", ".", "\n", "\n", "\n", "\n", "\nGiving ", "alms", " to the poor is often considered an altruistic action.", "\n", "\n", "\n", "Altruism", " or ", "selflessness", " is the principle or practice of concern for the ", "welfare", " of others. It is a traditional ", "virtue", " in many cultures and a core aspect of various religious traditions and secular worldviews, though the concept of \"others\" toward whom concern should be directed can vary among cultures and religions. Altruism or selflessness is the opposite of ", "selfishness", ". The word was coined by the French philosopher ", "Auguste Comte", " in French, as ", "altruisme", ", for an ", "antonym", " of ", "egoism", ".", "[1]", "[2]", " He derived it from the Italian ", "altrui", ", which in turn was derived from Latin ", "alteri", ", meaning \"", "other people", "\" or \"somebody else\".", "[3]", "\n", "Altruism in biological observations in field populations of the day organisms can be defined as an individual performing an action which is at a cost to themselves (e.g., pleasure and quality of life, time, probability of survival or reproduction), but benefits, either directly or indirectly, another third-party individual, without the expectation of reciprocity or compensation for that action. Steinberg suggests a definition for altruism in the clinical setting, that is \"intentional and voluntary actions that aim to enhance the welfare of another person in the absence of any quid pro quo external rewards\".", "[4]", "\n", "Altruism can be distinguished from feelings of ", "loyalty", ", in that whilst the latter is predicated upon social relationships, altruism does not consider relationships. Much debate exists as to whether ", "\"true\"", " altruism is possible in human psychology. The theory of ", "psychological egoism", " suggests that no act of sharing, helping or sacrificing can be described as truly altruistic, as the actor may receive an intrinsic reward in the form of personal ", "gratification", ". The validity of this argument depends on whether ", "intrinsic rewards", " qualify as \"benefits\". The actor also may not be expecting a reward.", "\n", "The term ", "altruism", " may also refer to an ethical doctrine that claims that individuals are morally obliged to benefit others. Used in this sense, it is usually contrasted with ", "egoism", ", which is defined as acting to the benefit of one's self.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "The notion of altruism", "\n", "2", " ", "Scientific viewpoints", "\n", "\n", "2.1", " ", "Anthropology", "\n", "2.2", " ", "Evolutionary explanations", "\n", "2.3", " ", "Neurobiology", "\n", "2.4", " ", "Psychology", "\n", "2.5", " ", "Sociology", "\n", "2.6", " ", "Pathological altruism", "\n", "\n", "\n", "3", " ", "Religious viewpoints", "\n", "\n", "3.1", " ", "Buddhism", "\n", "3.2", " ", "Jainism", "\n", "3.3", " ", "Christianity", "\n", "3.4", " ", "Islam", "\n", "3.5", " ", "Judaism", "\n", "3.6", " ", "Sikhism", "\n", "3.7", " ", "Hinduism", "\n", "\n", "\n", "4", " ", "Philosophy", "\n", "5", " ", "Genetics", "\n", "6", " ", "See also", "\n", "7", " ", "Notes", "\n", "8", " ", "References", "\n", "9", " ", "External links", "\n", "\n", "\n", "\n", "The notion of altruism", "[", "edit", "]", "\n", "The concept has a long history in ", "philosophical", " and ", "ethical", " thought. The term was originally coined in the 19th century by the founding ", "sociologist", " and ", "philosopher of science", ", ", "Auguste Comte", ", and has become a major topic for ", "psychologists", " (especially ", "evolutionary psychology", " researchers), ", "evolutionary biologists", ", and ", "ethologists", ". Whilst ideas about altruism from one field can affect the other fields, the different methods and focuses of these fields always lead to different perspectives on altruism. In simple terms, altruism is caring about the welfare of other people and acting to help them.", "\n", "Scientific viewpoints", "[", "edit", "]", "\n", "Anthropology", "[", "edit", "]", "\n", "Marcel Mauss", "'s book ", "The Gift", " contains a passage called \"Note on alms\". This note describes the evolution of the notion of alms (and by extension of altruism) from the notion of sacrifice. In it, he writes:", "\n", "\n", "Alms are the fruits of a moral notion of the gift and of fortune on the one hand, and of a notion of sacrifice, on the other. Generosity is an obligation, because Nemesis avenges the poor and the gods for the superabundance of happiness and wealth of certain people who should rid themselves of it. This is the ancient morality of the gift, which has become a principle of justice. The gods and the spirits accept that the share of wealth and happiness that has been offered to them and had been hitherto destroyed in useless sacrifices should serve the poor and children.", "\n", "\n", "\n", "Compare ", "Altruism (ethics) \u2013 perception of altruism as self-sacrifice", ".", "\n", "Compare ", "explanation of alms in various scriptures", ".", "\n", "\n", "Evolutionary explanations", "[", "edit", "]", "\n", "Main articles: ", "Altruism in animals", ", ", "Evolution of morality", ", and ", "Evolutionary ethics", "\n", "\n", "\n", "\n", "\nGiving alms to beggar children", "\n", "\n", "\n", "In the science of ", "ethology", " (the study of animal behaviour), and more generally in the study of ", "social evolution", ", altruism refers to behaviour by an individual that increases the ", "fitness", " of another individual while decreasing the fitness of the actor.", "[5]", " In ", "evolutionary psychology", " this may be applied to a wide range of human behaviors such as charity, emergency aid, help to coalition partners, ", "tipping", ", courtship gifts, production of ", "public goods", ", and ", "environmentalism", ".", "[6]", "\n", "Theories of apparently altruistic behavior were accelerated by the need to produce theories compatible with evolutionary origins. Two related strands of research on altruism have emerged from traditional evolutionary analyses and from ", "evolutionary game theory", " a mathematical model and analysis of behavioural strategies.", "\n", "Some of the proposed mechanisms are:", "\n", "\n", "Kin selection", ".", "[7]", " That animals and humans are more altruistic towards close kin than to distant kin and non-kin has been confirmed in numerous studies across many different cultures. Even subtle cues indicating kinship may unconsciously increase altruistic behavior. One kinship cue is facial resemblance. One study found that slightly altering photographs so that they more closely resembled the faces of study participants increased the trust the participants expressed regarding depicted persons. Another cue is having the same family name, especially if rare, and this has been found to increase helpful behavior. Another study found more cooperative behavior the greater the number of perceived kin in a group. Using kinship terms in political speeches increased audience agreement with the speaker in one study. This effect was especially strong for firstborns, who are typically close to their families.", "[6]", "\n", "Vested interests. People are likely to suffer if their friends, allies, and similar social ", "ingroups", " suffer or even disappear. Helping such group members may therefore eventually benefit the altruist. Making ingroup membership more noticeable increases cooperativeness. Extreme self-sacrifice towards the ingroup may be adaptive if a hostile ", "outgroup", " threatens to kill the entire ingroup.", "[6]", "\n", "Reciprocal altruism", ".", "[8]", " See also ", "Reciprocity (evolution)", ".\n", "\n", "Direct ", "reciprocity", ".", "[9]", " Research shows that it can be beneficial to help others if there is a chance that they can and will reciprocate the help. The effective ", "tit for tat", " strategy is one ", "game theoretic", " example. Many people seem to be following a similar strategy by cooperating if and only if others cooperate in return.", "[6]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "One consequence is that people are more cooperative if it is more likely that individuals will interact again in the future. People tend to be less cooperative if they perceive that the frequency of helpers in the population is lower. They tend to help less if they see non-cooperativeness by others and this effect tend to be stronger than the opposite effect of seeing cooperative behaviors. Simply changing the cooperative framing of a proposal may increase cooperativeness such as calling it a \"Community Game\" instead of a \"Wall Street Game.\"", "[6]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "A tendency towards reciprocity implies that people will feel obligated to respond if someone helps them. This has been used by charities that give small gifts to potential donors hoping thereby to induce reciprocity. Another method is to announce publicly that someone has given a large donation. The tendency to reciprocate can even generalize so people become more helpful toward others in general after being helped. On the other hand, people will avoid or even retaliate against those perceived not to be cooperating. People sometimes mistakenly fail to help when they intended to, or their helping may not be noticed, which may cause unintended conflicts. As such, it may be an optimal strategy to be slightly forgiving of and have a slightly generous interpretation of non-cooperation.", "[6]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "People are more likely to cooperate on a task if they can communicate with one another first. This may be due to better assessments of cooperativeness or due to exchange of promises. They are more cooperative if they can gradually build trust, instead of being asked to give extensive help immediately. Direct reciprocity and cooperation in a group can be increased by changing the focus and incentives from intra-group competition to larger scale competitions such as between groups or against the general population. Thus, giving grades and promotions based only on an individual's performance relative to a small local group, as is common, may reduce cooperative behaviors in the group.", "[6]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Indirect reciprocity.", "[10]", " The avoidance of poor reciprocators and cheaters causes a person's ", "reputation", " to become very important. A person with a good reputation for reciprocity have a higher chance of receiving help even from persons they have had no direct interactions with previously.", "[6]", "\n", "Strong reciprocity", ".", "[11]", " A form of reciprocity where some individuals seem to spend more resources on cooperating and punishing than would be most beneficial as predicted by several established theories of altruism. A number of theories have been proposed as explanations as well as criticisms regarding its existence.", "\n", "Pseudo-reciprocity.", "[12]", " An organism behaves altruistically and the recipient does not reciprocate but has an increased chance of acting in a way that is selfish but also as a byproduct benefits the altruist.", "\n", "\n", "\n", "Costly signaling", " and the ", "handicap principle", ".", "[13]", " Since altruism takes away resources from the altruist it can be an \"honest signal\" of resource availability and the abilities needed to gather resources. This may signal to others that the altruist is a valuable potential partner. It may also be a signal of interactive and cooperative intentions since those not interacting further in the future gain nothing from the costly signaling. It is unclear if costly signaling can indicate a long-term cooperative personality but people have increased trust for those who help. Costly signaling is pointless if everyone has the same traits, resources, and cooperative intentions but become a potentially more important signal if the population increasingly varies on these characteristics.", "[6]", "\n", "\n", "\n", "Hunters widely sharing the meat has been seen as a costly signal of ability and research has found that good hunters have higher reproductive success and more adulterous relations even if they themselves receive no more of the hunted meat than anyone else. Similarly, holding large feasts and giving large donations has been seen as ways of demonstrating one's resources. Heroic risk-taking has also been interpreted as a costly signal of ability.", "[6]", "\n", "\n", "\n", "\n", "\n", "\nVolunteers assist Hurricane victims at the ", "Houston Astrodome", ", following Hurricane Katrina.", "\n", "\n", "\n", "\n", "Both indirect reciprocity and costly signaling depend on the value of reputation and tend to make similar predictions. One is that people will be more helping when they know that their helping behavior will be communicated to people they will interact with later, is publicly announced, is discussed, or is simply being observed by someone else. This have been documented in many studies. The effect is sensitive to subtle cues such as people being more helpful when there were stylized eyespots instead of a logo on a computer screen. Weak reputational cues such as eyespots may become unimportant if there are stronger cues present and may lose their effect with continued exposure unless reinforced with real reputational effects.", "[6]", " Public displays such as public weeping for dead celebrities and participation in demonstrations may be influenced by a desire to be seen as altruistic. People who know that they are publicly monitored sometimes even wastefully donate money they know are not needed by recipient which may be because of reputational concerns.", "[14]", "\n", "\n", "\n", "Women have been found to find altruistic men to be attractive partners. When looking for a long-term partner, altruism may be a preferred trait as it may indicate that he is also willing to share resources with her and her children. It has been shown that men perform altruistic acts in the early stages of a romantic relationship or simply when in the presence of an attractive woman. While both sexes state that kindness is the most preferable trait in a partner there is some evidence that men place less value on this than women and that women may not be more altruistic in presence of an attractive man. Men may even avoid altruistic women in short-term relationships which may be because they expect less success.", "[6]", "[14]", "\n", "\n", "\n", "People may compete over getting the benefits of a high reputation which may cause ", "competitive altruism", ". On the other hand, in some experiments a proportion of people do not seem to care about reputation and they do not help more even if this is conspicuous. This may possibly be due to reasons such as ", "psychopathy", " or that they are so attractive that they need not be seen to be altruistic. The reputational benefits of altruism occur in the future as compared to the immediate costs of altruism in the present. While humans and other organisms generally place less value on future costs/benefits as compared to those in the present, some have shorter time horizons than others and these people tend to be less cooperative.", "[6]", "\n", "\n", "\n", "Explicit ", "extrinsic", " rewards and punishments have been found to sometimes actually have the opposite effect on behaviors compared to intrinsic rewards. This may be because such extrinsic, top-down incentives may replace (partially or in whole) intrinsic and reputational incentives, motivating the person to focus on obtaining the extrinsic rewards, which overall may make the behaviors less desirable. Another effect is that people would like altruism to be due to a personality characteristic rather than due to overt reputational concerns and simply pointing out that there are reputational benefits of an action may actually reduce them. This may possibly be used as derogatory tactic against altruists, especially by those who are non-cooperators. A counterargument is that doing good due to reputational concerns is better than doing no good at all.", "[6]", "\n", "\n", "\n", "Group selection", ". It has controversially been argued by some evolutionary scientists such as ", "David Sloan Wilson", " that natural selection can act at the level of non-kin groups to produce adaptations that benefit a non-kin group even if these adaptions are detrimental at the individual level. Thus, while altruistic persons may under some circumstances be outcompeted by less altruistic persons at the individual level, according to group selection theory the opposite may occur at the group level where groups consisting of the more altruistic persons may outcompete groups consisting of the less altruistic persons. Such altruism may only extend to ingroup members while there may instead prejudice and antagonism against outgroup members (See also ", "in-group favoritism", "). Group selection theory has been criticized by many other evolutionary scientists.", "[15]", "[16]", "\n", "\n", "\n", "\n", "\n", "\nHelping the ", "homeless", " in New York City", "\n", "\n", "\n", "Such explanations do not imply that humans are always consciously calculating how to increase their ", "inclusive fitness", " when they are doing altruistic acts. Instead, evolution has shaped psychological mechanisms, such as emotions, that promote altruistic behaviors.", "[6]", "\n", "Every single instance of altruistic behavior need not always increase inclusive fitness; altruistic behaviors would have been selected for if such behaviors on average increased inclusive fitness in the ancestral environment. This need not imply that on average 50% or more of altruistic acts were beneficial for the altruist in the ancestral environment; if the benefits from helping the right person were very high it would be beneficial to err on the side of caution and usually be altruistic even if in most cases there were no benefits.", "[6]", "\n", "The benefits for the altruist may be increased and the costs reduced by being more altruistic towards certain groups. Research has found that people are more altruistic to kin than to no-kin, to friends than to strangers, to those attractive than to those unattractive, to non-competitors than to competitors, and to members ingroups than to members of outgroup.", "[6]", "\n", "The study of altruism was the initial impetus behind ", "George R. Price", "'s development of the ", "Price equation", ", which is a mathematical equation used to study genetic evolution. An interesting example of altruism is found in the cellular ", "slime moulds", ", such as ", "Dictyostelium", " mucoroides.", " These protists live as individual ", "amoebae", " until starved, at which point they aggregate and form a multicellular fruiting body in which some cells sacrifice themselves to promote the survival of other cells in the fruiting body.", "\n", "Selective investment theory proposes that close social bonds, and associated emotional, cognitive, and neurohormonal mechanisms, evolved in order to facilitate long-term, high-cost altruism between those closely depending on one another for survival and reproductive success.", "[17]", "[18]", "\n", "Such cooperative behaviors have sometimes been seen as arguments for left-wing politics such by the Russian zoologist and anarchist ", "Peter Kropotkin", " in his 1902 book ", "Mutual Aid: A Factor of Evolution", " and ", "Peter Singer", " in his book ", "A Darwinian Left", ".", "\n", "Neurobiology", "[", "edit", "]", "\n", "Jorge Moll and Jordan Grafman, neuroscientists at the ", "National Institutes of Health", " and LABS-D'Or Hospital Network (J.M.) provided the first evidence for the neural bases of altruistic giving in normal healthy volunteers, using ", "functional magnetic resonance imaging", ". In their research, published in the ", "Proceedings of the National Academy of Sciences", " USA in October 2006,", "[19]", " they showed that both pure monetary rewards and charitable donations activated the ", "mesolimbic", " reward pathway, a primitive part of the brain that usually responds to food and sex. However, when volunteers generously placed the interests of others before their own by making charitable donations, another brain circuit was selectively activated: the subgenual cortex/", "septal region", ". These structures are intimately related to social attachment and bonding in other species. Altruism, the experiment suggested, was not a superior moral faculty that suppresses basic selfish urges but rather was basic to the brain, hard-wired and pleasurable.", "[20]", " One brain region, the subgenual ", "anterior cingulate", " cortex/", "basal forebrain", ", contributes to learning altruistic behavior, especially in those with trait empathy.", "[21]", " The same study has shown a connection between giving to charity and the promotion of social bonding.", "[22]", "\n", "In fact, in an experiment published in March 2007 at the ", "University of Southern California", " neuroscientist ", "Antonio R. Damasio", " and his colleagues showed that subjects with damage to the ", "ventromedial prefrontal cortex", " lack the ability to empathically feel their way to moral answers, and that When confronted with moral dilemmas, these brain-damaged patients coldly came up with \"end-justifies-the-means\" answers, leading Damasio to conclude that the point was not that they reached immoral conclusions, but that when they were confronted by a difficult issue - in this case as whether to shoot down a passenger plane hijacked by terrorists before it hits a major city - these patients appear to reach decisions without the anguish that afflicts those with normally functioning brains. According to ", "Adrian Raine", ", a clinical neuroscientist also at the University of Southern California, one of this study's implications is that society may have to rethink how it judges immoral people: \"Psychopaths often feel no empathy or remorse. Without that awareness, people relying exclusively on reasoning seem to find it harder to sort their way through moral thickets. Does that mean they should be held to different standards of accountability?\"", "[20]", "\n", "In another study, in the 1990s, Dr. Bill Harbaugh, a ", "University of Oregon", " economist, concluded people are motivated to give for reasons of personal prestige and in a similar fMRI scanner test in 2007 with his psychologist colleague Dr. Ulrich Mayr, reached the same conclusions of Jorge Moll and Jordan Grafman about giving to charity, although they were able to divide the study group into two groups: \"egoists\" and \"altruists\". One of their discoveries was that, though rarely, even some of the considered \"egoists\" sometimes gave more than expected because that would help others, leading to the conclusion that there are other factors in cause in charity, such as a person's environment and values.", "[22]", "\n", "Psychology", "[", "edit", "]", "\n", "The International Encyclopedia of the Social Sciences defines ", "psychological altruism", " as \"a motivational state with the goal of increasing another\u2019s welfare.\" Psychological altruism is contrasted with ", "psychological egoism,", " which refers to the motivation to increase one\u2019s own welfare.", "[23]", "\n", "There has been some debate on whether or not humans are truly capable of psychological altruism.", "[24]", " Some definitions specify a self-sacrificial nature to altruism and a lack of external rewards for altruistic behaviors.", "[25]", " However, because altruism ultimately benefits the self in many cases, the selflessness of altruistic acts is brought to question. The ", "social exchange theory", " postulates that altruism only exists when benefits to the self outweigh costs to the self.", "[26]", " ", "Daniel Batson", " is a psychologist who examined this question and argues against the social exchange theory. He identified four major motives for altruism: altruism to ultimately benefit the self (egoism), to ultimately benefit the other person (altruism), to benefit a group (collectivism), or to uphold a moral principle (", "principlism", "). Altruism that ultimately serves selfish gains is thus differentiated from selfless altruism, but the general conclusion has been that empathy-induced altruism can be genuinely selfless.", "[27]", " The ", "empathy-altruism", " hypothesis", " basically states that psychological altruism does exist and is evoked by the empathic desire to help someone who is suffering. Feelings of empathic concern are contrasted with feelings of personal distress, which compel people to reduce their own unpleasant emotions. People with empathic concern help others in distress even when exposure to the situation could be easily avoided, whereas those lacking in empathic concern avoid helping unless it is difficult or impossible to avoid exposure to another's suffering.", "[23]", " Helping behavior is seen in humans at about two years old, when a toddler is capable of understanding subtle emotional cues.", "[28]", "\n", "\n", "\n", "\n", "\n", "Peace Corps", " trainees swearing in as volunteers in ", "Cambodia", ", 4 April 2007", "\n", "\n", "\n", "In psychological research on altruism, studies often observe altruism as demonstrated through prosocial behaviors such as helping, comforting, sharing, cooperation, philanthropy, and community service.", "[25]", " Research has found that people are most likely to help if they recognize that a person is in need and feel personal responsibility for reducing the person's distress. Research also suggests that the number of bystanders witnessing distress or suffering affects the likelihood of helping (the ", "Bystander effect", "). Greater numbers of bystanders decrease individual feelings of responsibility.", "[23]", "[29]", " However, a witness with a high level of empathic concern is likely to assume personal responsibility entirely regardless of the number of bystanders.", "[23]", " A feeling of personal responsibility or - moral norm - has also strongly been associated with other pro-social behaviors such as charitable giving.", "[30]", "\n", "Many studies have observed the effects of ", "volunteerism", " (as a form of altruism) on happiness and health and have consistently found a strong connection between volunteerism and current and future health and well-being.", "[31]", "[32]", " In a study of older adults, those who volunteered were higher on life satisfaction and will to live, and lower in ", "depression", ", ", "anxiety", ", and ", "somatization", ".", "[33]", " Volunteerism and helping behavior have not only been shown to improve mental health, but physical health and longevity as well, attributable to the activity and social integration it encourages.", "[31]", "[34]", "[35]", "[36]", " One study examined the physical health of mothers who volunteered over a 30-year period and found that 52% of those who did not belong to a volunteer organization experienced a major illness while only 36% of those who did volunteer experienced one.", "[37]", " A study on adults ages 55+ found that during the four-year study period, people who volunteered for two or more organizations had a 63% lower likelihood of dying. After controlling for prior health status, it was determined that volunteerism accounted for a 44% reduction in mortality.", "[38]", " Merely being aware of kindness in oneself and others is also associated with greater well-being. A study that asked participants to count each act of kindness they performed for one week significantly enhanced their subjective happiness.", "[39]", " It is important to note that, while research supports the idea that altruistic acts bring about happiness, it has also been found to work in the opposite direction\u2014that happier people are also kinder. The relationship between altruistic behavior and happiness is bidirectional. Studies have found that generosity increases linearly from sad to happy affective states.", "[40]", "\n", "Studies have also been careful to note that feeling over-taxed by the needs of others has conversely negative effects on health and happiness.", "[36]", " For example, one study on volunteerism found that feeling overwhelmed by others' demands had an even stronger negative effect on mental health than helping had a positive one (although positive effects were still significant).", "[41]", " Additionally, while generous acts make people feel good about themselves, it is also important for people to appreciate the kindness they receive from others. Studies suggest that gratitude goes hand-in-hand with kindness and is also very important for our well-being. A study on the relationship happiness to various character strengths showed that \"a conscious focus on gratitude led to reductions in negative affect and increases in optimistic appraisals, positive affect, offering emotional support, sleep quality, and well-being.\".", "[42]", " Psychologists generally refer to this virtuous cycle of helping others, doing good and subsequently feeling good as \"the helper's high\".", "[43]", "[44]", "\n", "Sociology", "[", "edit", "]", "\n", "\"Sociologists have long been concerned with how to build the good society\" (\"Altruism, Morality, and Social Solidarity\". American Sociological Association.", "[45]", "). The structure of our societies and how individuals come to exhibit charitable, philanthropic, and other pro-social, altruistic actions for the common good is a largely researched topic within the field. The American Sociology Association (ASA) acknowledges ", "Public sociology", " saying, \"The intrinsic scientific, policy, and public relevance of this field of investigation in helping to construct 'good societies' is unquestionable\" (\"Altruism, Morality, and Social Solidarity\" ASA). This type of sociology seeks contributions that aid grassroots and theoretical understandings of what motivates altruism and how it is organized, and promotes an altruistic focus in order to benefit the world and people it studies. How altruism is framed, organized, carried out, and what motivates it at the group level is an area of focus that sociologists seek to investigate in order to contribute back to the groups it studies and \"build the good society\".", "\n", "See also: ", "Public sociology", "\n", "Pathological altruism", "[", "edit", "]", "\n", "Pathological", " altruism is when altruism is taken to an unhealthy extreme, and either harms the altruistic person, or well-intentioned actions cause more harm than good.", "\n", "The term \"pathological altruism\" was popularised by the book ", "Pathological Altruism", ".", "\n", "Examples include depression and burnout seen in healthcare professionals, an unhealthy focus on others to the detriment of one's own needs, hoarding of animals, and ineffective philanthropic and social programs that ultimately worsen the situations they are meant to aid.", "[46]", "\n", "Religious viewpoints", "[", "edit", "]", "\n", "See also: ", "Evolutionary origin of religions", "\n", "Most, if not all, of the world's religions promote altruism as a very important moral value. ", "Buddhism", ", ", "Christianity", ", ", "Hinduism", ", ", "Islam", ", ", "Jainism", ", ", "Judaism", ", and ", "Sikhism", ", etc., place particular emphasis on altruistic morality.", "\n", "Buddhism", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nMonks collecting alms", "\n", "\n", "\n", "Altruism figures prominently in Buddhism. Love and compassion are components of all forms of Buddhism, and are focused on all beings equally: love is the wish that all beings be happy, and compassion is the wish that all beings be free from suffering. \"Many illnesses can be cured by the one medicine of love and compassion. These qualities are the ultimate source of human happiness, and the need for them lies at the very core of our being\" (Dalai Lama).", "[47]", "\n", "Since \"all beings\" includes the individual, love and compassion in Buddhism are outside the opposition between self and other. It is even said that the distinction between self and other is part of the root cause of our suffering. In practical terms, however, since many people are spontaneously self-centered, Buddhism encourages people to focus love and compassion on others, and thus can be characterized as \"altruistic.\"", "[", "citation needed", "]", "\n", "Still, the notion of altruism is modified in such a world-view, since the belief is that such a practice promotes our own happiness: \"The more we care for the happiness of others, the greater our own sense of well-being becomes\" (Dalai Lama", "[47]", ").", "\n", "In the context of larger ethical discussions on moral action and judgment, Buddhism is characterized by the belief that negative (unhappy) consequences of our actions derive not from punishment or correction based on moral judgment, but from the law of karma, which functions like a natural law of cause and effect. A simple illustration of such cause and effect is the case of experiencing the effects of what one causes: if one causes suffering, then as a natural consequence one would experience suffering; if one causes happiness, then as a natural consequence one would experience happiness.", "\n", "Main article: ", "Karma in Buddhism", "\n", "In Buddhism, ", "karma", " (P\u0101li ", "kamma", ") is strictly distinguished from ", "vip\u0101ka", ", meaning \"fruit\" or \"result\". Karma is categorized within the group or groups of cause (P\u0101li ", "hetu", ") in the ", "chain", " of ", "cause and effect", ", where it comprises the elements of \"volitional activities\" (Pali ", "sankhara", ") and \"action\" (Pali ", "bhava", "). Any action is understood to create \"seeds\" in the mind that sprout into the appropriate results (P\u0101li ", "vipaka", ") when they meet the right conditions. Most types of karmas, with good or bad results, will keep one in the wheel of ", "sams\u0101ra", "; others will liberate one to ", "nirv\u0101na", ".", "\n", "Buddhism relates karma directly to motives behind an action. Motivation usually makes the difference between \"good\" and \"bad\", but motivation also includes the aspect of ignorance; so a well-intended action from an ignorant mind can easily be \"bad\" in that it creates unpleasant results for the \"actor.\"", "\n", "In Buddhism, karma is not the only cause of all that happens. As taught in the early texts, the commentarial tradition classified causal mechanisms governing the universe in five categories, known as Niyama Dhammas:", "[48]", "[49]", "\n", "\n", "Kamma Niyama \u2014 Consequences of one's actions", "\n", "Utu Niyama \u2014 Seasonal changes and climate", "\n", "Biija Niyama \u2014 Laws of heredity", "\n", "Citta Niyama \u2014 Will of mind", "\n", "Dhamma Niyama \u2014 Nature's tendency to produce a perfect type", "\n", "\n", "Jainism", "[", "edit", "]", "\n", "See also: ", "Ahimsa in Jainism", "\n", "\n", "\n", "\n", "\nSculpture depicting the Jain concept of ", "ahimsa", " (non-injury)", "\n", "\n", "\n", "The fundamental principles of ", "Jainism", " revolve around the concept of altruism, not only for humans but for all sentient beings. Jainism preaches the view of ", "Ahimsa", " \u2013 to live and let live, thereby not harming sentient beings, i.e. uncompromising reverence for all life. It also considers all living things to be equal. The first ", "Tirthankara", ", ", "Rishabhdev", ", introduced the concept of altruism for all living beings, from extending knowledge and experience to others to donation, giving oneself up for others, non-violence and compassion for all living things.", "\n", "Jainism prescribes a path of non-violence to progress the soul to this ultimate goal. A major characteristic of Jain belief is the emphasis on the consequences of not only physical but also mental behaviors. One's unconquered mind with anger, pride (ego), deceit, greed and uncontrolled sense organs are the powerful enemies of humans. Anger spoils good relations, pride destroys humility, deceit destroys peace and greed destroys everything. Jainism recommends conquering anger by forgiveness, pride by humility, deceit by straightforwardness and greed by contentment.", "\n", "Jains believe that to attain enlightenment and ultimately liberation, one must practice the following ethical principles (major vows) in thought, speech and action. The degree to which these principles are practiced is different for householders and monks. They are:", "\n", "\n", "Non-violence (Ahimsa);", "\n", "Truthfulness (Satya);", "\n", "Non-stealing (Asteya);", "\n", "Celibacy (Brahmacharya);", "\n", "Non-possession", " or non-materialism (Aparigraha);", "\n", "\n", "The \"great vows\" (", "Mahavrata", ") are prescribed for monks and \"limited vows\" (", "Anuvrata", ") are prescribed for householders. The house-holders are encouraged to practice the above-mentioned five vows. The monks have to observe them very strictly. With consistent practice, it will be possible to overcome the limitations gradually, accelerating the spiritual progress.", "\n", "The principle of non-violence seeks to minimize karmas which limit the capabilities of the soul. Jainism views every ", "soul", " as worthy of respect because it has the potential to become ", "Siddha", " (", "God in Jainism", "). Because all living beings possess a soul, great care and awareness is essential in one's actions. Jainism emphasizes the equality of all life, advocating harmlessness towards all, whether the creatures are great or small. This policy extends even to microscopic organisms. Jainism acknowledges that every person has different capabilities and capacities to practice and therefore accepts different levels of compliance for ascetics and householders.", "\n", "Christianity", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nStatue of ", "Mother Teresa", " in India", "\n", "\n", "\n", "Altruism is central to the teachings of Jesus found in the ", "Gospel", ", especially in the ", "Sermon on the Mount", " and the ", "Sermon on the Plain", ". From biblical to medieval ", "Christian traditions", ", tensions between self-affirmation and other-regard were sometimes discussed under the heading of \"disinterested love\", as in the ", "Pauline", " phrase \"love seeks not its own interests.\" In his book ", "Indoctrination and Self-deception,", " Roderick Hindery tries to shed light on these tensions by contrasting them with impostors of authentic self-affirmation and altruism, by analysis of other-regard within creative individuation of the self, and by contrasting love for the few with love for the many. Love confirms others in their freedom, shuns propaganda and masks, assures others of its presence, and is ultimately confirmed not by mere declarations from others, but by each person's experience and practice from within. As in practical arts, the presence and meaning of love becomes validated and grasped not by words and reflections alone, but in the making of the connection.", "\n", "St Thomas Aquinas", " interprets 'You should love your neighbour as yourself'", "[50]", " as meaning that love for ourselves is the exemplar of love for others.", "[51]", " Considering that \"the love with which a man loves himself is the form and root of friendship\" and quotes Aristotle that \"the origin of friendly relations with others lies in our relations to ourselves,\"", "[52]", " he concluded that though we are not bound to love others more than ourselves, we naturally seek the common good, the good of the whole, more than any private good, the good of a part. However, he thinks we should love God more than ourselves and our neighbours, and more than our bodily life\u2014since the ultimate purpose of loving our neighbour is to share in eternal beatitude: a more desirable thing than bodily well being. In coining the word Altruism, as stated above, ", "Comte", " was probably opposing this Thomistic doctrine, which is present in some theological schools within Catholicism.", "\n", "Many biblical authors draw a strong connection between love of others and love of God. 1 John 4 states that for one to love God one must love his fellowman, and that hatred of one's fellowman is the same as hatred of God. ", "Thomas Jay Oord", " has argued in several books that altruism is but one possible form of love. An altruistic action is not always a loving action. Oord defines altruism as acting for the other's good, and he agrees with feminists who note that sometimes love requires acting for one's own good when the other's demands undermine overall well-being.", "\n", "German philosopher ", "Max Scheler", " distinguishes two ways in which the strong can help the weak. One way is a sincere expression of Christian love, \"motivated by a powerful feeling of security, strength, and inner salvation, of the invincible fullness of one\u2019s own life and existence\".", "[53]", " Another way is merely \"one of the many modern substitutes for love, ... nothing but the urge to turn away from oneself and to lose oneself in other people\u2019s business.\"", "[54]", " At its worst, Scheler says, \"love for the small, the poor, the weak, and the oppressed is really disguised hatred, repressed envy, an impulse to detract, etc., directed against the opposite phenomena: wealth, strength, power, largesse.\"", "[55]", "\n", "Islam", "[", "edit", "]", "\n", "In ", "Islam", ", the concept 'eysaar' (\u0625\u064a\u062b\u0627\u0631) (altruism) is the notion of 'preferring others to oneself'. For Sufis, this means devotion to others through complete forgetfulness of one's own concerns, where concern for others is rooted to be a demand made by ALLAH on the human body, considered to be property of ALLAH alone. The importance lies in sacrifice for the sake of the greater good; ", "Islam", " considers those practicing Eyaar as abiding by the highest degree of nobility.", "[56]", " This is similar to the notion of chivalry, but unlike that European concept, in i'thar attention is focused on everything in existence. A constant concern for ", "ALLAH", " (i.e. God) results in a careful attitude towards people, animals, and other things in this world.", "[57]", " This concept was emphasized by Sufis of Islam like ", "Rabia al-Adawiyya", " who paid attention to the difference between dedication to ", "ALLAH", " (i.e. God) and dedication to people. Thirteenth-century Turkish Sufi poet ", "Yunus Emre", " explained this philosophy as \"Yarat\u0131lan\u0131 severiz, Yaratandan \u00f6t\u00fcr\u00fc\" or ", "We love the creature, because of The Creator.", " For many Muslims, i'thar must be practiced as a religious obligation during specific Islamic holidays. However, i'thar is also still an Islamic ideal to which all Muslims should strive to adhere at all times.", "\n", "Judaism", "[", "edit", "]", "\n", "Judaism defines altruism as the desired goal of creation. The famous Rabbi ", "Abraham Isaac Kook", " stated that love is the most important attribute in humanity.", "[58]", " This is defined as ", "bestowal", ", or giving, which is the intention of altruism. This can be altruism towards humanity that leads to altruism towards the creator or God. ", "Kabbalah", " defines God as the force of giving in ", "existence", ". Rabbi ", "Moshe Chaim Luzzatto", " in particular focused on the 'purpose of creation' and how the will of God was to bring creation into perfection and adhesion with this upper force.", "[59]", "\n", "Modern Kabbalah developed by Rabbi ", "Yehuda Ashlag", ", in his writings about the future generation, focuses on how society could achieve an altruistic social framework.", "[60]", " Ashlag proposed that such a framework is the purpose of creation, and everything that happens is to raise humanity to the level of altruism, love for one another. Ashlag focused on society and its relation to ", "divinity", ".", "[61]", "\n", "Sikhism", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This section ", "needs additional citations for ", "verification", ". ", "Please help ", "improve this article", " by ", "adding citations to reliable sources", ". Unsourced material may be challenged and removed.", " ", "(September 2017)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "Altruism is essential to the Sikh religion. The central faith in Sikhism is that the greatest deed any one can do is to imbibe and live the godly qualities like love, affection, sacrifice, patience, harmony, truthfulness. The fifth Nanak, Guru Arjun Dev sacrificed his life to uphold 22 carats of pure truth, the greatest gift to humanity, the Guru Granth. The ninth Guru , Guru Tegh Bahadur, sacrificed his head to protect weak and defenseless people against atrocity. In the late seventeenth century, ", "Guru Gobind Singh", " Ji (the tenth ", "guru", " in Sikhism), was in war with the ", "Mughal", " rulers to protect the people of different faiths when a fellow Sikh, ", "Bhai Kanhaiya", ", attended the troops of the enemy. He gave water to both friends and foes who were wounded on the battlefield. Some of the enemy began to fight again and some Sikh warriors were annoyed by Bhai Kanhaiya as he was helping their enemy. Sikh soldiers brought Bhai Kanhaiya before Guru Gobind Singh Ji, and complained of his action that they considered counter-productive to their struggle on the battlefield.\"What were you doing, and why?\" asked the Guru. \"I was giving water to the wounded because I saw your face in all of them,\" replied Bhai Kanhaiya. The Guru responded, \"Then you should also give them ointment to heal their wounds. You were practicing what you were coached in the house of the Guru.\"", "\n", "It was under the tutelage of the Guru that Bhai Kanhaiya subsequently founded a volunteer corps for altruism. This volunteer corps still to date is engaged in doing good to others and trains new volunteering recruits for doing the same.", "[62]", "\n", "Hinduism", "[", "edit", "]", "\n", "Swami Sivananda", ", an ", "Advaita", " scholar, reiterates the same views in his commentary synthesising Vedanta views on the ", "Brahma Sutras", ", a Vedantic text. In his commentary on Chapter 3 of the Brahma Sutras, Sivananda notes that karma is insentient and short-lived, and ceases to exist as soon as a deed is executed. Hence, karma cannot bestow the fruits of actions at a future date according to one's merit. Furthermore, one cannot argue that karma generates ", "apurva", " or ", "punya", ", which gives fruit. Since apurva is non-sentient, it cannot act unless moved by an intelligent being such as a god. It cannot independently bestow reward or punishment.", "\n", "However the very well known and popular text, the Bhagavad Gita supports the doctrine of karma yoga (selfless action) or action without desire for personal gain which can be said to encompass altruism. Altruistic acts are generally celebrated and very well received in Hindu literature and is central to Hindu morality.", "[63]", "\n", "Philosophy", "[", "edit", "]", "\n", "Main article: ", "Altruism (ethics)", "\n", "There exists a wide range of philosophical views on humans' obligations or motivations to act altruistically. Proponents of ", "ethical altruism", " maintain that individuals are morally obligated to act altruistically. The opposing view is ", "ethical egoism", ", which maintains that moral agents should always act in their own self-interest. Both ethical altruism and ethical egoism contrast with ", "utilitarianism", ", which maintains that each agent should act in order to maximise the efficacy of their function and the benefit to both themselves and their co-inhabitants.", "\n", "A related concept in ", "descriptive ethics", " is ", "psychological egoism", ", the thesis that humans always act in their own self-interest and that true altruism is impossible. ", "Rational egoism", " is the view that ", "rationality", " consists in acting in one's self-interest (without specifying how this affects one's moral obligations).", "\n", "Genetics", "[", "edit", "]", "\n", "The genes ", "OXTR", ", ", "CD38", ", ", "COMT", ", ", "DRD4", ", ", "DRD5", ", ", "IGF2", ", ", "GABRB2", " have been found to be candidate genes for altruism.", "[64]", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Altruria", "\n", "Charity (practice)", "\n", "Charitable organization", "\n", "Comedy of the commons", "\n", "Consideration", "\n", "Earning to give", "\n", "Effective altruism", "\n", "Egotism", "\n", "Empathy", "\n", "Empathy-altruism", "\n", "Family economics", "\n", "Gene-centered view of evolution", "\n", "Giving Pledge", ", pledge by Gates, Buffett and others to donate to charity at least half of their wealth", "\n", "Inclusive fitness", "\n", "Group selection", "\n", "Humanity (virtue)", "\n", "Kin selection", "\n", "Misanthropy", "\n", "Mutual aid", "\n", "Philanthropy", "\n", "Prisoner's dilemma", "\n", "Prosocial behavior", "\n", "Random act of kindness", "\n", "Reciprocal altruism", "\n", "Selfishness", "\n", "Social psychology", "\n", "Solidarity (sociology)", "\n", "Tit for tat", "\n", "\n", "\n", "Notes", "[", "edit", "]", "\n", "\n", "\n", "\n", "^", " ", "\"altruism (n .)\"", ". ", "Online Etymology Dictionary", ". Douglas Harper", ". Retrieved ", "19 September", " 2014", ".", "\u00a0", "\n", "^", " ", "Teske, Nathan (2009). ", "Political Activists in America: The Identity Construction Model of Political Participation", ". University Park, Pa.: Pennsylvania State University Press. p.\u00a0101. ", "ISBN", "\u00a0", "9780271035468", ".", "\u00a0", "\n", "^", " ", "Ciciloni, Ferdinando (1825). ", "A Grammar of the Italian Language", ". London: John Murray. p.\u00a064.", "\u00a0", "\n", "^", " ", "Steinberg, David (2010). \"Altruism in medicine: its definition, nature, and dilemmas\". ", "Cambridge Quarterly of Healthcare Ethics", ". ", "19", " (2): 249\u201357. ", "doi", ":", "10.1017/s0963180109990521", ".", "\u00a0", "\n", "^", " ", "Bell, Graham (2008). ", "Selection: the mechanism of evolution", ". Oxford: Oxford University Press. pp.\u00a0367\u2013368. ", "ISBN", "\u00a0", "0-19-856972-6", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "f", " ", "g", " ", "h", " ", "i", " ", "j", " ", "k", " ", "l", " ", "m", " ", "n", " ", "o", " ", "p", " ", "q", " ", "Pat Barcaly. The evolution of charitable behaviour and the power of reputation. In ", "Roberts, S. C. (2011). Roberts, S. Craig, ed. \"Applied Evolutionary Psychology\". Oxford University Press. ", "doi", ":", "10.1093/acprof:oso/9780199586073.001.0001", ". ", "ISBN", "\u00a0", "9780199586073", ".", "\u00a0", "\n", "^", " ", "Okasha, Samir. ", "\"Biological Altruism\"", ". ", "Stanford Encyclopedia of Philosophy", ". Retrieved ", "13 May", " 2011", ".", "\u00a0", "\n", "^", " ", "Trivers, R.L. (1971). ", "\"The evolution of reciprocal altruism\"", ". ", "Quarterly Review of Biology", ". ", "46", ": 35\u201357. ", "doi", ":", "10.1086/406755", ".", "\u00a0", "\n", "^", " ", "R Axelrod and WD Hamilton (27 March 1981). \"The evolution of cooperation\". ", "Science", ". ", "211", " (4489): 1390\u20131396. ", "Bibcode", ":", "1981Sci...211.1390A", ". ", "CiteSeerX", "\u00a0", "10.1.1.147.9644", "\u202f", ". ", "doi", ":", "10.1126/science.7466396", ". ", "PMID", "\u00a0", "7466396", ".", "\u00a0", "\n", "^", " ", "Martin Nowak & Karl Sigmund (October 2005). ", "\"Evolution of indirect reciprocity\"", ". ", "Nature", ". ", "437", " (27): 1291\u20131298. ", "Bibcode", ":", "2005Natur.437.1291N", ". ", "doi", ":", "10.1038/nature04131", ". ", "PMID", "\u00a0", "16251955", ".", "\u00a0", "\n", "^", " ", "Gintis, Herbert", " (September 2000). \"Strong Reciprocity and Human Sociality\". ", "Journal of Theoretical Biology", ". ", "206", " (2): 169\u2013179. ", "doi", ":", "10.1006/jtbi.2000.2111", ". ", "hdl", ":", "10419/105717", "\u202f", ". ", "PMID", "\u00a0", "10966755", ".", "\u00a0", "\n", "^", " ", "\"Genetic and Cultural Evolution of Cooperation, Chapter 11\". Berlin: Dahlem Workshop Reports. 2003. ", "ISBN", "\u00a0", "0-262-08326-4", ".", "\u00a0", "\n", "^", " ", "Zahavi, A. (1995). ", "\"Altruism as a handicap \u2013 The limitations of kin selection and reciprocity\"", ". ", "Avian Biol", ". ", "26", " (1): 1\u20133. ", "doi", ":", "10.2307/3677205", ". ", "JSTOR", "\u00a0", "3677205", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Wendy Iredal and Mark van Vugt. Altruism as showing off: a signaling perspective on promoting green behaviour and acts of kindness. In ", "Roberts, S. C. (2011). Roberts, S. Craig, ed. \"Applied Evolutionary Psychology\". Oxford University Press. ", "doi", ":", "10.1093/acprof:oso/9780199586073.001.0001", ". ", "ISBN", "\u00a0", "9780199586073", ".", "\u00a0", "\n", "^", " ", "Leon Neyfakh Where does good come from?, 17 April 2011, ", "http://www.boston.com/bostonglobe/ideas/articles/2011/04/17/where_does_good_come_from/", "\n", "^", " ", "E. O. Wilson. Biologist E.O. Wilson on Why Humans, Like Ants, Need a Tribe. 2 April 2012. The Daily Beast. ", "http://www.thedailybeast.com/newsweek/2012/04/01/biologist-e-o-wilson-on-why-humans-like-ants-need-a-tribe.html", "\n", "^", " ", "Brown, S.L.; Brown, R.M. (2006). ", "\"Selective investment theory: Recasting the functional significance of close relationships\"", " ", "(PDF)", ". ", "Psychological Inquiry", ". ", "17", ": 1\u201329. ", "doi", ":", "10.1207/s15327965pli1701_01", ". Archived from ", "the original", " ", "(PDF)", " on 2014-07-14.", "\u00a0", "\n", "^", " ", "http://www.icts.res.in/media/uploads/Talk/Document/StLouis2011TelmoFIN.pdf", "[", "permanent dead link", "]", "\n", "^", " ", "Human fronto\u2013mesolimbic networks guide decisions about charitable donation, PNAS 2006:103(42);15623\u201315628", "\n", "^ ", "a", " ", "b", " ", "Vedantam, Shankar (May 2007). ", "\"If It Feels Good to Be Good, It Might Be Only Natural\"", ". Washington Post", ". Retrieved ", "23 April", " 2010", ".", "\u00a0", "\n", "^", " ", "Lockwood, Patricia L; Apps, Matthew A J; Valton, Vincent; Viding, Essi; Roiser, Jonathan P (2016). \"Neurocomputational mechanisms of prosocial learning and links to empathy\". ", "Proceedings of the National Academy of Sciences of the United States of America", ". ", "113", ": 9763\u20138. ", "doi", ":", "10.1073/pnas.1603198113", ". ", "PMID", "\u00a0", "27528669", ". ", "Lay summary", ". ", ". fMRI revealed that activity in a posterior portion of the subgenual anterior cingulate cortex/basal forebrain (sgACC) drives learning only when we are acting in a prosocial context", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Svoboda, Elizabeth (September 5, 2013). ", "\"Scientists Are Finding That We Are Hard-Wired for Giving\"", ". University of Notre Dame", ". Retrieved ", "7 August", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "[\"Altruism.\" International Encyclopedia of the Social Sciences. Ed. William A. Darity, Jr. 2nd ed. Vol. 1. Detroit: Macmillan Reference USA, 2008. 87-88. Gale Virtual Reference Library. Web. 10 April 2012.]", "\n", "^", " ", "[Batson, C. (2011). Altruism in humans. New York, NY US: Oxford University Press.]", "\n", "^ ", "a", " ", "b", " ", "[Batson, C. (2012). A history of prosocial behavior research. In A. W. Kruglanski, ", "W. Stroebe", ", A. W. Kruglanski, (Eds.), Handbook of the history of social psychology (pp. 243\u2013264). New York, NY US: Psychology Press.]", "\n", "^", " ", "Maner, J. K.; Luce, C. L.; Neuberg, S. L.; Cialdini, R. B.; Brown, S.; Sagarin, B. J. (2002). ", "\"The effects of perspective taking on motivations for helping: Still no evidence for altruism\"", ". ", "Personality and Social Psychology Bulletin", ". ", "28", " (11): 1601\u20131610. ", "doi", ":", "10.1177/014616702237586", ".", "\u00a0", "\n", "^", " ", "[Batson, C., Ahmad, N., & Stocks, E. L. (2011). Four forms of prosocial motivation: Egoism, altruism, collectivism, and principlism. In D. Dunning, D. Dunning (Eds.), Social motivation (pp. 103\u2013126). New York, NY US: Psychology Press.]", "\n", "^", " ", "Svetlova, M.; Nichols, S. R.; Brownell, C. A. (2010). ", "\"Toddlers prosocial behavior: From instrumental to empathic to altruistic helping\"", ". ", "Child Development", ". ", "81", " (6): 1814\u20131827. ", "doi", ":", "10.1111/j.1467-8624.2010.01512.x", ". ", "PMC", "\u00a0", "3088085", "\u202f", ". ", "PMID", "\u00a0", "21077866", ".", "\u00a0", "\n", "^", " ", "Hudson, James M.; Bruckman, Amy S. (2004). \"The Bystander Effect: A Lens for Understanding Patterns of Participation\". ", "Journal of the Learning Sciences", ". ", "13", " (2): 165\u2013195. ", "CiteSeerX", "\u00a0", "10.1.1.72.4881", "\u202f", ". ", "doi", ":", "10.1207/s15327809jls1302_2", ".", "\u00a0", "\n", "^", " ", "van der Linden, S. (2011). ", "\"Charitable Intent: A Moral or Social Construct? A Revised Theory of Planned Behavior Model\"", ". ", "Current Psychology", ". ", "30", " (4): 355\u2013374. ", "doi", ":", "10.1007/s12144-011-9122-1", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Musick, M. A.; Wilson, J. (2003). \"Volunteering and depression: The role of psychological and social resources in different age groups\". ", "Social Science & Medicine", ". ", "56", " (2): 259\u2013269. ", "doi", ":", "10.1016/S0277-9536(02)00025-4", ".", "\u00a0", "\n", "^", " ", "Koenig, L. B.; McGue, M.; Krueger, R. F.; Bouchard (2007). \"Religiousness, antisocial behavior, and altruism: Genetic and environmental mediation\". ", "Journal of Personality", ". ", "75", " (2): 265\u2013290. ", "doi", ":", "10.1111/j.1467-6494.2007.00439.x", ".", "\u00a0", "\n", "^", " ", "Hunter, K. I.; Hunter, M. W. (1980). \"Psychosocial differences between elderly volunteers and non-volunteers\". ", "The International Journal of Aging & Human Development", ". ", "12", " (3): 205\u2013213. ", "doi", ":", "10.2190/0H6V-QPPP-7JK4-LR38", ".", "\u00a0", "\n", "^", " ", "Kayloe, J. C.; Krause, M. (1985). \"RARE FIND: or The value of volunteerism\". ", "Psychosocial Rehabilitation Journal", ". ", "8", " (4): 49\u201356. ", "doi", ":", "10.1037/h0099659", ".", "\u00a0", "\n", "^", " ", "Brown, S. L.; Brown, R.; House, J. S.; Smith, D. M. (2008). \"Coping with spousal loss: Potential buffering effects of self-reported helping behavior\". ", "Personality and Social Psychology Bulletin", ". ", "34", " (6): 849\u2013861. ", "doi", ":", "10.1177/0146167208314972", ". ", "PMID", "\u00a0", "18344495", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Post, S. G. (2005). \"Altruism, Happiness, and Health: It's Good to Be Good\". ", "International Journal of Behavioral Medicine", ". ", "12", " (2): 66\u201377. ", "CiteSeerX", "\u00a0", "10.1.1.485.8406", "\u202f", ". ", "doi", ":", "10.1207/s15327558ijbm1202_4", ". ", "PMID", "\u00a0", "15901215", ".", "\u00a0", "\n", "^", " ", "Moen, P.; Dempster-Mcclain, D.; Williams, R. M. (1992). \"Successful aging: A life-course perspective on women's multiple roles and health\". ", "American Journal of Sociology", ". ", "97", " (6): 1612\u20131638. ", "doi", ":", "10.1086/229941", ".", "\u00a0", "\n", "^", " ", "Oman, D.; Thoresen, C. E.; McMahon, K. (1999). \"Volunteerism and mortality among the community-dwelling elderly\". ", "Journal of Health Psychology", ". ", "4", " (3): 301\u2013316. ", "doi", ":", "10.1177/135910539900400301", "\u202f", ". ", "PMID", "\u00a0", "22021599", ".", "\u00a0", "\n", "^", " ", "Otake, K.; Shimai, S.; Tanaka-Matsumi, J.; Otsui, K.; Fredrickson, B. L. (2006). ", "\"Happy people become happier through kindness: A counting kindnesses intervention\"", ". ", "Journal of Happiness Studies", ". ", "7", " (3): 361\u2013375. ", "doi", ":", "10.1007/s10902-005-3650-z", ". ", "PMC", "\u00a0", "1820947", "\u202f", ". ", "PMID", "\u00a0", "17356687", ".", "\u00a0", "\n", "^", " ", "Underwood, B.; Froming, W. J.; Moore, B. S. (1977). \"Mood, attention, and altruism: A search for mediating variables\". ", "Developmental Psychology", ". ", "13", " (5): 541\u2013542. ", "doi", ":", "10.1037/0012-1649.13.5.541", ".", "\u00a0", "\n", "^", " ", "Schwartz, C.; Meisenhelder, J.; Ma, Y.; Reed, G. (2003). \"Altruistic Social Interest Behaviors Are Associated With Better Mental Health\". ", "Psychosomatic Medicine", ". ", "65", " (5): 778\u2013785. ", "CiteSeerX", "\u00a0", "10.1.1.529.7780", "\u202f", ". ", "doi", ":", "10.1097/01.PSY.0000079378.39062.D4", ". ", "PMID", "\u00a0", "14508020", ".", "\u00a0", "\n", "^", " ", "Shimai, S.; Otake, K.; Park, N.; Peterson, C.; Seligman, M. P. (2006). ", "\"Convergence of character strengths in American and Japanese young adults\"", ". ", "Journal of Happiness Studies", ". ", "7", " (3): 311\u2013322. ", "doi", ":", "10.1007/s10902-005-3647-7", ".", "\u00a0", "\n", "^", " ", "Van der Linden, Sander (December 2011). ", "\"The helper's high: Why it feels so good to give\"", ". Ode Magazine", ". Retrieved ", "14 November", " 2013", ".", "\u00a0", "\n", "^", " ", "van der Linden, S (2018). \"Warm glow is associated with low but not high cost sustainable behavior\". ", "Nature Sustainability", ". ", "1", ": 28\u201330. ", "doi", ":", "10.1038/s41893-017-0001-0", ".", "\u00a0", "\n", "^", " ", "American Sociological Association: Altruism, Morality and Social Solidarity", " ", "Archived", " 3 May 2012 at the ", "Wayback Machine", ".", "\n", "^", " ", "http://ukcatalogue.oup.com/product/9780199738571.do", "\n", "^ ", "a", " ", "b", " ", "Speech by the Dalai Lama", "\nThe phrase \"core of our being\" is ", "Freudian", "; see ", "Bettina Bock von W\u00fclfingen (2013). ", "\"Freud's 'Core of our Being' Between Cytology and Psychoanalysis\"", ". ", "Berichte zur Wissenschaftsgeschichte", ". ", "36", " (3): 226\u2013244. ", "doi", ":", "10.1002/bewi.201301604", ".", "\u00a0", "\n", "^", " ", "Davids, Rhys (2007). ", "Buddhism", ". Lightning Source Incorporated. p.\u00a0119. ", "ISBN", "\u00a0", "978-1-4067-5628-9", ".", "\u00a0", "\n", "^", " ", "Padmasiri de Silva (1998). ", "Environmental Philosophy and Ethics in Buddhism", ". Palgrave Macmillan. p.\u00a041. ", "ISBN", "\u00a0", "978-0-312-21316-9", ".", "\u00a0", "\n", "^", " ", "Leviticus", " 19 and Matthew 22", "\n", "^", " ", "Summa Theologica", ", II:II Quaestio 25, Article 4", "\n", "^", " ", "Nicomachean Ethics", " IX.4 1166a1", "\n", "^", " ", "Scheler, Max (1961). ", "Ressentiment", ". pp.\u00a088\u201389.", "\u00a0", "\n", "^", " ", "Scheler, Max (1961). ", "Ressentiment", ". pp.\u00a095\u201396.", "\u00a0", "\n", "^", " ", "Scheler, Max (1961). ", "Ressentiment", ". pp.\u00a096\u201397.", "\u00a0", "\n", "^", " ", "M (2004). ", "Key Concepts in the Practice of Sufism: Emerald Hills of the Heart", ". Rutherford, N.J.: Fountain. pp.\u00a010\u201311. ", "ISBN", "\u00a0", "1-932099-75-1", ".", "\u00a0", "\n", "^", " ", "Neusner, Jacob Eds (2005). ", "Altruism in World Religions", ". Washington, D.C.: Georgetown Univ. Press. pp.\u00a079\u201380. ", "ISBN", "\u00a0", "1-58901-065-5", ".", "\u00a0", "\n", "^", " ", "Kook, Abraham Isaac; Ben Zion Bokser (1978). ", "Abraham Isaac Kook: The lights of penitence, The moral principles, Lights of holiness, essays, letters, and poems", ". Paulist Press. pp.\u00a0135\u2013136. ", "ISBN", "\u00a0", "978-0-8091-2159-5", ".", "\u00a0", "\n", "^", " ", "Luzzatto, Moshe \u1e24ayyim (1997). ", "The way of God", ". Feldheim Publishers. pp.\u00a037\u201338. ", "ISBN", "\u00a0", "978-0-87306-769-0", ".", "\u00a0", "\n", "^", " ", "Ashlag, Yehuda (2006). ", "Building the Future Society", ". Thornhill, Canada: Laitman Kabbalah Publishers. pp.\u00a0120\u2013130. ", "ISBN", "\u00a0", "965-7065-34-8", ".", "\u00a0", "\n", "^", " ", "Ashlag, Yehuda (2006). ", "Building the Future Society", ". Thornhill, Canada: Laitman Kabbalah Publishers. pp.\u00a0175\u2013180. ", "ISBN", "\u00a0", "965-7065-34-8", ".", "\u00a0", "\n", "^", " ", "O. P. Ralhan (1997). ", "The great gurus of the Sikhs", ". New Delhi: Anmol Publications Pvt Ltd. p.\u00a0253. ", "ISBN", "\u00a0", "81-7488-479-3", ".", "\u00a0", "\n", "^", " ", "Sivananda, Swami. ", "Phaladhikaranam, Topic 8", ", Sutras 38\u201341.", "\n", "^", " ", "Thompson, GJ; Hurd, PL; Crespi, BJ (2013). ", "\"Genes underlying altruism\"", ". ", "Biol Lett", ". ", "9", ": 20130395. ", "doi", ":", "10.1098/rsbl.2013.0395", ". ", "PMC", "\u00a0", "3871336", "\u202f", ". ", "PMID", "\u00a0", "24132092", ".", "\u00a0", "\n", "\n", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "Oord, Thomas (2007). ", "The Altruism Reader", ". Philadelphia: Templeton Foundation Press. ", "ISBN", "\u00a0", "978-1-59947-127-3", ".", "\u00a0", "\n", "Oord, Thomas (2010). ", "Defining Love", ". Grand Rapids: Brazos Press. ", "ISBN", "\u00a0", "1-58743-257-9", ".", "\u00a0", "\n", "Batson, Charles (1991). ", "The Altruism Question", ". Mahwah: L. Erlbaum, Associates. ", "ISBN", "\u00a0", "978-0-8058-0245-0", ".", "\u00a0", "\n", "Nowak, M. A. (2006). ", "\"Five Rules for the Evolution of Cooperation\"", ". ", "Science", ". ", "314", " (5805): 1560\u20131563. ", "Bibcode", ":", "2006Sci...314.1560N", ". ", "doi", ":", "10.1126/science.1133755", ". ", "PMC", "\u00a0", "3279745", "\u202f", ". ", "PMID", "\u00a0", "17158317", ".", "\u00a0", "\n", "Fehr, E.; Fischbacher, U. (2003). ", "\"The nature of human altruism\"", ". ", "Nature", ". ", "425", " (6960): 785\u2013791. ", "Bibcode", ":", "2003Natur.425..785F", ". ", "doi", ":", "10.1038/nature02043", ". ", "PMID", "\u00a0", "14574401", ".", "\u00a0", "\n", "Comte, Auguste", ", ", "Catechisme positiviste", " (1852) or ", "Catechism of Positivism", ", tr. R. Congreve, (London: Kegan Paul, 1891)", "\n", "Knox, T. (1999). \"The volunteer's folly and socio-economic man: some thoughts on altruism, rationality, and community\". ", "Journal of Socio-Economics", ". ", "28", " (4): 475\u2013967. ", "doi", ":", "10.1016/S1053-5357(99)00045-1", ".", "\u00a0", "\n", "Kropotkin, Peter", ", ", "Mutual Aid: A Factor of Evolution", " (1902)", "\n", "Oord, Thomas (2004). ", "Science of Love", ". Philadelphia: Templeton Foundation Press. ", "ISBN", "\u00a0", "978-1-932031-70-6", ".", "\u00a0", "\n", "Nietzsche, Friedrich", ", ", "Beyond Good and Evil", "\n", "Pierre-Joseph Proudhon", ", ", "The Philosophy of Poverty", " (1847)", "\n", "Lysander Spooner", ", ", "Natural Law", "\n", "Matt Ridley", ", ", "The Origins of Virtue", "\n", "Oliner, Samuel P. and Pearl M. Towards a Caring Society: Ideas into Action. West Port, CT: Praeger, 1995.", "\n", "Axelrod, Robert (1984). ", "The Evolution of Cooperation", ". New York: Basic Books. ", "ISBN", "\u00a0", "0-465-02121-2", ".", "\u00a0", "\n", "Dawkins, Richard (1989). ", "The Selfish Gene", ". Oxford Oxfordshire: Oxford University Press. ", "ISBN", "\u00a0", "0-19-286092-5", ".", "\u00a0", "\n", "Wright, Robert (1995). ", "The Moral Animal", ". New York: Vintage Books. ", "ISBN", "\u00a0", "0-679-76399-6", ".", "\u00a0", "\n", "Madsen, E. A.; Tunney, R. J.; Fieldman, G.; Plotkin, H. C.; Dunbar, R. I. M.; Richardson, J. M.; McFarland, D. (2007). ", "\"Kinship and altruism: A cross-cultural experimental study\"", ". ", "British Journal of Psychology", ". ", "98", " (Pt 2): 339\u2013359. ", "doi", ":", "10.1348/000712606X129213", ". ", "PMID", "\u00a0", "17456276", ".", "\u00a0", "\n", "Wedekind, C.; Milinski, M. (1996). \"Human Cooperation in the simultaneous and the alternating Prisoner's Dilemma: Pavlov versus Generous Tit-for-tat\". ", "Evolution", ". ", "93", ": 2686\u20132689. ", "Bibcode", ":", "1996PNAS...93.2686W", ". ", "doi", ":", "10.1073/pnas.93.7.2686", "\u202f", ".", "\u00a0", "\n", "Monk-Turner, E.; Blake, V.; Chniel, F.; Forbes, S.; Lensey, L.; Madzuma, J. (2002). ", "\"Helping hands: A study of altruistic behavior\"", ". ", "Gender Issues", ". ", "20", " (4): 65\u201370. ", "doi", ":", "10.1007/s12147-002-0024-2", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "Library resources", " about", "\n", "Altruism", "\n", "\n", "\n", "\n", "\n", "\n", "Resources in your library", "\n", "Resources in other libraries", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Look up ", "altruism", " in Wiktionary, the free dictionary.", "\n", "\n", "\n", "\n", "Zalta, Edward N.", " (ed.). ", "\"Biological Altruism\"", ". ", "Stanford Encyclopedia of Philosophy", ".", "\u00a0", "\n", "\n", "\n", "Altruism", " on ", "In Our Time", " at the ", "BBC", ".", "\n", "\"The Good Show\"", ". ", "Radiolab", ". Season 9. Episode 1. New York. 14 December 2011. WNYC.", "\u00a0", "\n", "\n", "\n", "\n", "\n", "\n", "Articles and topics related to Altruism", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Defence mechanisms", "\n", "\n", "\n", "\n", "Level 1: Pathological", "\n", "\n", "\n", "\n", "Delusional projection", "\n", "Denial", "\n", "Distortion", "\n", "Extreme projection", "\n", "Splitting", "\n", "\n", "\n", "\n", "\n", "\n", "Level 2: Immature", "\n", "\n", "\n", "\n", "Acting out", "\n", "Fantasy", "\n", "Idealization", "\n", "Passive-aggression", "\n", "Projection", "\n", "Projective identification", "\n", "Somatization", "\n", "\n", "\n", "\n", "\n", "\n", "Level 3: Neurotic", "\n", "\n", "\n", "\n", "Displacement", "\n", "Dissociation", "\n", "Hypochondriasis", "\n", "Isolation", "\n", "Rationalization", "\n", "Reaction formation", "\n", "Regression", "\n", "Repression", "\n", "Undoing", "\n", "\n", "\n", "\n", "\n", "\n", "Level 4: Mature", "\n", "\n", "\n", "\n", "Altruism", "\n", "Anticipation", "\n", "Humour", "\n", "Identification", "\n", "Intellectualization", "\n", "Introjection", "\n", "Sublimation", "\n", "Suppression", "\n", "\n", "\n", "\n", "\n", "\n", "Other mechanisms", "\n", "\n", "\n", "\n", "Compartmentalization", "\n", "Exaggeration", "\n", "Minimisation", "\n", "Postponement of affect", "\n", "\n", "\n", "\n", "\n", "\n", "See also", "\n", "\n", "\n", "\n", "Narcissistic defences", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Philosophy", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Branches", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Traditional", "\n", "\n", "\n", "\n", "Metaphysics", "\n", "\n", "Ontology", "\n", "\n", "\n", "Epistemology", "\n", "Logic", "\n", "Ethics", "\n", "Aesthetics", "\n", "\n", "\n", "\n", "\n", "\n", "Philosophy of", "\n", "\n", "\n", "\n", "Action", "\n", "Art", "\n", "\n", "Culture", "\n", "Design", "\n", "Music", "\n", "Film", "\n", "\n", "\n", "Business", "\n", "Color", "\n", "Cosmos", "\n", "Dialogue", "\n", "Education", "\n", "Environment", "\n", "Futility", "\n", "Happiness", "\n", "Healthcare", "\n", "History", "\n", "Human nature", "\n", "Humor", "\n", "Feminism", "\n", "Language", "\n", "Life", "\n", "Literature", "\n", "Mathematics", "\n", "Mind", "\n", "\n", "Pain", "\n", "Psychology", "\n", "\n", "\n", "Philosophy of psychiatry", "\n", "Philosophy of perception", "\n", "Philosophy", "\n", "Religion", "\n", "Science", "\n", "\n", "Physics", "\n", "Chemistry", "\n", "Biology", "\n", "Geography", "\n", "\n", "\n", "Sexuality", "\n", "Social science", "\n", "\n", "Culture", "\n", "Economics", "\n", "Justice", "\n", "Law", "\n", "Politics", "\n", "Society", "\n", "\n", "\n", "Space and time", "\n", "Sport", "\n", "Technology", "\n", "\n", "Artificial intelligence", "\n", "Computer science", "\n", "Engineering", "\n", "Information", "\n", "\n", "\n", "War", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Schools of thought", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "By era", "\n", "\n", "\n", "\n", "Ancient", "\n", "Western", "\n", "\n", "Medieval", "\n", "Renaissance", "\n", "Early modern", "\n", "Modern", "\n", "Contemporary", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Ancient", "\n", "\n", "\n", "\n", "\n", "Chinese", "\n", "\n", "\n", "\n", "Agriculturalism", "\n", "Confucianism", "\n", "Legalism", "\n", "Logicians", "\n", "Mohism", "\n", "Chinese naturalism", "\n", "Neotaoism", "\n", "Taoism", "\n", "Yangism", "\n", "Zen", "\n", "\n", "\n", "\n", "\n", "\n", "Greco-", "Roman", "\n", "\n", "\n", "\n", "Aristotelianism", "\n", "Atomism", "\n", "Cynicism", "\n", "Cyrenaics", "\n", "Eleatics", "\n", "Eretrian school", "\n", "Epicureanism", "\n", "Hermeneutics", "\n", "Ionian", "\n", "\n", "Ephesian", "\n", "Milesian", "\n", "\n", "\n", "Megarian school", "\n", "Neoplatonism", "\n", "Peripatetic", "\n", "Platonism", "\n", "Pluralism", "\n", "Presocratic", "\n", "Pyrrhonism", "\n", "Pythagoreanism", "\n", "Neopythagoreanism", "\n", "Sophistic", "\n", "Stoicism", "\n", "\n", "\n", "\n", "\n", "\n", "Indian", "\n", "\n", "\n", "\n", "Samkhya", "\n", "Nyaya", "\n", "Vaisheshika", "\n", "Yoga", "\n", "M\u012bm\u0101\u1e43s\u0101", "\n", "\u0100j\u012bvika", "\n", "Aj\u00f1ana", "\n", "C\u0101rv\u0101ka", "\n", "Jain", "\n", "\n", "Anekantavada", "\n", "Sy\u0101dv\u0101da", "\n", "\n", "\n", "Buddhist", "\n", "\n", "\u015a\u016bnyat\u0101", "\n", "Madhyamaka", "\n", "Yogacara", "\n", "Sautr\u0101ntika", "\n", "Svatantrika", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Persian", "\n", "\n", "\n", "\n", "Mazdakism", "\n", "Zoroastrianism", "\n", "Zurvanism", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Medieval", "\n", "\n", "\n", "\n", "\n", "European", "\n", "\n", "\n", "\n", "Christian philosophy", "\n", "Scholasticism", "\n", "Thomism", "\n", "Renaissance humanism", "\n", "\n", "\n", "\n", "\n", "\n", "East Asian", "\n", "\n", "\n", "\n", "Korean Confucianism", "\n", "Edo Neo-Confucianism", "\n", "Neo-Confucianism", "\n", "\n", "\n", "\n", "\n", "\n", "Indian", "\n", "\n", "\n", "\n", "Vedanta", "\n", "\n", "Acintya bheda abheda", "\n", "Advaita", "\n", "Bhedabheda", "\n", "Dvaita", "\n", "Dvaitadvaita", "\n", "Shuddhadvaita", "\n", "Vishishtadvaita", "\n", "\n", "\n", "Navya-Ny\u0101ya", "\n", "\n", "\n", "\n", "\n", "\n", "Islamic", "\n", "\n", "\n", "\n", "Averroism", "\n", "Avicennism", "\n", "Illuminationism", "\n", "\u02bfIlm al-Kal\u0101m", "\n", "Sufi", "\n", "\n", "\n", "\n", "\n", "\n", "Jewish", "\n", "\n", "\n", "\n", "Judeo-Islamic", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Modern", "\n", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Cartesianism", "\n", "Kantianism", "\n", "Neo-Kantianism", "\n", "Hegelianism", "\n", "Marxism", "\n", "Spinozism", "\n", "\n", "\n", "\n", "\n", "\n", "0", "\n", "\n", "\n", "\n", "Anarchism", "\n", "Classical Realism", "\n", "Liberalism", "\n", "Collectivism", "\n", "Conservatism", "\n", "Determinism", "\n", "Dualism", "\n", "Empiricism", "\n", "Existentialism", "\n", "Foundationalism", "\n", "Historicism", "\n", "Holism", "\n", "Humanism", "\n", "Idealism", "\n", "\n", "Absolute", "\n", "British", "\n", "German", "\n", "Objective", "\n", "Subjective", "\n", "Transcendental", "\n", "\n", "\n", "Individualism", "\n", "Kokugaku", "\n", "Materialism", "\n", "Modernism", "\n", "Monism", "\n", "Naturalism", "\n", "Natural law", "\n", "Nihilism", "\n", "New Confucianism", "\n", "Neo-Scholasticism", "\n", "Pragmatism", "\n", "Phenomenology", "\n", "Positivism", "\n", "Reductionism", "\n", "Rationalism", "\n", "Social contract", "\n", "Socialism", "\n", "Transcendentalism", "\n", "Utilitarianism", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Contemporary", "\n", "\n", "\n", "\n", "\n", "Analytic", "\n", "\n", "\n", "\n", "Applied ethics", "\n", "Analytic feminism", "\n", "Analytical Marxism", "\n", "Communitarianism", "\n", "Consequentialism", "\n", "Critical rationalism", "\n", "Experimental philosophy", "\n", "Falsificationism", "\n", "Foundationalism", "\u00a0/ ", "Coherentism", "\n", "Generative linguistics", "\n", "Internalism and Externalism", "\n", "Logical positivism", "\n", "Legal positivism", "\n", "Normative ethics", "\n", "Meta-ethics", "\n", "Moral realism", "\n", "Neo-Aristotelian", "\n", "Quinean naturalism", "\n", "Ordinary language philosophy", "\n", "Postanalytic philosophy", "\n", "Quietism", "\n", "Rawlsian", "\n", "Reformed epistemology", "\n", "Systemics", "\n", "Scientism", "\n", "Scientific realism", "\n", "Scientific skepticism", "\n", "Contemporary utilitarianism", "\n", "Vienna Circle", "\n", "Wittgensteinian", "\n", "\n", "\n", "\n", "\n", "\n", "Continental", "\n", "\n", "\n", "\n", "Critical theory", "\n", "Deconstruction", "\n", "Existentialism", "\n", "Feminist", "\n", "Frankfurt School", "\n", "New Historicism", "\n", "Hermeneutics", "\n", "Neo-Marxism", "\n", "Phenomenology", "\n", "Postmodernism", "\n", "Post-structuralism", "\n", "Social constructionism", "\n", "Structuralism", "\n", "Western Marxism", "\n", "\n", "\n", "\n", "\n", "\n", "Other", "\n", "\n", "\n", "\n", "Kyoto School", "\n", "Objectivism", "\n", "Russian cosmism", "\n", "more...", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Positions", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Aesthetics", "\n", "\n", "\n", "\n", "Formalism", "\n", "Institutionalism", "\n", "Aesthetic response", "\n", "\n", "\n", "\n", "\n", "\n", "Ethics", "\n", "\n", "\n", "\n", "Consequentialism", "\n", "Deontology", "\n", "Virtue", "\n", "\n", "\n", "\n", "\n", "\n", "Free will", "\n", "\n", "\n", "\n", "Compatibilism", "\n", "Determinism", "\n", "Libertarianism", "\n", "\n", "\n", "\n", "\n", "\n", "Metaphysics", "\n", "\n", "\n", "\n", "Atomism", "\n", "Dualism", "\n", "Monism", "\n", "Naturalism", "\n", "\n", "\n", "\n", "\n", "\n", "Epistemology", "\n", "\n", "\n", "\n", "Constructivism", "\n", "Empiricism", "\n", "Idealism", "\n", "Particularism", "\n", "Fideism", "\n", "Rationalism", "\u00a0/ ", "Reasonism", "\n", "Skepticism", "\n", "Solipsism", "\n", "\n", "\n", "\n", "\n", "\n", "Mind", "\n", "\n", "\n", "\n", "Behaviorism", "\n", "Emergentism", "\n", "Eliminativism", "\n", "Epiphenomenalism", "\n", "Functionalism", "\n", "Objectivism", "\n", "Subjectivism", "\n", "\n", "\n", "\n", "\n", "\n", "Normativity", "\n", "\n", "\n", "\n", "Absolutism", "\n", "Particularism", "\n", "Relativism", "\n", "Nihilism", "\n", "Skepticism", "\n", "Universalism", "\n", "\n", "\n", "\n", "\n", "\n", "Ontology", "\n", "\n", "\n", "\n", "Action", "\n", "Event", "\n", "Process", "\n", "\n", "\n", "\n", "\n", "\n", "Reality", "\n", "\n", "\n", "\n", "Anti-realism", "\n", "Conceptualism", "\n", "Idealism", "\n", "Materialism", "\n", "Naturalism", "\n", "Nominalism", "\n", "Physicalism", "\n", "Realism", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Philosophy by region", "\n", "Philosophy-related lists", "\n", "Miscellaneous", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "By region", "\n", "\n", "\n", "\n", "African", "\n", "Ethiopian", "\n", "Aztec", "\n", "Native America", "\n", "Eastern", "\n", "Chinese", "\n", "Egyptian", "\n", "Czech", "\n", "Indian", "\n", "Indonesian", "\n", "Iranian", "\n", "Japanese", "\n", "Korean", "\n", "Vietnam", "\n", "Pakistani", "\n", "Western", "\n", "American", "\n", "Australian", "\n", "British", "\n", "Danish", "\n", "French", "\n", "German", "\n", "Greek", "\n", "Italian", "\n", "Polish", "\n", "Romanian", "\n", "Russian", "\n", "Slovene", "\n", "Spanish", "\n", "Turkish", "\n", "\n", "\n", "\n", "\n", "\n", "Lists", "\n", "\n", "\n", "\n", "Outline", "\n", "Index", "\n", "Years", "\n", "Problems", "\n", "Schools", "\n", "Glossary", "\n", "Philosophers", "\n", "Movements", "\n", "Publications", "\n", "\n", "\n", "\n", "\n", "\n", "Miscellaneous", "\n", "\n", "\n", "\n", "Women in philosophy", "\n", "Sage (philosophy)", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Portal", "\n", " ", "Category", "\n", " ", "Book", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Charitable giving", "\n", "\n", "\n", "\n", "Main topics", "\n", "\n", "\n", "\n", "Alms", "\n", "Altruism", "\n", "Donation", "\n", "Fundraising", "\n", "Philanthropy", "\n", "Volunteering", "\n", "\n", "\n", "\n", "\n", "\n", "Types of ", "charitable", "\norganizations", "\n", "\n", "\n", "\n", "Charitable trust / Registered charity", "\n", "Foundation", "\n", "\n", "Private", "\n", "\n", "\n", "Mutual-benefit nonprofit corporation", "\n", "Non-governmental organization", "\n", "Nonprofit organization", "\n", "Public-benefit nonprofit corporation", "\n", "Religious corporation", "\n", "Voluntary association", "\n", "\n", "\n", "\n", "\n", "\n", "Charity and religion", "\n", "\n", "\n", "\n", "D\u0101na", "\n", "Tithe", "\n", "Tzedakah", "\n", "Sadaqah", "\n", "Zakat", "\n", "\n", "\n", "\n", "\n", "\n", "Charity evaluators", "\n", "\n", "\n", "\n", "Charity Navigator", "\n", "CharityWatch", "\n", "GiveWell", "\n", "Giving What We Can", "\n", "GuideStar", "\n", "Open Philanthropy Project", "\n", "\n", "\n", "\n", "\n", "\n", "Further topics", "\n", "\n", "\n", "\n", "Alternative giving", "\n", "Benefit concert", "\n", "Charity / thrift / op shop", "\n", "Click-to-donate site", "\n", "Drive", "\n", "Donor intent", "\n", "Earning to give", "\n", "Effective altruism", "\n", "List of charitable foundations", "\n", "\n", "wealthiest", "\n", "\n", "\n", "Master of Nonprofit Organizations", "\n", "Matching funds", "\n", "Telethon", "\n", "Volunteer grant", "\n", "Wall of Kindness", "\n", "Warm-glow giving", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Ethics", "\n", "\n", "\n", "\n", "Theories", "\n", "\n", "\n", "\n", "Casuistry", "\n", "Consequentialism", "\n", "Deontology", "\n", "\n", "Kantian ethics", "\n", "\n", "\n", "Ethics of care", "\n", "Existentialist ethics", "\n", "Meta-ethics", "\n", "Particularism", "\n", "Pragmatic ethics", "\n", "Role ethics", "\n", "Virtue ethics", "\n", "\n", "\n", "\n", "\n", "\n", "Concepts", "\n", "\n", "\n", "\n", "Autonomy", "\n", "Axiology", "\n", "Belief", "\n", "Conscience", "\n", "Consent", "\n", "Equality", "\n", "Care", "\n", "Free will", "\n", "Good and evil", "\n", "Happiness", "\n", "Ideal", "\n", "Justice", "\n", "Morality", "\n", "Norm", "\n", "Freedom", "\n", "Principles", "\n", "Suffering or Pain", "\n", "Stewardship", "\n", "Sympathy", "\n", "Trust", "\n", "Value", "\n", "Virtue", "\n", "Wrong", "\n", "full index...", "\n", "\n", "\n", "\n", "\n", "\n", "Philosophers", "\n", "\n", "\n", "\n", "Laozi", "\n", "Plato", "\n", "Aristotle", "\n", "Diogenes", "\n", "Valluvar", "\n", "Cicero", "\n", "Confucius", "\n", "Augustine of Hippo", "\n", "Mencius", "\n", "Mozi", "\n", "Xunzi", "\n", "Thomas Aquinas", "\n", "Baruch Spinoza", "\n", "David Hume", "\n", "Immanuel Kant", "\n", "Georg W. F. Hegel", "\n", "Arthur Schopenhauer", "\n", "Jeremy Bentham", "\n", "John Stuart Mill", "\n", "S\u00f8ren Kierkegaard", "\n", "Henry Sidgwick", "\n", "Friedrich Nietzsche", "\n", "G. E. Moore", "\n", "Karl Barth", "\n", "Paul Tillich", "\n", "Dietrich Bonhoeffer", "\n", "Philippa Foot", "\n", "John Rawls", "\n", "John Dewey", "\n", "Bernard Williams", "\n", "J. L. Mackie", "\n", "G. E. M. Anscombe", "\n", "William Frankena", "\n", "Alasdair MacIntyre", "\n", "R. M. Hare", "\n", "Peter Singer", "\n", "Derek Parfit", "\n", "Thomas Nagel", "\n", "Robert Merrihew Adams", "\n", "Charles Taylor", "\n", "Joxe Azurmendi", "\n", "Christine Korsgaard", "\n", "Martha Nussbaum", "\n", "more...", "\n", "\n", "\n", "\n", "\n", "\n", "Applied ethics", "\n", "\n", "\n", "\n", "Bioethics", "\n", "Business ethics", "\n", "Discourse ethics", "\n", "Environmental ethics", "\n", "Legal ethics", "\n", "Media ethics", "\n", "Medical ethics", "\n", "Nursing ethics", "\n", "Professional ethics", "\n", "Sexual ethics", "\n", "Ethics of eating meat", "\n", "Ethics of technology", "\n", "\n", "\n", "\n", "\n", "\n", "Related articles", "\n", "\n", "\n", "\n", "Christian ethics", "\n", "Descriptive ethics", "\n", "Ethics in religion", "\n", "Evolutionary ethics", "\n", "Feminist ethics", "\n", "History of ethics", "\n", "Ideology", "\n", "Islamic ethics", "\n", "Jewish ethics", "\n", "Normative ethics", "\n", "Philosophy of law", "\n", "Political philosophy", "\n", "Social philosophy", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Portal", "\n", "Category", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Authority control", "\n", "\n", "\n", "\n", "GND", ": ", "4129281-9", "\n", "NDL", ": ", "00569562", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 16 January 2018, at 01:34."}, +{"title": "Adrian Holovaty", "text": ["\n", "\n", "Adrian Holovaty", "\n", "\n", "\n", "\n", "Adrian Holovaty in 2009", "\n", "\n", "\n", "\n", "Born", "\n", "1981 (age\u00a036\u201337)", "\n", "Naperville, Illinois", "\n", "\n", "\n", "Nationality", "\n", "USA", "\n", "\n", "\n", "Alma\u00a0mater", "\n", "Missouri School of Journalism", " (B.A., 2001)", "\n", "\n", "\n", "Occupation", "\n", "web developer, journalist, entrepreneur", "\n", "\n", "\n", "Known\u00a0for", "\n", "Django Web framework", "\n", "\n", "\n", "Adrian Holovaty", " (born 1981) is an American web developer, journalist and entrepreneur from ", "Chicago, Illinois", ", living in ", "Amsterdam, the Netherlands", ". He is co-creator of the ", "Django web framework", " and an advocate of \"journalism via computer programming\".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Life and career", "\n", "\n", "1.1", " ", "Crime mapping innovations", "\n", "\n", "\n", "2", " ", "References", "\n", "3", " ", "External links", "\n", "\n", "\n", "\n", "Life and career", "[", "edit", "]", "\n", "Holovaty, a ", "Ukrainian American", ", grew up in ", "Naperville, Illinois", ". He graduated from the ", "Missouri School of Journalism", " in 2001 and worked as a web developer/journalist for ", "The Atlanta Journal-Constitution", ", ", "Lawrence Journal-World", " and ", "The Washington Post", " before starting ", "EveryBlock", ", a web startup that provided \"microlocal\" news, in 2007.", "[1]", "\n", "While working at the ", "Lawrence Journal-World", " from 2002 to 2005, he and other web developers (", "Simon Willison", ", Jacob Kaplan-Moss and Wilson Miner", "[2]", ") created ", "Django", ", an ", "open source", " ", "web application framework", " for ", "Python", ". He and Kaplan-Moss served as the framework's ", "Benevolent Dictators for Life", " until January 2014.", "[3]", " The pair wrote ", "The Django Book", ", first published in 2007.", "\n", "Holovaty is also a guitarist. In 1999, he recorded an album of his own guitar compositions,", "[4]", " and since 2007 he has posted videos of his acoustic guitar arrangements on ", "YouTube", ", building an audience of more than 20,000 subscribers.", "[5]", " In 2012 he and PJ Macklin founded ", "SoundSlice", ", a ", "collaboratively edited", " website which shows YouTube music videos alongside simultaneous animated ", "tablature", ", intended to help guitarists learn new musical pieces.", "[6]", "\n", "Crime mapping innovations", "[", "edit", "]", "\n", "In 2005, Holovaty launched ", "chicagocrime.org", ", a ", "Google Maps", " ", "mashup", " of ", "Chicago Police Department", " crime data.", "[7]", " The site won the 2005 Batten Award for Innovations in Journalism", "[8]", " and was named by ", "The New York Times", " as one of 2005's best ideas.", "[9]", "\n", "As one of the first Google Maps mashups, it helped influence Google to create its official Google Maps API.", "[10]", " Newspaper sites such as the ", "Chicago Tribune", " and the ", "Chicago Sun-Times", " have incorporated a map from EveryBlock, the successor to chicagocrime.org, into their web sites.", "[11]", "\n", "In 2007, Holovaty was awarded a $1.1 million ", "Knight Foundation", " grant and left his job as editor of editorial innovations at ", "washingtonpost.com", " to start EveryBlock, the successor to chicagocrime.org.", "[12]", " On August 17, 2009 EveryBlock was officially acquired by ", "msnbc.com", ".", "[13]", " The terms of the deal were not disclosed.", "[14]", " In February 2013, NBC News announced that it was shutting down EveryBlock.", "[15]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "\n", "^", " ", "Goodbye hyperlocal, hello microlocal | Holovaty.com", "\n", "^", " ", "Django committers", "\n", "^", " ", "Adrian and Jacob retiring as Django BDFLs | Holovaty.com", "\n", "^", " ", "Music | Holovaty.com", "\n", "^", " ", "YouTube - adrianholovaty's Channel", "\n", "^", " ", "\"About Soundslice\"", ". SoundSlice LLC. November 2012.", "\u00a0", "\n", "^", " ", "Announcing chicagocrime.org | Holovaty.com", "\n", "^", " ", "Batten award", "\n", "^", " ", "Do-It-Yourself Cartography", "\n", "^", " ", "Official Google Blog: The world is your JavaScript-enabled oyster", "\n", "^", " ", "Street Wise: ", "http://www.chicagomag.com/Chicago-Magazine/June-2009/Street-Wise/", "\n", "^", " ", "Knight Foundation grant | Holovaty.com", "\n", "^", " ", "Nieman Journalism Lab. ", "\"EveryBlock\"", ". ", "Encyclo: an encyclopedia of the future of news", ". Retrieved ", "1 April", " 2012", ".", "\u00a0", "\n", "^", " ", "http://www.msnbc.msn.com/id/32443365/ns/business-us_business/", "\n", "^", " ", "\"NBC News shuts down hyperlocal site EveryBlock\"", ". CNN. February 7, 2013", ". Retrieved ", "February 7,", " 2013", ".", "\u00a0", "\n", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Holovaty.com -- personal site", "\n", "EveryBlock", "\n", "YouTube videos", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 3 September 2017, at 09:03."}, +{"title": "Hacker culture", "text": ["Not to be confused with ", "Security hacker", ".", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article has multiple issues.", " Please help ", "improve it", " or discuss these issues on the ", "talk page", ". ", "(", "Learn how and when to remove these template messages", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article's ", "tone or style may not reflect the ", "encyclopedic tone", " used on Wikipedia", ". ", "See Wikipedia's ", "guide to writing better articles", " for suggestions.", " ", "(June 2011)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "needs additional citations for ", "verification", ". ", "Please help ", "improve this article", " by ", "adding citations to reliable sources", ". Unsourced material may be challenged and removed.", " ", "(April 2011)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "The ", "hacker culture", " is a ", "subculture", " of individuals who enjoy the intellectual challenge of creatively overcoming limitations of software systems to achieve novel and clever outcomes.", "[1]", " The act of engaging in activities (such as programming or other media", "[2]", ") in a spirit of playfulness and exploration is termed \"hacking\". However, the defining characteristic of a ", "hacker", " is not the activities performed themselves (e.g. ", "programming", "), but the manner in which it is done", "[3]", " and whether it is something exciting and meaningful.", "[2]", " Activities of playful cleverness can be said to have \"hack value\" and therefore the term \"hacks\" came about,", "[3]", " with early examples including ", "pranks at MIT", " done by students to demonstrate their technical aptitude and cleverness. Therefore, the hacker culture originally emerged in academia in the 1960s around the ", "Massachusetts Institute of Technology", " (MIT)'s ", "Tech Model Railroad Club", " (TMRC)", "[4]", " and ", "MIT Artificial Intelligence Laboratory", ".", "[5]", "\n", "Richard Stallman", " explains about hackers who program:", "\n", "\n", "What they had in common was mainly love of excellence and programming. They wanted to make their programs that they used be as good as they could. They also wanted to make them do neat things. They wanted to be able to do something in a more exciting way than anyone believed possible and show \"Look how wonderful this is. I bet you didn't believe this could be done.\"", "[6]", "\n", "\n", "Hackers from this subculture tend to emphatically differentiate themselves from what they pejoratively call \"", "crackers", "\"; those who are generally referred to by media and members of the general public using the term \"hacker\", and whose primary focus\u200d\u2014\u200cbe it to malign or for malevolent purposes\u200d\u2014\u200clies in ", "exploiting", " weaknesses in computer security.", "[7]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Definition", "\n", "2", " ", "History", "\n", "3", " ", "Ethics and principles", "\n", "4", " ", "Uses", "\n", "\n", "4.1", " ", "Programming", "\n", "4.2", " ", "Home computing enthusiasts", "\n", "4.3", " ", "Hacker artists", "\n", "\n", "4.3.1", " ", "Art", "\n", "4.3.2", " ", "Hacker art mentions", "\n", "\n", "\n", "\n", "\n", "5", " ", "See also", "\n", "6", " ", "References", "\n", "7", " ", "Further reading", "\n", "8", " ", "External links", "\n", "\n", "\n", "\n", "Definition", "\n", "The ", "Jargon File", ", an influential but not universally accepted compendium of hacker slang, defines hacker as \"A person who enjoys exploring the details of programmable systems and stretching their capabilities, as opposed to most users, who prefer to learn only the minimum necessary.\"", "[8]", " The ", "Request for Comments", " (RFC) 1392, the Internet Users' Glossary, amplifies this meaning as \"A person who delights in having an intimate understanding of the internal workings of a system, computers and computer networks in particular.\"", "[9]", "\n", "As documented in the Jargon File, these hackers are disappointed by the mass media and general public's usage of the word ", "hacker", " to refer to ", "security breakers", ", calling them \"crackers\" instead. This includes both \"good\" crackers (\"", "white hat hackers", "\") who use their computer security related skills and knowledge to learn more about how systems and networks work and to help to discover and fix security holes, as well as those more \"evil\" crackers (\"", "black hat hackers", "\") who use the same skills to author harmful software (like viruses, trojans, etc.) and illegally infiltrate secure systems with the intention of doing harm to the system.", "[10]", " The programmer subculture of hackers, in contrast to the cracker community, generally sees computer security related activities as contrary to the ideals of the original and true meaning of the hacker term that instead related to playful cleverness.", "[10]", "\n", "History", "\n", "The word \"hacker\" derives from the seventeenth-century word of a \"lusty laborer\" who harvested fields by dogged and rough swings of his hoe. Although the idea of \"hacking\" has existed long before the term \"hacker\"\u200d\u2014\u200cwith the most notable example of Lightning Ellsworth, it was not a word that the first programmers used to describe themselves. In fact, many of the first programmers were from engineering or physics backgrounds.", "\n", "\n", "\n", "\u201c", "\n", "\"But from about 1945 onward (and especially during the creation of the first ENIAC computer) some programmers realized that their expertise in computer software and technology had evolved not just into a profession, but into a passion\" (46).", "[1]", "\n", "\u201d", "\n", "\n", "\n", "\n", "\n", "\n", "There was a growing awareness of a style of programming different from the cut and dried methods employed at first,", "[11]", "[12]", " but it was not until the 1960s that the term hackers began to be used to describe proficient computer programmers. Therefore, the fundamental characteristic that links all who identify themselves as hackers are ones who enjoy \"\u2026the intellectual challenge of creatively overcoming and circumventing limitations of programming systems and who tries to extend their capabilities\" (47).", "[1]", " With this definition in mind, it can be clear where the negative implications of the word \"hacker\" and the subculture of \"hackers\" came from.", "\n", "Some common nicknames among this culture include \"crackers\" who are unskilled thieves who mainly rely on luck. Others include \"phreak\"\u200d\u2014\u200cwhich refers to a type of skilled ", "crackers", " and \"warez d00dz\"\u200d\u2014\u200cwhich is a kind of cracker that acquires reproductions of copyrighted software. Within all hackers are tiers of hackers such as the \"samurai\" who are hackers that hire themselves out for legal electronic locksmith work. Furthermore, there are other hackers who are hired to test security, they are called \"sneakers\" or \"tiger teams\".", "\n", "Before communications between computers and computer users were as ", "networked", " as they are now, there were multiple independent and parallel hacker subcultures, often unaware or only partially aware of each other's existence. All of these had certain important traits in common:", "\n", "\n", "Creating software and sharing it with each other", "\n", "Placing a high value on freedom of inquiry", "\n", "Hostility to secrecy", "\n", "Information-sharing as both an ideal and a practical strategy", "\n", "Upholding the right to ", "fork", "\n", "Emphasis on rationality", "\n", "Distaste for authority", "\n", "Playful cleverness, taking the serious humorously and humor seriously", "\n", "\n", "\n", "\n", "\n", "\nThe ", "Glider", ", proposed as an ", "emblem of the \"hacker community\"", " by ", "Eric S. Raymond", ".", "[13]", "\n", "\n", "\n", "These sorts of subcultures were commonly found at ", "academic", " settings such as ", "college", " ", "campuses", ". The ", "MIT Artificial Intelligence Laboratory", ", the ", "University of California, Berkeley", " and ", "Carnegie Mellon University", " were particularly well-known hotbeds of early hacker culture. They evolved in parallel, and largely unconsciously, until the ", "Internet", ", where a legendary ", "PDP-10", " machine at MIT, called AI, that was running ", "ITS", ", provided an early meeting point of the hacker community. This and other developments such as the rise of the ", "free software movement", " and ", "community", " drew together a critically large population and encouraged the spread of a conscious, common, and systematic ethos. Symptomatic of this evolution were an increasing adoption of ", "common slang", " and a shared view of history, similar to the way in which other occupational groups have professionalized themselves but without the formal credentialing process characteristic of most professional groups.", "[", "citation needed", "]", "\n", "Over time, the academic hacker subculture has tended to become more conscious, more cohesive, and better organized. The most important consciousness-raising moments have included the composition of the first ", "Jargon File", " in 1973, the promulgation of the ", "GNU Manifesto", " in 1985, and the publication of ", "Eric Raymond", "'s ", "The Cathedral and the Bazaar", " in 1997. Correlated with this has been the gradual recognition of a set of shared culture heroes, including: ", "Bill Joy", ", ", "Donald Knuth", ", ", "Dennis Ritchie", ", ", "Alan Kay", ", ", "Ken Thompson", ", ", "Richard M. Stallman", ", ", "Linus Torvalds", ", ", "Larry Wall", ", and ", "Guido Van Rossum", ".", "\n", "The concentration of academic hacker subculture has paralleled and partly been driven by the commoditization of computer and networking technology, and has, in turn, accelerated that process. In 1975, hackerdom was scattered across several different families of ", "operating systems", " and disparate networks; today it is largely a ", "Unix", " and ", "TCP/IP", " phenomenon, and is concentrated around various ", "operating systems", " based on ", "free software", " and ", "open-source software", " development.", "\n", "Ethics and principles", "\n", "Main article: ", "Hacker ethic", "\n", "Many of the values and tenets of the free and open source software movement stem from the ", "hacker ethics", " that originated at ", "MIT", "[14]", " and at the ", "Homebrew Computer Club", ". The hacker ethics were chronicled by Steven Levy in ", "Hackers: Heroes of the Computer Revolution", "[15]", " and in other texts in which Levy formulates and summarizes general hacker attitudes:", "\n", "\n", "Access to computers-and anything that might teach you something about the way the world works-should be unlimited and total.", "\n", "All information should be free.", "\n", "Hackers should be judged by their hacking, not bogus criteria such as degrees, age, race, or position.", "\n", "You can create art and beauty on a computer.", "\n", "Computers can change your life for the better.", "\n", "\n", "Hacker ethics are concerned primarily with sharing, openness, collaboration, and engaging in the hands-on imperative.", "[15]", "\n", "Linus Torvalds", ", one of the leaders of the open source movement (known primarily for developing the ", "Linux kernel", "), has noted in the book ", "The Hacker Ethic", "[16]", " that these principles have evolved from the known Protestant ethics and incorporates the spirits of capitalism, as introduced in the early 20th century by ", "Max Weber", ".", "\n", "Hack value is the notion used by hackers to express that something is worth doing or is interesting.", "[17]", " This is something that hackers often feel intuitively about a problem or solution.", "\n", "An aspect of hack value is performing feats for the sake of showing that they can be done, even if others think it is difficult. Using things in a unique way outside their intended purpose is often perceived as having hack value. Examples are using a ", "dot matrix impact printer", " to produce musical notes, using a ", "flatbed scanner", " to take ultra-high-resolution photographs or using an ", "optical mouse", " as ", "barcode reader", ".", "\n", "A solution or feat has \"hack value\" if it is done in a way that has finesse, cleverness or brilliance, which makes ", "creativity", " an essential part of the meaning. For example, ", "picking a difficult lock", " has hack value; smashing it does not. As another example, proving ", "Fermat's last theorem", " by linking together most of modern mathematics has hack value; solving a combinatorial problem by ", "exhaustively trying all possibilities", " does not. Hacking is not using process of elimination to find a solution; it's the process of finding a clever solution to a problem.", "\n", "Uses", "\n", "While using ", "hacker", " to refer to someone who enjoys playful cleverness is most often applied to computer programmers, it is sometimes used for people who apply the same attitude to other fields.", "[7]", " For example, ", "Richard Stallman", " describes the silent composition ", "4\u203233\u2033", " by John Cage and the 14th-century ", "palindromic", " three-part piece \"Ma Fin Est Mon Commencement\" by ", "Guillaume de Machaut", " as hacks.", "[3]", " According to the Jargon File,", "[8]", " the word ", "hacker", " was used in a similar sense among radio amateurs in the 1950s, predating the software hacking community.", "\n", "Programming", "\n", "The Boston Globe", " in 1984 defined \"hackers\" as \"computer nuts\".", "[18]", " In their programmer subculture, a hacker is a person who follows a spirit of playful cleverness and loves programming. It is found in an originally academic movement unrelated to computer security and most visibly associated with ", "free software", ", ", "open source", " and ", "demoscene", ". It also has a ", "hacker ethic", ", based on the idea that writing software and sharing the result on a voluntary basis is a good idea, and that information should be free, but that it's not up to the hacker to make it free by breaking into private computer systems. This hacker ethic was publicized and perhaps originated in ", "Steven Levy", "'s ", "Hackers: Heroes of the Computer Revolution", " (1984). It contains a codification of its principles.", "\n", "The programmer subculture of hackers disassociates from the mass media's pejorative use of the word 'hacker' referring to computer security, and usually prefer the term 'cracker' for that meaning. Complaints about supposed mainstream misuse started as early as 1983, when media used \"hacker\" to refer to the computer criminals involved in ", "The 414s", " case.", "[19]", "\n", "In the programmer subculture of hackers, a computer hacker is a person who enjoys designing software and building programs with a sense for aesthetics and playful cleverness. The term hack in this sense can be traced back to \"describe the elaborate college pranks that...students would regularly devise\" (Levy, 1984 p.\u00a010). To be considered a 'hack' was an honor among like-minded peers as \"to qualify as a hack, the feat must be imbued with innovation, style and technical virtuosity\" (Levy, 1984 p.\u00a010) The ", "MIT", " ", "Tech Model Railroad Club", " Dictionary defined hack in 1959 (not yet in a computer context) as \"1) an article or project without constructive end; 2) a project undertaken on bad self-advice; 3) an entropy booster; 4) to produce, or attempt to produce, a hack(3)\", and \"hacker\" was defined as \"one who hacks, or makes them\". Much of TMRC's jargon was later imported into early computing culture, because the club started using a ", "DEC", " ", "PDP-1", " and applied its local model railroad slang in this computing context. Initially incomprehensible to outsiders, the slang also became popular in MIT's computing environments beyond the club. Other examples of jargon imported from the club are 'losing' (\"when a piece of equipment is not working\")", "[15]", " and 'munged' (\"when a piece of equipment is ruined\").", "[15]", "\n", "Others did not always view hackers with approval. ", "MIT living groups", " in 1989 avoided advertising their sophisticated ", "Project Athena", " workstations to prospective members because they wanted residents who were interested in people, not computers, with one fraternity member stating that \"We were worried about the hacker subculture\".", "[20]", "\n", "According to ", "Eric S. Raymond", ",", "[21]", " the Open Source and Free Software hacker subculture developed in the 1960s among 'academic hackers'", "[22]", " working on early ", "minicomputers", " in ", "computer science", " environments in the United States.", "\n", "Hackers were influenced by and absorbed many ideas of key technological developments and the people associated with them. Most notable is the technical culture of the pioneers of the ", "Arpanet", ", starting in 1969. The ", "PDP-10", " AI machine at MIT, running the ", "ITS", " operating system and connected to the Arpanet, provided an early hacker meeting point. After 1980 the subculture coalesced with the culture of ", "Unix", ". Since the mid-1990s, it has been largely coincident with what is now called the ", "free software", " and ", "open source movement", ".", "\n", "Many programmers have been labeled \"great hackers\",", "[23]", " but the specifics of who that label applies to is a matter of opinion. Certainly major contributors to ", "computer science", " such as ", "Edsger Dijkstra", " and ", "Donald Knuth", ", as well as the inventors of popular software such as ", "Linus Torvalds", " (", "Linux", "), and ", "Ken Thompson", " and ", "Dennis Ritchie", " (", "Unix", " and ", "C programming language", ") are likely to be included in any such list; see also ", "List of programmers", ". People primarily known for their contributions to the consciousness of the programmer subculture of hackers include ", "Richard Stallman", ", the founder of the free software movement and the ", "GNU project", ", president of the ", "Free Software Foundation", " and author of the famous ", "Emacs", " text editor as well as the ", "GNU Compiler Collection (GCC)", ", and ", "Eric S. Raymond", ", one of the founders of the ", "Open Source Initiative", " and writer of the famous text ", "The Cathedral and the Bazaar", " and many other essays, maintainer of the ", "Jargon File", " (which was previously maintained by ", "Guy L. Steele, Jr.", ").", "\n", "Within the computer programmer subculture of hackers, the term hacker is also used for a programmer who reaches a goal by employing a series of modifications to extend existing ", "code", " or resources. In this sense, it can have a negative connotation of using inelegant ", "kludges", " to accomplish programming tasks that are quick, but ugly, inelegant, difficult to extend, hard to maintain and inefficient. This derogatory form of the noun \"", "hack", "\" derives from the everyday English sense \"to cut or shape by or as if by crude or ruthless strokes\" [Merriam-Webster] and is even used among users of the positive sense of \"hacker\" who produces \"cool\" or \"neat\" hacks. In other words, to \"hack\" at an original creation, as if with an axe, is to force-fit it into being usable for a task not intended by the original creator, and a \"hacker\" would be someone who does this habitually. (The original creator and the hacker may be the same person.) This usage is common in both programming, engineering and building. In programming, hacking in this sense appears to be tolerated and seen as a necessary compromise in many situations. Some argue that it should not be, due to this negative meaning; others argue that some kludges can, for all their ugliness and imperfection, still have \"hack value\".", "\n", "In non-software engineering, the culture is less tolerant of unmaintainable solutions, even when intended to be temporary, and describing someone as a \"hacker\" might imply that they lack professionalism. In this sense, the term has no real positive connotations, except for the idea that the hacker is capable of doing modifications that allow a system to work in the short term, and so has some sort of marketable skills. However, there is always the understanding that a more skillful or technical logician could have produced successful modifications that would not be considered a \"hack-job\". The definition is similar to other, non-computer based uses of the term \"hack-job\". For instance, a professional modification of a production sports car into a racing machine would not be considered a hack-job, but a cobbled together backyard mechanic's result could be. Even though the outcome of a race of the two machines could not be assumed, a quick inspection would instantly reveal the difference in the level of professionalism of the designers. The adjective associated with hacker is \"hackish\" (see the ", "Jargon file", ").", "\n", "In a very universal sense, hacker also means someone who makes things work beyond perceived limits in a clever way in general, without necessarily referring to computers, especially at MIT.", "[24]", " That is, people who apply the creative attitude of software hackers in fields other than computing. This includes even activities that predate computer hacking, for example ", "reality hackers", " or ", "urban spelunkers", " (exploring undocumented or unauthorized areas in buildings). One specific example is clever pranks", "[25]", " traditionally perpetrated by MIT students, with the perpetrator being called hacker. For example, when MIT students surreptitiously put a fake police car atop the dome on MIT's Building 10,", "[26]", " that was a hack in this sense, and the students involved were therefore hackers. Another type of hacker is now called a ", "reality hacker", ". More recent examples of usage for almost any type of playful cleverness are ", "wetware", " hackers (\"hack your brain\"), ", "media hackers", " and \"hack your reputation\". In a similar vein, a \"hack\" may refer to a ", "math", " hack, that is, a clever solution to a mathematical problem. The ", "GNU General Public License", " has been described as", "[", "by whom?", "]", " a ", "copyright", " hack because it cleverly uses the copyright laws for a purpose the lawmakers did not foresee. All of these uses now also have spread beyond MIT as well.", "\n", "Home computing enthusiasts", "\n", "Main article: ", "Hacking of consumer electronics", "\n", "In yet another context, a hacker is a computer hobbyist who pushes the limits of software or hardware. The home computer hacking subculture relates to the hobbyist home computing of the late 1970s, beginning with the availability of ", "MITS Altair", ". An influential organization was the ", "Homebrew Computer Club", ". However, its roots go back further to ", "amateur radio", " enthusiasts. The amateur radio slang referred to creatively tinkering to improve performance as \"hacking\" already in the 1950s.", "[27]", "\n", "A large overlaps between hobbyist hackers and the programmer subculture hackers existed during the Homebrew Club's days, but the interests and values of both communities somewhat diverged. Today, the hobbyists focus on commercial ", "computer and video games", ", ", "software cracking", " and exceptional computer programming (", "demo scene", "). Also of interest to some members of this group is the modification of computer hardware and other electronic devices, see ", "modding", ".", "\n", "\n", "\n", "\n", "\nA ", "DIY", " musician probes the circuit board of a synthesizer for ", "\"bends\"", " using a jeweler's screwdriver and alligator clips", "\n", "\n", "\n", "Electronics hobbyists working on machines other than computers also fall into this category. This includes people who do simple modifications to ", "graphing calculators", ", ", "video game consoles", ", electronic ", "musical keyboards", " or other device (see ", "CueCat", " for a notorious example) to expose or add functionality to a device that was unintended for use by end users by the company who created it. A number of ", "techno", " musicians have modified 1980s-era ", "Casio SK-1", " sampling keyboards to create unusual sounds by doing ", "circuit bending", ": connecting wires to different leads of the integrated circuit chips. The results of these DIY experiments range from opening up previously inaccessible features that were part of the chip design to producing the strange, dis-harmonic digital tones that became part of the techno music style. Companies take different attitudes towards such practices, ranging from open acceptance (such as ", "Texas Instruments", " for its graphing calculators and ", "Lego", " for its ", "Lego Mindstorms", " robotics gear) to outright hostility (such as ", "Microsoft", "'s attempts to lock out ", "Xbox", " hackers or the ", "DRM", " routines on ", "Blu-ray Disc", " players designed to sabotage compromised players.", "[", "citation needed", "]", ")", "\n", "In this context, a \"hack\" refers to a ", "program", " that (sometimes illegally) modifies another program, often a video game, giving the user access to features otherwise inaccessible to them. As an example of this use, for ", "Palm OS", " users (until the 4th iteration of this ", "operating system", "), a \"hack\" refers to an extension of the operating system which provides additional functionality. Term also refers to those people who cheat on video games using special software. This can also refer to the ", "jailbreaking", " of ", "iPhones", ".", "\n", "Hacker artists", "\n", "See also: ", "Fractal art", ", ", "algorithmic art", ", and ", "interactive art", "\n", "Hacker artists create ", "art", " by hacking on ", "technology", " as an ", "artistic medium", ". This has extended the definition of the term and what it means to be a hacker. Such ", "artists", " may work with ", "graphics", ", ", "computer hardware", ", ", "sculpture", ", ", "music", " and other ", "audio", ", ", "animation", ", ", "video", ", ", "software", ", ", "simulations", ", ", "mathematics", ", reactive ", "sensory", " systems, text, ", "poetry", ", ", "literature", ", or any combination thereof.", "\n", "Dartmouth College", " musician Larry Polansky states:", "\n", "\n", "Technology and art are inextricably related. Many musicians, video artists, graphic artists, and even poets who work with technology\u2014whether designing it or using it\u2014consider themselves to be part of the 'hacker community.' Computer artists, like non-art hackers, often find themselves on society\u2019s fringes, developing strange, innovative uses of existing technology. There is an empathetic relationship between those, for example, who design experimental music software and hackers who write communications ", "freeware", ".", "[28]", "\n", "\n", "Another description is offered by Jenny Marketou:", "\n", "\n", "Hacker artists operate as ", "culture", " hackers who manipulate existing techno-", "semiotic", " structures towards a different end, to get inside cultural systems on the net and make them do things they were never intended to do.", "[29]", "\n", "\n", "A successful software and hardware hacker artist is ", "Mark Lottor", " (mkl), who has created the 3-D light art projects entitled the ", "Cubatron", ", and the ", "Big Round Cubatron", ". This art is made using custom computer technology, with specially designed ", "circuit boards", " and programming for ", "microprocessor", " chips to manipulate the ", "LED", " lights.", "\n", "Don Hopkins", " is a software hacker artist well known for his artistic cellular automata. This art, created by a ", "cellular automata", " computer program, generates objects which randomly bump into each other and in turn create more objects and designs, similar to a lava lamp, except that the parts change color and form through interaction. Hopkins Says:", "\n", "\n", "Cellular automata are simple rules that are applied to a grid of cells, or the pixel values of an image. The same rule is applied to every cell, to determine its next state, based on the previous state of that cell and its neighboring cells. There are many interesting cellular automata rules, and they all look very different, with amazing animated dynamic effects. '", "Life", "' is a widely known cellular automata rule, but many other lesser known rules are much more interesting.", "\n", "\n", "Some hacker artists create art by writing computer code, and others, by developing hardware. Some create with existing software tools such as ", "Adobe Photoshop", " or ", "GIMP", ".", "\n", "The creative process of hacker artists can be more abstract than artists using non-technological media. For example, ", "mathematicians", " have produced visually stunning graphic presentations of ", "fractals", ", which hackers have further enhanced, often producing detailed and intricate graphics and animations from simple mathematical formulas.", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Bubbles", " was created using watercolors, then scanned into a computer. Colors were then manipulated using a software imaging tool", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Sunrise", " was created using pen and ink, then scanned into a computer and colored with a software imaging tool", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Rolling Golden Hills of California", " was created using pencil, scanned, and then painted with a software imaging tool", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Barnsley's fern", ", a fractal fern computed using an ", "iterated function system", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "A fractal that models the surface of a mountain", "\n", "\n", "\n", "\n", "\n", "Art", "\n", "\n", "\n", "Art.Net", "\n", "Burning Man Festival", "\n", "Computer art", "\n", "Computer music", "\n", "Digital art", "\n", "Demoscene", "\n", "Electronic art", "\n", "Electronic art music", "\n", "Electronica", "\n", "Experiments in Art and Technology", "\n", "Generative art", "\n", "Internet art", "\n", "Robotic art", "\n", "Software art", "\n", "\n", "\n", "Hacker art mentions", "\n", "\n", "Ars Electronica", " Festival Archive \"Vector in Open Space\" by Gerfried Stocker 1996.", "\n", "Switch|Journal", " Jun 14 1998.", "\n", "Eye Weekly", " \"Tag \u2013 who's it?\" by Ingrid Hein, July 16, 1998.", "\n", "Linux Today", " \"Playing the Open Source Game\" by Shawn Hargreaves, Jul 5, 1999.", "\n", "Canterbury Christ Church University Library", " Resources by Subject \u2013 Art & Design, 2001.", "\n", "SuperCollider Workshop / Seminar", " Joel Ryan describes collaboration with hacker artists of Silicon Valley. 21 March 2002", "\n", "Anthony Barker's Weblog on Linux, Technology and the Economy", " \"Why Geeks Love Linux\", Sept 2003.", "\n", "Live Art Research", " Gesture and Response in Field-Based Performance by ", "Sha Xin Wei", " & Satinder Gill, 2005.", "\n", "Hackers, Who Are They", " \"The Hackers Identity, October 2014.", "\n", "\n", "See also", "\n", "\n", "\n", "Free software portal", "\n", "\n", "\n", "\n", "Cowboy coding", ": software development without the use of strict ", "software development methodologies", "\n", "Demoscene", "\n", "History of free software", "\n", "Maker culture", "\n", "Unix philosophy", "\n", "\n", "References", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Gehring, Verna (2004). ", "The Internet In Public Life", ". Maryland: Rowman & Littlefield Publishers. pp.\u00a043\u201356. ", "ISBN", "\u00a0", "0742542335", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "The Hacker Community and Ethics: An Interview with Richard M. Stallman, 2002", " (gnu.org)", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Stallman, Richard", " (2002). ", "\"On Hacking\"", ". Retrieved ", "2008-03-16", ".", "\u00a0", "\n", "^", " ", "TMRC - Hackers", "\n", "^", " ", "Words to Avoid (or Use with Care) Because They Are Loaded or Confusing", " (gnu.org)", "\n", "^", " ", "Richard Stallman: interview as shown in ", "Hackers \u2014 Wizards of the Electronic Age", "\n", "^ ", "a", " ", "b", " ", "Raymond, Eric", " (2008-01-08). ", "\"How To Become A Hacker\"", ". Thyrsus Enterprises", ". Retrieved ", "2008-03-16", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Raymond, Eric", ", ed. (2003-12-29). ", "\"hacker\"", ". ", "Jargon File", " (version 4.4.7 ed.)", ". Retrieved ", "2008-03-02", ".", "\u00a0", "\n", "^", " ", "Internet Users' Glossary", " (Request for Comments 1392), January 1993", "\n", "^ ", "a", " ", "b", " ", "[1]", " Definition of \"Cracker\" in the ", "Jargon File", "\n", "^", " ", "\"Introduction to Functional Programming Systems Using Haskell\"", ".", "\u00a0", "\n", "^", " ", "\"A History of Modern Computing\"", ". ", "During the time one of these machines read a card, it could execute a sequence of up to forty-eight steps. More complex sequences-within-sequences were also possible. One computer scientist later noted that this method of programming demanded ", "the kind of detailed design of parallel subsequencing that one sees nowadays at the microprogramming level of some computers.", "\u00a0", "\n", "^", " ", "\"Glider Emblem FAQ\"", ". 22 May 2014", ". Retrieved ", "20 September", " 2016", ".", "\u00a0", "\n", "^", " ", "\"The Hacker's Ethics\"", ". Retrieved ", "31 August", " 2011", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Levy, S: \"Hackers: Heroes of the Computer Revolution\", Anchor Press/Doubleday, 1984. ", "ISBN", "\u00a0", "0-385-19195-2", "\n", "^", " ", "Himanen, Pekka; Linus Torvalds, and Manuel Castells (2001). The Hacker Ethic. Secker & Warburg. ", "ISBN", "\u00a0", "0-436-20550-5", ".", "\n", "^", " ", "Definition of 'hack value'", " in the ", "Jargon File", "\n", "^", " ", "Dyer, Richard (1984-05-06). ", "\"Masters of the Game\"", ". ", "The Boston Globe", ". Archived from ", "the original", " on 1997-06-07.", "\u00a0", "\n", "^", " ", "jnw@uvacs.UUCP (19 September 1983). ", "\"for hack ( er ) s who want to complain to CBS\"", ". ", "Newsgroup", ":\u00a0", "net.followup net.misc, net.followup", " ", "Check ", "|newsgroup=", " value (", "help", ")", ".", "\u00a0", "\n", "^", " ", "Garfinkel, Simson L.", " (Feb\u2013Mar 1989). ", "\"Students Log On to ATHENA\"", " ", "(PDF)", ". ", "Technology Review", ". pp.\u00a07\u201310", ". Retrieved ", "25 January", " 2016", ".", "\u00a0", "\n", "^", " ", "Eric S.Raymond: ", "A Brief History of Hackerdom", " (2000)", "\n", "^", " ", "Raymond, Eric Steven", " (19 September 2003). ", "\"Reasons to Believe\"", ". ", "The Art of Unix Programming", ". Addison-Wesley.", "\u00a0", "\n", "^", " ", "Graham, Paul", " (2004). ", "\"Great Hackers\"", ".", "\u00a0", "\n", "^", " ", "Eric Steven Raymond (2001). ", "\"What Is a Hacker?\"", ". ", "How To Become A Hacker", ". Thyrsus Enterprises", ". Retrieved ", "2008-10-18", ".", "\u00a0", "\n", "^", " ", "\"MIT Gallery of Hacks\"", ". Hacks.mit.edu", ". Retrieved ", "2013-11-30", ".", "\u00a0", "\n", "^", " ", "\"IHTFP Hack Gallery: CP Car on the Great Dome\"", ". Hacks.mit.edu. 1994-05-09", ". Retrieved ", "2013-11-30", ".", "\u00a0", "\n", "^", " ", "hacker", ". ", "The Jargon Lexicon", ". Retrieved ", "2008-10-18", ".", "\u00a0", "\n", "^", " ", "Singing Together, Hacking Together, Plundering Together: Sonic Intellectual Property in Cybertimes", " by Larry Polansky", "\n", "^", " ", "\"Cornelia Sollfrank\"", ". Thing.net. 2000-07-25", ". Retrieved ", "2011-07-01", ".", "\u00a0", "\n", "\n", "\n", "Further reading", "\n", "The ", "Jargon File", " has had a role in acculturating hackers since its origins in 1975.", "[", "citation needed", "]", " These academic and literary works helped shape the academic hacker subculture:", "[", "citation needed", "]", "\n", "\n", "Abelson, Hal", "; ", "Sussman, Gerald Jay", ". ", "Structure and Interpretation of Computer Programs", ". London: ", "MIT Press", ". ", "ISBN", "\u00a0", "9780070004849", ".", "\u00a0", "\n", "Aho", "; ", "Sethi", "; ", "Ullman", ". ", "Compilers: Principles, Techniques, and Tools", ". Reading, MA: ", "Addison-Wesley", ". ", "ISBN", "\u00a0", "9780201100884", ".", "\u00a0", "\n", "Bourne, Stephen R.", " ", "The Unix System", ". Reading, MA: Addison-Wesley. ", "ISBN", "\u00a0", "9780201137910", ".", "\u00a0", "\n", "Brooks, Fred", ". ", "The Mythical Man-Month", ". Reading, MA: Addison-Wesley. ", "ISBN", "\u00a0", "9780201006506", ".", "\u00a0", "\n", "Graham, Paul", ". ", "Hackers & Painters", ". Sebastopol, CA: ", "O'Reilly Media", ". ", "ISBN", "\u00a0", "9780596006624", ".", "\u00a0", "\n", "Hoftstadter, Douglas", ". ", "G\u00f6del, Escher, Bach", ". New York, NY: ", "Basic Books", ". ", "ISBN", "\u00a0", "9780465026852", ".", "\u00a0", "\n", "James, Geoffrey", ". ", "The Tao of Programming", ". Santa Monica, CA: InfoBooks. ", "ISBN", "\u00a0", "9780931137075", ".", "\u00a0", "\n", "Kernighan, Brian W.", "; ", "Ritchie, Dennis", ". ", "The C Programming Language", ". Englewood Cliffs, NJ: ", "Prentice Hall", ". ", "ISBN", "\u00a0", "9780131103702", ".", "\u00a0", "\n", "Kidder, Tracy", ". ", "The Soul of a New Machine", ". Boston, MA: ", "Little, Brown and Company", ". ", "ISBN", "\u00a0", "9780316491709", ".", "\u00a0", "\n", "Knuth, Donald", ". ", "The Art of Computer Programming", ". Reading, MA: Addison-Wesley. ", "ISBN", "\u00a0", "9780201038019", ".", "\u00a0", "\n", "Levy, Steven", ". ", "Hackers: Heroes of the Computer Revolution", ". Garden City, NY: Anchor Press / ", "Doubleday", ". ", "ISBN", "\u00a0", "9780385191951", ".", "\u00a0", "\n", "Raymond, Eric S.", " ", "The Cathedral and the Bazaar", ". Cambridge, MA: O'Reilly Media. ", "ISBN", "\u00a0", "9781565927247", ".", "\u00a0", "\n", "Stoll, Cliff", ". ", "The Cuckoo's Egg", ". New York, NY: Doubleday. ", "ISBN", "\u00a0", "9780385249461", ".", "\u00a0", "\n", "Olson, Parmy. (05-14-2013). ", "We Are Anonymous: Inside the Hacker World of LulzSec, Anonymous, and the Global Cyber Insurgency.", " ", "ISBN", "\u00a0", "0316213527", ".", "\n", "Coleman, Gabriella. (2014-11-4). ", "Hacker, Hoaxer, Whistleblower, Spy: The Many Faces of Anonymous", ". Verso Books. ", "ISBN", "\u00a0", "1781685835", ".", "\n", "Shantz, Jeff; Tomblin, Jordon (2014-11-28). ", "Cyber Disobedience: Re://Presenting Online Anarchy", ". John Hunt Publishing. ", "ISBN", "\u00a0", "9781782795551", ".", "\n", "\n", "External links", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Hackers", ".", "\n", "\n", "\n", "\n", "A Brief History of Hackerdom", "\n", "Hack, Hackers, and Hacking", " (see ", "Appendix A", ")", "\n", "Gabriella Coleman", ": ", "The Anthropology of Hackers", ". The Atlantic, 2010.", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 7 December 2017, at 06:12."}, +{"title": "Wes McKinney", "text": ["Wes McKinney", " is an American statistician, ", "data scientist", " and businessman. He was the CEO and ", "founder", " of technology ", "startup", " Datapad. He is the ", "BDFL", " of the open-source ", "Pandas", " package for data analysis in the ", "Python", " programming language, and has also authored two versions of the reference book ", "Python for Data Analysis", ".", "[1]", "[2]", " He worked as a ", "software engineer", " for ", "Cloudera", " following their acquisition of Datapad in 2014. He is now a software engineer at ", "Two Sigma Investments", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Early life and education", "\n", "2", " ", "Career", "\n", "\n", "2.1", " ", "Media coverage", "\n", "\n", "\n", "3", " ", "References", "\n", "4", " ", "External links", "\n", "\n", "\n", "\n", "Early life and education", "[", "edit", "]", "\n", "McKinney graduated from ", "MIT", " with an S.B. in Mathematics in 2007.", "[1]", " He is on leave from the ", "Duke University", " Ph.D program in Statistics.", "\n", "Career", "[", "edit", "]", "\n", "From 2007 to 2010, he researched global macro and credit trading strategies at ", "AQR Capital Management", ". From 2010 to 2012, he served as a Python consultant to hedge funds and banks while developing ", "Pandas", ". In 2012 he co-founded Lambda Foundry Inc.", "[3]", "\n", "McKinney co-founded Datapad in January 2013. He was funded by Accel Partners and others.", "[4]", " Datapad was acquired by Cloudera in September 2014.", "[5]", "[6]", " He is currently working on an open-source project called Ibis, incubated within Cloudera Labs, aiming at using Python for ", "big data", " problems.", "[7]", "\n", "Media coverage", "[", "edit", "]", "\n", "McKinney has been interviewed by ", "VentureBeat", " and others.", "[8]", "[9]", "[10]", " He frequently gives talks to the Python community.", "[11]", "[12]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "McKinney, Wes (2013). ", "Python for data analysis", " (1 Aufl. ed.). Sebastopol, Calif.: O'Reilly. ", "ISBN", "\u00a0", "1449319793", ". Retrieved ", "10 January", " 2016", ".", "\u00a0", "\n", "^", " ", "McKinney, William. ", "Python for Data Analysis", ".", "\u00a0", "\n", "^", " ", "\"Wes McKinney - Founder and CEO @ DataPad | CrunchBase\"", ". ", "www.crunchbase.com", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"DataPad | CrunchBase\"", ". ", "www.crunchbase.com", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"Data startup DataPad gets acquired, says it will shut down on Friday\"", ". ", "VentureBeat", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"Cloudera Bought Datapad\"", ". ", "GigaOm", ". Retrieved ", "10 January", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Ibis on Impala: Python at Scale for Data Science - Cloudera Engineering Blog\"", ". ", "Cloudera Engineering Blog", ". Retrieved ", "2016-01-10", ". ", "[W]e are excited to announce a new open source project, called Ibis, that will deliver the great Python experience and ecosystem, only at any data and node scale.", "\u00a0", "\n", "^", " ", "\"DataPad emerges to let everyone at your company create and play with charts\"", ". ", "VentureBeat", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"Meet Quantopian's Newest Advisor: Wes McKinney\"", ". ", "Quantopian Blog", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"Big data's 4 big Vs: It's our Data Summit highlights - Web Summit Blog\"", ". ", "Web Summit Blog", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"LFPUG: Python in the enterprise + Pandas | Enthought Blog\"", ". ", "blog.enthought.com", ". Retrieved ", "2016-01-10", ".", "\u00a0", "\n", "^", " ", "\"Big Data Conference - Wes McKinney\"", ". ", "O'Reilly Media", ". Retrieved ", "10 January", " 2016", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Personal website", "\n", "Book discussion on YCombinator", "\n", "Ibis project blog", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 14 January 2018, at 19:57."}, +{"title": "Wikipedia:General disclaimer", "text": ["\n", "\n", "\n", "\n", "\n", "\n", "General disclaimer", "\n", "Content disclaimer", "\n", "Legal disclaimer", "\n", "Medical disclaimer", "\n", "Risk disclaimer", "\n", "Survey disclaimer", "\n", "\n", "\n", "\n", "\n", "\n", "WIKIPEDIA MAKES NO GUARANTEE OF VALIDITY", "\n", "Wikipedia is an online open-content collaborative encyclopedia; that is, a voluntary association of individuals and groups working to develop a common resource of human knowledge. The structure of the project allows anyone with an Internet connection to alter its content. Please be advised that nothing found here has necessarily been reviewed by people with the expertise required to provide you with complete, accurate or reliable information.", "\n", "That is not to say that you will not find valuable and accurate information in Wikipedia; much of the time you will. However, ", "Wikipedia cannot guarantee the validity of the information found here.", " The content of any given article may recently have been changed, vandalized or altered by someone whose opinion does not correspond with the state of knowledge in the relevant fields. Note that most other encyclopedias and reference works ", "also have disclaimers", ".", "\n", "No formal peer review", "\n", "Our active community of editors uses tools such as the ", "Special:Recentchanges", " and ", "Special:Newpages", " feeds to monitor new and changing content. However, Wikipedia is not uniformly peer reviewed; while readers may correct errors or engage in casual ", "peer review", ", they have no legal duty to do so and thus all information read here is without any implied warranty of fitness for any purpose or use whatsoever. Even articles that have been vetted by informal peer review or ", "featured article", " processes may later have been edited inappropriately, just before you view them.", "\n", "None of the contributors, sponsors, administrators or anyone else connected with Wikipedia in any way whatsoever can be responsible for the appearance of any inaccurate or libelous information or for your use of the information contained in or linked from these web pages.", "\n", "No contract; limited license", "\n", "Please make sure that you understand that the information provided here is being provided freely, and that no kind of agreement or contract is created between you and the owners or users of this site, the owners of the servers upon which it is housed, the individual Wikipedia contributors, any project administrators, sysops or anyone else who is in ", "any way connected", " with this project or sister projects subject to your claims against them directly. You are being granted a limited license to copy anything from this site; it does not create or imply any contractual or extracontractual liability on the part of Wikipedia or any of its agents, members, organizers or other users.", "\n", "There is ", "no agreement or understanding between you and Wikipedia", " regarding your use or modification of this information beyond the ", "Creative Commons Attribution-Sharealike 3.0 Unported License", " (CC-BY-SA) and the ", "GNU Free Documentation License", " (GFDL); neither is anyone at Wikipedia responsible should someone change, edit, modify or remove any information that you may post on Wikipedia or any of its associated projects.", "\n", "Trademarks", "\n", "Any of the trademarks, service marks, collective marks, design rights or similar rights that are mentioned, used or cited in the articles of the Wikipedia encyclopedia are the property of their respective owners. Their use here does not imply that you may use them for any purpose other than for the same or a similar informational use as contemplated by the original authors of these Wikipedia articles under the CC-BY-SA and GFDL licensing schemes. Unless otherwise stated Wikipedia and Wikimedia sites are neither endorsed by nor affiliated with any of the holders of any such rights and as such Wikipedia cannot grant any rights to use any otherwise protected materials. Your use of any such or similar incorporeal property is at your own risk.", "\n", "Personality rights", "\n", "Wikipedia contains material which may portray an identifiable person who is alive or deceased recently. The use of images of living or recently deceased individuals is, in some jurisdictions, restricted by laws pertaining to ", "personality rights", ", independent from their copyright status. Before using these types of content, please ensure that you have the right to use it under the laws which apply in the circumstances of your intended use. ", "You are solely responsible for ensuring that you do not infringe someone else's personality rights.", "\n", "Jurisdiction and legality of content", "\n", "Publication of information found in Wikipedia may be in violation of the laws of the country or jurisdiction from where you are viewing this information. The Wikipedia database is stored on servers in the United States of America, and is maintained in reference to the protections afforded under local and federal law. Laws in your country or jurisdiction may not protect or allow the same kinds of speech or distribution. Wikipedia does not encourage the violation of any laws, and cannot be responsible for any violations of such laws, should you link to this domain or use, reproduce or republish the information contained herein.", "\n", "Not professional advice", "\n", "If you need specific advice (for example, medical, legal, financial or risk management), please seek a professional who is licensed or knowledgeable in that area.", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 17 December 2015, at 12:48."}, +{"title": "Wikipedia:Text of Creative Commons Attribution-ShareAlike 3.0 Unported License", "text": ["\n", "\n", "Shortcut", "\n", "\n", "WP:CC BY-SA", "\n", "\n", "\n", "\n", "\n", "\n", "Wikipedia copyright", "\n", "\n", "\n", "Policy", "\n", "\n", "\n", "\n", "\n", "Copyright policy", "\n", "Copyright violation policy", "\n", "Reusing Wikipedia content", "\n", "Text of CC BY-SA 3.0 Unported License", "\n", "Text of CC BY-SA 4.0 International License", "\n", "Text of the GFDL", "\n", "\n", "\n", "\n", "\n", "Guidelines", "\n", "\n", "\n", "\n", "\n", "Public domain content", "\n", "Non-free content", "\n", "Non-U.S. copyrights", "\n", "Copying within Wikipedia", "\n", "Copyright information index", "\n", "\n", "\n", "\n", "\n", "Processes", "\n", "\n", "\n", "\n", "\n", "Copyright problems", "\n", "Files for discussion", "\n", "Contributor copyright investigations", "\n", "\n", "\n", "\n", "\n", "Resources", "\n", "\n", "\n", "\n", "\n", "Frequently asked questions", "\n", "General help", "\n", "Copyright assistance", "\n", "Media copyright questions", "\n", "Requesting copyright permission", "\n", "File copyright tags", "\n", "Donating copyrighted material", "\n", "Declaration of consent", "\n", "Guidance for text-related copyright problems", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Creative Commons Deed", "\nThis is a human-readable summary of the full license below.", "\n", "You are free:", "\n", "\n", "to Share", "\u2014to copy, distribute and transmit the work, and", "\n", "to Remix", "\u2014to ", "adapt", " the work", "\n", "\n", "for any purpose, even commercially.", "\n", "Under the following conditions:", "\n", "\n", "Attribution", "\u2014You must ", "attribute", " the work in the manner specified by the author or ", "licensor", " (but not in any way that suggests that they endorse you or your use of the work.)", "\n", "Share Alike", "\u2014If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.", "\n", "\n", "With the understanding that:", "\n", "\n", "Waiver", "\u2014Any of the above conditions can be ", "waived", " if you get permission from the copyright holder.", "\n", "Other Rights", "\u2014In no way are any of the following rights affected by the license:\n", "\n", "your ", "fair dealing", " or ", "fair use", " rights;", "\n", "the author's ", "moral rights", "; and", "\n", "rights other persons may have either in the work itself or in how the work is used, such as ", "publicity", " or ", "privacy", " rights.", "\n", "\n", "\n", "Notice", "\u2014For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do that is with a link to ", "https://creativecommons.org/licenses/by-sa/3.0/", "\n", "\n", "\n", "\n", "\n", "License", "\n", "\n", "\n", "\n", "CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.", "\n", "\n", "\n", "THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.", "\n", "BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.", "\n", "1. Definitions", "\n", "\n", "\"", "Adaptation", "\" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image (\"synching\") will be considered an Adaptation for the purpose of this License.", "\n", "\"", "Collection", "\" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.", "\n", "\"", "Creative Commons Compatible License", "\" means a license that is listed at ", "http://creativecommons.org/compatiblelicenses", " that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.", "\n", "\"", "Distribute", "\" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.", "\n", "\"", "License Elements", "\" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.", "\n", "\"", "Licensor", "\" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.", "\n", "\"", "Original Author", "\" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.", "\n", "\"", "Work", "\" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.", "\n", "\"", "You", "\" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.", "\n", "\"", "Publicly Perform", "\" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.", "\n", "\"", "Reproduce", "\" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.", "\n", "\n", "2. Fair Dealing Rights", "\n", "Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.", "\n", "3. License Grant", "\n", "Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:", "\n", "\n", "to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;", "\n", "to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked \"The original work was translated from English to Spanish,\" or a modification could indicate \"The original work has been modified.\";", "\n", "to Distribute and Publicly Perform the Work including as incorporated in Collections; and,", "\n", "to Distribute and Publicly Perform Adaptations.", "\n", "For the avoidance of doubt:\n", "\n", "Non-waivable Compulsory License Schemes.", " In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;", "\n", "Waivable Compulsory License Schemes.", " In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,", "\n", "Voluntary License Schemes.", " The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.", "\n", "\n", "\n", "\n", "The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.", "\n", "4. Restrictions", "\n", "The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:", "\n", "\n", "You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.", "\n", "You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the \"Applicable License\"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.", "\n", "If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution (\"Attribution Parties\") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., \"French translation of the Work by Original Author,\" or \"Screenplay based on original Work by Original Author\"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.", "\n", "Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.", "\n", "\n", "5. Representations, Warranties and Disclaimer", "\n", "UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.", "\n", "6. Limitation on Liability", "\n", "EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.", "\n", "7. Termination", "\n", "\n", "This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.", "\n", "Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.", "\n", "\n", "8. Miscellaneous", "\n", "\n", "Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.", "\n", "Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.", "\n", "If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.", "\n", "No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.", "\n", "This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.", "\n", "The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.", "\n", "\n", "\n", "\n", "\n", "\n", "Creative Commons Notice", "\n", "Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.", "\n", "Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark \"Creative Commons\" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License.", "\nCreative Commons may be contacted at ", "http://creativecommons.org/", ".", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 11 March 2017, at 18:16."}, +{"title": "Visual Basic .NET", "text": ["\n", "Visual Basic .NET", "\n", "\n", "\n", "\n", "\n", "Paradigm", "\n", "Structured", ", ", "imperative", ", ", "object-oriented", ", ", "declarative", ", ", "generic", ", ", "reflective", " and ", "event-driven", "\n", "\n", "\n", "Designed\u00a0by", "\n", "Microsoft", "\n", "\n", "\n", "Developer", "\n", "Microsoft", "\n", "\n", "\n", "First\u00a0appeared", "\n", "2001", "; 17\u00a0years ago", "\u00a0(", "2001", ")", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "\n", "2017 (15.0) / 7\u00a0March 2017", "; 10 months ago", "\u00a0(", "2017-03-07", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Typing discipline", "\n", "Static", ", ", "both strong and weak", ",", "[1]", " ", "both safe and unsafe", ",", "[1]", " ", "nominative", "\n", "\n", "\n", "Platform", "\n", ".NET Framework", ", ", "Mono", "\n", "\n", "\n", "OS", "\n", "Chiefly ", "Windows", "\nAlso on ", "Android", ", ", "BSD", ", ", "iOS", ", ", "Linux", ", ", "Mac OS X", ", ", "Solaris", " and ", "Unix", "\n", "\n", "\n", "Filename extensions", "\n", ".vb", "\n", "\n", "\n", "Website", "\n", "docs", ".microsoft", ".com", "/dotnet", "/visual-basic", "/", "\n", "\n", "\n", "Major ", "implementations", "\n", "\n", "\n", "Microsoft Visual Studio", ", ", "Microsoft Visual Studio Express", ", ", "SharpDevelop", ", ", "MonoDevelop", ", ", ".NET Framework SDK", " and ", "Mono", "\n", "\n", "\n", "Dialects", "\n", "\n", "\n", "Microsoft Visual Basic", "\n", "\n", "\n", "Influenced", "\n", "\n", "\n", "Small Basic", "\n", "\n", "\n", "Visual Basic .NET", " (", "VB.NET", ") is a ", "multi-paradigm", ", ", "object-oriented", " ", "programming language", ", implemented on the ", ".NET Framework", ". Microsoft launched VB.NET in 2002 as the successor to its original ", "Visual Basic", " language. Although the \".NET\" portion of the name was dropped in 2005, this article uses \"Visual Basic [.NET]\" to refer to all Visual Basic languages releases since 2002, in order to distinguish between them and the ", "classic Visual Basic", ". Along with ", "Visual C#", ", it is one of the two main languages targeting the .NET framework.", "\n", "Microsoft's ", "integrated development environment", " (IDE) for developing in Visual Basic .NET language is ", "Visual Studio", ". Most Visual Studio editions are ", "commercial", "; the only exceptions are ", "Visual Studio Express", " and ", "Visual Studio Community", ", which are ", "freeware", ". In addition, the ", ".NET Framework SDK", " includes a freeware ", "command-line", " ", "compiler", " called vbc.exe. ", "Mono", " also includes a command-line VB.NET compiler.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Syntax", "\n", "\n", "1.1", " ", "Simple example", "\n", "1.2", " ", "Complex example", "\n", "1.3", " ", "Comparison with the classic Visual Basic", "\n", "\n", "1.3.1", " ", "Comparative examples", "\n", "\n", "\n", "1.4", " ", "Comparison with C#", "\n", "\n", "\n", "2", " ", "Examples", "\n", "\n", "2.1", " ", "Hello World!", "\n", "\n", "2.1.1", " ", "Windows Form Application", "\n", "2.1.2", " ", "Console Application", "\n", "\n", "\n", "2.2", " ", "Speaking", "\n", "\n", "2.2.1", " ", "Windows Form Application", "\n", "2.2.2", " ", "Console Application", "\n", "\n", "\n", "\n", "\n", "3", " ", "Version history", "\n", "\n", "3.1", " ", "2002 (VB 7.0)", "\n", "3.2", " ", "2003 (VB 7.1)", "\n", "3.3", " ", "2005 (VB 8.0)", "\n", "3.4", " ", "2008 (VB 9.0)", "\n", "3.5", " ", "2010 (VB 10.0)", "\n", "3.6", " ", "2012 (VB 11.0)", "\n", "3.7", " ", "2015 (VB 14.0)", "\n", "3.8", " ", "2017 (VB 15.0)", "\n", "\n", "\n", "4", " ", "Cross-platform and open-source development", "\n", "5", " ", "See also", "\n", "6", " ", "References", "\n", "7", " ", "Further reading", "\n", "8", " ", "External links", "\n", "\n", "\n", "\n", "Syntax", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "This section needs expansion", ". ", "You can help by ", "adding to it", ".", " ", "(April 2014)", "\n", "\n", "\n", "\n", "VB.NET uses ", "statements", " to specify actions. The most common statement is an expression statement, consisting of an ", "expression", " to be evaluated, on a single line. As part of that evaluation, ", "functions or subroutines", " may be ", "called", " and ", "variables", " may be ", "assigned", " new values. To modify the normal sequential execution of statements, VB.NET provides several control-flow statements identified by reserved keywords. ", "Structured programming", " is supported by several constructs including two conditional execution constructs (", "If", " \u2026 ", "Then", " \u2026 ", "Else", " \u2026 ", "End If", " and ", "Select Case", " ... ", "Case", " ... ", "End Select", " ) and three iterative execution (loop) constructs (", "Do", " \u2026 ", "Loop", ", ", "For", " \u2026 ", "To", ", and ", "For Each", ") . The ", "For", " \u2026 ", "To", " statement has separate initialisation and testing sections, both of which must be present. (See examples below.) The ", "For Each", " statement steps through each value in a list.", "\n", "In addition, in Visual Basic .NET:", "\n", "\n", "There is no unified way of defining blocks of statements. Instead, certain keywords, such as \"If \u2026 Then\" or \"Sub\" are interpreted as starters of sub-blocks of code and have matching termination keywords such as \"End If\" or \"End Sub\".", "\n", "Statements are terminated either with a ", "colon", " (\":\") or with the ", "end of line", ". Multiple line statements in Visual Basic .NET are enabled with \" _\" at the end of each such line. The need for the underscore continuation character was largely removed in version 10 and later versions.", "[2]", "\n", "The ", "equals sign", " (\"=\") is used in both assigning values to variables and in comparison.", "\n", "Round brackets", " (parentheses) are used with ", "arrays", ", both to declare them and to get a value at a given index in one of them. Visual Basic .NET uses round brackets to define the parameters of subroutines or functions.", "\n", "A ", "single quotation mark", " ('), placed at the beginning of a line or after any number of ", "space", " or ", "tab", " characters at the beginning of a line, or after other code on a line, indicates that the (remainder of the) line is a ", "comment", ".", "\n", "\n", "Simple example", "[", "edit", "]", "\n", "The following is a very simple VB.NET program, a version of the classic \"", "Hello world", "\" example created as a console application:", "\n", "\n", "\n", "Module", " ", "Module1", "\n\n ", "Sub", " ", "Main", "()", "\n ", "' The classic \"Hello World\" demonstration program", "\n ", "Console", ".", "WriteLine", "(", "\"Hello World!\"", ")", "\n ", "End", " ", "Sub", "\n\n", "End", " ", "Module", "\n", "\n", "It prints \"", "Hello world!", "\" on a ", "command-line window", ". Each line serves a specific purpose, as follows:", "\n", "\n", "\n", "Module", " ", "Module1", "\n", "\n", "This is a module definition. Modules are a division of code, which can contain any kind of object, like constants or variables, functions or methods, or classes, but can't be instantiated as objects like classes and cannot inherit from other modules. Modules serve as containers of code that can be referenced from other parts of a program.", "[3]", "\nIt is common practice for a module and the code file, which contains it, to have the same name; however, this is not required, as a single code file may contain more than one module and/or class definition.", "\n", "\n", "\n", "Sub", " ", "Main", "()", "\n", "\n", "It defines a subroutine called \"Main\". \"Main\" is the entry point, where the program begins execution.", "[4]", "\n", "\n", "\n", "Console", ".", "WriteLine", "(", "\"Hello world!\"", ")", "\n", "\n", "This line performs the actual task of writing the output. ", "Console", " is a system object, representing a command-line interface (also known as \"console\") and granting programmatic access to the operating system's ", "standard streams", ". The program calls the ", "Console", " method ", "WriteLine,", " which causes the string passed to it to be displayed on the console.", "\n", "Instead of Console.WriteLine, one could use MsgBox, which prints the message in a dialog box instead of a command-line window.", "[5]", "\n", "Complex example", "[", "edit", "]", "\n", "This piece of code outputs ", "Floyd's Triangle", " to the console:", "\n", "\n", "\n", "Imports", " ", "System.Console", "\n\n", "Module", " ", "Program", "\n\n ", "Sub", " ", "Main", "()", "\n ", "Dim", " ", "rows", " ", "As", " ", "Integer", "\n\n ", "' Input validation.", "\n ", "Do", " ", "Until", " ", "Integer", ".", "TryParse", "(", "ReadLine", "(", "\"Enter a value for how many rows to be displayed: \"", "),", " ", "rows", ")", " ", "AndAlso", " ", "rows", " ", ">=", " ", "1", "\n ", "WriteLine", "(", "\"Allowed range is 1 and {0}\"", ",", " ", "Integer", ".", "MaxValue", ")", "\n ", "Loop", "\n \n ", "' Output of Floyd's Triangle", "\n ", "Dim", " ", "current", " ", "=", " ", "1", "\n\n ", "For", " ", "row", " ", "=", " ", "1", " ", "To", " ", "rows", "\n ", "For", " ", "column", " ", "=", " ", "1", " ", "To", " ", "row", "\n ", "Write", "(", "\"{0,-2} \"", ",", " ", "current", ")", "\n ", "current", " ", "+=", " ", "1", "\n ", "Next", "\n\n ", "WriteLine", "()", "\n ", "Next", "\n ", "End", " ", "Sub", "\n\n ", "''' ", "\n ", "''' Shadows Console.ReadLine with a version which takes a prompt string.", "\n ", "''' ", "\n ", "Function", " ", "ReadLine", "(", "Optional", " ", "prompt", " ", "As", " ", "String", " ", "=", " ", "Nothing", ")", " ", "As", " ", "String", "\n ", "If", " ", "prompt", " ", "IsNot", " ", "Nothing", " ", "Then", "\n ", "Write", "(", "prompt", ")", "\n ", "End", " ", "If", "\n\n ", "Return", " ", "Console", ".", "ReadLine", "()", "\n ", "End", " ", "Function", "\n\n", "End", " ", "Module", "\n", "\n", "Comparison with the classic Visual Basic", "[", "edit", "]", "\n", "Main article: ", "Comparison of Visual Basic and Visual Basic .NET", "\n", "Whether Visual Basic .NET should be considered as just another version of Visual Basic or a completely different language is a topic of debate. There are new additions to support new features, such as ", "structured exception handling", " and short-circuited expressions. Also, two important data-type changes occurred with the move to VB.NET: compared to Visual Basic 6, the ", "Integer", " ", "data type", " has been doubled in length from 16 bits to 32 bits, and the ", "Long", " ", "data type", " has been doubled in length from 32 bits to 64 bits. This is true for all versions of VB.NET. A 16-bit integer in all versions of VB.NET is now known as a ", "Short", ". Similarly, the ", "Windows Forms", " editor is very similar in style and function to the Visual Basic form editor.", "\n", "The things that ", "have", " changed significantly are the semantics\u2014from those of an object-based programming language running on a ", "deterministic", ", ", "reference-counted", " engine based on ", "COM", " to a fully ", "object-oriented", " language backed by the ", ".NET Framework", ", which consists of a combination of the ", "Common Language Runtime", " (a ", "virtual machine", " using ", "generational garbage collection", " and a ", "just-in-time compilation", " engine) and a far larger ", "class library", ". The increased breadth of the latter is also a problem that VB developers have to deal with when coming to the language, although this is somewhat addressed by the ", "My", " feature in Visual Studio 2005.", "\n", "The changes have altered many underlying assumptions about the \"right\" thing to do with respect to performance and maintainability. Some functions and libraries no longer exist; others are available, but not as efficient as the \"native\" .NET alternatives. Even if they compile, most converted Visual Basic 6 applications will require some level of ", "refactoring", " to take full advantage of the new language. Documentation is available to cover changes in the syntax, debugging applications, deployment and terminology.", "[6]", "\n", "Comparative examples", "[", "edit", "]", "\n", "The following simple examples compare VB and VB.NET syntax. They assume that the developer has created a form, placed a button on it and has associated the subroutines demonstrated in each example with the click event handler of the mentioned button. Each example creates a \"Hello, World\" message box after the button on the form is clicked.", "\n", "Visual Basic 6:", "\n", "\n", "\n", "Private", " ", "Sub", " ", "Command1_Click", "()", "\n ", "MsgBox", " ", "\"Hello, World\"", "\n", "End", " ", "Sub", "\n", "\n", "VB.NET (MsgBox or MessageBox class can be used):", "\n", "\n", "\n", "Private", " ", "Sub", " ", "Button1_Click", "(", "sender", " ", "As", " ", "object", ",", " ", "e", " ", "As", " ", "EventArgs", ")", " ", "Handles", " ", "Button1", ".", "Click", "\n ", "MsgBox", "(", "\"Hello, World\"", ")", "\n", "End", " ", "Sub", "\n", "\n", "\n", "Both Visual Basic 6 and Visual Basic .NET automatically generate the ", "Sub", " and ", "End Sub", " statements when the corresponding button is double-clicked in design view. Visual Basic .NET will also generate the necessary ", "Class", " and ", "End Class", " statements. The developer need only add the statement to display the \"Hello, World\" message box.", "\n", "All procedure calls must be made with parentheses in VB.NET, whereas in Visual Basic 6 there were different conventions for functions (parentheses required) and subs (no parentheses allowed, unless called using the keyword ", "Call", ").", "\n", "The names ", "Command1", " and ", "Button1", " are not obligatory. However, these are default names for a command button in Visual Basic 6 and VB.NET respectively.", "\n", "In VB.NET, the ", "Handles", " keyword is used to make the sub ", "Button1_Click", " a handler for the ", "Click", " event of the object ", "Button1", ". In Visual Basic 6, event handler subs must have a specific name consisting of the object's name (\"Command1\"), an underscore (\"_\"), and the event's name (\"Click\", hence \"Command1_Click\").", "\n", "There is a function called ", "MessageBox.Show", " in the ", "Microsoft.VisualBasic", " namespace which can be used (instead of ", "MsgBox", ") similarly to the corresponding function in Visual Basic 6. There is a controversy", "[7]", " about which function to use as a best practice (not only restricted to showing message boxes but also regarding other features of the ", "Microsoft.VisualBasic", " namespace). Some programmers prefer to do things \"the .NET way\", since the Framework classes have more features and are less language-specific. Others argue that using language-specific features makes code more readable (for example, using ", "int", " (C#) or ", "Integer", " (VB.NET) instead of ", "System.Int32", ").", "\n", "In Visual Basic 2008, the inclusion of ", "ByVal sender as Object, ByVal e as EventArgs", " has become optional.", "\n", "\n", "The following example demonstrates a difference between Visual Basic 6 and VB.NET. Both examples close the ", "active window", ".", "\n", "Visual Basic 6:", "\n", "\n", "\n", "Sub", " ", "cmdClose_Click", "()", "\n ", "Unload", " ", "Me", "\n", "End", " ", "Sub", "\n", "\n", "VB.NET:", "\n", "\n", "\n", "Sub", " ", "btnClose_Click", "(", "sender", " ", "As", " ", "Object", ",", " ", "e", " ", "As", " ", "EventArgs", ")", " ", "Handles", " ", "btnClose", ".", "Click", "\n ", "Close", "()", "\n", "End", " ", "Sub", "\n", "\n", "The 'cmd' prefix is replaced by the 'btn' prefix, conforming to the new convention previously mentioned.", "[", "which?", "]", "\n", "Visual Basic 6 did not provide common operator shortcuts. The following are equivalent:", "\n", "Visual Basic 6:", "\n", "\n", "\n", "Sub", " ", "Timer1_Timer", "()", "\n ", "'Reduces Form Height by one pixel per tick", "\n ", "Me", ".", "Height", " ", "=", " ", "Me", ".", "Height", " ", "-", " ", "1", "\n", "End", " ", "Sub", "\n", "\n", "VB.NET:", "\n", "\n", "\n", "Sub", " ", "Timer1_Tick", "(", "sender", " ", "As", " ", "Object", ",", " ", "e", " ", "As", " ", "EventArgs", ")", " ", "Handles", " ", "Timer1", ".", "Tick", "\n ", "Me", ".", "Height", " ", "-=", " ", "1", "\n", "End", " ", "Sub", "\n", "\n", "Comparison with C#", "[", "edit", "]", "\n", "Main article: ", "Comparison of C Sharp and Visual Basic .NET", "\n", "C# and Visual Basic .NET are Microsoft's first languages made to program on the .NET Framework (later adding ", "F#", " and more and others have also added languages). Though C# and VB.NET are syntactically different, that is where the differences mostly end. Microsoft developed both of these languages to be part of the same .NET Framework development platform. They are both developed, managed, and supported by the same language development team at Microsoft.", "[8]", " They compile to the same intermediate language (IL), which runs against the same .NET Framework runtime libraries.", "[9]", " Although there are some differences in the programming constructs, their differences are primarily syntactic and, assuming one avoids the Visual Basic \"Compatibility\" libraries provided by Microsoft to aid conversion from Visual Basic 6, almost every command in VB has an equivalent command in C# and vice versa. Lastly, both languages reference the same Base Classes of the .NET Framework to extend their functionality. As a result, with few exceptions, a program written in either language can be run through a simple syntax converter to translate to the other. There are many open source and commercially available products for this task.", "\n", "Examples", "[", "edit", "]", "\n", "Hello World!", "[", "edit", "]", "\n", "Windows Form Application", "[", "edit", "]", "\n", "\n", "\n", "Public", " ", "Class", " ", "Form1", "\n\n ", "Private", " ", "Sub", " ", "Button1_Click", "(", "sender", " ", "As", " ", "Object", ",", " ", "e", " ", "As", " ", "EventArgs", ")", " ", "Handles", " ", "Button1", ".", "Click", "\n ", "MsgBox", "(", "\"Hello world\"", ",", " ", "MsgBoxStyle", ".", "Information", ",", " ", "\"Hello world!\"", ")", " ", "' Show a message that says \"Hello world!\".", "\n ", "End", " ", "Sub", "\n", "End", " ", "Class", "\n", "\n", "\n", "\n", "\n", "\nHello world! window", "\n", "\n", "\n", "Console Application", "[", "edit", "]", "\n", "\n", "\n", "Module", " ", "Module1", "\n\n ", "Sub", " ", "Main", "()", "\n ", "Console", ".", "WriteLine", "(", "\"Hello world!\"", ")", " ", "' Write in the console \"Hello world!\" and start a new line.", "\n ", "Console", ".", "ReadKey", "()", " ", "' The user must press any key before the application ends.", "\n ", "End", " ", "Sub", "\n", "End", " ", "Module", "\n", "\n", "Speaking", "[", "edit", "]", "\n", "Windows Form Application", "[", "edit", "]", "\n", "\n", "\n", "Public", " ", "Class", " ", "Form1", "\n \n ", "Private", " ", "Sub", " ", "Button1_Click", "(", "sender", " ", "As", " ", "Object", ",", " ", "e", " ", "As", " ", "EventArgs", ")", " ", "Handles", " ", "Button1", ".", "Click", "\n ", "CreateObject", "(", "\"Sapi.Spvoice\"", ").", "Speak", "(", "TextBox1", ".", "Text", ")", "\n ", "End", " ", "Sub", "\n", "End", " ", "Class", "\n", "\n", "Console Application", "[", "edit", "]", "\n", "\n", "\n", "Module", " ", "Module1", "\n ", "Private", " ", "Voice", " ", "=", " ", "CreateObject", "(", "\"Sapi.Spvoice\"", ")", "\n ", "Private", " ", "Text", " ", "As", " ", "String", "\n\n ", "Sub", " ", "Main", "()", "\n ", "Console", ".", "Write", "(", "\"Enter the text to speak: \"", ")", " ", "' Say \"Enter the text to speak: \"", "\n ", "Text", " ", "=", " ", "Console", ".", "ReadLine", "()", " ", "' The user must enter the text to speak.", "\n ", "Voice", ".", "Speak", "(", "Text", ")", " ", "' Speak the text the user has entered.", "\n ", "End", " ", "Sub", "\n", "End", " ", "Module", "\n", "\n", "Version history", "[", "edit", "]", "\n", "Succeeding ", "the classic Visual Basic", " version 6.0, the first version of Visual Basic .NET debuted in 2002. As of 2017", "[update]", ", eight versions of Visual Basic .NET are released.", "\n", "2002 (VB 7.0)", "[", "edit", "]", "\n", "The first version, Visual Basic .NET, relies on ", ".NET Framework 1.0", ". The most important feature is ", "managed code", ", which contrasts with the classic Visual Basic.", "\n", "2003 (VB 7.1)", "[", "edit", "]", "\n", "Visual Basic .NET 2003 was released with ", ".NET Framework 1.1", ". New features included support for the ", ".NET Compact Framework", " and a better VB upgrade ", "wizard", ". Improvements were also made to the performance and reliability of .NET IDE (particularly the ", "background compiler", ") and runtime. In addition, Visual Basic .NET 2003 was available in the Visual Studio.NET Academic Edition, distributed to a certain number of scholars", "[", "weasel\u00a0words", "]", " from each country without cost.", "\n", "2005 (VB 8.0)", "[", "edit", "]", "\n", "After Visual Basic .NET 2003, Microsoft dropped \".NET\" from the name of the product, calling the next version Visual Basic 2005.", "\n", "For this release, Microsoft added many features intended to reinforce Visual Basic .NET's focus as a ", "rapid application development", " platform and further differentiate it from ", "C#", "., including:", "\n", "\n", "Edit and Continue", " feature", "[", "further explanation needed", "]", "\n", "Design-time expression evaluation", "[", "further explanation needed", "]", "\n", "A pseudo-", "namespace", " called \"My\", which provides:", "[10]", "[11]", "\n", "\n", "Easy access to certain areas of the .NET Framework that otherwise require significant code to access like using", "\n", "\n", "\n", "\n", "\n", "\n", "My", ".", "Form2", ".", "Text", " ", "=", " ", "\" MainForm \"", "\n", "\n", "rather than", "\n", "\n", "\n", "System", ".", "WindowsApplication1", ".", "Forms", ".", "Form2", ".", "text", " ", "=", " ", "\" MainForm \"", "\n", "\n", "\n", "\n", "\n", "Dynamically generated classes (e.g. ", "My.Forms", ")", "\n", "\n", "\n", "Improved VB-to-VB.NET converter", "[12]", "\n", "A \"using\" keyword, simplifying the use of objects that require the Dispose ", "pattern", " to free resources", "\n", "Just My Code", " feature, which hides (steps over) ", "boilerplate code", " written by the Visual Studio .NET IDE and system library code during debugging", "\n", "Data Source binding, easing ", "database", " client/server development", "\n", "\n", "To bridge the gaps between itself and other .NET languages, this version added:", "\n", "\n", "Generics", "[13]", "\n", "Partial classes", ", a method of defining some parts of a class in one file and then adding more definitions later; particularly useful for integrating user code with auto-generated code", "\n", "Operator overloading", " and ", "nullable types", "[14]", "\n", "Support for ", "unsigned integer", " data types commonly used in other languages", "\n", "\n", "Visual Basic 2005 introduced the ", "IsNot", " operator that makes ", "'If X IsNot Y'", " equivalent to ", "'If Not X Is Y'", ". It gained notoriety", "[15]", " when it was found to be the subject of a Microsoft patent application.", "[16]", "[17]", "\n", "2008 (VB 9.0)", "[", "edit", "]", "\n", "Visual Basic 9.0 was released along with ", ".NET Framework 3.5", " on 19 November 2007.", "\n", "For this release, Microsoft added many features, including:", "\n", "\n", "A true ", "conditional operator", ", \"If(condition as boolean, truepart, falsepart)\", to replace the \"IIf\" function.", "\n", "Anonymous types", "\n", "Support for ", "LINQ", "\n", "Lambda expressions", "\n", "XML Literals", "\n", "Type Inference", "\n", "Extension methods", "\n", "\n", "2010 (VB 10.0)", "[", "edit", "]", "\n", "In April 2010, Microsoft released Visual Basic 2010. Microsoft had planned to use ", "Dynamic Language Runtime", " (DLR) for that release", "[18]", " but shifted to a co-evolution strategy between Visual Basic and sister language C# to bring both languages into closer parity with one another. Visual Basic's innate ability to interact dynamically with CLR and COM objects has been enhanced to work with dynamic languages built on the DLR such as ", "IronPython", " and ", "IronRuby", ".", "[19]", " The Visual Basic compiler was improved to infer line continuation in a set of common contexts, in many cases removing the need for the \"_\" line continuation character. Also, existing support of inline Functions was complemented with support for inline Subs as well as multi-line versions of both Sub and Function lambdas.", "[20]", "\n", "2012 (VB 11.0)", "[", "edit", "]", "\n", "Visual Basic 2012 was released along ", ".NET Framework 4.5", ". Major features introduced in this version include:", "[", "further explanation needed", "]", "\n", "\n", "Asynchronous programming", " with \"async\" and \"await\" statements", "\n", "Iterators", "\n", "Call hierarchy", "\n", "Caller information", "\n", "\"Global\" keyword in \"namespace\" statements", "\n", "\n", "2015 (VB 14.0)", "[", "edit", "]", "\n", "Visual Basic 2015 (code named VB \"14.0\") has been released with Visual Studio 2015. Language features include a new \"?.\" operator to perform inline null checks, and a new string interpolation feature is included to format strings inline.", "[21]", "\n", "2017 (VB 15.0)", "[", "edit", "]", "\n", "Visual Basic 2017 (code named VB \"15.0\") has been released with Visual Studio 2017. Extends support for new Visual Basic 15 language features, and introduces new refactorings that allow you to organize source code with one action.", "[22]", "\n", "Cross-platform and open-source development", "[", "edit", "]", "\n", "The creation of open-source tools for VB.NET development has been slow compared to ", "C#", ", although the ", "Mono", " development platform provides an implementation of VB.NET-specific libraries and a VB.NET 8.0 compatible ", "compiler", " written in VB.NET,", "[23]", " as well as standard framework libraries such as ", "Windows Forms", " GUI library.", "\n", "SharpDevelop", " and ", "MonoDevelop", " are ", "open-source", " alternative ", "IDEs", ".", "\n", "See also", "[", "edit", "]", "\n", "\n", "Microsoft Visual Studio Express", "\n", "List of .NET libraries and frameworks", "\n", "Comparison of C# and Visual Basic .NET", "\n", "Visual Basic for Applications", "\n", "Microsoft Small Basic", "\n", "Comparison of programming languages", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "\"Option Explicit and Option Strict in Visual Basic .NET and in Visual Basic\"", ". ", "Support", ". ", "Microsoft", ". 19 March 2008", ". Retrieved ", "22 August", " 2013", ".", "\u00a0", "\n", "^", " ", "\"New Features in Visual Basic 10\"", ".", "\u00a0", "\n", "^", " ", "\"Module Statement\"", ". MSDN \u2013 Developer Center", ". Retrieved ", "20 January", " 2010", ".", "\u00a0", "\n", "^", " ", "\"Main Procedure in Visual Basic\"", ". MSDN \u2013 Developer Center", ". Retrieved ", "20 January", " 2010", ".", "\u00a0", "\n", "^", " ", "\"Visual Basic Version of Hello, World\"", ". MSDN \u2013 Developer Center", ". Retrieved ", "20 January", " 2010", ".", "\u00a0", "\n", "^", " ", "\"Microsoft Visual Basic 6.0 Migration Resource Center\"", ". ", "MSDN", ". ", "Microsoft", ". Retrieved ", "9 November", " 2014", ".", "\u00a0", "\n", "^", " ", "https://msdn.microsoft.com/en-us/library/aa903378(v=vs.71).aspx", "\n", "^", " ", "Krill, Paul (2009-02-27). ", "\"Microsoft converging programming languages | Developer World\"", ". InfoWorld", ". Retrieved ", "2013-08-18", ".", "\u00a0", "\n", "^", " ", "\"Microsoft Intermediate Language\"", ". Dotnet-guide.com", ". Retrieved ", "2013-08-18", ".", "\u00a0", "\n", "^", " ", "Mackenzie, Duncan (2006). ", "\"Navigate The .NET Framework And Your Projects With The My Namespace\"", ". ", "MSDN Magazine Visual Studio 2005 Guided Tour 2006", ". ", "Microsoft", ".", "\u00a0", "\n", "^", " ", "Whitney, Tyler (November 2005). ", "\"My.Internals: Examining the Visual Basic My Feature\"", ". ", "MSDN", ". ", "Microsoft", ".", "\u00a0", "\n", "^", " ", "What's New with the Visual Basic Upgrade Wizard in Visual Basic 2005", "\n", "^", " ", "Defining and Using Generics in Visual Basic 2005", "\n", "^", " ", "Operator Overloading in Visual Basic 2005", "\n", "^", " ", "Sherriff, Lucy (22 February 2005). ", "\"Real Software slams MS IsNot patent application\"", ". The Register", ". Retrieved ", "6 April", " 2009", ".", "\u00a0", "\n", "^", " ", "Taft, Darryl K. (21 February 2005). ", "\"Real Software Slams Microsofts Patent Effort\"", ". eWeek", ". Retrieved ", "6 April", " 2009", ".", "\u00a0", "\n", "^", " ", "Vick, Paul A. Jr.; Barsan, Costica Corneliu; Silver, Amanda K. (14 May 2003). ", "\"United States Patent Application: 20040230959\"", ". ", "Patent Application Full Text and Image Database", ". US Patent & Trademark Office", ". Retrieved ", "6 April", " 2009", ".", "\u00a0", "\n", "^", " ", "\"What the heck is \"VBx\"?\"", ". 1 May 2007", ". Retrieved ", "12 August", " 2009", ". ", "With the new DLR, we have support for IronPython, IronRuby, Javascript, and the new dynamic VBx compile", "\u00a0", "\n", "^", " ", "\"What is New in Visual Basic 2010\"", ". ", "Microsoft", ". 2009", ". Retrieved ", "12 August", " 2009", ". ", "Visual Basic binds to objects from dynamic languages such as IronPython and IronRuby", "\u00a0", "\n", "^", " ", "\"What's New in Visual Basic 2010\"", ". Microsoft. 2010", ". Retrieved ", "1 August", " 2010", ".", "\u00a0", "\n", "^", " ", "http://blogs.msdn.com/b/vbteam/archive/2014/12/09/new-language-features-in-visual-basic-14.aspx", "\n", "^", " ", "https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes", "\n", "^", " ", "Mono Project: VisualBasic.NET support", "\n", "\n", "\n", "Further reading", "[", "edit", "]", "\n", "\n", "\n", "\"Visual Basic Language Specification 8.0\"", ". Microsoft Corporation. 15 November 2005", ". Retrieved ", "10 December", " 2010", ".", "\u00a0", "\n", "\"Visual Basic Language Specification 9.0\"", ". Microsoft Corporation. 19 December 2007", ". Retrieved ", "28 September", " 2011", ".", "\u00a0", "\n", "\"Visual Basic Language Specification 11.0\"", ". Microsoft Corporation. 7 June 2013", ". Retrieved ", "22 September", " 2013", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikibooks has a book on the topic of: ", "Visual Basic .NET", "\n", "\n", "\n", "\n", "\n", "\n", "Wikiversity has learning resources about ", "VB.NET", "\n", "\n", "\n", "\n", "Official website", "\n", "The Visual Basic Team Blog", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Dialects of the ", "BASIC", " programming language (", "list", ")", "\n", "\n", "\n", "\n", "Classic", "\n", "\n", "\n", "\n", "Altair BASIC", "\n", "Applesoft BASIC", "\n", "Atari BASIC", "\n", "Atari Microsoft BASIC", "\n", "Atari ST BASIC", "\n", "BASICA", "\n", "BASIC A+", "\n", "BASIC Programming", "\n", "BASIC XE", "\n", "BASIC XL", "\n", "Casio BASIC", "\n", "Chipmunk Basic", "\n", "Color BASIC", "\n", "Commodore BASIC", "\n", "Extended Color BASIC", "\n", "Dartmouth BASIC", "\n", "Disk Extended Color BASIC", "\n", "Family BASIC", "\n", "GFA BASIC", "\n", "GW-BASIC", "\n", "HP BASIC for OpenVMS", "\n", "HP Time-Shared BASIC", "\n", "IBM BASIC", "\n", "Integer BASIC", "\n", "Locomotive BASIC", "\n", "Mallard BASIC", "\n", "Microsoft BASIC", "\n", "MSX BASIC", "\n", "Pure Basic", "\n", "Rocky Mountain BASIC", "\n", "S'-BASIC", " (Tandy, Casio, Sharp Pocket Computers)", "\n", "ScriptBasic", "\n", "Sinclair BASIC", "\n", "Southampton BASIC System", "\n", "STOS BASIC", "\n", "TI BASIC (TI 99/4A)", "\n", "TI-BASIC (calculators)", "\n", "TI Extended BASIC", " (aka XBasic)", "\n", "Tiny BASIC", "\n", "Turbo-Basic XL", "\n", "Tymshare SUPER BASIC", "\n", "UBASIC", "\n", "Vilnius BASIC", "\n", "XBasic", "\n", "\n", "\n", "\n", "\n", "\n", "Procedure-oriented", "\n", "\n", "\n", "\n", "AmigaBASIC", "\n", "AMOS BASIC", "\n", "ASIC", "\n", "BBC BASIC", "\n", "Beta BASIC", "\n", "DarkBASIC", "\n", "FreeBASIC", "\n", "FutureBASIC", "\n", "GFA BASIC", "\n", "GLBasic", "\n", "Liberty BASIC", "\n", "Microsoft Small Basic", "\n", "PowerBASIC", "\n", "PureBasic", "\n", "QBasic", "\n", "QB64", "\n", "QuickBASIC", "\n", "SmallBASIC", "\n", "SuperBASIC", "\n", "ThinBasic", "\n", "True BASIC", "\n", "Turbo Basic", "\n", "XBasic", "\n", "Xblite", "\n", "Basic4ppc", "\n", "Visual Test", "\n", "B4J", "\n", "\n", "\n", "\n", "\n", "\n", "With object extensions", "\n", "\n", "\n", "\n", "AutoIt", "\n", "Basic For Qt", " (KBasic)", "\n", "BlitzMax", "\n", "Chipmunk Basic", "\n", "FreeBASIC", "\n", "Gambas", "\n", "GLBasic", "\n", "Monkey X", "\n", "OpenOffice Basic", "\n", "PowerBASIC", "\n", "ProvideX", "\n", "RapidQ", "\n", "REALbasic", "\n", "Run BASIC", "\n", "Visual Basic", "\n", "Visual Basic .NET", "\n", "Xojo", "\n", "\n", "\n", "\n", "\n", "\n", "For mobile devices", "\n", "\n", "\n", "\n", "B4X", "\n", "Basic4android", " ", "(B4A)", "\n", "Basic4ppc", "\n", "GLBasic", "\n", "NS Basic", "\n", "Basic4ios", " ", "(B4i)", "\n", "\n", "\n", "\n", "\n", "\n", "Microsoft", "\n", "\n", "\n", "\n", "Microsoft BASIC", "\n", "\n", "MBASIC", "\n", "IBM BASIC", "/BASICA", "\n", "GW-BASIC", "\n", "QuickBASIC", "\n", "QBasic", "\n", "\n", "\n", "VBScript", "\n", "Visual Basic", "\n", "VBA", "\n", "Visual Basic .NET", "\n", "Embedded Visual Basic", "\n", "VB 5 for ", "Microsoft Excel", " 5.0\n", "\n", "VSTO", "\n", "VSTA", "\n", "\n", "\n", "WordBASIC", "\n", "TRS-80 Basics (Level I, Level II, Level III)", "\n", "Microsoft Small Basic", "\n", "\n", "\n", "\n", "\n", "\n", "Third-party VB-like", "\n", "\n", "\n", "\n", "B4X", "\n", "Basic For Qt", "\n", "Gambas", "\n", "Hummingbird Basic", "\n", "LotusScript", "\n", "WinWrapBasic", "\n", "Xojo", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", ".NET Framework", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Version history", "\n", ".NET strategy", "\n", "\n", "\n", "\n", "\n", "\n", "Architecture", "\n", "\n", "\n", "\n", "Common Language Runtime", " (CLR)", "\n", "COM Interop", "\n", "Framework Class Library", " (FCL)", "\n", "\n", "\n", "\n", "\n", "\n", "Components", "\n", "\n", "\n", "\n", "ADO.NET", "\n", "\n", "Entity Framework", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "AJAX", "\n", "Core", "\n", "Dynamic Data", "\n", "MVC", "\n", "Razor", "\n", "\n", "\n", "ClickOnce", "\n", "Dynamic Language Runtime", "\n", "Extensible Application Markup Language", " (XAML)", "\n", "Language Integrated Query", " (LINQ)", "\n", "Managed Extensibility Framework", "\n", "Microsoft Silverlight", "\n", "Microsoft XNA", "\n", "Parallel Extensions", "\n", "Windows Communication Foundation", " (WCF)\n", "\n", "WCF Data Services", "\n", "\n", "\n", "Windows Forms", " (WinForms)", "\n", "Windows Identity Foundation", " (WIF)", "\n", "Windows Presentation Foundation", " (WPF)", "\n", "Windows Workflow Foundation", " (WF)", "\n", ".NET Remoting", "\n", "\n", "\n", "\n", "\n", "\n", "Tools", "\n", "\n", "\n", "\n", "\n", "Decompilers", "\n", "\n", "\n", "\n", ".NET Reflector", "\n", "dotPeek", "\n", "\n", "\n", "\n", "\n", "\n", "Obfuscators", "\n", "\n", "\n", "\n", "Dotfuscator", "\n", "SmartAssembly", "\n", "CodeArmor", "\n", "Xenocode", "\n", "\n", "\n", "\n", "\n", "\n", "Misc", "\n", "\n", "\n", "\n", "CLR Profiler", "\n", "ILAsm", "\n", ".NET Compiler Platform", "\n", "Native Image Generator", " (NGen)", "\n", "XAMLPad", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "IDEs", "\n", "\n", "\n", "\n", "Visual Studio", "\n", "\n", "Blend", "\n", "Express", "\n", "\n", "\n", "MonoDevelop", "\n", "SharpDevelop", "\n", "Xamarin Studio", "\n", "\n", "\n", "\n", "\n", "\n", "Organizations", "\n", "\n", "\n", "\n", ".NET Foundation", "\n", "Microsoft", "\n", "Xamarin", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "Category", "\n", " ", "List", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Common Language Infrastructure", "\n", "\n", "\n", "\n", "Architecture", "\n", "\n", "\n", "\n", "Application domain", "\n", "Code Access Security", "\n", "Common Intermediate Language", " (CIL)\n", "\n", "CIL instructions", "\n", "\n", "\n", "Common Type System", " (CTS)", "\n", "Platform Invocation Services", " (P/Invoke)", "\n", "Virtual Execution System", " (VES)", "\n", "\n", "\n", "\n", "\n", "\n", "Components", "\n", "\n", "\n", "\n", "Assembly", "\n", "Delegate", "\n", "Global Assembly Cache", " (GAC)", "\n", "Manifest", "\n", "Metadata", "\n", "\n", "\n", "\n", "\n", "\n", "Standard", "\nLibraries", "\n", "\n", "\n", "\n", "\n", "Kernel Profile", "\n", "\n", "\n", "\n", "Base Class Library", " (BCL)", "\n", "Runtime Infrastructure Library", "\n", "\n", "\n", "\n", "\n", "\n", "Compact Profile", "\n", "\n", "\n", "\n", "Network Library", "\n", "Reflection Library", "\n", "XML Library", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Extended Array Library", "\n", "Extended Numerics Library", "\n", "Parallel Library", "\n", "Vararg Library", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Implementations", "\n", "\n", "\n", "\n", "\n", "Microsoft", "\n", "\n", "\n", "\n", ".NET Framework", "\n", ".NET Compact Framework", "\n", ".NET Micro Framework", "\n", "Shared Source Common Language Infrastructure", "\n", "\n", "\n", "\n", "\n", "\n", "Other", "\n", "\n", "\n", "\n", ".NET Core", "\n", "Mono", "\n", "Portable.NET", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Languages", "\n", "\n", "\n", "\n", "\n", "Microsoft", "\n", "\n", "\n", "\n", "C#", "\n", "Visual Basic .NET", "\n", "C++/CLI", "\n", "\n", "Managed", "\n", "\n", "\n", "F#", "\n", "Q#", "\n", "J#", "\n", "JScript .NET", "\n", "PowerShell", "\n", "\n", "\n", "\n", "\n", "\n", "Other", "\n", "\n", "\n", "\n", "Axum", "\n", "A#", "\n", "Boo", "\n", "Cobra", "\n", "IronScheme", "\n", "\n", "IronLisp", "\n", "\n", "\n", "IronPython", "\n", "IronRuby", "\n", "Nemerle", "\n", "Oxygene", "\n", "Phalanger", "\n", "P#", "\n", "Scala", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "\n", "\n", "\n", "C# and Java", "\n", "C# and Visual Basic .NET", "\n", "Java and .NET platforms", "\n", "Visual Basic and Visual Basic .NET", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Organizations", "\n", "\n", "\n", "\n", ".NET Foundation", "\n", "DotGNU", "\n", "Microsoft", "\n", "Xamarin", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Microsoft development tools", "\n", "\n", "\n", "\n", "Development", "\nenvironments", "\n", "\n", "\n", "\n", "\n", "Visual Studio", "\n", "\n", "\n", "\n", "Code", "\n", "Express", "\n", "Lab Management", "\n", "Team System Profiler", "\n", "Test Professional", "\n", "Tools for Applications", "\n", "Tools for Office", "\n", "\n", "\n", "\n", "\n", "\n", "Others", "\n", "\n", "\n", "\n", ".NET Compiler Platform", "\n", "App Studio", "\n", "Blend", "\n", "Expression Web", "\n", "GW-BASIC", "\n", "Microsoft Pascal", "\n", "MSBuild", "\n", "Robotics Developer Studio", "\n", "SharePoint Designer", "\n", "\n", "FrontPage", "\n", "\n", "\n", "PowerShell ISE", "\n", "QuickBASIC", "\n", "\n", "QBasic", "\n", "\n", "\n", "QuickC", "\n", "Small Basic", "\n", "WebMatrix", "\n", "Windows SDK", "\n", "\n", "CLR Profiler", "\n", "ILAsm", "\n", "Native Image Generator", "\n", "XAMLPad", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Languages", "\n", "\n", "\n", "\n", "Microsoft Basic", "\n", "Visual Basic", "\n", "Visual Basic .NET", "\n", "Visual C++", "\n", "\n", "C++/CX", "\n", "C++/CLI", "\n", "Managed C++", "\n", "\n", "\n", "C#", "\n", "F#", "\n", "J#", "\n", "Visual FoxPro", "\n", "IronPython", "\n", "IronRuby", "\n", "JScript", "\n", "PowerShell", "\n", "TypeScript", "\n", "VBScript", "\n", "XAML", "\n", "\n", "\n", "\n", "\n", "\n", "Major ", "APIs", " and", "\nframeworks", "\n(", "See all", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Windows API", "\n", "Silverlight", "\n", "XNA", "\n", "DirectX", "\n", "\n", "Managed DirectX", "\n", "\n", "\n", "Xbox Development Kit", "\n", "Windows Installer", "\n", "\n", "\n", "\n", "\n", "\n", ".NET Framework", "\n", "\n", "\n", "\n", "ASP.NET", "\n", "\n", "ASP.NET Core", "\n", "ASP.NET AJAX", "\n", "ASP.NET Dynamic Data", "\n", "ASP.NET MVC", "\n", "ASP.NET Razor", "\n", "\n", "\n", "ADO.NET", "\n", "\n", "Entity Framework", "\n", "\n", "\n", "CardSpace", "\n", "Communication Foundation", "\n", "Identity Foundation", "\n", "LINQ", "\n", "Presentation Foundation", "\n", "Workflow Foundation", "\n", "\n", "\n", "\n", "\n", "\n", "Device drivers", "\n", "\n", "\n", "\n", "WDK", "\n", "WDF", "\n", "\n", "KMDF", "\n", "UMDF", "\n", "\n", "\n", "Windows Hardware Certification Kit", "\n", "WDM", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Database", "\n", "\n", "\n", "\n", "\n", "SQL Server", "\n", "\n", "\n", "\n", "Express", "\n", "Compact", "\n", "Management Studio", "\n", "Business Intelligence Development Studio", "\n", "MSDE", "\n", "\n", "\n", "\n", "\n", "\n", "SQL services", "\n", "\n", "\n", "\n", "Analysis", "\n", "Reporting", "\n", "Integration", "\n", "Notification", "\n", "\n", "\n", "\n", "\n", "\n", "Other", "\n", "\n", "\n", "\n", "Visual FoxPro", "\n", "Microsoft Access", "\n", "Jet Engine", "\n", "Extensible Storage Engine", "\n", "Azure DocumentDB", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Source control", "\n", "\n", "\n", "\n", "Team Foundation Server", "\n", "Visual SourceSafe", "\n", "\n", "\n", "\n", "\n", "\n", "Delivery", "\n", "\n", "\n", "\n", "Active Setup", "\n", "ClickOnce", "\n", "NuGet", "\n", "Web Platform", "\n", "Windows Installer", "\n", "\n", "WiX", "\n", "\n", "\n", "Windows Store", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 13 January 2018, at 10:28."}, +{"title": "Just-in-time compilation", "text": ["\"Dynamic translation\" redirects here. For the translation of natural languages, see ", "Dynamic and formal equivalence", ".", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "has an unclear citation style", ". ", "The references used may be made clearer with a different or consistent style of ", "citation", ", ", "footnoting", ", or ", "external linking", ".", " ", "(December 2013)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "\n", "Program execution", "\n", "\n", "\n", "General concepts", "\n", "\n", "\n", "\n", "\n", "Code", "\n", "Translation", "\n", "\n", "Compiler", "\n", "Optimizing compiler", "\n", "\n", "\n", "Intermediate representation", " (IR)", "\n", "Execution", "\n", "\n", "Runtime system", "\n", "Executable", "\n", "Interpreter", "\n", "Virtual machine", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Types of code", "\n", "\n", "\n", "\n", "\n", "Source code", "\n", "Object code", "\n", "Bytecode", "\n", "Machine code", "\n", "Microcode", "\n", "\n", "\n", "\n", "\n", "Compilation strategies", "\n", "\n", "\n", "\n", "\n", "Just-in-time", " (JIT)\n", "\n", "Tracing just-in-time", "\n", "\n", "\n", "Ahead-of-time", " (AOT)", "\n", "Transcompilation", "\n", "Recompilation", "\n", "\n", "\n", "\n", "\n", "Notable runtimes", "\n", "\n", "\n", "\n", "\n", "Android Runtime", " (ART)", "\n", "Common Language Runtime", " (CLR)", "\n", "crt0", "\n", "Java virtual machine", " (JVM)", "\n", "Node.js", "\n", "Zend Engine", "\n", "\n", "\n", "\n", "\n", "Notable compilers & toolchains", "\n", "\n", "\n", "\n", "\n", "GNU Compiler Collection", " (GCC)", "\n", "LLVM", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n", "In ", "computing", ", ", "just-in-time", " (", "JIT", ") ", "compilation", ", also known as ", "dynamic translation", ", is a way of executing ", "computer code", " that involves ", "compilation", " during execution of a program \u2013 at ", "run time", " \u2013 rather than prior to execution.", "[1]", " Most often this consists of ", "source code", " or more commonly ", "bytecode", " translation to ", "machine code", ", which is then executed directly. A system implementing a JIT compiler typically continuously analyses the code being executed and identifies parts of the code where the speedup gained from compilation or recompilation would outweigh the overhead of compiling that code.", "\n", "JIT compilation is a combination of the two traditional approaches to translation to machine code \u2013 ", "ahead-of-time compilation", " (AOT), and ", "interpretation", " \u2013 and combines some advantages and drawbacks of both.", "[1]", " Roughly, JIT compilation combines the speed of compiled code with the flexibility of interpretation, with the overhead of an interpreter and the additional overhead of compiling (not just interpreting). JIT compilation is a form of ", "dynamic compilation", ", and allows ", "adaptive optimization", " such as ", "dynamic recompilation", " \u2013 thus in theory JIT compilation can yield faster execution than static compilation. Interpretation and JIT compilation are particularly suited for ", "dynamic programming languages", ", as the runtime system can handle ", "late-bound", " data types and enforce security guarantees.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Applications", "\n", "2", " ", "Overview", "\n", "3", " ", "Startup delay and optimizations", "\n", "4", " ", "History", "\n", "5", " ", "Security", "\n", "6", " ", "See also", "\n", "7", " ", "References", "\n", "8", " ", "External links", "\n", "\n", "\n", "\n", "Applications", "[", "edit", "]", "\n", "JIT compilation can be applied to some programs, or can be used for certain capacities, particularly dynamic capacities such as ", "regular expressions", ". For example, a text editor may compile a regular expression provided at runtime to machine code to allow faster matching \u2013 this cannot be done ahead of time, as the pattern is only provided at runtime. Several modern ", "runtime environments", " rely on JIT compilation for high-speed code execution, including most implementations of ", "Java", ", together with ", "Microsoft", "'s ", ".NET Framework", ". Similarly, many regular expression libraries feature JIT compilation of regular expressions, either to bytecode or to machine code. JIT compilation is also used in some emulators, in order to translate machine code from one CPU architecture to another.", "\n", "A common implementation of JIT compilation is to first have AOT compilation to bytecode (", "virtual machine", " code), known as ", "bytecode compilation", ", and then have JIT compilation to machine code (dynamic compilation), rather than interpretation of the bytecode. This improves the runtime performance compared to interpretation, at the cost of lag due to compilation. JIT compilers translate continuously, as with interpreters, but caching of compiled code minimizes lag on future execution of the same code during a given run. Since only part of the program is compiled, there is significantly less lag than if the entire program were compiled prior to execution.", "\n", "Overview", "[", "edit", "]", "\n", "In a bytecode-compiled system, ", "source code", " is translated to an intermediate representation known as ", "bytecode", ". Bytecode is not the machine code for any particular computer, and may be portable among computer architectures. The bytecode may then be interpreted by, or run on a ", "virtual machine", ". The JIT compiler reads the bytecodes in many sections (or in full, rarely) and compiles them dynamically into machine code so the program can run faster. This can be done per-file, per-function or even on any arbitrary code fragment; the code can be compiled when it is about to be executed (hence the name \"just-in-time\"), and then cached and reused later without needing to be recompiled.", "\n", "In contrast, a traditional ", "interpreted virtual machine", " will simply interpret the bytecode, generally with much lower performance. Some ", "interpreter", "s even interpret source code, without the step of first compiling to bytecode, with even worse performance. ", "Statically compiled code", " or ", "native code", " is compiled prior to deployment. A ", "dynamic compilation environment", " is one in which the compiler can be used during execution. A common goal of using JIT techniques is to reach or surpass the performance of static compilation, while maintaining the advantages of bytecode interpretation: Much of the \"heavy lifting\" of parsing the original source code and performing basic optimization is often handled at compile time, prior to deployment: compilation from bytecode to machine code is much faster than compiling from source. The deployed bytecode is portable, unlike native code. Since the runtime has control over the compilation, like interpreted bytecode, it can run in a secure sandbox. Compilers from bytecode to machine code are easier to write, because the portable bytecode compiler has already done much of the work.", "\n", "JIT code generally offers far better performance than interpreters. In addition, it can in some cases offer better performance than static compilation, as many optimizations are only feasible at run-time:", "[2]", "[3]", "\n", "\n", "The compilation can be optimized to the targeted CPU and the operating system model where the application runs. For example, JIT can choose ", "SSE2", " vector CPU instructions when it detects that the CPU supports them. However, there is currently no mainstream JIT that implements this. To obtain this level of optimization specificity with a static compiler, one must either compile a binary for each intended platform/architecture, or else include multiple versions of portions of the code within a single binary.", "\n", "The system is able to collect statistics about how the program is actually running in the environment it is in, and it can rearrange and recompile for optimum performance. However, some static compilers can also take profile information as input.", "\n", "The system can do global code optimizations (e.g. ", "inlining", " of library functions) without losing the advantages of dynamic linking and without the overheads inherent to static compilers and linkers. Specifically, when doing global inline substitutions, a static compilation process may need run-time checks and ensure that a virtual call would occur if the actual class of the object overrides the inlined method, and boundary condition checks on array accesses may need to be processed within loops. With just-in-time compilation in many cases this processing can be moved out of loops, often giving large increases of speed.", "\n", "Although this is possible with statically compiled garbage collected languages, a bytecode system can more easily rearrange executed code for better cache utilization.", "\n", "\n", "Startup delay and optimizations", "[", "edit", "]", "\n", "JIT causes a slight delay to a noticeable delay in initial execution of an application, due to the time taken to load and compile the bytecode. Sometimes this delay is called \"startup time delay\". In general, the more optimization JIT performs, the better the code it will generate, but the initial delay will also increase. A JIT compiler therefore has to make a trade-off between the compilation time and the quality of the code it hopes to generate. However, it seems that much of the startup time is sometimes due to IO-bound operations rather than JIT compilation (for example, the ", "rt.jar", " class data file for the ", "Java Virtual Machine", " (JVM) is 40 MB and the JVM must seek a lot of data in this contextually huge file).", "[4]", "\n", "One possible optimization, used by Sun's ", "HotSpot", " Java Virtual Machine, is to combine interpretation and JIT compilation. The application code is initially interpreted, but the JVM monitors which sequences of ", "bytecode", " are frequently executed and translates them to machine code for direct execution on the hardware. For bytecode which is executed only a few times, this saves the compilation time and reduces the initial latency; for frequently executed bytecode, JIT compilation is used to run at high speed, after an initial phase of slow interpretation. Additionally, since a program spends most time executing a minority of its code, the reduced compilation time is significant. Finally, during the initial code interpretation, execution statistics can be collected before compilation, which helps to perform better optimization.", "[5]", "\n", "The correct tradeoff can vary due to circumstances. For example, Sun's Java Virtual Machine has two major modes\u2014client and server. In client mode, minimal compilation and optimization is performed, to reduce startup time. In server mode, extensive compilation and optimization is performed, to maximize performance once the application is running by sacrificing startup time. Other Java just-in-time compilers have used a runtime measurement of the number of times a method has executed combined with the bytecode size of a method as a heuristic to decide when to compile.", "[6]", " Still another uses the number of times executed combined with the detection of loops.", "[7]", " In general, it is much harder to accurately predict which methods to optimize in short-running applications than in long-running ones.", "[8]", "\n", "Native Image Generator", " (Ngen) by ", "Microsoft", " is another approach at reducing the initial delay.", "[9]", " Ngen pre-compiles (or \"pre-JITs\") bytecode in a ", "Common Intermediate Language", " image into machine native code. As a result, no runtime compilation is needed. ", ".NET framework", " 2.0 shipped with ", "Visual Studio 2005", " runs Ngen on all of the Microsoft library DLLs right after the installation. Pre-jitting provides a way to improve the startup time. However, the quality of code it generates might not be as good as the one that is JITed, for the same reasons why code compiled statically, without ", "profile-guided optimization", ", cannot be as good as JIT compiled code in the extreme case: the lack of profiling data to drive, for instance, inline caching.", "[10]", "\n", "There also exist Java implementations that combine an ", "AOT (ahead-of-time) compiler", " with either a JIT compiler (", "Excelsior JET", ") or interpreter (", "GNU Compiler for Java", ").", "\n", "History", "[", "edit", "]", "\n", "The earliest published JIT compiler is generally attributed to work on ", "LISP", " by ", "John McCarthy", " in 1960.", "[11]", " In his seminal paper ", "Recursive functions of symbolic expressions and their computation by machine, Part I", ", he mentions functions that are translated during runtime, thereby sparing the need to save the compiler output to ", "punch cards", "[12]", " (although this would be more accurately known as a \"", "Compile and go system", "\"). Another early example was by ", "Ken Thompson", ", who in 1968 gave one of the first applications of ", "regular expressions", ", here for ", "pattern matching", " in the text editor ", "QED", ".", "[13]", " For speed, Thompson implemented regular expression matching by JITing to ", "IBM 7094", " code on the ", "Compatible Time-Sharing System", ".", "[11]", " An influential technique for deriving compiled code from interpretation was pioneered by Mitchell in 1970, which he implemented for the experimental language ", "LC\u00b2", ".", "[14]", "[15]", "\n", "Smalltalk", " (c. 1983) pioneered new aspects of JIT compilations. For example, translation to machine code was done on demand, and the result was cached for later use. When memory became scarce, the system would delete some of this code and regenerate it when it was needed again.", "[1]", "[16]", " Sun's ", "Self", " language improved these techniques extensively and was at one point the fastest Smalltalk system in the world; achieving up to half the speed of optimized C", "[17]", " but with a fully object-oriented language.", "\n", "Self was abandoned by Sun, but the research went into the Java language. The term \"Just-in-time compilation\" was borrowed from the manufacturing term \"", "Just in time", "\" and popularized by Java, with James Gosling using the term from 1993.", "[18]", " Currently JITing is used by most implementations of the ", "Java Virtual Machine", ", as ", "HotSpot", " builds on, and extensively uses, this research base.", "\n", "The HP project Dynamo", "[19]", " was an experimental JIT compiler where the 'bytecode' format and the machine code format were the same; the system turned PA-6000 machine code into ", "PA-8000", " machine code. Counterintuitively, this resulted in speed ups, in some cases of 30% since doing this permitted optimizations at the machine code level, for example, inlining code for better cache usage and optimizations of calls to dynamic libraries and many other run-time optimizations which conventional compilers are not able to attempt.", "[20]", "[21]", "\n", "Security", "[", "edit", "]", "\n", "JIT compilation fundamentally uses executable data, and thus poses security challenges and possible exploits.", "\n", "Implementation of JIT compilation consists of compiling source code or byte code to machine code and executing it. This is generally done directly in memory \u2013 the JIT compiler outputs the machine code directly into memory and immediately executes it, rather than outputting it to disk and then invoking the code as a separate program, as in usual ahead of time compilation. In modern architectures this runs into a problem due to ", "executable space protection", " \u2013 arbitrary memory cannot be executed, as otherwise there is a potential security hole. Thus memory must be marked as executable; for security reasons this should be done ", "after", " the code has been written to memory, and marked read-only, as writable/executable memory is a security hole (see ", "W^X", ").", "[22]", " For instance Firefox's JIT compiler for Javascript introduced this protection in a release version with Firefox 46", "[23]", "\n", "JIT spraying", " is a class of ", "computer security exploits", " that use JIT compilation for ", "heap spraying", " \u2013 the resulting memory is then executable, which allows an exploit if execution can be moved into the heap.", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Java portal", "\n", "\n", "\n", "\n", "Binary translation", "\n", "HotSpot", "\n", "Common Language Runtime", "\n", "Crusoe", ", a microprocessor that essentially performs just-in-time compilation from x86 code to microcode within the microprocessor", "\n", "GNU lightning", " \u2014 A library that generates assembly language code at run-time", "\n", "LLVM", "\n", "Self-modifying code", "\n", "Tracing just-in-time compilation", "\n", "Dynamic compilation", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Aycock 2003", ".", "\n", "^", " ", "Croce, Louis. ", "\"Just in Time Compilation\"", " ", "(PDF)", ". ", "Columbia University", ".", "\u00a0", "\n", "^", " ", "\"What are the advantages of JIT vs. AOT compilation\"", ". ", "Stack Overflow", ". Jan 21, 2010.", "\u00a0", "\n", "^", " ", "Haase, Chet (May 2007). ", "\"Consumer JRE: Leaner, Meaner Java Technology\"", ". Sun Microsystems", ". Retrieved ", "2007-07-27", ". ", "At the OS level, all of these megabytes have to be read from disk, which is a very slow operation. Actually, it's the seek time of the disk that's the killer; reading large files sequentially is relatively fast, but seeking the bits that we actually need is not. So even though we only need a small fraction of the data in these large files for any particular application, the fact that we're seeking all over within the files means that there is plenty of disk activity.", " ", "\u00a0", "\n", "^", " ", "\"The Java HotSpot Performance Engine Architecture\"", ". Oracle.com", ". Retrieved ", "2013-07-05", ".", "\u00a0", "\n", "^", " ", "Schilling, Jonathan L. (February 2003). ", "\"The simplest heuristics may be the best in Java JIT compilers\"", " ", "(PDF)", ". ", "SIGPLAN Notices", ". ", "38", " (2): 36\u201346. ", "doi", ":", "10.1145/772970.772975", ". Archived from ", "the original", " ", "(PDF)", " on 2015-09-24.", "\u00a0", "\n", "^", " ", "Toshio Suganuma, Toshiaki Yasue, Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani, \"A dynamic optimization framework for a Java just-in-time compiler\", ", "Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications", " (OOPSLA '01), pp. 180\u2013195, October 14\u201318, 2001.", "\n", "^", " ", "Matthew Arnold, Michael Hind, Barbara G. Ryder, \"An Empirical Study of Selective Optimization\", ", "Proceedings of the 13th International Workshop on Languages and Compilers for Parallel Computing-Revised Papers", ", pp. 49\u201367, August 10\u201312, 2000.", "\n", "^", " ", "\"Native Image Generator (Ngen.exe)\"", ". Msdn2.microsoft.com", ". Retrieved ", "2013-07-05", ".", "\u00a0", "\n", "^", " ", "Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, and Peter F. Sweeney, \"", "A Survey of Adaptive Optimization in Virtual Machines", "\", ", "Proceedings of the IEEE", ", 92(2), February 2005, pp. 449\u2013466.", "\n", "^ ", "a", " ", "b", " ", "Aycock 2003", ", 2. JIT Compilation Techniques, 2.1 Genesis, p. 98.", "\n", "^", " ", "McCarthy, J.", " (April 1960). \"Recursive functions of symbolic expressions and their computation by machine, Part I\". ", "Communications of the ACM", ". ", "3", " (4): 184\u2013195. ", "CiteSeerX", "\u00a0", "10.1.1.111.8833", "\u202f", ". ", "doi", ":", "10.1145/367177.367199", ".", "\u00a0", "\n", "^", " ", "Thompson 1968", ".", "\n", "^", " ", "Aycock 2003", ", 2. JIT Compilation Techniques, 2.2 LC\u00b2, p. 98\u201399.", "\n", "^", " ", "Mitchell, J.G. (1970). \"The design and construction of flexible and efficient interactive programming systems\".", "\u00a0", "\n", "^", " ", "Deutsch, L.P.; Schiffman, A.M. (1984). ", "\"Efficient implementation of the Smalltalk-80 system\"", " ", "(PDF)", ". ", "POPL '84: Proceedings of the 11th ACM SIGACT-SIGPLAN ", "Symposium on Principles of Programming Languages", ": 297\u2013302. ", "doi", ":", "10.1145/800017.800542", ". ", "ISBN", "\u00a0", "0-89791-125-3", ". Archived from ", "the original", " ", "(PDF)", " on 2004-06-18.", "\u00a0", "\n", "^", " ", "[1]", " ", "Archived", " November 24, 2006, at the ", "Wayback Machine", ".", "\n", "^", " ", "Aycock, 2003 & 2.14 Java, p. 107, footnote 13", ".", "\n", "^", " ", "\"Dynamo: A Transparent Dynamic Optimization System\"", " Vasanth Bala, Evelyn Duesterwald, Sanjeev Banerjia - PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation - pages 1 to 12 - ", "doi", ":", "10.1145/349299.349303", ". Retrieved March 28, 2012", "\n", "^", " ", "John Jannotti. ", "\"HP's Dynamo - Page 1 - (3/2000)\"", ". Ars Technica", ". Retrieved ", "2013-07-05", ".", "\u00a0", "\n", "^", " ", "\"The HP Dynamo Project\"", ". Archived from the original on October 19, 2002", ". Retrieved ", "2016-04-12", ".", "\u00a0", "CS1 maint: Unfit url (", "link", ")", "\n", "^", " ", "\"", "How to JIT \u2013 an introduction", "\", Eli Bendersky, November 5th, 2013 at 5:59 am", "\n", "^", " ", "De Mooij, Jan. ", "\"W^X JIT-code enabled in Firefox\"", ". ", "Jan De Mooij", ". Retrieved ", "11 May", " 2016", ".", "\u00a0", "\n", "\n", "\n", "\n", "\n", "Aycock, J. (June 2003). \"A brief history of just-in-time\". ", "ACM Computing Surveys", ". ", "35", " (2): 97\u2013113. ", "CiteSeerX", "\u00a0", "10.1.1.97.3985", "\u202f", ". ", "doi", ":", "10.1145/857076.857077", ".", "\u00a0", "\n", "Thompson, K.", " (1968). \"Programming Techniques: Regular expression search algorithm\". ", "Communications of the ACM", ". ", "11", " (6): 419\u2013422. ", "doi", ":", "10.1145/363347.363387", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "What is Microsoft Just In Time Compiler", "\n", "Free Online Dictionary of Computing entry", "\n", "libJIT", " \u2014 A library by Rhys Weatherley, Klaus Treichel, Aleksey Demakov, and Kirill Kononenko for development of Just-In-Time compilers in Virtual Machine implementations, Dynamic programming languages and Scripting languages.", "\n", "MyJIT", ", a small, simple (300KB source, 360kB object file) for i386, AMD64, and SPARC.", "\n", "Mozilla Nanojit", " \u2014 A small, cross-platform C++ library that emits machine code. It is used as the JIT for the Mozilla ", "Tamarin", " and ", "SpiderMonkey", " Javascript engines.", "\n", "SoftWire", " \u2014 A library by Nicolas Capens that generates assembly language code at run-time (", "thesis", ")", "\n", "CCG", " by Ian Piumarta", "\n", "Dyninst", "\n", "JatoVM", ", a Java JIT-only VM", "\n", "OVPsim", ", an embedded core JIT tools that converts ARM, MIPS, and other ISA instructions to x86 for execution/simulation", "\n", "AsmJit", " \u2014 Complete x86/x64 jit assembler library for C++ language by Petr Kobal\u00ed\u010dek", "\n", "Xbyak", " \u2014 A x86/x64 JIT assembler for C++ language by Herumi", "\n", "sljit", " \u2014 A platform independent assembly language written in C by Zoltan Herczeg. Sljit can generate code for x86, AMD64, ARM, PowerPC, MIPS, and SPARC.", "\n", "Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 26 December 2017, at 07:46."}, +{"title": "Run time (program lifecycle phase)", "text": ["This article is about execution phase in a programming language. For the infrastructure required to run programs, see ", "Runtime system", ".", "\n", "\n", "\n", "Program execution", "\n", "\n", "\n", "General concepts", "\n", "\n", "\n", "\n", "\n", "Code", "\n", "Translation", "\n", "\n", "Compiler", "\n", "Optimizing compiler", "\n", "\n", "\n", "Intermediate representation", " (IR)", "\n", "Execution", "\n", "\n", "Runtime system", "\n", "Executable", "\n", "Interpreter", "\n", "Virtual machine", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Types of code", "\n", "\n", "\n", "\n", "\n", "Source code", "\n", "Object code", "\n", "Bytecode", "\n", "Machine code", "\n", "Microcode", "\n", "\n", "\n", "\n", "\n", "Compilation strategies", "\n", "\n", "\n", "\n", "\n", "Just-in-time", " (JIT)\n", "\n", "Tracing just-in-time", "\n", "\n", "\n", "Ahead-of-time", " (AOT)", "\n", "Transcompilation", "\n", "Recompilation", "\n", "\n", "\n", "\n", "\n", "Notable runtimes", "\n", "\n", "\n", "\n", "\n", "Android Runtime", " (ART)", "\n", "Common Language Runtime", " (CLR)", "\n", "crt0", "\n", "Java virtual machine", " (JVM)", "\n", "Node.js", "\n", "Zend Engine", "\n", "\n", "\n", "\n", "\n", "Notable compilers & toolchains", "\n", "\n", "\n", "\n", "\n", "GNU Compiler Collection", " (GCC)", "\n", "LLVM", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This article ", "does not ", "cite", " any ", "sources", ". ", "Please help ", "improve this article", " by ", "adding citations to reliable sources", ". Unsourced material may be challenged and ", "removed", ".", " ", "(May 2012)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "In ", "computer science", ", ", "run time", ", ", "runtime", " or ", "execution time", " is the time during which a program is running (", "executing", "), in contrast to other ", "program lifecycle phases", " such as ", "compile time", ", ", "link time", " and ", "load time", ".", "\n", "A run-time error is detected after or during the execution (running state) of a program, whereas a compile-time error is detected by the ", "compiler", " before the program is ever executed. ", "Type checking", ", ", "register allocation", ", ", "code generation", ", and code optimization are typically done at compile time, but may be done at run time depending on the particular language and compiler.", "\n", "Implementation details", "[", "edit", "]", "\n", "When a program is to be executed, a ", "loader", " first performs the necessary ", "memory", " setup and links the program with any ", "dynamically linked", " ", "libraries", " it needs, and then the execution begins starting from the program's ", "entry point", ". In some cases, a language or implementation will have these tasks done by the language runtime instead, though this is unusual in mainstream languages on common consumer operating systems.", "\n", "Some program debugging can only be performed (or is more efficient or accurate when performed) at runtime. ", "Logic errors", " and ", "array", " bounds checking are examples. For this reason, some programming ", "bugs", " are not discovered until the program is tested in a ", "production environment", " with real data, despite sophisticated compile-time checking and pre-release testing. In this case, the end user may encounter a ", "runtime error", " message.", "\n", "Application errors (exceptions)", "[", "edit", "]", "\n", "Exception handling", " is one language feature designed to handle runtime errors, providing a structured way to catch completely unexpected situations as well as predictable errors or unusual results without the amount of inline error checking required of languages without it. More recent advancements in runtime engines enable ", "automated exception handling", " which provides 'root-cause' debug information for every exception of interest and is implemented independent of the source code, by attaching a special software product to the runtime engine.", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "\n", "Look up ", "run time", ", ", "run-time", ", or ", "runtime", " in Wiktionary, the free dictionary.", "\n", "\n", "\n", "\n", "Name binding", "\n", "Compile time", " and ", "compiling", "\n", "Interpreter (computing)", "\n", "Runtime Type Information", "\n", "Run-time system", "\n", "Runtime library", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 28 April 2017, at 01:48."}, +{"title": "Code reuse", "text": ["Code reuse", ", also called ", "software reuse", ", is the use of existing ", "software", ", or software knowledge, to build new software,", "[1]", " following the ", "reusability principles", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Overview", "\n", "2", " ", "Types of reuse", "\n", "3", " ", "Systematic", "\n", "4", " ", "Examples", "\n", "\n", "4.1", " ", "Software libraries", "\n", "4.2", " ", "Design patterns", "\n", "4.3", " ", "Frameworks", "\n", "4.4", " ", "Higher-order function", "\n", "4.5", " ", "Retrocomputing", "\n", "4.6", " ", "Computer security", "\n", "4.7", " ", "Components", "\n", "4.8", " ", "Outside computers", "\n", "\n", "\n", "5", " ", "Criticism", "\n", "6", " ", "See also", "\n", "7", " ", "References", "\n", "8", " ", "External links", "\n", "\n", "\n", "\n", "Overview", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This section ", "needs additional citations for ", "verification", ". ", "Please help ", "improve this article", " by ", "adding citations to reliable sources", ". Unsourced material may be challenged and removed.", " ", "(April 2015)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "Ad hoc", " code reuse has been practiced from the earliest days of ", "programming", ". Programmers have always reused sections of code, templates, functions, and procedures. Software reuse as a recognized area of study in software engineering, however, dates only from 1968 when ", "Douglas McIlroy", " of ", "Bell Laboratories", " proposed basing the software industry on reusable components.", "\n", "Code reuse aims to save time and resources and reduce redundancy by taking advantage of assets that have already been created in some form within the software product development process.", "[2]", " The key idea in reuse is that parts of a ", "computer program", " written at one time can be or should be used in the construction of other programs written at a later time.", "\n", "Code reuse may imply the creation of a separately maintained version of the reusable assets. While code is the most common resource selected for reuse, other assets generated during the development cycle may offer opportunities for reuse: software components, test suites, designs, documentation, and so on.", "[3]", "\n", "The ", "software library", " is a good example of code reuse. Programmers may decide to create internal abstractions so that certain parts of their program can be reused, or may create custom libraries for their own use. Some characteristics that make software more easily reusable are ", "modularity", ", ", "loose coupling", ", high ", "cohesion", ", ", "information hiding", " and ", "separation of concerns", ".", "\n", "For newly written code to use a piece of existing code, some kind of interface, or means of communication, must be defined. These commonly include a \"call\" or use of a ", "subroutine", ", ", "object", ", ", "class", ", or ", "prototype", ". In organizations, such practices are formalized and standardized by ", "domain engineering", ", also known as ", "software product line", " engineering.", "\n", "The general practice of using a prior version of an extant program as a starting point for the next version, is also a form of code reuse.", "\n", "Some so-called code \"reuse\" involves simply copying some or all of the code from an existing program into a new one. While organizations can realize ", "time to market", " benefits for a new product with this approach, they can subsequently be saddled with many of the same ", "code duplication", " problems caused by ", "cut and paste programming", ".", "\n", "Many researchers have worked to make reuse faster, easier, more systematic, and an integral part of the normal process of programming. These are some of the main goals behind the invention of ", "object-oriented programming", ", which became one of the most common forms of formalized reuse. A somewhat later invention is ", "generic programming", ".", "\n", "Another, newer means is to use software \"", "generators", "\", programs which can create new programs of a certain type, based on a set of parameters that users choose. Fields of study about such systems are ", "generative programming", " and ", "metaprogramming", ".", "\n", "Types of reuse", "[", "edit", "]", "\n", "Concerning motivation and driving factors, reuse can be:", "\n", "\n", "Opportunistic \u2013 While getting ready to begin a project, the team realizes that there are existing components that they can reuse.", "\n", "Planned \u2013 A team strategically designs components so that they'll be reusable in future projects.", "\n", "\n", "Reuse can be categorized further:", "\n", "\n", "Internal reuse \u2013 A team reuses its own components. This may be a business decision, since the team may want to control a component critical to the project.", "\n", "External reuse \u2013 A team may choose to license a third-party component. Licensing a third-party component typically costs the team 1 to 20 percent of what it would cost to develop internally.", "[4]", " The team must also consider the time it takes to find, learn and integrate the component.", "\n", "\n", "Concerning form or structure of reuse, code can be:", "[5]", "\n", "\n", "Referenced \u2013 The client code contains a reference to reused code, and thus they have distinct life cycles and can have distinct versions.", "\n", "Forked \u2013 The client code contains a local or private copy of the reused code, and thus they share a single life cycle and a single version.", "\n", "\n", "Fork-reuse is often discouraged because it's a form of code duplication, which requires that every bug is corrected in each copy, and enhancements made to reused code need to be manually merged in every copy or they become out-of-date. However, fork-reuse can have benefits such as isolation, flexibility to change the reused code, easier packaging, deployment and version management.", "[5]", "\n", "Systematic", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "This section needs expansion", ". ", "You can help by ", "adding to it", ".", " ", "(April 2015)", "\n", "\n", "\n", "\n", "Systematic software reuse is a strategy for increasing productivity and improving quality of the software industry. Although it is simple in concept, successful software reuse implementation is difficult in practice. A reason put forward for this is the dependence of software reuse on the context in which it is implemented. Some problematic issues that needs to be addressed related to systematic software reuse are:", "[6]", "\n", "\n", "a clear and well-defined product vision is an essential foundation to an ", "SPL", ".", "\n", "an evolutionary implementation strategy would be a more pragmatic strategy for the company.", "\n", "there exist a need for continuous management support and leadership to ensure success.", "\n", "an appropriate organisational structure is needed to support SPL engineering.", "\n", "the change of mindset from a project-centric company to a product-oriented company is essential.", "\n", "\n", "Examples", "[", "edit", "]", "\n", "Software libraries", "[", "edit", "]", "\n", "A very common example of code reuse is the technique of using a ", "software library", ". Many common operations, such as converting information among different well-known formats, accessing external storage, interfacing with external programs, or manipulating information (numbers, words, names, locations, dates, etc.) in common ways, are needed by many different programs. Authors of new programs can use the code in a software library to perform these tasks, instead of \"re-inventing the wheel\", by writing fully new code directly in a program to perform an operation. Library implementations often have the benefit of being well-tested, and covering unusual or arcane cases. Disadvantages include the inability to tweak details which may affect performance or the desired output, and the time and cost of acquiring, learning, and configuring the library.", "[7]", "\n", "Design patterns", "[", "edit", "]", "\n", "Main article: ", "Design pattern (computer science)", "\n", "A design pattern is a general solution to a recurring problem. Design patterns are more conceptual than tangible and can be modified to fit the exact need. However, abstract classes and interfaces can be reused to implement certain patterns.", "\n", "Frameworks", "[", "edit", "]", "\n", "Main article: ", "Software framework", "\n", "Developers generally reuse large pieces of software via third-party applications and frameworks. Though frameworks are usually domain-specific and applicable only to families of applications", "[", "citation needed", "]", ".", "\n", "Higher-order function", "[", "edit", "]", "\n", "Main article: ", "Higher-order function", "\n", "In ", "functional programming", " higher-order functions can be used in many cases where design patterns or frameworks were formerly used.", "\n", "Retrocomputing", "[", "edit", "]", "\n", "Retrocomputing", " encompasses reuse of code, simply because retro programs are being run on older computers, or ", "emulators", " for them.", "\n", "Computer security", "[", "edit", "]", "\n", "In ", "computer security", " code-reuse is employed as a software exploit method.", "[8]", " When an attacker is not able to directly input code to modify the control flow of a program, for example in presence of code injection defenses such as ", "W\u2295X", ", he or she can redirect the control flow to code sequences existing in memory.", "\n", "Examples of code-reuse attacks are ", "return-to-libc attack", ", ", "return-oriented programming", ", and jump-oriented programming.", "[8]", "[9]", "\n", "Components", "[", "edit", "]", "\n", "Main article: ", "Software component", "\n", "A component, in an object-oriented extent, represents a set of collaborative classes (or only one class) and its interfaces. The interfaces are responsible for enabling the replacement of components. Reusable components can also be isolated and synchronized between SCM repositories using component source code management technologies (", "CSCM", ").", "\n", "Outside computers", "[", "edit", "]", "\n", "The whole concept of \"code reuse\" can also encompass engineering applications outside software. For instance, ", "parametric modeling", " in ", "computer-aided design", " allows for creating reusable designs. ", "Standardization", " results in creation of interoperable parts that can be then reused in many contexts.", "[", "citation needed", "]", "\n", "Criticism", "[", "edit", "]", "\n", "Code reuse results in ", "dependency", " on the component being reused. Rob Pike opined that \"A little copying is better than a little dependency\". When he joined Google, the company was putting heavy emphasis on code reuse. He believes that Google's ", "codebase", " still suffers from results of that former policy in terms of compilation speed and maintainability.", "[10]", "\n", "See also", "[", "edit", "]", "\n", "\n", "Don't repeat yourself", "\n", "ICSR", "\n", "Inheritance", "\n", "Language binding", "\n", "Not invented here", " (", "antonym", ")", "\n", "Polymorphism", "\n", "Procedural programming", "\n", "Reinventing the wheel", " (", "antonym", ")", "\n", "Reusability", "\n", "Reuse metrics", "\n", "Single source of truth", "\n", "Software framework", "\n", "Virtual inheritance", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "Frakes, W.B.; Kyo Kang (July 2005). ", "\"Software Reuse Research: Status and Future\"", " ", "(PDF)", ". ", "IEEE Transactions on Software Engineering", ". ", "31", " (7): 529\u2013536. ", "doi", ":", "10.1109/TSE.2005.85", ".", "\u00a0", "\n", "^", " ", "Lombard Hill Group. ", "\"What Is Software Reuse?\"", ". ", "lombardhill.com", ". Lombard Hill Group", ". Retrieved ", "22 October", " 2014", ".", "\u00a0", "\n", "^", " ", "Lombard Hill Group. ", "\"What Is Software Reuse?\"", ". Retrieved ", "22 October", " 2014", ".", "\u00a0", "\n", "^", " ", "McConnell, Steve (1996). ", "Rapid Development: Taming Wild Software Schedules", ". ", "ISBN", "\u00a0", "978-1-55615-900-8", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Colombo, F. (2011). ", "\"It's not just reuse\"", ". ", "SharedNow.blogspot", ".", "\u00a0", "\n", "^", " ", "Champman, M.; Van der Merwe, Alta (2008). ", "\"Contemplating Systematic Software Reuse in a Small Project-centric Company\"", ". ", "Proceeding SAICSIT '08 Proceedings of the 2008 annual research conference of the South African Institute of Computer Scientists and Information Technologists on IT research in developing countries: riding the wave of technology", ". ", "doi", ":", "10.1145/1456659.1456662", ". ", "ISBN", "\u00a0", "978-1-60558-286-3", ".", "\u00a0", "\n", "^", " ", "\"Code reuse\"", ". ", "DocForge", ". Archived from ", "the original", " on 2011-07-10", ". Retrieved ", "19 January", " 2018", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Bletsch, Tyler (2011). ", "\"Code-reuse Attacks: New Frontiers and Defenses\"", ". North Carolina State University. ", "ISBN", "\u00a0", "978-1-124-75297-6", ".", "\u00a0", "\n", "^", " ", "Bletsch, Tyler; Jiang, Xuxian; Freeh, Vince W; Liang, Zhenkai (2011). ", "\"Jump-oriented programming: a new class of code-reuse attack\"", " ", "(PDF)", ". ", "Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security", ". ACM. pp.\u00a030\u201340. ", "doi", ":", "10.1145/1966913.1966919", ". ", "ISBN", "\u00a0", "978-1-4503-0564-8", ".", "\u00a0", "\n", "^", " ", "The Go Programming Language (2015-12-01), ", "Go Proverbs \u2013 Rob Pike \u2013 Gopherfest \u2013 November 18, 2015", ", retrieved ", "26 February", " 2016", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "ReNews \u2013 an information site about software reuse and domain engineering", "\n", "Software Reuse Tips Article", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 7 December 2017, at 10:15."}, +{"title": "Zip (file format)", "text": ["For other uses, see ", "Zip", ".", "\n", "\n", "ZIP file format", "\n", "\n", "Filename extensions", "\n", ".zip", ", ", ".zipx", "\u00a0(newer compression algorithms)", "\n", "\n", "\n", "Internet media\u00a0type", "\n", "application/zip", "[1]", "\n", "\n", "\n", "Uniform Type Identifier\u00a0(UTI)", "\n", "com.pkware.zip-archive", "\n", "\n", "\n", "Magic number", "\n", "\n", "\n", "\n", "none", "\n", "PK\\x03\\x04", "\n", "PK\\x05\\x06", " (empty)", "\n", "PK\\x07\\x08", " (spanned)", "\n", "\n", "\n", "\n", "\n", "\n", "Developed\u00a0by", "\n", "Phil Katz", ", ", "PKWARE, Inc.", "\n", "\n", "\n", "Initial release", "\n", "1989", "\n", "\n", "\n", "Latest release", "\n", "\n", "6.3.4", "\n", "(1\u00a0October 2014", "; 3 years ago", "\u00a0(", "2014-10-01", ")", ")", "\n", "\n", "\n", "\n", "Type of format", "\n", "Data compression", "\n", "\n", "\n", "Extended\u00a0to", "\n", "JAR", " ", "(", "EAR", ", ", "RAR (Java)", ", ", "WAR", ")", "\n", "Office Open XML", " (Microsoft)", "\n", "Open Packaging Conventions", "\n", "OpenDocument", " (ODF)", "\n", "XPI", " (Mozilla extensions)", "\n", "\n", "\n", "Standard", "\n", "\n", "APPNOTE", " from PKWARE", "\n", "ISO/IEC 21320-1:2015 (a subset of ZIP file format 6.3.3)", "\n", "\n", "\n", "Open format", "?", "\n", "Yes", "\n", "\n", "\n", "ZIP", " is an ", "archive file format", " that supports ", "lossless data compression", ". A .ZIP file may contain one or more files or directories that may have been compressed. The .ZIP file format permits a number of compression ", "algorithms", ", though ", "DEFLATE", " is the most common. This format was originally created in 1989 by ", "Phil Katz", ", and was first implemented in ", "PKWARE, Inc.", "'s ", "PKZIP", " utility,", "[2]", " as a replacement for the previous ", "ARC", " compression format by Thom Henderson. The .ZIP format is now supported by many software utilities other than PKZIP. Microsoft has included built-in .ZIP support (under the name \"compressed folders\") in versions of ", "Microsoft Windows", " since 1998. Apple has included built-in .ZIP support in ", "Mac\u00a0OS\u00a0X", " 10.3 (via BOMArchiveHelper, now ", "Archive Utility", ") and later. Most ", "free operating systems", " have built in support for .ZIP in similar manners to Windows and Mac OS X.", "\n", ".ZIP files generally use the ", "file extensions", " \".zip\" or \".ZIP\" and the ", "MIME", " media type ", "application/zip", ".", "[1]", " ZIP is used as a base file format by many programs, usually under a different name. When navigating a file system via a user interface, graphical ", "icons", " representing .ZIP files often appear as a document or other object prominently featuring a ", "zipper", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "\n", "1.1", " ", "Version history", "\n", "1.2", " ", "Standardization", "\n", "\n", "\n", "2", " ", "Design", "\n", "\n", "2.1", " ", "Structure", "\n", "2.2", " ", "File headers", "\n", "2.3", " ", "Compression methods", "\n", "2.4", " ", "Encryption", "\n", "2.5", " ", "ZIP64", "\n", "2.6", " ", "Combination with other file formats", "\n", "2.7", " ", "Limits", "\n", "2.8", " ", "Proprietary extensions", "\n", "\n", "2.8.1", " ", "Extra field", "\n", "2.8.2", " ", "Strong encryption controversy", "\n", "\n", "\n", "\n", "\n", "3", " ", "Implementation", "\n", "4", " ", "Legacy", "\n", "5", " ", "See also", "\n", "6", " ", "References", "\n", "7", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "The .ZIP file format was created by ", "Phil Katz", " of ", "PKWARE", "[3]", " and Gary Conway of IDC (Infinity Design Concepts, Inc). They created the format after PKWARE had a ", "lawsuit", " filed against them by Systems Enhancement Associates (SEA) claiming that his archiving products were derivatives of SEA's ", "ARC", " archiving system. SEA also threatened to sue Gary Conway and IDC for the same reasons, but then they found that SEA's work was actually a derivative of IDC's work and several others and opted not to proceed with the lawsuit. The name \"zip\" (meaning \"move at high speed\") was suggested by Katz's friend, Robert Mahoney. They wanted to imply that their product would be faster than ", "ARC", " and other compression formats of the time. The earliest known version of ", ".ZIP File Format Specification", " was first published as part of ", "PKZIP", " 0.9 package under the file APPNOTE.TXT in 1989.", "\n", "The .ZIP file format was released into the ", "public domain", " in 1989.", "[4]", "[5]", "[6]", "[7]", "[8]", "\n", "Version history", "[", "edit", "]", "\n", "The .ZIP File Format Specification has its own version number, which does not necessarily correspond to the version numbers for the PKZIP tool, especially with PKZIP 6 or later. At various times, PKWARE has added preliminary features that allow PKZIP products to extract archives using advanced features, but PKZIP products that create such archives are not made available until the next major release. Other companies or organizations support the PKWARE specifications at their own pace.", "\n", "The .ZIP file format specification is formally named \"APPNOTE - .ZIP File Format Specification\" and it is published on the PKWARE.com website since the late 1990s.", "[9]", " Several versions of the specification were not published. Specifications of some features such as ", "BZIP2", " compression, strong encryption specification and others were published by PKWARE a few years after their creation. The URL of the online specification was changed several times on the PKWARE website.", "\n", "A summary of key advances in various versions of the PKWARE specification:", "\n", "\n", "2.0: (1993)", "[1]", " File entries can be compressed with ", "DEFLATE", " and use traditional PKWARE encryption.", "\n", "2.1: (1996) Deflate64 compression", "\n", "4.5: (2001)", "[10]", " Documented 64-bit zip format.", "\n", "4.6: (2001) BZIP2 compression (not published online until the publication of APPNOTE 5.2)", "\n", "5.0: (2002) ", "DES", ", ", "Triple DES", ", ", "RC2", ", ", "RC4", " supported for encryption (not published online until the publication of APPNOTE 5.2)", "\n", "5.2: (2003)", "[11]", "[12]", " AES encryption support (defined in APPNOTE 5.1 that was not published online), corrected version of RC2-64 supported for encryption.", "\n", "6.1: (2004)", "[13]", " Documented certificate storage.", "\n", "6.2.0: (2004)", "[14]", " Documented Central Directory Encryption.", "\n", "6.3.0: (2006)", "[15]", " Documented Unicode (", "UTF-8", ") filename storage. Expanded list of supported hash, compression (", "LZMA", ", ", "PPMd+", "), encryption algorithms.", "\n", "6.3.1: (2007)", "[16]", " Corrected standard hash values for SHA-256/384/512.", "\n", "6.3.2: (2007)", "[17]", " Documented compression method 97 (", "WavPack", ").", "\n", "6.3.3: (2012)", "[18]", " Document formatting changes to facilitate referencing the PKWARE Application Note from other standards using methods such as the JTC 1 Referencing Explanatory Report (RER) as directed by JTC 1/SC 34 N 1621.", "\n", "6.3.4: (2014)", "[19]", " Updates the PKWARE, Inc. office address.", "\n", "\n", "WinZip", ", starting with version 12.1, uses the extension ", ".zipx", " for .ZIP files that use compression methods newer than DEFLATE; specifically, methods BZip, LZMA, PPMd, Jpeg and Wavpack. The last 2 are applied to appropriate file types when \"Best method\" compression is selected.", "[20]", "[21]", "\n", "Standardization", "[", "edit", "]", "\n", "In April 2010, ", "ISO/IEC JTC 1", " initiated a ballot to determine whether a project should be initiated to create an ISO/IEC International Standard format compatible with .ZIP.", "[22]", " The proposed project, entitled ", "Document Packaging", ", envisaged a .ZIP-compatible 'minimal compressed archive format' suitable for use with a number of existing standards including ", "OpenDocument", ", ", "Office Open XML", " and ", "EPUB", ".", "\n", "In 2015, ISO/IEC 21320-1 \"Document Container File \u2014 Part 1: Core\" was published which states that that \"Document container files are conforming Zip files\".", "[23]", "\n", "ISO/IEC 21320-1:2015 requires the following main restrictions of the ZIP file format:", "\n", "\n", "Files in ZIP archives may only be stored uncompressed, or using the \"deflate\" compression (i.e. compression method may contain the value \"0\" - stored or \"8\" - deflated).", "\n", "The encryption features are prohibited.", "\n", "The digital signature features are prohibited.", "\n", "The \"patched data\" features are prohibited.", "\n", "Archives may not span multiple volumes or be segmented.", "\n", "\n", "Design", "[", "edit", "]", "\n", ".ZIP files are archives that store multiple files. .ZIP allows contained files to be compressed using many different methods, as well as simply storing a file without compressing it. Each file is stored separately, allowing different files in the same archive to be compressed using different methods. Because the files in a .ZIP archive are compressed individually it is possible to extract them, or add new ones, without applying compression or decompression to the entire archive. This contrasts with the format of compressed ", "tar", " files, for which such random-access processing is not easily possible.", "\n", "A directory is placed at the end of a .ZIP file. This identifies what files are in the .ZIP and identifies where in the .ZIP that file is located. This allows .ZIP readers to load the list of files without reading the entire .ZIP archive. .ZIP archives can also include extra data that is not related to the .ZIP archive. This allows for a .ZIP archive to be made into a self-extracting archive (application that decompresses its contained data), by prepending the program code to a .ZIP archive and marking the file as executable. Storing the catalog at the end also makes possible hiding a zipped file by appending it to an innocuous file, such as a GIF image file.", "\n", "The .ZIP format uses a 32-bit CRC algorithm and includes two copies of the directory structure of the archive to provide greater protection against data loss.", "\n", "Structure", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nZIP-64 Internal Layout", "\n", "\n", "\n", "A .ZIP file is correctly identified by the presence of an ", "end of central directory record", " which is located at the end of the archive structure in order to allow the easy appending of new files. If the end of central directory record indicates a non-empty archive, the name of each file or directory within the archive should be specified in a ", "central directory", " entry, along with other metadata about the entry, and an offset into the .ZIP file, pointing to the actual entry data. This allows a file listing of the archive to be performed relatively quickly, as the entire archive does not have to be read to see the list of files. The entries within the .ZIP file also include this information, for redundancy, in a ", "local file header", ". Because zip files may be appended to, only files specified in the central directory at the end of the file are valid. Scanning a ZIP file for local file headers is invalid (except in the case of corrupted archives), as the central directory may declare that some files have been deleted and other files have been updated.", "\n", "For example, we may start with a .ZIP file that contains files A, B and C. File B is then deleted and C updated. This may be achieved by just appending a new file C to the end of the original ZIP file and adding a new central directory that only lists file A and the new file C. When ZIP was first designed, transferring files by floppy disk was common, yet writing to disks was very time consuming. If you had a large zip file, possibly spanning multiple disks, and only needed to update a few files, rather than reading and re-writing all the files, it would be substantially faster to just read the old central directory, append the new files then append an updated central directory.", "\n", "The order of the file entries in the central directory need not coincide with the order of file entries in the archive.", "\n", "Each entry stored in a ZIP archive is introduced by a ", "local file header", " with information about the file such as the comment, file size and file name, followed by optional \"extra\" data fields, and then the possibly compressed, possibly encrypted file data. The \"Extra\" data fields are the key to the extensibility of the .ZIP format. \"Extra\" fields are exploited to support the ZIP64 format, WinZip-compatible AES encryption, file attributes, and higher-resolution NTFS or Unix file timestamps. Other extensions are possible via the \"Extra\" field. .ZIP tools are required by the specification to ignore Extra fields they do not recognize.", "\n", "The .ZIP format uses specific 4-byte \"signatures\" to denote the various structures in the file. Each file entry is marked by a specific signature. The end of central directory record is indicated with its specific signature, and each entry in the central directory starts with the 4-byte ", "central file header signature", ".", "\n", "There is no BOF or EOF marker in the .ZIP specification. Conventionally the first thing in a .ZIP file is a .ZIP entry, which can be identified easily by its ", "local file header signature", ". However, this is not necessarily the case, as this not required by the .ZIP specification - most notably, a self-extracting archive will begin with an executable file header.", "\n", "Tools that correctly read .ZIP archives must scan for the end of central directory record signature, and then, as appropriate, the other, indicated, central directory records. They must not scan for entries from the top of the ZIP file, because only the central directory specifies where a file chunk starts. Scanning could lead to false positives, as the format does not forbid other data to be between chunks, nor file data streams from containing such signatures. However, tools that attempt to recover data from damaged .ZIP archives will most likely scan the archive for local file header signatures; this is made more difficult by the fact that the compressed size of a file chunk may be stored after the file chunk, making sequential processing difficult.", "\n", "Most of the signatures end with the short integer 0x4b50, which is stored in little-endian ordering. Viewed as an ASCII string this reads \"PK\", the initials of the inventor Phil Katz. Thus, when a .ZIP file is viewed in a text editor the first two bytes of the file are usually \"PK\". (DOS, OS/2 and Windows self-extracting ZIPs have an ", "EXE", " before the ZIP so start with \"MZ\"; self-extracting ZIPs for other operating systems may similarly be preceded by executable code for extracting the archive's content on that platform.)", "\n", "The .ZIP specification also supports spreading archives across multiple filesystem files. Originally intended for storage of large .ZIP files across multiple ", "floppy disks", ", this feature is now used for sending .ZIP archives in parts over email, or over other transports or removable media.", "\n", "The ", "FAT filesystem", " of DOS has a timestamp resolution of only two seconds; .ZIP file records mimic this. As a result, the built-in timestamp resolution of files in a .ZIP archive is only two seconds, though extra fields can be used to store more precise timestamps. The .ZIP format has no notion of ", "time zone", ", so timestamps are only meaningful if it is known what time zone they were created in.", "\n", "In September 2007, PKWARE released a revision of the .ZIP specification providing for the storage of file names using ", "UTF-8", ", finally adding Unicode compatibility to .ZIP.", "[24]", "\n", "File headers", "[", "edit", "]", "\n", "All multi-byte values in the header are stored in ", "little-endian", " byte order. All length fields count the length in bytes.", "\n", "\n", "Local file header", "\n", "\n", "Offset", "\n", "Bytes", "\n", "Description", "[24]", "\n", "\n", "\n", "0", "\n", "4", "\n", "Local file header signature = 0x04034b50 (read as a little-endian number)", "\n", "\n", "\n", "4", "\n", "2", "\n", "Version needed to extract (minimum)", "\n", "\n", "\n", "6", "\n", "2", "\n", "General purpose bit flag", "\n", "\n", "\n", "8", "\n", "2", "\n", "Compression method", "\n", "\n", "\n", "10", "\n", "2", "\n", "File last modification time", "\n", "\n", "\n", "12", "\n", "2", "\n", "File last modification date", "\n", "\n", "\n", "14", "\n", "4", "\n", "CRC-32", "\n", "\n", "\n", "18", "\n", "4", "\n", "Compressed size", "\n", "\n", "\n", "22", "\n", "4", "\n", "Uncompressed size", "\n", "\n", "\n", "26", "\n", "2", "\n", "File name length (", "n", ")", "\n", "\n", "\n", "28", "\n", "2", "\n", "Extra field length (", "m", ")", "\n", "\n", "\n", "30", "\n", "n", "\n", "File name", "\n", "\n", "\n", "30+", "n", "\n", "m", "\n", "Extra field", "\n", "\n", "\n", "The extra field contains a variety of optional data such as OS-specific attributes. It is divided into chunks, each with a 16-bit ID code and a 16-bit length.", "\n", "This is immediately followed by the compressed data.", "\n", "If the bit at offset 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written. The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure (optionally preceded by a 4-byte signature) immediately after the compressed data:", "\n", "\n", "Data descriptor", "\n", "\n", "Offset", "\n", "Bytes", "\n", "Description", "[24]", "\n", "\n", "\n", "0", "\n", "0/4", "\n", "Optional", " data descriptor signature = 0x08074b50", "\n", "\n", "\n", "0/4", "\n", "4", "\n", "CRC-32", "\n", "\n", "\n", "4/8", "\n", "4", "\n", "Compressed size", "\n", "\n", "\n", "8/12", "\n", "4", "\n", "Uncompressed size", "\n", "\n", "\n", "The central directory entry is an expanded form of the local header:", "\n", "\n", "Central directory file header", "\n", "\n", "Offset", "\n", "Bytes", "\n", "Description", "[24]", "\n", "\n", "\n", "0", "\n", "4", "\n", "Central directory file header signature = 0x02014b50", "\n", "\n", "\n", "4", "\n", "2", "\n", "Version made by", "\n", "\n", "\n", "6", "\n", "2", "\n", "Version needed to extract (minimum)", "\n", "\n", "\n", "8", "\n", "2", "\n", "General purpose bit flag", "\n", "\n", "\n", "10", "\n", "2", "\n", "Compression method", "\n", "\n", "\n", "12", "\n", "2", "\n", "File last modification time", "\n", "\n", "\n", "14", "\n", "2", "\n", "File last modification date", "\n", "\n", "\n", "16", "\n", "4", "\n", "CRC-32", "\n", "\n", "\n", "20", "\n", "4", "\n", "Compressed size", "\n", "\n", "\n", "24", "\n", "4", "\n", "Uncompressed size", "\n", "\n", "\n", "28", "\n", "2", "\n", "File name length (", "n", ")", "\n", "\n", "\n", "30", "\n", "2", "\n", "Extra field length (", "m", ")", "\n", "\n", "\n", "32", "\n", "2", "\n", "File comment length (", "k", ")", "\n", "\n", "\n", "34", "\n", "2", "\n", "Disk number where file starts", "\n", "\n", "\n", "36", "\n", "2", "\n", "Internal file attributes", "\n", "\n", "\n", "38", "\n", "4", "\n", "External file attributes", "\n", "\n", "\n", "42", "\n", "4", "\n", "Relative offset of local file header. This is the number of bytes between the start of the first disk on which the file occurs, and the start of the local file header. This allows software reading the central directory to locate the position of the file inside the .ZIP file.", "\n", "\n", "\n", "46", "\n", "n", "\n", "File name", "\n", "\n", "\n", "46+", "n", "\n", "m", "\n", "Extra field", "\n", "\n", "\n", "46+", "n", "+", "m", "\n", "k", "\n", "File comment", "\n", "\n", "\n", "After all the central directory entries comes the end of central directory (EOCD) record, which marks the end of the .ZIP file:", "\n", "\n", "End of central directory record (EOCD)", "\n", "\n", "Offset", "\n", "Bytes", "\n", "Description", "[24]", "\n", "\n", "\n", "0", "\n", "4", "\n", "End of central directory signature = 0x06054b50", "\n", "\n", "\n", "4", "\n", "2", "\n", "Number of this disk", "\n", "\n", "\n", "6", "\n", "2", "\n", "Disk where central directory starts", "\n", "\n", "\n", "8", "\n", "2", "\n", "Number of central directory records on this disk", "\n", "\n", "\n", "10", "\n", "2", "\n", "Total number of central directory records", "\n", "\n", "\n", "12", "\n", "4", "\n", "Size of central directory (bytes)", "\n", "\n", "\n", "16", "\n", "4", "\n", "Offset of start of central directory, relative to start of archive", "\n", "\n", "\n", "20", "\n", "2", "\n", "Comment length (", "n", ")", "\n", "\n", "\n", "22", "\n", "n", "\n", "Comment", "\n", "\n", "\n", "This ordering allows a .ZIP file to be created in one pass, but it is usually decompressed by first reading the central directory at the end.", "\n", "Compression methods", "[", "edit", "]", "\n", "The .ZIP File Format Specification documents the following compression methods: Store (no compression), Shrink, Reduce (levels 1-4), Implode, Deflate, Deflate64, ", "bzip2", ", ", "LZMA", " (EFS), ", "WavPack", ", and ", "PPMd", ". The most commonly used compression method is ", "DEFLATE", ", which is described in IETF ", "RFC 1951", ".", "\n", "Compression methods mentioned, but not documented in detail in the specification include: PKWARE Data Compression Library (DCL) Implode, IBM TERSE, and IBM LZ77 z Architecture (PFS). A \"Tokenize\" method was reserved for a third party, but support was never added.", "[", "citation needed", "]", "\n", "Encryption", "[", "edit", "]", "\n", ".ZIP supports a simple ", "password", "-based ", "symmetric encryption", " system, which is documented in the .ZIP specification, and known to be seriously flawed. In particular, it is vulnerable to ", "known-plaintext attacks", ", which are in some cases made worse by poor implementations of ", "random-number generators", ".", "[25]", "\n", "New features including new ", "compression", " and ", "encryption", " (e.g. ", "AES", ") methods have been documented in the .ZIP File Format Specification since version 5.2. A ", "WinZip", "-developed AES-based standard is used also by ", "7-Zip", " and ", "Xceed", ", but some vendors use other formats.", "[26]", " PKWARE SecureZIP also supports RC2, RC4, DES, Triple DES encryption methods, Digital Certificate-based encryption and authentication (", "X.509", "), and archive header encryption.", "[27]", "\n", "File name", " ", "encryption", " is introduced in .ZIP File Format Specification 6.2, which encrypts metadata stored in Central Directory portion of an archive, but Local Header sections remain unencrypted. A compliant archiver can falsify the Local Header data when using Central Directory Encryption. As of version 6.2 of the specification, the Compression Method and Compressed Size fields within Local Header are not yet masked.", "\n", "ZIP64", "[", "edit", "]", "\n", "The original .ZIP format had a 4\u00a0GiB limit on various things (uncompressed size of a file, compressed size of a file and total size of the archive), as well as a limit of 65535 entries in a .ZIP archive. In version 4.5 of the specification (which is not the same as v4.5 of any particular tool), PKWARE introduced the \"ZIP64\" format extensions to get around these limitations, increasing the limitation to 16\u00a0", "EiB", " (2", "64", " bytes). In essence, it uses a \"normal\" central directory entry for a file, followed by an optional \"zip64\" directory entry, which has the larger fields.", "[28]", "\n", "The File Explorer in Windows XP does not support ZIP64, but the Explorer in Windows Vista does.", "[", "citation needed", "]", " Likewise, some extension libraries support ZIP64, such as DotNetZip, QuaZIP", "[29]", " and IO::Compress::Zip in Perl. ", "Python", "'s built-in zipfile supports it since 2.5 and defaults to it since 3.4.", "[30]", " OpenJDK's built-in java.util.zip supports ZIP64 from version ", "Java 7", ".", "[31]", " ", "Android", " Java API support ZIP64 since Android 6.0.", "[32]", " OS X Yosemite does support the creation of ZIP64 archives, but does not support unzipping these archives using the graphical Archive Utility.", "[", "citation needed", "]", "\n", "Combination with other file formats", "[", "edit", "]", "\n", "The .ZIP file format allows for a comment containing up to 65,535 bytes of data to occur at the end of the file after the central directory.", "[24]", " Also, because the central directory specifies the offset of each file in the archive with respect to the start, it is possible for the first file entry to start at an offset other than zero, although some tools, for example gzip, will not process archive files that don't start with a file entry at offset zero.", "\n", "This allows arbitrary data to occur in the file both before and after the .ZIP archive data, and for the archive to still be read by a .ZIP application. A side-effect of this is that it is possible to author a file that is both a working .ZIP archive and another format, provided that the other format tolerates arbitrary data at its end, beginning, or middle. ", "Self-extracting archives", " (SFX), of the form supported by WinZip, take advantage of this\u2014they are .exe files that conform to the PKZIP AppNote.txt specification and can be read by compliant zip tools or libraries.", "\n", "This property of the .ZIP format, and of the JAR format which is a variant of .ZIP, can be exploited to hide harmful Java classes inside a seemingly harmless file, such as a GIF image uploaded to the web. This so-called ", "GIFAR", " exploit has been demonstrated as an effective attack against web applications such as Facebook.", "[33]", "\n", "Limits", "[", "edit", "]", "\n", "The minimum size of a .ZIP file is 22 bytes. Such ", "empty zip file", " contains only an End of Central Directory Record (EOCD):", "\n", "[0x50,0x4B,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]", "\n", "The maximum size for both the archive file and the individual files inside it is 4,294,967,295 bytes (2", "32", "\u22121 bytes, or 4 GiB minus 1 byte) for standard .ZIP, and 18,446,744,073,709,551,615 bytes (2", "64", "\u22121 bytes, or 16 EiB minus 1 byte) for ZIP64.", "[34]", "\n", "Proprietary extensions", "[", "edit", "]", "\n", "Extra field", "[", "edit", "]", "\n", ".ZIP file format includes the extra field facility within file headers, which can be used to store extra data not defined by existing .ZIP specifications, and allow compliant archivers not recognizing the fields to safely skip the fields. Header IDs 0\u201331 are reserved for use by PKWARE. The remaining IDs can be used by third party vendors for proprietary usage.", "\n", "Strong encryption controversy", "[", "edit", "]", "\n", "When ", "WinZip", " 9.0 public beta was released in 2003, WinZip introduced its own ", "AES-256", " encryption, using a different file format, along with the documentation for the new specification.", "[35]", " The encryption standards themselves were not ", "proprietary", ", but PKWARE had not updated APPNOTE.TXT to include Strong Encryption Specification (SES) since 2001, which had been used by PKZIP versions 5.0 and 6.0. WinZip technical consultant Kevin Kearney and ", "StuffIt", " product manager Mathew Covington accused PKWARE of withholding SES, but PKZIP chief technology officer Jim Peterson claimed that certificate-based encryption was still incomplete.", "\n", "In another controversial move, PKWare applied for a patent on 16 July 2003 describing a method for combining .ZIP and strong encryption to create a secure file.", "[36]", "\n", "In the end, PKWARE and WinZip agreed to support each other's products. On 21 January 2004, PKWARE announced the support of WinZip-based AES compression format.", "[37]", " In a later version of WinZip beta, it was able to support SES-based .ZIP files.", "[38]", " PKWARE eventually released version 5.2 of the .ZIP File Format Specification to the public, which documented SES. The ", "Free Software", " project ", "7-Zip", " also supports AES in .ZIP files (as does its ", "POSIX", " ", "port", " ", "p7zip", ").", "\n", "When using AES encryption under WinZip, the compression method is always set to 99, with the actual compression method stored in AES extra data field.", "[39]", " In contrast, Strong Encryption Specification stores the compression method in the basic file header segment of Local Header and Central Directory, unless Central Directory Encryption is used to mask/encrypt metadata.", "\n", "Implementation", "[", "edit", "]", "\n", "There are numerous .ZIP tools available, and numerous .ZIP libraries for various programming environments; licenses used include ", "proprietary", " and ", "free software", ". For instance, ", "WinZip", " is one well-known .ZIP tool running on Windows, and ", "WinRAR", ", ", "Info-ZIP", ", ", "7-Zip", ", ", "PeaZip", " and ", "B1 Free Archiver", " are other tools, available on various platforms. Some of those tools have library or programmatic interfaces.", "\n", "Some development libraries licensed under open source agreement are ", "libzip", " and ", "Info-ZIP", ". For Java: ", "Java Platform, Standard Edition", " contains the package \"java.util.zip\" to handle standard .ZIP files; the Zip64File library specifically supports large files (larger than 4\u00a0GB) and treats .ZIP files using random access; and the ", "Apache Ant", " tool contains a more complete implementation released under the ", "Apache Software License", ".", "\n", "The ", "Info-ZIP", " implementations of the .ZIP format adds support for Unix filesystem features, such as user and group IDs, file permissions, and support for symbolic links. The ", "Apache Ant", " implementation is aware of these to the extent that it can create files with predefined Unix permissions. The Info-ZIP implementations also know how to use the error correction capabilities built into the .ZIP compression format. Some programs do not, and will fail on a file that has errors.", "\n", "The Info-ZIP Windows tools also support ", "NTFS", " ", "filesystem", " permissions, and will make an attempt to translate from NTFS permissions to Unix permissions or vice versa when extracting files. This can result in potentially unintended combinations, e.g. ", ".exe", " files being created on NTFS volumes with executable permission denied.", "\n", "Versions of Microsoft Windows have included support for .ZIP compression in Explorer since the ", "Microsoft Plus!", " pack was released for Windows 98. Microsoft calls this feature \"Compressed Folders\".", "[", "citation needed", "]", " Not all .ZIP features are supported by the Windows Compressed Folders capability. For example, AES Encryption, split or spanned archives, and Unicode entry encoding are not known to be readable or writable by the Compressed Folders feature in Windows versions earlier than Windows 8.", "\n", "Microsoft Office started using the zip archive format in 2006 for their ", "Office Open XML", " .docx, .xlsx, .pptx, etc. files, which became the default file format with ", "Microsoft Office 2007", ".", "\n", "Legacy", "[", "edit", "]", "\n", "There are numerous other standards and formats using \"zip\" as part of their name. For example, zip is distinct from ", "gzip", ", and the latter is defined in an ", "IETF", " ", "RFC", " (", "RFC 1952", "). Both zip and gzip primarily use the ", "DEFLATE", " algorithm for compression. Likewise, the ", "ZLIB", " format (IETF ", "RFC 1950", ") also uses the DEFLATE compression algorithm, but specifies different headers for error and consistency checking. Other common, similarly named formats and programs with different native formats include ", "7-Zip", ", ", "bzip2", ", and ", "rzip", ".", "\n", "See also", "[", "edit", "]", "\n", "\n", "Comparison of file archivers", "\n", "Comparison of archive formats", "\n", "List of archive formats", "\n", "LZW", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Registration of a new MIME Content-Type/Subtype - application/zip", ", ", "IANA", ", 20 July 1993", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", "\"Phillip Katz, Computer Software Pioneer, 37\"", ". ", "The New York Times", ". 1 May 2000", ". Retrieved ", "14 June", " 2009", ".", "\u00a0", "\n", "^", " ", "\"The Rise and Fall of a Software Star; Phil Katz Loved Code - and Liquor\"", ". wsj. 1997-08-15.", "\u00a0", "\n", "^", " ", "Brian Livingston (8 September 2003), ", "PKZip Must Open Up", ", retrieved ", "5 January", " 2012", ", ", "The ZIP file format is given freely into the public domain and can be claimed neither legally nor morally by any individual, entity or company", "\u00a0", "\n", "^", " ", "Where Did Zip Files Come From Anyway?", ", Infinity Design Concepts, Inc.", ", retrieved ", "2012-01-05", "\u00a0", "\n", "^", " ", "Press Release", ", 1989", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", "Our Founder - Phil Katz", ", ", "PKWARE", ", archived from ", "the original", " on 2010-10-01", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", "Gareth Horton; Rob Weir; Alex Brown (2 November 2010), ", "sc34-wg1", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", ".ZIP Application Note", ", retrieved ", "2012-07-20", "\u00a0", "\n", "^", " ", "File: APPNOTE.TXT - .ZIP File Format Specification Version: 4.5 Revised: 11/01/2001", ", 3 December 2001, archived from ", "the original", " on 3 December 2001", ", retrieved ", "21 April", " 2012", "\u00a0", "\n", "^", " ", "APPNOTE.TXT - .ZIP File Format Specification, Version: 5.2 - Notification of Change", ", 16 July 2003", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", "File: APPNOTE.TXT - .ZIP File Format Specification Version: 5.2 - Notification of Change \u2013 Revised: 06/02/2003", ", 2 July 2003, archived from ", "the original", " on 2 July 2003", ", retrieved ", "21 April", " 2012", "\u00a0", "\n", "^", " ", "File: APPNOTE - .ZIP File Format Specification Version: 6.1.0 - Notification of Change \u2013 Revised: 01/20/2004", ", 19 August 2004, archived from ", "the original", " on 19 August 2004", ", retrieved ", "21 April", " 2012", "\u00a0", "\n", "^", " ", "APPNOTE.TXT - .ZIP File Format Specification, Version: 6.2.0 - Notification of Change", ", 26 April 2004", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", "APPNOTE.TXT - .ZIP File Format Specification, Version: 6.3.0", ", 29 September 2006", ", retrieved ", "5 January", " 2012", "\u00a0", "\n", "^", " ", "File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.1 Revised: April 11, 2007", ", 14 May 2007, archived from ", "the original", " on 14 May 2007", ", retrieved ", "21 April", " 2012", "\u00a0", "\n", "^", " ", "File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.2 Revised: September 28, 2007", ", 28 September 2007, archived from ", "the original", " on 28 September 2007", ", retrieved ", "21 April", " 2012", "\u00a0", "\n", "^", " ", "File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.3 Revised: September 01, 2012", ", September 2012", "\u00a0", "\n", "^", " ", "File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.4 Revised: October 1, 2014", ", 1 October 2014", "\u00a0", "\n", "^", " ", "\"Additional Compression Methods Specification\"", ". ", "WinZip", ". ", "Mansfield, CT", ": ", "WinZip", " Computing, S.L. 19 May 2009", ". Retrieved ", "2009-05-24", ".", "\u00a0", "\n", "^", " ", "\"What is a Zipx File?\"", ". ", "Winzip: Knowledgebase", ". ", "Mansfield, CT", ": ", "WinZip", " Computing, S.L", ". 13 August 2010", ". Retrieved ", "17 August", " 2010", ".", "\u00a0", "\n", "^", " ", "[1]", "[", "dead link", "]", "\n", "^", " ", "\"ISO/IEC 21320-1:2015 Document Container File \u2014 Part 1: Core\"", ". ITTF. 2015.", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "f", " ", "\"File\u00a0: APPNOTE.TXT - .ZIP File Format Specification\u00a0: Version: 6.3.4\"", " ", "(TXT)", ". ", "Pkware.com", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "^", " ", "Stay, Michael. ", "\"", "\"", "ZIP Attacks with Reduced Known Plaintext", "\"", "\"", " ", "(PDF)", ". ", "Math.ucr.edu", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "^", " ", "\"AES Encryption Information: Encryption Specification AE-1 and AE-2\"", ". ", "Winzip.com", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "^", " ", "\"APPNOTE - PKZIP/SecureZIP - PKWARE Support Site\"", ". ", "Pkware.com", ". Retrieved ", "9 September", " 2017", ".", "\u00a0", "\n", "^", " ", "\"File\u00a0: APPNOTE.TXT - .ZIP File Format Specification\u00a0: Version: 6.3.4\"", " ", "(TXT)", ". ", "Pkware.cachefly.net", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "^", " ", "\"QuaZIP changes\"", ". 22 January 2014", ". Retrieved ", "2014-01-25", ".", "\u00a0", "\n", "^", " ", "\"Python enhancement: Use allowZip64=True by default (3.4)\"", ". Retrieved ", "2014-05-06", ".", "\u00a0", "\n", "^", " ", "Shen, Xueming (17 April 2009). ", "\"ZIP64, The Format for > 4G Zipfile, Is Now Supported\"", ". ", "Xueming Shen's Blog", ". ", "Sun Microsystems", ". Retrieved ", "27 Sep", " 2010", ".", "\u00a0", "\n", "^", " ", "\"Sign in - Google Accounts\"", ". ", "code.google.com", ". Retrieved ", "9 September", " 2017", ".", "\u00a0", "\n", "^", " ", "McMillan, Robert. ", "\"A photo that can steal your online credentials\"", ". ", "Infoworld.com", ". Retrieved ", "9 September", " 2017", ".", "\u00a0", "\n", "^", " ", "\"ZipArchive: Zip64 Format: Crossing the Limits of File Sizes and Number of Files and Segments\"", ". ", "Artpol-software.com", ". Retrieved ", "9 September", " 2017", ".", "\u00a0", "\n", "^", " ", "\"WinZip \u2013 AES Encryption Information\"", ". ", "Winzip.com", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "^", " ", "[2]", "[", "dead link", "]", "\n", "^", " ", "\"Software makers patch Zip tiff\"", ". ", "News.com", ". Retrieved ", "9 September", " 2017", ".", "\u00a0", "\n", "^", " ", "John Leyden. ", "\"Zip file encryption compromise thrashed out\"", ". ", "Theregister.co.uk", ". Retrieved ", "9 September", " 2017", ".", "\u00a0", "\n", "^", " ", "\"AES Encryption Information: Encryption Specification AE-1 and AE-2\"", ". ", "Winzip.com", ". Retrieved ", "2017-09-09", ".", "\u00a0", "\n", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", ".ZIP Application Note", " - landing page for PKWARE's current and historical .ZIP File", "\n", "Inside Microsoft C article citing Gary Conway as co-inventor of zip files", "\n", "Microsoft article citing Gary Conway as co-inventor of zip files", "\n", "\n", "Format Specifications.", "\n", "\n", "Structure of PKZip file", " - graphical tables", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Archive formats", "\n", "\n", "\n", "\n", "Archiving only", "\n", "\n", "\n", "\n", "ar", "\n", "cpio", "\n", "shar", "\n", "tar", "\n", "LBR", "\n", "BagIt", "\n", "WAD", "\n", "\n", "\n", "\n", "\n", "\n", "Compression only", "\n", "\n", "\n", "\n", "bzip2", "\n", "gzip", "\n", "lzip", "\n", "LZMA", "\n", "lzop", "\n", "xz", "\n", "SQ", "\n", "compress", "\n", "\n", "\n", "\n", "\n", "\n", "Archiving and compression", "\n", "\n", "\n", "\n", "7z", "\n", "ACE", "\n", "ARC", "\n", "ARJ", "\n", "B1", "\n", "Cabinet", "\n", "cfs", "\n", "cpt", "\n", "dar", "\n", "DGCA", "\n", ".dmg", "\n", ".egg", "\n", "kgb", "\n", "LHA", "\n", "LZX", "\n", "MPQ", "\n", "PEA", "\n", "RAR", "\n", "rzip", "\n", "sit", "\n", "SQX", "\n", "UDA", "\n", "Xar", "\n", "zoo", "\n", "ZIP", "\n", "ZPAQ", "\n", "\n", "\n", "\n", "\n", "\n", "Software packaging and distribution", "\n", "\n", "\n", "\n", "APK", "\n", "deb", "\n", "Package (macOS)", "\n", "RPM", "\n", "MSI", "\n", "JAR", "\n", "\n", "WAR", "\n", "Java RAR", "\n", "EAR", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Document packaging and distribution", "\n", "\n", "\n", "\n", "OEB Package Format", "\n", "OEBPS Container Format", "\n", "Open Packaging Conventions", "\n", "PAQ", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Comparison", "\n", "List", "\n", " ", "Category", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 7 January 2018, at 23:29."}, +{"title": "Style sheet (web development)", "text": ["\n", "\n", "\n", "\n", "\n", "\n", "This article ", "needs additional citations for ", "verification", ". ", "Please help ", "improve this article", " by ", "adding citations to reliable sources", ". Unsourced material may be challenged and removed.", " ", "(March 2014)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "See also: ", "Cascading Style Sheets", "\n", "\n", "\n", "Cascading Style Sheets", "\n", "\n", "\n", "\n", "\n", "Style sheet", "\n", "CSS Zen Garden", "\n", "The Zen of CSS Design", "\n", "CSS box model", "\n", "Internet Explorer box model bug", "\n", "CSSTidy", "\n", "Dynamic CSS", "\n", "\n", "\n", "\n", "\n", "Comparisons", "\n", "\n", "\n", "\n", "\n", "Layout engines", "\n", "Stylesheet languages", "\n", "\n", "\n", "\n", "\n", "Web design", "\n", "\n", "\n", "\n", "\n", "Tableless", "\n", "\"Holy grail\"", "\n", "Responsive", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\u00a0", "Cascading Style Sheets", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "HTML", "\n", "\n", "\n", "\n", "\n", "HTML", "\n", "Dynamic HTML", "\n", "HTML5", "\n", "\n", "audio", "\n", "canvas", "\n", "video", "\n", "\n", "\n", "XHTML", "\n", "\n", "Basic", "\n", "Mobile Profile", "\n", "C-HTML", "\n", "\n", "\n", "HTML element", "\n", "\n", "span and div", "\n", "\n", "\n", "HTML attribute", "\n", "HTML frame", "\n", "HTML editor", "\n", "Character encodings", "\n", "\n", "Unicode", "\n", "\n", "\n", "Language code", "\n", "Document Object Model", "\n", "Browser Object Model", "\n", "Style sheets", "\n", "\n", "CSS", "\n", "\n", "\n", "Font family", "\n", "Web colors", "\n", "HTML scripting", "\n", "JavaScript", "\n", "\n", "WebGL", "\n", "WebCL", "\n", "\n", "\n", "W3C", "\n", "\n", "Validator", "\n", "\n", "\n", "WHATWG", "\n", "Quirks mode", "\n", "Web storage", "\n", "Web browser (layout) engine", "\n", "\n", "\n", "\n", "\n", "Comparisons", "\n", "\n", "\n", "\n", "\n", "Document markup languages", "\n", "Web browsers", "\n", "HTML", "\n", "Non-standard HTML", "\n", "HTML5", "\n", "\n", "canvas", "\n", "media", "\n", "\n", "\n", "XHTML", "\n", "\n", "1.1", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n", "A web ", "style sheet", " is a form of ", "separation of presentation and content", " for ", "web design", " in which the ", "markup", " (i.e., ", "HTML", " or ", "XHTML", ") of a ", "webpage", " contains the page's semantic content and structure, but does not define its visual layout (style). Instead, the style is defined in an external style sheet file using a ", "style sheet language", " such as ", "CSS", " or ", "XSLT", ". This design approach is identified as a \"separation\" because it largely supersedes the antecedent methodology in which a page's markup defined both style and structure.", "\n", "The philosophy underlying this methodology is a specific case of ", "separation of concerns", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Benefits", "\n", "\n", "1.1", " ", "Speed", "\n", "1.2", " ", "Maintainability", "\n", "1.3", " ", "Accessibility", "\n", "1.4", " ", "Customization", "\n", "1.5", " ", "Consistency", "\n", "1.6", " ", "Portability", "\n", "\n", "\n", "2", " ", "Practical disadvantages today", "\n", "\n", "2.1", " ", "Narrow adoption without the parsing and generation tools", "\n", "\n", "\n", "3", " ", "See also", "\n", "4", " ", "References", "\n", "5", " ", "External links", "\n", "\n", "\n", "\n", "Benefits", "[", "edit", "]", "\n", "Separation of style and content has advantages,", "[1]", "[2]", " but has only become practical after improvements in popular ", "web browsers", "' CSS implementations.", "\n", "Speed", "[", "edit", "]", "\n", "Overall, users experience of a site utilising style sheets will generally be quicker than sites that don\u2019t use the technology. \u2018Overall\u2019 as the first page will probably load more slowly \u2013 because the style sheet AND the content will need to be transferred. Subsequent pages will load faster because no style information will need to be downloaded \u2013 the CSS file will already be in the browser\u2019s cache.", "\n", "Maintainability", "[", "edit", "]", "\n", "Holding all the presentation styles in one file can reduce the maintenance time and reduces the chance of error, thereby improving presentation consistency. For example, the font color associated with a type of text element may be specified \u2014 and therefore easily modified \u2014 throughout an entire website simply by changing one short string of characters in a single file. The alternate approach, using styles embedded in each individual page, would require a cumbersome, time consuming, and error-prone edit of every file.", "\n", "Accessibility", "[", "edit", "]", "\n", "Sites that use CSS with either XHTML or HTML are easier to tweak so that they appear similar in different browsers (", "Internet Explorer", ", ", "Mozilla Firefox", ", ", "Opera", ", ", "Safari", ", etc.).", "\n", "Sites using CSS \"", "degrade gracefully", "\" in browsers unable to display graphical content, such as ", "Lynx", ", or those so very old that they cannot use CSS. Browsers ignore CSS that they do not understand, such as CSS 3 statements. This enables a wide variety of ", "user agents", " to be able to access the content of a site even if they cannot render the style sheet or are not designed with graphical capability in mind. For example, a browser using a ", "refreshable braille display", " for output could disregard layout information entirely, and the user would still have access to all page content.", "\n", "Customization", "[", "edit", "]", "\n", "If a page's layout information is stored externally, a user can decide to disable the layout information entirely, leaving the site's bare content still in a readable form. Site authors may also offer multiple style sheets, which can be used to completely change the appearance of the site without altering any of its content.", "\n", "Most modern web browsers also allow the user to define their own style sheet, which can include rules that override the author's layout rules. This allows users, for example, to bold every hyperlink on every page they visit.", "\n", "Consistency", "[", "edit", "]", "\n", "Because the semantic file contains only the meanings an author intends to convey, the styling of the various elements of the document's content is very consistent. For example, headings, emphasized text, lists and mathematical expressions all receive consistently applied style properties from the external style sheet. Authors need not concern themselves with the style properties at the time of composition. These presentational details can be deferred until the moment of presentation.", "\n", "Portability", "[", "edit", "]", "\n", "The deferment of presentational details until the time of presentation means that a document can be easily re-purposed for an entirely different presentation medium with merely the application of a new style sheet already prepared for the new medium and consistent with elemental or structural vocabulary of the semantic document. A carefully authored document for a web page can easily be printed to a hard-bound volume complete with headers and footers, page numbers and a generated table of contents simply by applying a new style sheet.", "\n", "Practical disadvantages today", "[", "edit", "]", "\n", "Currently specifications (for example, XHTML, XSL, CSS) and software tools implementing these specification are only reaching the early stages of maturity. So there are some practical issues facing authors who seek to embrace this method of separating content and style.", "\n", "Narrow adoption without the parsing and generation tools", "[", "edit", "]", "\n", "While the style specifications are quite mature and still maturing, the software tools have been slow to adapt. Most of the major web development tools still embrace a mixed presentation-content model. So authors and designers looking for GUI based tools for their work find it difficult to follow the semantic web method. In addition to GUI tools, shared repositories for generalized style sheets would probably aid adoption of these methods.", "\n", "See also", "[", "edit", "]", "\n", "\n", "Separation of concerns", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "\n", "^", " ", "Why use CSS? - Web developer guide | MDN", "\n", "^", " ", "Why Use CSS in Website Design", "\n", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "CSS Zen Garden", ": A site which challenges designers to create new page layouts without touching the XHTML source. Includes dozens of layouts. CSS source can be viewed for every layout.", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Style sheet languages", "\n", "\n", "\n", "\n", "Modes", "\n", "\n", "\n", "\n", "Desktop publishing", "\n", "Web development", "\n", "User interfaces", "\n", "\n", "\n", "\n", "\n", "\n", "Standard", "\n", "\n", "\n", "\n", "Cascading (CSS)", "\n", "DSSSL", "\n", "Extensible (XSL)", "\n", "\n", "\n", "\n", "\n", "\n", "Non-standard", "\n", "\n", "\n", "\n", "JavaScript (JSSS)", "\n", "FOSI", "\n", "Qt", "\n", "Sass", "\n", "Less", "\n", "Stylus", "\n", "SMIL Timesheets", "\n", "PostCSS", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "List", "\n", "Comparison", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 14 December 2017, at 23:37."}, +{"title": "Lexical analysis", "text": ["\"Lexer\" redirects here. For people with this name, see ", "Lexer (surname)", ".", "\n", "In ", "computer science", ", ", "lexical analysis", ", ", "lexing", " or ", "tokenization", " is the process of converting a sequence of characters (such as in a computer program or web page) into a sequence of tokens (", "strings", " with an assigned and thus identified meaning). A program that performs lexical analysis may be termed a ", "lexer", ", ", "tokenizer", ",", "[1]", " or ", "scanner", ", though ", "scanner", " is also a term for the first stage of a lexer. A lexer is generally combined with a ", "parser", ", which together analyze the ", "syntax of programming languages", ", web pages, and so forth.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Applications", "\n", "2", " ", "Lexeme", "\n", "3", " ", "Token", "\n", "4", " ", "Lexical grammar", "\n", "5", " ", "Tokenization", "\n", "\n", "5.1", " ", "Scanner", "\n", "5.2", " ", "Evaluator", "\n", "5.3", " ", "Obstacles", "\n", "5.4", " ", "Software", "\n", "\n", "\n", "6", " ", "Lexer generator", "\n", "\n", "6.1", " ", "List of lexer generators", "\n", "\n", "\n", "7", " ", "Phrase structure", "\n", "\n", "7.1", " ", "Line continuation", "\n", "7.2", " ", "Semicolon insertion", "\n", "7.3", " ", "Off-side rule", "\n", "\n", "\n", "8", " ", "Context-sensitive lexing", "\n", "9", " ", "Notes", "\n", "10", " ", "References", "\n", "11", " ", "External links", "\n", "\n", "\n", "\n", "Applications", "[", "edit", "]", "\n", "A lexer forms the first phase of a ", "compiler frontend", " in modern processing. Analysis generally occurs in one pass.", "\n", "In older languages such as ", "ALGOL", ", the initial stage was instead ", "line reconstruction", ", which performed ", "unstropping", " and removed whitespace and ", "comments", " (and had scannerless parsers, with no separate lexer). These steps are now done as part of the lexer.", "\n", "Lexers and parsers are most often used for compilers, but can be used for other computer language tools, such as ", "prettyprinters", " or ", "linters", ". Lexing can be divided into two stages: the ", "scanning", ", which segments the input string into syntactic units called ", "lexemes", " and categorizes these into token classes; and the ", "evaluating", ", which converts lexemes into processed values.", "\n", "Lexers are generally quite simple, with most of the complexity deferred to the parser or ", "semantic analysis", " phases, and can often be generated by a ", "lexer generator", ", notably ", "lex", " or derivatives. However, lexers can sometimes include some complexity, such as ", "phrase structure", " processing to make input easier and simplify the parser, and may be written partly or fully by hand, either to support more features or for performance.", "\n", "Lexeme", "[", "edit", "]", "\n", "A ", "lexeme", " is a sequence of characters in the source program that matches the pattern for a token and is identified by the lexical analyzer as an instance of that token.", "[2]", "\n", "Some authors term this a \"token\", using \"token\" interchangeably to represent the string being tokenized, and the token data structure resulting from putting this string through the ", "tokenization", " process.", "[3]", "[4]", "\n", "The word lexeme in computer science is defined differently than ", "lexeme", " in linguistics. A lexeme in computer science roughly corresponds to what might be termed a ", "word", " in linguistics (the term ", "word", " in computer science has a different meaning than ", "word", " in linguistics), although in some cases it may be more similar to a ", "morpheme", ".", "\n", "Token", "[", "edit", "]", "\n", "A ", "lexical token", " or simply ", "token", " is a pair consisting of a ", "token name", " and an optional ", "token value", ". The token name is a category of lexical unit.", "[5]", " Common token names are", "\n", "\n", "identifiers: names the programmer chooses;", "\n", "keywords: names already in the programming language;", "\n", "separators (also known as punctuators): punctuation characters and paired-delimiters;", "\n", "operators: symbols that operate on arguments and produce results;", "\n", "literals: numeric, logical, textual, reference literals;", "\n", "comments: line, block.", "\n", "\n", "\n", "Examples of token values", "\n", "\n", "Token name", "\n", "Sample token values", "\n", "\n", "\n", "identifier", "\n", "x, color, UP", "\n", "\n", "\n", "keyword", "\n", "if", ",", " ", "while", ",", " ", "return", "\n", "\n", "\n", "separator", "\n", "}, (,\u00a0;", "\n", "\n", "\n", "operator", "\n", "+", ",", " ", "<", ",", " ", "=", "\n", "\n", "\n", "literal", "\n", "true", ",", " ", "6.02e23", ",", " ", "\"music\"", "\n", "\n", "\n", "comment", "\n", "// must be negative, /* Retrieves user data */", "\n", "\n", "\n", "Consider this expression in the ", "C", " programming language:", "\n", "\n", "x", " ", "=", " ", "a", " ", "+", " ", "b", " ", "*", " ", "2", ";", "\n", "\n", "The lexical analysis of this expression yields the following sequence of tokens:", "\n", "\n", "[(identifier, x), (operator, =), (identifier, a), (operator, +), (identifier, b), (operator, *), (literal, 2), (separator,\u00a0;)]", "\n", "\n", "A token name is what might be termed a ", "part of speech", " in linguistics.", "\n", "Lexical grammar", "[", "edit", "]", "\n", "Further information: ", "Lexical grammar", "\n", "The specification of a ", "programming language", " often includes a set of rules, the ", "lexical grammar", ", which defines the lexical syntax. The lexical syntax is usually a ", "regular language", ", with the grammar rules consisting of ", "regular expressions", "; they define the set of possible character sequences (lexemes) of a token. A lexer recognizes strings, and for each kind of string found the lexical program takes an action, most simply producing a token.", "\n", "Two important common lexical categories are ", "white space", " and ", "comments", ". These are also defined in the grammar and processed by the lexer, but may be discarded (not producing any tokens) and considered ", "non-significant", ", at most separating two tokens (as in ", "if\u00a0x", " instead of ", "ifx", "). There are two important exceptions to this. First, in ", "off-side rule", " languages that delimit ", "blocks", " with indenting, initial whitespace is significant, as it determines block structure, and is generally handled at the lexer level; see ", "phrase structure", ", below. Secondly, in some uses of lexers, comments and whitespace must be preserved \u2013 for examples, a ", "prettyprinter", " also needs to output the comments and some debugging tools may provide messages to the programmer showing the original source code. In the 1960s, notably for ", "ALGOL", ", whitespace and comments were eliminated as part of the ", "line reconstruction", " phase (the initial phase of the ", "compiler frontend", "), but this separate phase has been eliminated and these are now handled by the lexer.", "\n", "Tokenization", "[", "edit", "]", "\n", "Tokenization", " is the process of demarcating and possibly classifying sections of a string of input characters. The resulting tokens are then passed on to some other form of processing. The process can be considered a sub-task of ", "parsing", " input.", "\n", "(Note: ", "Tokenization", " in the field of computer security has a different meaning.)", "\n", "For example, in the text ", "string", ":", "\n", "\n", "The quick brown fox jumps over the lazy dog", "\n", "\n", "the string isn't implicitly segmented on spaces, as a ", "natural language", " speaker would do. The raw input, the 43 characters, must be explicitly split into the 9 tokens with a given space delimiter (i.e., matching the string ", "\" \"", " or regular expression ", "/\\s{1}/", ").", "\n", "The tokens could be represented in ", "XML", ",", "\n", "\n", "\n", "", "\n ", "", "The", "", "\n ", "", "quick", "", "\n ", "", "brown", "", "\n ", "", "fox", "", "\n ", "", "jumps", "", "\n ", "", "over", "", "\n ", "", "the", "", "\n ", "", "lazy", "", "\n ", "", "dog", "", "\n", "", "\n", "\n", "Or as an ", "s-expression", ",", "\n", "\n", "\n ", "(", "sentence", "\n ", "(", "word", " ", "The", ")", "\n ", "(", "word", " ", "quick", ")", "\n ", "(", "word", " ", "brown", ")", " \n ", "(", "word", " ", "fox", ")", "\n ", "(", "word", " ", "jumps", ")", "\n ", "(", "word", " ", "over", ")", " \n ", "(", "word", " ", "the", ")", "\n ", "(", "word", " ", "lazy", ")", "\n ", "(", "word", " ", "dog", "))", "\n", "\n", "When a token class represents more than one possible lexeme, the lexer often saves enough information to reproduce the original lexeme, so that it can be used in ", "semantic analysis", ". The parser typically retrieves this information from the lexer and stores it in the ", "abstract syntax tree", ". This is necessary in order to avoid information loss in the case of numbers and identifiers.", "\n", "Tokens are identified based on the specific rules of the lexer. Some methods used to identify tokens include: ", "regular expressions", ", specific sequences of characters termed a ", "flag", ", specific separating characters called ", "delimiters", ", and explicit definition by a dictionary. Special characters, including punctuation characters, are commonly used by lexers to identify tokens because of their natural use in written and programming languages.", "\n", "Tokens are often categorized by character content or by context within the data stream. Categories are defined by the rules of the lexer. Categories often involve grammar elements of the language used in the data stream. Programming languages often categorize tokens as identifiers, operators, grouping symbols, or by ", "data type", ". Written languages commonly categorize tokens as nouns, verbs, adjectives, or punctuation. Categories are used for post-processing of the tokens either by the parser or by other functions in the program.", "\n", "A lexical analyzer generally does nothing with combinations of tokens, a task left for a ", "parser", ". For example, a typical lexical analyzer recognizes parentheses as tokens, but does nothing to ensure that each \"(\" is matched with a \")\".", "\n", "When a lexer feeds tokens to the parser, the representation used is typically an enumerated list of number representations. For example, \"Identifier\" is represented with 0, \"Assignment operator\" with 1, \"Addition operator\" with 2, etc.", "\n", "Tokens are defined often by ", "regular expressions", ", which are understood by a lexical analyzer generator such as ", "lex", ". The lexical analyzer (generated automatically by a tool like lex, or hand-crafted) reads in a stream of characters, identifies the ", "lexemes", " in the stream, and categorizes them into tokens. This is termed ", "tokenizing", ". If the lexer finds an invalid token, it will report an error.", "\n", "Following tokenizing is ", "parsing", ". From there, the interpreted data may be loaded into data structures for general use, interpretation, or ", "compiling", ".", "\n", "Scanner", "[", "edit", "]", "\n", "The first stage, the ", "scanner", ", is usually based on a ", "finite-state machine", " (FSM). It has encoded within it information on the possible sequences of characters that can be contained within any of the tokens it handles (individual instances of these character sequences are termed ", "lexemes", "). For example, an ", "integer", " token may contain any sequence of ", "numerical digit", " characters. In many cases, the first non-whitespace character can be used to deduce the kind of token that follows and subsequent input characters are then processed one at a time until reaching a character that is not in the set of characters acceptable for that token (this is termed the ", "maximal munch", ", or ", "longest match", ", rule). In some languages, the lexeme creation rules are more complex and may involve ", "backtracking", " over previously read characters. For example, in C, one 'L' character is not enough to distinguish between an identifier that begins with 'L' and a wide-character string literal.", "\n", "Evaluator", "[", "edit", "]", "\n", "A ", "lexeme", ", however, is only a string of characters known to be of a certain kind (e.g., a string literal, a sequence of letters). In order to construct a token, the lexical analyzer needs a second stage, the ", "evaluator", ", which goes over the characters of the lexeme to produce a ", "value", ". The lexeme's type combined with its value is what properly constitutes a token, which can be given to a parser. Some tokens such as parentheses do not really have values, and so the evaluator function for these can return nothing: only the type is needed. Similarly, sometimes evaluators can suppress a lexeme entirely, concealing it from the parser, which is useful for whitespace and comments. The evaluators for identifiers are usually simple (literally representing the identifier), but may include some ", "unstropping", ". The evaluators for ", "integer literals", " may pass the string on (deferring evaluation to the semantic analysis phase), or may perform evaluation themselves, which can be involved for different bases or floating point numbers. For a simple quoted string literal, the evaluator needs to remove only the quotes, but the evaluator for an ", "escaped string literal", " incorporates a lexer, which unescapes the escape sequences.", "\n", "For example, in the source code of a computer program, the string", "\n", "\n", "net_worth_future", " ", "=", " ", "(", "assets", " ", "-", " ", "liabilities", ");", "\n", "\n", "might be converted into the following lexical token stream; whitespace is suppressed and special characters have no value:", "\n", "\nIDENTIFIER net_worth_future\nEQUALS\nOPEN_PARENTHESIS\nIDENTIFIER assets\nMINUS\nIDENTIFIER liabilities\nCLOSE_PARENTHESIS\nSEMICOLON\n", "\n", "Though it is possible and sometimes necessary, due to licensing restrictions of existing parsers or if the list of tokens is small, to write a lexer by hand, lexers are often generated by automated tools. These tools generally accept regular expressions that describe the tokens allowed in the input stream. Each regular expression is associated with a ", "production rule", " in the lexical grammar of the programming language that evaluates the lexemes matching the regular expression. These tools may generate source code that can be compiled and executed or construct a ", "state transition table", " for a ", "finite-state machine", " (which is plugged into template code for compiling and executing).", "\n", "Regular expressions compactly represent patterns that the characters in lexemes might follow. For example, for an ", "English", "-based language, an IDENTIFIER token might be any English alphabetic character or an underscore, followed by any number of instances of ASCII alphanumeric characters and/or underscores. This could be represented compactly by the string ", "[a-zA-Z_][a-zA-Z_0-9]*", ". This means \"any character a-z, A-Z or _, followed by 0 or more of a-z, A-Z, _ or 0-9\".", "\n", "Regular expressions and the finite-state machines they generate are not powerful enough to handle recursive patterns, such as \"", "n", " opening parentheses, followed by a statement, followed by ", "n", " closing parentheses.\" They are unable to keep count, and verify that ", "n", " is the same on both sides, unless a finite set of permissible values exists for ", "n", ". It takes a full parser to recognize such patterns in their full generality. A parser can push parentheses on a stack and then try to pop them off and see if the stack is empty at the end (see example", "[6]", " in the ", "Structure and Interpretation of Computer Programs", " book).", "\n", "Obstacles", "[", "edit", "]", "\n", "Typically, tokenization occurs at the word level. However, it is sometimes difficult to define what is meant by a \"word\". Often a tokenizer relies on simple heuristics, for example:", "\n", "\n", "Punctuation and whitespace may or may not be included in the resulting list of tokens.", "\n", "All contiguous strings of alphabetic characters are part of one token; likewise with numbers.", "\n", "Tokens are separated by ", "whitespace", " characters, such as a space or line break, or by punctuation characters.", "\n", "\n", "In languages that use inter-word spaces (such as most that use the Latin alphabet, and most programming languages), this approach is fairly straightforward. However, even here there are many edge cases such as ", "contractions", ", ", "hyphenated words", ", ", "emoticons", ", and larger constructs such as ", "URIs", " (which for some purposes may count as single tokens). A classic example is \"New York-based\", which a naive tokenizer may break at the space even though the better break is (arguably) at the hyphen.", "\n", "Tokenization is particularly difficult for languages written in ", "scriptio continua", " which exhibit no word boundaries such as ", "Ancient Greek", ", ", "Chinese", ",", "[7]", " or ", "Thai", ". ", "Agglutinative languages", ", such as Korean, also make tokenization tasks complicated.", "\n", "Some ways to address the more difficult problems include developing more complex heuristics, querying a table of common special-cases, or fitting the tokens to a ", "language model", " that identifies collocations in a later processing step.", "\n", "Software", "[", "edit", "]", "\n", "\n", "Apache OpenNLP", " includes rule based and statistical tokenizers which support many languages", "\n", "U-Tokenizer", " is an API over HTTP that can cut Mandarin and Japanese sentences at word boundary. English is supported as well.", "\n", "HPE Haven OnDemand Text Tokenization API", " (Commercial product, with freemium access) uses Advanced Probabilistic Concept Modelling to determine the weight that the term holds in the specified text indexes", "\n", "The ", "Lex", " tool and its compiler is designed to generate code for fast lexical analysers based on a formal description of the lexical syntax. It is generally considered insufficient for applications with a complex set of lexical rules and severe performance requirements. For example, the ", "GNU Compiler Collection", " (GCC) uses hand-written lexers.", "\n", "\n", "Lexer generator", "[", "edit", "]", "\n", "See also: ", "Parser generator", "\n", "Lexers are often generated by a ", "lexer generator", ", analogous to ", "parser generators", ", and such tools often come together. The most established is ", "lex", ", paired with the ", "yacc", " parser generator, and the free equivalents ", "flex", "/bison. These generators are a form of ", "domain-specific language", ", taking in a lexical specification \u2013 generally regular expressions with some markup \u2013 and emitting a lexer.", "\n", "These tools yield very fast development, which is very important in early development, both to get a working lexer and because a language specification may change often. Further, they often provide advanced features, such as pre- and post-conditions which are hard to program by hand. However, an automatically generated lexer may lack flexibility, and thus may require some manual modification, or an all-manually written lexer.", "\n", "Lexer performance is a concern, and optimizing is worthwhile, more so in stable languages where the lexer is run very often (such as C or HTML). lex/flex-generated lexers are reasonably fast, but improvements of two to three times are possible using more tuned generators. Hand-written lexers are sometimes used, but modern lexer generators produce faster lexers than most hand-coded ones. The lex/flex family of generators uses a table-driven approach which is much less efficient than the directly coded approach.", "[", "dubious", " ", "\u2013 ", "discuss", "]", " With the latter approach the generator produces an engine that directly jumps to follow-up states via goto statements. Tools like re2c", "[8]", " have proven to produce engines that are between two and three times faster than flex produced engines.", "[", "citation needed", "]", " It is in general difficult to hand-write analyzers that perform better than engines generated by these latter tools.", "\n", "List of lexer generators", "[", "edit", "]", "\n", "See also: ", "List of parser generators", "\n", "\n", "ANTLR", " \u2013 can generate lexical analyzers and parsers", "\n", "DFASTAR \u2013 generates DFA matrix table-driven lexers in C++", "\n", "Flex", " \u2013 variant of the classic ", "lex", " for C/C++", "\n", "Ragel", " \u2013 state machine and lexer generator with output in C, C++, ", "C#", ", ", "Objective-C", ", ", "D", ", ", "Java", ", ", "Go", ", and ", "Ruby", "\n", "re2c", " \u2013 lexer generator for ", "C", " and ", "C++", "\n", "\n", "The following lexical analysers can handle ", "Unicode", ":", "\n", "\n", "JavaCC", " \u2013 generates lexical analyzers written in Java", "\n", "JFLex \u2013 lexical analyzer generator for Java", "\n", "AnnoFlex - annotation-based code generator for lexical scanners for Java", "\n", "RE/flex", " - a fast variant of lex/flex for C++ generates scanners with tables or direct code", "\n", "Quex", " \u2013 fast universal lexical analyzer generator for C and C++ written in Python", "\n", "FsLex \u2013 lexer generator for byte and Unicode character input for F#", "\n", "re2c", " \u2013 lexer generator for ", "C", " and ", "C++", "[9]", "\n", "PLY", " - the Python module ply.lex enables the lexical analysis part", "\n", "\n", "Phrase structure", "[", "edit", "]", "\n", "Lexical analysis mainly segments the input stream of characters into tokens, simply grouping the characters into pieces and categorizing them. However, the lexing may be significantly more complex; most simply, lexers may omit tokens or insert added tokens. Omitting tokens, notably whitespace and comments, is very common, when these are not needed by the compiler. Less commonly, added tokens may be inserted. This is done mainly to group tokens into ", "statements", ", or statements into blocks, to simplify the parser.", "\n", "Line continuation", "[", "edit", "]", "\n", "Line continuation", " is a feature of some languages where a newline is normally a statement terminator. Most often, ending a line with a backslash (immediately followed by a ", "newline", ") results in the line being ", "continued", " \u2013 the following line is ", "joined", " to the prior line. This is generally done in the lexer: the backslash and newline are discarded, rather than the newline being tokenized. Examples include ", "bash", ",", "[10]", " other shell scripts and Python.", "[11]", "\n", "Semicolon insertion", "[", "edit", "]", "\n", "Many languages use the semicolon as a statement terminator. Most often this is mandatory, but in some languages the semicolon is optional in many contexts. This is mainly done at the lexer level, where the lexer outputs a semicolon into the token stream, despite one not being present in the input character stream, and is termed ", "semicolon insertion", " or ", "automatic semicolon insertion", ". In these cases, semicolons are part of the formal phrase grammar of the language, but may not be found in input text, as they can be inserted by the lexer. Optional semicolons or other terminators or separators are also sometimes handled at the parser level, notably in the case of ", "trailing commas", " or semicolons.", "\n", "Semicolon insertion is a feature of ", "BCPL", " and its distant descendent ", "Go", ",", "[12]", " though it is absent in B or C.", "[13]", " Semicolon insertion is present in ", "JavaScript", ", though the rules are somewhat complex and much-criticized; to avoid bugs, some recommend always using semicolons, while others use initial semicolons, termed ", "defensive semicolons", ", at the start of potentially ambiguous statements.", "\n", "Semicolon insertion (in languages with semicolon-terminated statements) and line continuation (in languages with newline-terminated statements) can be seen as complementary: semicolon insertion adds a token, even though newlines generally do ", "not", " generate tokens, while line continuation prevents a token from being generated, even though newlines generally ", "do", " generate tokens.", "\n", "Off-side rule", "[", "edit", "]", "\n", "Further information: ", "Off-side rule", "\n", "The ", "off-side rule", " (blocks determined by indenting) can be implemented in the lexer, as in ", "Python", ", where increasing the indenting results in the lexer emitting an INDENT token, and decreasing the indenting results in the lexer emitting a DEDENT token.", "[14]", " These tokens correspond to the opening brace ", "{", " and closing brace ", "}", " in languages that use braces for blocks, and means that the phrase grammar does not depend on whether braces or indenting are used. This requires that the lexer hold state, namely the current indent level, and thus can detect changes in indenting when this changes, and thus the lexical grammar is not ", "context-free", ": INDENT\u2013DEDENT depend on the contextual information of prior indent level.", "\n", "Context-sensitive lexing", "[", "edit", "]", "\n", "Generally lexical grammars are context-free, or almost so, and thus require no looking back or ahead, or backtracking, which allows a simple, clean, and efficient implementation. This also allows simple one-way communication from lexer to parser, without needing any information flowing back to the lexer.", "\n", "There are exceptions, however. Simple examples include: semicolon insertion in Go, which requires looking back one token; concatenation of consecutive string literals in Python,", "[15]", " which requires holding one token in a buffer before emitting it (to see if the next token is another string literal); and the off-side rule in Python, which requires maintaining a count of indent level (indeed, a stack of each indent level). These examples all only require lexical context, and while they complicate a lexer somewhat, they are invisible to the parser and later phases.", "\n", "A more complex example is ", "the lexer hack", " in C, where the token class of a sequence of characters cannot be determined until the semantic analysis phase, since typedef names and variable names are lexically identical but constitute different token classes. Thus in the hack, the lexer calls the semantic analyzer (say, symbol table) and checks if the sequence requires a typedef name. In this case, information must flow back not from the parser only, but from the semantic analyzer back to the lexer, which complicates design.", "\n", "Notes", "[", "edit", "]", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "\n", "^", " ", "www.cs.man.ac.uk", "\n", "^", " ", "page 111, \"Compilers Principles, Techniques, & Tools, 2nd Ed.\" (WorldCat) by Aho, Lam, Sethi and Ullman, as quoted in ", "https://stackoverflow.com/questions/14954721/what-is-the-difference-between-token-and-lexeme", "\n", "^", " ", "Perl 5 Porters. ", "\"perlinterp: Perl 5 version 24.0 documentation\"", ". ", "perldoc.perl.org - Official documentation for the Perl programming language", ". perldoc.perl.org", ". Retrieved ", "26 January", " 2017", ".", "\u00a0", "\n", "^", " ", "Guy Coder (19 February 2013). ", "\"What is the difference between token and lexeme?\"", ". ", "Stack Overflow", ". Stack Exchange Inc", ". Retrieved ", "26 January", " 2017", ".", "\u00a0", "\n", "^", " ", "page 111, \"Compilers Principles, Techniques, & Tools, 2nd Ed.\" (WorldCat) by Aho, Lam, Sethi and Ullman, as quoted in ", "https://stackoverflow.com/questions/14954721/what-is-the-difference-between-token-and-lexeme", "\n", "^", " ", "mitpress.mit.edu", "\n", "^", " ", "Huang, C., Simon, P., Hsieh, S., & Prevot, L. (2007) ", "Rethinking Chinese Word Segmentation: Tokenization, Character Classification, or Word break Identification", "\n", "^", " ", "Bumbulis, P.; Cowan, D. D. (Mar\u2013Dec 1993). \"RE2C: A more versatile scanner generator\". ", "ACM Letters on Programming Languages and Systems", ". ", "2", " (1\u20134): 70\u201384. ", "doi", ":", "10.1145/176454.176487", ".", "\u00a0", "\n", "^", " ", "[1]", ", re2c manual", "\n", "^", " ", "Bash Reference Manual", ", ", "3.1.2.1 Escape Character", "\n", "^", " ", "Python Documentation", ", ", "2. Lexical analysis", ": ", "2.1.5. Explicit line joining", "\n", "^", " ", "Effective Go", ", \"", "Semicolons", "\"", "\n", "^", " ", "\"", "Semicolons in Go", "\", golang-nuts, Rob 'Commander' Pike, 12/10/09", "\n", "^", " ", "Python Documentation", ", ", "2. Lexical analysis", ": ", "2.1.8. Indentation", "\n", "^", " ", "Python Documentation", ", ", "2. Lexical analysis", ": ", "2.4.2. String literal concatenation", "\n", "\n", "\n", "\n", "\n", "\n", "Compiling with C# and Java", ", Pat Terry, 2005, ", "ISBN", "\u00a0", "032126360X", "\n", "Algorithms + Data Structures = Programs", ", Niklaus Wirth, 1975, ", "ISBN", "\u00a0", "0-13-022418-9", "\n", "Compiler Construction", ", Niklaus Wirth, 1996, ", "ISBN", "\u00a0", "0-201-40353-6", "\n", "Sebesta, R. W. (2006). Concepts of programming languages (Seventh edition) pp.\u00a0177. Boston: Pearson/Addison-Wesley.", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "Yang, W.; Tsay, Chey-Woei; Chan, Jien-Tsai (2002). ", "\"On the applicability of the longest-match rule in lexical analysis\"", ". ", "Computer Languages, Systems and Structures", ". Elsevier Science. ", "28", " (3): 273\u2013288. ", "doi", ":", "10.1016/S0096-0551(02)00014-0", ". NSC 86-2213-E-009-021 and NSC 86-2213-E-009-079.", "\u00a0", "\n", "Trim, Craig (Jan 23, 2013). ", "\"The Art of Tokenization\"", ". ", "Developer Works", ". IBM.", "\u00a0", "\n", "Word Mention Segmentation Task", ", an analysis", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 19 January 2018, at 20:15."}, +{"title": "August Capital", "text": ["\n", "August Capital", "\n", "\n", "\n", "Type", "\n", "\n", "Venture fund", "\n", "\n", "\n", "Industry", "\n", "finance", "\n", "\n", "\n", "Founded", "\n", "1995 ", "[1]", "\n", "\n", "\n", "Founder", "\n", "\n", "\n", "\n", "David Marquardt", "\n", "John Johnston", "\n", "\n", "\n", "\n", "\n", "\n", "Website", "\n", "augustcap", ".com", "\n", "\n", "\n", "August Capital", " is a ", "venture capital", " firm founded by ", "David Marquardt", " and John Johnston in 1995. It is focused on information technology and is based in ", "Menlo Park, California", ".", "\n", "Company", "[", "edit", "]", "\n", "August Capital specialized in growth capital and startup investments. The firm has invested in all stages with a focus on early and late stage, management buyouts, and private investments in public equity. The firm has invested in the information technology spectrum including IT infrastructure, data center technologies, systems management, security, storage, and cloud computing systems and software.", "[2]", "\n", "Partner ", "David Hornik", " was on the ", "Midas List", " in 2012.", "[3]", "\n", "Investments include ", "Rocket Lawyer", ", ", "Be Incorporated", ", ", "Seagate", ", ", "Postini", ", ", "Six Apart", ", and ", "StumbleUpon", ".", "[", "citation needed", "]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "\n", "^", " ", "\"August Capital Raises $450 Million For Its Seventh Fund, August VII\"", ".", "\u00a0", "\n", "^", " ", "\"August Capital: Private Company Information - Businessweek\"", ". ", "www.bloomberg.com", ". Retrieved ", "2016-07-19", ".", "\u00a0", "\n", "^", " ", "https://www.forbes.com/lists/midas/2012/midas-list-top-tech-investors_list.html", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " ", "\n", "This article about a private equity or venture capital firm based in the United States is a ", "stub", ". You can help Wikipedia by ", "expanding it", ".", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 24 August 2017, at 12:45."}, +{"title": "List of content management systems", "text": ["\n", "\n", "\n", "\n", "\n", "\n", "The ", "factual accuracy", " of parts of this article (those related to article) ", "may be compromised due to out-of-date information", ". ", "Please update this article to reflect recent events or newly available information.", " ", "(May 2012)", "\n", "\n", "\n", "\n", "This is a ", "list of notable ", "content management systems", " that are used to organize and facilitate collaborative content creation. Many of them are built on top of separate ", "content management frameworks", ".", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Open source software", "\n", "\n", "1.1", " ", "Java", "\n", "\n", "1.1.1", " ", "Java packages/bundle", "\n", "\n", "\n", "1.2", " ", "Microsoft ASP.NET", "\n", "1.3", " ", "Perl", "\n", "1.4", " ", "PHP", "\n", "1.5", " ", "Python", "\n", "1.6", " ", "Ruby on Rails", "\n", "1.7", " ", "ColdFusion Markup Language (CFML)", "\n", "1.8", " ", "JavaScript", "\n", "1.9", " ", "Others", "\n", "\n", "\n", "2", " ", "Software as a service (SaaS)", "\n", "3", " ", "Proprietary software", "\n", "4", " ", "Other content management frameworks", "\n", "5", " ", "See also", "\n", "6", " ", "References", "\n", "7", " ", "External links", "\n", "\n", "\n", "\n", "Open source software", "[", "edit", "]", "\n", "\n", "This section lists free and ", "open-source software", " that can be installed and managed on a web server.", "\n", "\n", "Systems listed on a light purple background are no longer in active development.", "\n", "Java", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "Apache Roller", "\n", "Java", "\n", "HSQL", ", ", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "DB2", ", ", "PostgreSQL", ", ", "Apache Derby", "\n", "5.1.2", "\n", "Apache 2.0 License", "\n", "2015-03-01", "[1]", "[2]", "\n", "\n", "\n", "Ametys CMS", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "JCR", ", ", "Apache Derby", "\n", "3.7.1", "\n", "Apache 2.0 License", "\n", "2015-04-27", "\n", "\n", "\n", "Crafter CMS", "\n", "Java", "\n", "Git", ", ", "Solr", ", ", "CMIS", "\n", "3.0.0", "\n", "GNU", " ", "GPL", " v3", "\n", "2017-08-01", "\n", "\n", "\n", "dotCMS", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "MSSQL", ", ", "PostgreSQL", "\n", "4.2.0", "\n", "GNU", " ", "GPL", " v3", "\n", "2017-10-17", "\n", "\n", "\n", "Liferay", "\n", "Java", "\n", "HSQLDB", ", ", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "DB2", ", ", "Apache Derby", ", ", "Informix", ", ", "InterBase", ", JDataStore, ", "PostgreSQL", ", ", "SAP", ", ", "Sybase", "\n", "7.0.1", "\n", "LGPL", "\n", "2016-06-10", "\n", "\n", "\n", "eXo Platform", " Community Edition", "\n", "Java", "\n", "HSQLDB", ", ", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "DB2", ", ", "Apache Derby", ", ", "PostgreSQL", ", ", "Sybase", "\n", "4.3", "\n", "LGPL", "\n", "2016-01-21", "\n", "\n", "\n", "DSpace", "\n", "Java", "\n", "Oracle", ", ", "PostgreSQL", "\n", "5.0", "\n", "BSD License", "\n", "2015-01-16", "\n", "\n", "\n", "Fedora Commons", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "PostgreSQL", ", ", "Mulgara", " (MPTSTore RDF Semantic Triplestore)", "\n", "4.1.0", "\n", "Apache License", "\n", "2015-02-04", "\n", "\n", "\n", "LogicalDOC", " Community Edition", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "PostgreSQL", "\n", "7.4.2", "[3]", "\n", "LGPL", "\n", "2016-03-24", "\n", "\n", "\n", "Nuxeo EP", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "Ingres", ", ", "PostgreSQL", ", ", "MongoDB", "\n", "7.3", "\n", "LGPL", "\n", "2014-11-12", "\n", "\n", "\n", "OpenCms", "\n", "Java", "\n", "HSQL", ", ", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "DB2", ", ", "PostgreSQL", "\n", "10.5.1", "\n", "LGPL", "\n", "2017-02-15", "\n", "\n", "\n", "Alfresco", " Community Edition", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "PostgreSQL", ", ", "DB2", ",", "\n", "201707", "\n", "LGPL", "\n", "2016-05-17", "\n", "\n", "\n", "Hippo CMS", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", ", ", "Ingres", ", ", "PostgreSQL", ", ", "JCR", "\n", "12.0.2", "[4]", "\n", "Apache 2.0 License", "\n", "2017-10-10", "\n", "\n", "\n", "OpenWGA", "\n", "Java", "\n", "MySQL", ", ", "PostgreSQL", ", ", "IBM DB2", ", ", "HSQLDB", ", ", "Oracle", ", ", "SQL Server", ", ", "IBM Lotus Domino", ", ", "CMIS", "\n", "7.1", "\n", "GPL", " & proprietary", "\n", "2015-02-25", "\n", "\n", "\n", "Jahia", " Community Distribution", "\n", "Java", "\n", "Apache Derby", ", ", "JCR", ", ", "MySQL", ", ", "PostgreSQL", "\n", "7.0.0", "\n", "GPL", "\n", "2014-04-01", "\n", "\n", "\n", "Magnolia", "\n", "Java", "\n", "H2", ", ", "Derby", ", ", "MySQL", ", ", "PostgreSQL", ", ", "Oracle", ", ", "MSSQL", "\n", "5.6", "\n", "GPL", " & proprietary", "\n", "2017-11-15", "\n", "\n", "\n", "OpenKM", "\n", "Java", "\n", "MySQL", ", ", "PostgreSQL", ", ", "Oracle", ", ", "SQL Server", ", ", "HSQLDB", "\n", "6.3.2", "\n", "GPL", "\n", "2016-10-24", "\n", "\n", "\n", "Thingamablog", "\n", "Java", "\n", "\n", "1.5.1", "\n", "GPL", "\n", "2009-11-23", "\n", "\n", "\n", "XWiki", "\n", "Java", "\n", "MySQL", ", ", "PostgreSQL", ", ", "Oracle", ", ", "SQL Server", ", ", "HSQLDB", "\n", "8.4.1", "\n", "LGPL", "\n", "2016-11-22", "\n", "\n", "\n", "Java packages/bundle", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "Apache Lenya", "\n", "Java", ", ", "XML", ", ", "Apache Cocoon", "\n", "\n", "2.0.4", "[5]", "\n", "Apache License", "\n", "2011-03-14", "\n", "\n", "\n", "Daisy", "\n", "Java", ", ", "XML", ", ", "Apache Cocoon", "\n", "MySQL", "\n", "2.4.2", "\n", "Apache License", "\n", "2011-02-21", "\n", "\n", "\n", "Microsoft ASP.NET", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "C1 CMS", "\n", "ASP.NET", " (Web Forms, MVC)", "\n", "XML", ", ", "SQL Server", "\n", "6.1", "\n", "Mozilla Public License", "\n", "2017-04-27", "[6]", "\n", "\n", "\n", "DNN", "\n", "ASP.NET", " (Web Forms, MVC)", "\n", "SQL Server", ", ", "SQL Server Express", ", ", "SQL Azure", "\n", "9.1.1", "\n", "MIT License", "\n", "2017-07-05", "[7]", "\n", "\n", "\n", "Kentico CMS", "\n", "ASP.NET", "\n", "SQL Server", "\n", "10.0", "\n", "Proprietary, ", "Free", "\n", "2016-11-30", "[8]", "\n", "\n", "\n", "mojoPortal", "\n", "ASP.NET", "\n", "SQL Server", ", ", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", ", ", "Firebird", ", ", "SQL CE", "\n", "2.4.1.0", "\n", "CPL", "\n", "2016-04-10", "[9]", "\n", "\n", "\n", "Orchard Project", "\n", "ASP.NET", " (Web Forms, MVC)", "\n", "SQL Server", ", ", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "1.10.1", "\n", "New BSD License", "\n", "2016-05-11", "[10]", "\n", "\n", "\n", "Umbraco", "\n", "ASP.NET", " (Web Forms, MVC)", "\n", "SQL Server", ", ", "SQL CE", ", ", "SQL Azure", ", ", "MySQL", "\n", "7.6.5", "\n", "MIT License", "\n", "2017-08-08", "[11]", "\n", "\n", "\n", "BetterCMS", "\n", "ASP.NET", " (Web Forms, MVC)", "\n", "SQL Server", ", ", "SQL Azure", "[12]", "\n", "2.0.6", "\n", "LGPL", "\n", "2016-06-14", "[13]", "\n", "\n", "\n", "Perl", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "blosxom", "\n", "Perl", "\n", "Flat-file database", "\n", "2.1.2", "\n", "MIT", "\n", "2008-10-02", "\n", "\n", "\n", "Bricolage", "\n", "Perl", " on ", "mod perl", "\n", "MySQL", ", ", "PostgreSQL", ", ", "Oracle", "\n", "2.0.1", "\n", "BSD", "\n", "2011-02-09", "\n", "\n", "\n", "EPrints", "\n", "Perl", " on ", "mod perl", "\n", "MySQL", ", ", "PostgreSQL", "\n", "3.3.15", "\n", "GPL", "\n", "2015-12-22", "[14]", "\n", "\n", "\n", "Foswiki", "\n", "Perl", "\n", "Flat-file database", "\n", "2.1.4", "\n", "GPL", "\n", "2017-06-01", "[15]", "\n", "\n", "\n", "Ikiwiki", "\n", "Perl", "\n", "Git (software)", ", ", "Apache Subversion", ", ", "Mercurial", "\n", "3.20170111", "\n", "GPL", "\n", "2017-01-11", "[16]", "\n", "\n", "\n", "Movable Type", " Open Source", "\n", "Perl", ", ", "mod perl", ", ", "FastCGI", ", w/", "PHP", "\n", "MySQL", "\n", "5.2.13", "\n", "GPL", "\n", "2015-04-14", "[17]", "\n", "\n", "\n", "TWiki", "\n", "Perl", "\n", "Plain files (under version control)", "\n", "6.0.2", "\n", "GPL", "\n", "2015-11-29", "[18]", "\n", "\n", "\n", "Sellerdeck", " eCommerce", "\n", "Perl", "\n", "Flat-file database", ", ", "Flat-file database", "\n", "16.0.3", "\n", "GPL", "\n", "2017-02-20", "\n", "\n", "\n", "SPINE", "\n", "Perl", ", ", "mod perl", "\n", "MySQL", ", ", "PostgreSQL", "\n", "1.2.2", "\n", "GPL", "\n", "2006-12-27", "\n", "\n", "\n", "WebGUI", "\n", "Perl", " on ", "mod perl", "\n", "MySQL", "\n", "7.10.30", "\n", "GPL", "\n", "2016-01-06", "[19]", "\n", "\n", "\n", "PHP", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "ATutor", "\n", "PHP", "\n", "MySQL", "\n", "2.2.2", "\n", "GPL", "\n", "2016-07-01", "[20]", "\n", "\n", "\n", "Backdrop CMS", "\n", "PHP", "\n", "MySQL", "\n", "1.8.0", "\n", "GPLv2+", "\n", "2017-09-16", "[21]", "\n", "\n", "\n", "b2evolution", "\n", "PHP", "\n", "MySQL", ", ", "MariaDB", "[22]", "\n", "6.9.3", "\n", "GPLv2", "\n", "2017-08-25", "[23]", "\n", "\n", "\n", "CMSimple", "\n", "PHP", "\n", "Flat-file database", "\n", "4.7.2", "\n", "GPLv3", "\n", "2017-05-07", "[24]", "\n", "\n", "\n", "CMS Made Simple", "\n", "PHP", "\n", "MySQL", "\n", "2.2.2", "\n", "GPL", "\n", "2017-07-08", "[25]", "\n", "\n", "\n", "Coderity", "\n", "PHP", "\n", "MySQL", "\n", "3.3.13", "\n", "MIT", "\n", "2015-02-27", "[26]", "\n", "\n", "\n", "Composr CMS", "\n", "PHP", "\n", "MySQL", "\n", "9.0.30", "\n", "CPAL", "\n", "2016-09-18", "[27]", "\n", "\n", "\n", "concrete5", "\n", "PHP", "\n", "MySQL", "\n", "8.3.1", "\n", "MIT", "\n", "2017-12-21", "[28]", "\n", "\n", "\n", "Contao", "\n", "PHP", "\n", "MySQL", "\n", "4.4.0", "\n", "LGPL", "\n", "2017-06-16", "[29]", "\n", "\n", "\n", "DokuWiki", "\n", "PHP", "\n", "Flat-file database", "\n", "2017-02-19a", "\n", "GPL", "\n", "2017-02-19", "[30]", "\n", "\n", "\n", "Dotclear", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "2.12", "\n", "GPL", "\n", "2017-07-27", "[31]", "\n", "\n", "\n", "Drupal", "\n", "PHP", "\n", "MariaDB", ", ", "Microsoft SQL Server", ", ", "MySQL", ", ", "Oracle", ", ", "Percona Server", ", ", "PostgreSQL", ", ", "SQLite", "[32]", "\n", "8.4.3", "\n", "GPLv2+", "\n", "2017-12-06", "[33]", "\n", "\n", "\n", "Exponent CMS", "\n", "PHP", "\n", "MySQL", "\n", "2.4.1", "[34]", "\n", "GPL", "\n", "2017-08-18", "[\u00b1]", "\n", "\n", "\n", "eZ Publish", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "Oracle", ", ", "Microsoft SQL Server", "\n", "5.4", "\n", "GPL", "\n", "2014-12-02", "[35]", "\n", "\n", "\n", "eZ Platform", "\n", "PHP", "\n", "MySQL", ", ", "MariaDB", ", ", "PostgreSQL", "\n", "1.7.0", "[36]", "\n", "GPL", "\n", "2016-12-15", "\n", "\n", "\n", "Geeklog", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "Microsoft SQL Server", "\n", "2.1.3", "\n", "GPL", "\n", "2017-06-22", "[37]", "\n", "\n", "\n", "GetSimple CMS", "\n", "PHP", "\n", "Flat-file database", "\n", "3.3.13", "\n", "GPL", "\n", "2016-10-11", "[38]", "\n", "\n", "\n", "Habari", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ",", "[39]", " ", "SQLite", "\n", "0.9.2", "\n", "Apache License", "\n", "2014-09-16", "[40]", "\n", "\n", "\n", "ImpressCMS", "\n", "PHP", "\n", "MySQL", "\n", "1.3.10", "\n", "GPL", "\n", "2016-12-28", "[41]", "\n", "\n", "\n", "ImpressPages", "\n", "PHP", "\n", "MySQL", "\n", "4.8.0", "\n", "GPL", " ", "MIT", "\n", "2016-10-30", "[42]", "\n", "\n", "\n", "Jamroom", "\n", "PHP", "\n", "MySQL", ", ", "MariaDB", ", ", "Percona", "\n", "6.1.0", "\n", "MPL", "\n", "2017-08-30", "[43]", "\n", "\n", "\n", "Joomla!", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "MSSQL", ", ", "SQLite", "\n", "3.8.1", "\n", "GPL", "\n", "2017-10-04", "[44]", "\n", "\n", "\n", "Kajona", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", ", ", "MariaDB", ", ", "Oracle", "\n", "6.2", "\n", "LGPL", "\n", "2017-06-08", "[45]", "\n", "\n", "\n", "Known", "\n", "PHP", "\n", "MySQL", ", ", "MongoDB", "\n", "0.9.2", "\n", "Apache License", "\n", "2016-04-24", "[46]", "\n", "\n", "\n", "Magento", "\n", "PHP", "\n", "MySQL", "\n", "2.1.8", "\n", "OSL Ver. 3", " / ", "AFL Ver. 3", "\n", "2017-08-09", "[47]", "\n", "\n", "\n", "Mambo", "\n", "PHP", "\n", "MySQL", "\n", "4.6.5", "\n", "GPL", "\n", "2008-06-01", "\n", "\n", "\n", "MediaWiki", "\n", "PHP", "\n", "MySQL", ", ", "MariaDB", ", ", "PostgreSQL", ", ", "SQLite", ", ", "MSSQL", "[48]", "\n", "1.30.0", "\n", "GPL", "\n", "2017-12-12", "[49]", "\n", "\n", "\n", "MiaCMS", "\n", "PHP", "\n", "MySQL", "\n", "4.9", "\n", "GPL", "\n", "2009-07-29", "[50]", "\n", "\n", "\n", "Midgard CMS", "\n", "PHP", " (Midgard framework)", "\n", "MySQL", "\n", "12.0.9.2", "\n", "LGPL", "\n", "2012-09-26", "[51]", "\n", "\n", "\n", "MODX", "\n", "PHP", "\n", "MySQL", "\n", "2.5.8", "\n", "GPL", "\n", "2017-09-13", "[52]", "\n", "\n", "\n", "Novius OS", "\n", "PHP", "\n", "MySQL", "\n", "5.0.1 (Elche)", "\n", "AGPLv3", "\n", "2014-07-08", "[53]", "\n", "\n", "\n", "Nucleus CMS", "\n", "PHP", "\n", "MySQL", "\n", "3.64", "\n", "GPL", "\n", "2011-03-14", "[54]", "\n", "\n", "\n", "OctoberCMS", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "431", "\n", "MIT", "\n", "2017-12-19", "[55]", "\n", "\n", "\n", "Omeka", "\n", "PHP", "\n", "MySQL", "\n", "2.5", "\n", "GPL", "\n", "2017-01-31", "[56]", "\n", "\n", "\n", "papaya CMS", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "5.5.2", "\n", "GPL v2", "\n", "2013-02-12", "[57]", "\n", "\n", "\n", "pH7CMS", "\n", "PHP", "\n", "MySQL", ", ", "MariaDB", "\n", "8.0.6", "\n", "GPL 3.0", "\n", "2017-08-27", "[58]", "\n", "\n", "\n", "Phire CMS", "\n", "PHP", "\n", "MySQL", "\n", "2.1.0", "\n", "New BSD License", "\n", "2016-07-07", "[59]", "\n", "\n", "\n", "PHP-Nuke", "\n", "PHP", "\n", "MySQL", "\n", "8.3.2", "\n", "GPL", "\n", "2014-01-30", "[60]", "\n", "\n", "\n", "phpWebLog", "\n", "PHP", "\n", "MySQL", "\n", "0.5.3", "\n", "GPL", "\n", "2001-10-31", "\n", "\n", "\n", "phpWiki", "\n", "PHP", "\n", "MySQL", "\n", "1.5.5", "\n", "GPL", "\n", "2015-12-11", "[61]", "\n", "\n", "\n", "Pimcore", "\n", "PHP", "\n", "MySQL", "\n", "5.1", "\n", "GPL", "\n", "2018-01-02", "[62]", "\n", "\n", "\n", "PivotX", "\n", "PHP", "\n", "MySQL", ", ", "Flat-file database", "\n", "2.3.11", "\n", "GPL", "\n", "2015-06-21", "[63]", "\n", "\n", "\n", "Pixie (CMS)", "\n", "PHP", "\n", "MySQL", "\n", "1.0.4", "\n", "GPL", "\n", "2010-03-21", "\n", "\n", "\n", "Pluck", "\n", "PHP", "\n", "Flat-file database", "\n", "4.7.3", "\n", "GPL3", "\n", "2014-12-08", "[64]", "\n", "\n", "\n", "PmWiki", "\n", "PHP", "\n", "Flat-file database", "[65]", " ", "SQLite", "[66]", "\n", "2.2.106", "[67]", "\n", "GPL", "\n", "2017-12-01", "\n", "\n", "\n", "Prestashop", "\n", "PHP", "\n", "MySQL", "\n", "1.6.1.8", "\n", "Open Software License 3.0", "\n", "2016-10-26", "[68]", "\n", "\n", "\n", "ProcessWire", "\n", "PHP", "\n", "MySQL", "\n", "3.0.62", "\n", "Mozilla Public License 2.0", "\n", "2017-05-12", "[69]", "\n", "\n", "\n", "SMW+", "\n", "PHP", " - ", "MediaWiki", "\n", "MySQL", "\n", "1.7.0", "\n", "GPL", "\n", "2012-04-24", "[70]", "\n", "\n", "\n", "Serendipity", "\n", "PHP", " + ", "Smarty", "\n", "MySQL", ", ", "PostgreSQL", ", ", "MySQLi", ", ", "SQLite", "\n", "2.0.4", "\n", "BSD", "\n", "2016-09-26", "[71]", "\n", "\n", "\n", "SilverStripe", "\n", "PHP", "\n", "MySQL", ", ", "Microsoft SQL Server", ", ", "PostgreSQL", ", ", "SQLite", ", ", "Oracle", "\n", "3.5.3", "\n", "BSD", "\n", "2017-02-21", "[72]", "\n", "\n", "\n", "SPIP", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "3.1.6", "\n", "LGPL", "\n", "2017-06-12", "[73]", "\n", "\n", "\n", "Textpattern", "\n", "PHP", "\n", "MySQL", "\n", "4.6.2", "\n", "GPL", "\n", "2016-10-21", "[74]", "\n", "\n", "\n", "Tiki Wiki CMS Groupware", "\n", "PHP", "\n", "MySQL", "\n", "15.2", "\n", "LGPL", "\n", "2016-07-06", "[75]", "\n", "\n", "\n", "TYPO3", "\n", "PHP", "\n", "MySQL", ", ", "Oracle", ", ", "PostgreSQL", "\n", "8.7.8", "[76]", "\n", "GPL", "\n", "2017-04-04", "[\u00b1]", "\n", "\n", "\n", "Wolf CMS", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "0.8.3.1", "\n", "GPL v3", "\n", "2015-08-10", "[77]", "\n", "\n", "\n", "WordPress", "\n", "PHP", "\n", "MySQL", ", ", "MariaDB", "\n", "4.9.2", "[78]", "\n", "GPL", "\n", "2018-01-16", "[\u00b1]", "\n", "\n", "\n", "Xaraya", "\n", "PHP", "\n", "MySQL", ", ", "PostgreSQL", "\n", "2.4.0", "\n", "GPL", "\n", "2013-02-23", "[79]", "\n", "\n", "\n", "XOOPS", "\n", "PHP", "\n", "MySQL", "\n", "2.5.8", "\n", "GPL", "\n", "2016-05-27", "[80]", "\n", "\n", "\n", "Python", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "django CMS", "\n", "Python", "/", "Django", "\n", "PostgreSQL", ", ", "MySQL", ", ", "SQLite", " 3 and ", "Oracle", "\n", "3.3.0", "\n", "BSD", "\n", "2016-05-27", "\n", "\n", "\n", "Mezzanine", "\n", "Python", "/", "Django", "\n", "PostgreSQL", ", ", "MySQL", ", ", "SQLite", " 3 and ", "Oracle", "\n", "4.2.2", "\n", "BSD", "\n", "2016-11-25", "[81]", "\n", "\n", "\n", "MoinMoin", "\n", "Python", "\n", "Flat-file database", "\n", "1.9.9", "\n", "GPL", "\n", "2016-10-31", "[82]", "\n", "\n", "\n", "Plone", "\n", "Python", "/", "Zope", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", ", ", "Oracle", ", ", "ZODB", ", via ", "Zope", "\n", "5.0.7", "\n", "GPL", "\n", "2017-03-15", "[83]", "\n", "\n", "\n", "Wagtail", "\n", "Python", "/", "Django", "\n", "PostgreSQL", ", ", "MySQL", ", ", "SQLite", " 3 and ", "Oracle", "\n", "1.12.2", "\n", "BSD", "\n", "2017-09-18", "[84]", "\n", "\n", "\n", "Ruby on Rails", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "Alchemy CMS", "\n", "Ruby on Rails", "\n", "PostgreSQL", ", ", "MySQL", ", ", "SQLite", "\n", "3.5", "\n", "BSD", "\n", "2016-12-22", "\n", "\n", "\n", "BrowserCMS", "\n", "Ruby on Rails", "\n", "MySQL", ", ", "SQLite", "\n", "3.5.7", "\n", "LGPL", "\n", "2013-07-05", "\n", "\n", "\n", "Radiant", "\n", "Ruby on Rails", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", ", ", "DB2", "[85]", "\n", "1.1.4", "[86]", "\n", "MIT", "\n", "2013-09-24", "\n", "\n", "\n", "Refinery CMS", "\n", "Ruby on Rails", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "3.0.5", "[87]", "\n", "MIT", "\n", "2016-11-23", "\n", "\n", "\n", "Typo", "\n", "Ruby on Rails", "\n", "MySQL", ", ", "PostgreSQL", ", ", "SQLite", "\n", "8.3.3", "[88]", "\n", "MIT", "\n", "2016-11-03", "\n", "\n", "\n", "ColdFusion Markup Language (CFML)", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "ContentBox Modular CMS", "\n", "Lucee", " / ", "Railo", " / ", "Adobe ColdFusion", "\n", "MySQL", "/", "Microsoft SQL Server", "/", "PostgreSQL", "/", "HSQLDB", "/", "Apache Derby", "\n", "2.1.0", "\n", "Apache License", " or proprietary", "\n", "2015-05-05", "[89]", "\n", "\n", "\n", "Mura CMS", "\n", "Lucee", " / ", "Railo", " / ", "OpenBD", " / ", "Adobe ColdFusion", "\n", "MySQL", "/", "Microsoft SQL Server", "/", "Oracle", "\n", "7.06858", "\n", "GPL", " or proprietary", "\n", "2017-01-03", "[90]", "\n", "\n", "\n", "FarCry CMS", "\n", "Lucee", " / ", "Railo", " / ", "OpenBD", " / ", "Adobe ColdFusion", "\n", "MySQL", "/", "Microsoft SQL Server", "/", "Oracle", "/", "Postgres", "\n", "7.0.7", "\n", "GPL", " or proprietary", "\n", "2015-01-14", "[91]", "\n", "\n", "\n", "JavaScript", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "Ghost", "\n", "NodeJS", " (", "JavaScript", ")", "\n", "SQLite", ", ", "MySQL", "\n", "0.11.9", "[92]", "\n", "MIT", "\n", "2017-05-16", "\n", "\n", "\n", "TiddlyWiki", "\n", "JavaScript", "\n", "Flat-file database", "\n", "5.1.14", "[93]", "\n", "BSD license", "\n", "2017-04-27", "\n", "\n", "\n", "Others", "[", "edit", "]", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "\n", "\n", "OpenACS", "\n", "Tcl", " ", "AOLserver", "\n", "PostgreSQL", "/", "Oracle", "\n", "5.9.0", "\n", "GPL", "\n", "2015-12-01", "[94]", "\n", "\n", "\n", "Software as a service (SaaS)", "[", "edit", "]", "\n", "\n", "This section lists ", "proprietary software", " that includes software, hosting, and support with a single vendor. This section includes free services.", "\n", "\n", "\n", "\n", "Name", "\n", "Licensed version available", "\n", "Last stable version", "\n", "Web content management", "\n", "Group content management", "\n", "Enterprise content management", "\n", "\n", "\n", "Accrisoft Freedom", "\n", "Yes", "\n", "10.2", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Adobe Business Catalyst", "\n", "\n", "V4", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Alfresco", " Cloud", "\n", "Yes (Alfresco Community & Enterprise)", "\n", "2012.05", "\n", "No", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Crafter CMS", " Cloud", "\n", "Yes (Crafter CMS Enterprise)", "\n", "2017.08", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "censhare", "\n", "Yes", "\n", "2017.02", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Clickability", " (", "Limelight Networks", ")", "\n", "No", "\n", "\n", "Yes", "\n", "No", "\n", "No", "\n", "\n", "\n", "Content SORT", "\n", "Yes", "\n", "2013.11", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "dotCMS", " Cloud", "[95]", "\n", "Yes", "\n", "4.2.0", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Evoq based on ", "DNN", "/DotNetNuke", "\n", "Yes", "\n", "9.1", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "eXo", " Cloud", "\n", "Yes", "\n", "2014.01", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Frontis Archive Publishing System", "\n", "Yes", "\n", "V3.12.01.11", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Huddle", "\n", "Yes", "\n", "2012", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Microsoft Office 365", "\n", "Yes (MS SharePoint, MS Lync, MS Exchange, MS Office)", "\n", "2013", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "nuBuilder", "\n", "Yes", "\n", "2014", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "O3Spaces", "\n", "Yes", "\n", "3.2.1", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "OU Campus", "\n", "Yes", "\n", "10.2.4", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "\n", "Polopoly Web CMS", "\n", "\n", "10.2", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "Quintype", "\n", "Yes", "\n", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "uCoz", "\n", "\n", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "Windows Live", "\n", "No", "\n", "2011", "\n", "No", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "Xait", "Porter", "\n", "Yes", "\n", "4.9.6", "\n", "No", "\n", "No", "\n", "Yes", "\n", "\n", "\n", "Zesty.io", "\n", "Yes (Multi-Tenant SaaS)", "\n", "Versionless", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Proprietary software", "[", "edit", "]", "\n", "\n", "This section lists ", "proprietary software", " to be installed and managed on a user's own server. This section includes ", "freeware", " proprietary software.", "\n", "\n", "\nSystems listed on a light purple background are no longer in active development.", "\n", "\n", "\n", "Name", "\n", "Platform", "\n", "Supported databases", "\n", "Latest stable release", "\n", "Licenses", "\n", "Latest release date", "\n", "Web content management", "\n", "Group web content management", "\n", "Enterprise content management", "\n", "\n", "\n", "Alfresco", " (Enterprise & Community Edition)", "\n", "Java", "\n", "Oracle", ", ", "SQL Server", ", ", "MySQL", ", ", "PostgreSQL", ", ", "DB2", "\n", "4.0.2 Enterprise, 4.2.c Community", "\n", "Open Source", "\n", "2015-03", "[96]", "\n", "No", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Altitude3.Net", "\n", "ASP.NET", "\n", "SQL Server", "\n", "2015.07.14", "\n", "Proprietary software", "\n", "2015-7-14", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "censhare", "\n", "Java", "\n", "Oracle", "\n", "2017.2", "\n", "Proprietary software", "\n", "2017-05-12", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Contentverse", "\n", "Java", "\n", "Oracle", ", ", "SQL Server", "\n", "8.1", "\n", "Proprietary software", "\n", "2014", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Contegro", "\n", "ASP.NET", "\n", "SQL Server", "\n", "4.0.0", "\n", "Proprietary software", "\n", "2010-17-11", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "CoreMedia WCM", "\n", "Java", "\n", "JDBC-compliant databases", "\n", "8", "\n", "\n", "2015-03-19", "\n", "Yes", "\n", "No", "\n", "Yes", "\n", "\n", "\n", "DocLogix", "\n", "ASP.NET", "\n", "SQL Server", "\n", "10.0.0", "\n", "Proprietary software", "\n", "2015-12-15", "\n", "No", "\n", "No", "\n", "Yes", "\n", "\n", "\n", "dotCMS", "\n", "Java", "\n", "Oracle", ", ", "SQL Server", ", ", "MySQL", ", ", "PostgreSQL", "\n", "4.2.0", "\n", "Proprietary software", "\n", "2017-10-17", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Evoq based on ", "DotNetNuke", " platform", "\n", "ASP.NET", "\n", "SQL Server", "\n", "9.1", "\n", "Proprietary software based on open source project", "\n", "2017-09-05", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Ektron CMS", "\n", "ASP.NET", "\n", "SQL Server", "\n", "9.20", "\n", "Proprietary software", "\n", "2016-12-09", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Elcom CMS", "\n", "ASP.NET", "\n", "SQL Server", "\n", "9.0", "\n", "Proprietary software", "\n", "2011-02-15", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "OpenText ", "Documentum", "\n", "Java", "\n", "Oracle", ", ", "SQL Server", ", ", "DB2", "\n", "7.3", "\n", "Proprietary software", "\n", "2016-11-10", "\n", "No", "\n", "No", "\n", "Yes", "\n", "\n", "\n", "Episerver CMS", "\n", "ASP.NET", "\n", "SQL Server", "\n", "10", "\n", "Proprietary software", "\n", "2017-01-16", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "ExpressionEngine", "\n", "PHP", "\n", "MySQL", "\n", "3.4.5", "\n", "Proprietary software", "\n", "2016-12-06", "\n", "Yes", "\n", "No", "\n", "Yes", "\n", "\n", "\n", "Hyland", " OnBase ECM", "\n", ".NET", "\n", "SQL Server", ", Oracle", "\n", "\n", "\n", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "IBM Enterprise Content Management", "\n", "Java", "\n", "Oracle", ", ", "DB2", "\n", "8.5", "\n", "Proprietary software", "\n", "2013", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "OpenText ", "Teamsite", "\n", "Java, .Net, XML, XSLT", "\n", "Oracle", ", ", "SQL Server", ", ", "DB2", ", ", "MySQL", "\n", "16.2", "\n", "Proprietary software", "\n", "2017-04", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Jadu", "\n", "PHP", "\n", "MySQL", ", ", "SQL Server", "\n", "Continuously Released", "\n", "Proprietary software", "\n", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "Jahia", " Enterprise Distribution", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "PostgreSQL", ", ", "Microsoft SQL Server", "\n", "6.6.2.3", "\n", "Proprietary software", "\n", "2013-12-20", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Kentico CMS", "\n", "ASP.NET", "\n", "SQL Server", "\n", "8.1", "\n", "Proprietary software", "\n", "2016-10-30", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Movable Type", "\n", "Perl", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", "\n", "6.3.2", "\n", "Proprietary", "\n", "2016-09-27", "[97]", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "nuBuilder", "\n", "PHP", ", ", "JavaScript", ", ", "SQL", ", ", "AJAX", ", ", "jQuery", " and ", "JSON", "\n", "MySQL", "\n", "pro (3, previously the version system was numeric)", "\n", "Open source", "\n", "2014-2", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Xait", "Porter (local license)", "\n", "PHP", "\n", "Oracle", "\n", "4.9.6", "\n", "Proprietary software", "\n", "2013-04", "\n", "No", "\n", "No", "\n", "Yes", "\n", "\n", "\n", "Oracle WebCenter Content", "\n(formerly Universal Content Management)", "\n", "Java", "\n", "Oracle", "\n", "11g", "\n", "\n", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "OU Campus", "\n", "Java", "\n", "MySQL", ", ", "Microsoft SQL Server", ", SAP Sybase ASE", "\n", "10.2.4", "\n", "Proprietary software", "\n", "2015-06-24", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Pulse CMS", "\n", "PHP", "\n", "Flat-file database", "\n", "4.6.2", "\n", "\n", "2016-12-20", "[98]", "\n", "Yes", "\n", "No", "\n", "No", "\n", "\n", "\n", "Microsoft ", "SharePoint", "\n", "ASP.NET", "\n", "SQL Server", " (2005, 2008 or 2012), SQL Express", "\n", "6.0", "\n", "Proprietary, Open API", "\n", "2016-05-04", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Sitecore", "\n", "ASP.NET", " (Webforms or MVC)", "\n", "SQL Server", " (2005, 2008, 2012), Oracle", "\n", "8.2.5", "\n", "Proprietary software", "\n", "2017-08-01", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Sitekit CMS", "\n", "ASP.NET", "\n", "SQL Server", "\n", "9.5", "\n", "Proprietary software", "\n", "2012-02-01", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "Telligent Community", "\n", "ASP.NET", "\n", "SQL Server", "\n", "5.0", "\n", "\n", "2009-06-26", "\n", "Yes", "\n", "Yes", "\n", "No", "\n", "\n", "\n", "TerminalFour", " (SiteManager)", "\n", "Java", "\n", "MySQL", ", ", "Oracle", ", ", "SQL Server", "\n", "8.1.9.9", "\n", "Proprietary", "\n", "2017-06-24", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Webnodes CMS", "\n", "ASP.NET", "\n", "SQL Server 2005+", ", ", "SQLCE", ", ", "MySQL", "\n", "3.6", "\n", "Proprietary", "\n", "2011-06-30", "\n", "Yes", "\n", "Yes", "\n", "Yes", "\n", "\n", "\n", "Other content management frameworks", "[", "edit", "]", "\n", "A ", "content management framework", " (", "CMF", ") is a system that facilitates the use of reusable components or customized software for managing Web content. It shares aspects of a ", "Web application framework", " and a ", "content management system", " (CMS).", "\n", "Below is a list of notable systems that claim to be CMFs.", "\n", "\n", "\n", "Name", "\n", "Technologies", "\n", "\n", "\n", "Apache Jackrabbit", "\n", "Java", "\n", "\n", "\n", "AxKit", "\n", "Perl", "\n", "\n", "\n", "Grand Central", "\n", "MySQL", " and PHP\u00a05", "\n", "\n", "\n", "Jakarta Slide", "\n", "Java", "\n", "\n", "\n", "Open Semantic Framework", "\n", "Drupal", ", ", "OWL", ", ", "PHP", ", and ", "RDF", "\n", "\n", "\n", "RadPHP", "\n", "MySQL, PHP 5.6+, PostgreSQL, and etc.", "\n", "\n", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Software portal", "\n", "\n", "\n", "\n", "Comparison of web frameworks", "\n", "Comparison of wiki software", "\n", "List of content management frameworks", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"Apache Download Mirrors\"", ". apache.org", ". Retrieved ", "2015-11-07", ".", "\u00a0", "\n", "^", " ", "\"Index of /roller/roller-5.1/v5.1.2\"", ". is.co.za", ". Retrieved ", "2015-11-07", ".", "\u00a0", "\n", "^", " ", "\"OpenSource Document Management 7.4.2 LogicalDOC DMS\"", ". ", "sourceforge.net", ".", "\u00a0", "\n", "^", " ", "\"Hippo CMS Release Notes Overview - Enterprise Java Content management system - Hippo CMS\"", ". ", "onehippo.org", ".", "\u00a0", "\n", "^", " ", "[Announce] Apache Lenya 2.0.4 released", ". Mail-archives.apache.org (2011-03-14). Retrieved on 2013-08-11.", "\n", "^", " ", "Composite C1 - Release History", ". Docs.composite.net. Retrieved on 2013-08-11.", "\n", "^", " ", "\"Releases \u00b7 dnnsoftware_Dnn.Platform\"", ". ", "GitHub", ". GitHub", ". Retrieved ", "27 September", " 2017", ".", "\u00a0", "\n", "^", " ", "Kentico Version History", "\n", "^", " ", "[1]", ". mojoPortal. Retrieved on 2016-04-10.", "\n", "^", " ", "http://docs.orchardproject.net/Documentation/Orchard-1-10-1.Release-Notes", "\n", "^", " ", "Umbraco releases", "\n", "^", " ", "\"Better CMS for Developers\"", ". devbridge.com. Archived from ", "the original", " on 2016-04-16", ". Retrieved ", "2016-05-13", ".", "\u00a0", "\n", "^", " ", "\"Sensenet ECM Release Notes\"", ". Sense/Net Inc.", "\u00a0", "\n", "^", " ", "\"EPrints 3.3.15 available to download\"", ". eprints.org", ". Retrieved ", "20 July", " 2016", ".", "\u00a0", "\n", "^", " ", "https://blog.foswiki.org/Blog/Foswiki214IsReleased", "\n", "^", " ", "http://ikiwiki.info/news/version_3.20170111//", "\n", "^", " ", "\"Movable Type 6.0.8 and 5.2.13 released to close security vulnerability\"", ". moveabletype.org", ". Retrieved ", "10 January", " 2017", ".", "\u00a0", "\n", "^", " ", "http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201511x1", "\n", "^", " ", "http://blog.webgui.org/post/136751315064/webgui-71030-stable-release", "\n", "^", " ", "\"ATutor 2.2.2 Released\"", ". atutor.ca", ". Retrieved ", "23 July", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Roadmap\"", ". ", "Backdrop CMS", ". Retrieved ", "2017-09-18", ".", "\u00a0", "\n", "^", " ", "\"System requirements\"", ". ", "b2evolution.net", ".", "\u00a0", "\n", "^", " ", "http://b2evolution.net/downloads/", "\n", "^", " ", "Gert Ebersbach. ", "\"CMSimple\"", ". ", "cmsimple.org", ".", "\u00a0", "\n", "^", " ", "http://www.cmsmadesimple.org/downloads/", "\n", "^", " ", "https://github.com/coderity/app", "\n", "^", " ", "\"Composr 10 RC18 released!\"", ". ", "Composr CMS", ". Retrieved ", "2016-09-25", ".", "\u00a0", "\n", "^", " ", "Version History", ". concrete5. Retrieved on 2017-12-21.", "\n", "^", " ", "Contao 4.4.0 is available", ". Contao.org.", "\n", "^", " ", "DokuWiki Changelog", ". dokuwiki.org. Retrieved 2017-02-24", "\n", "^", " ", "https://dotclear.org/", "\n", "^", " ", "\"System requirements\"", ". Drupal.org", ". Retrieved ", "2017-07-02", ".", "\u00a0", "\n", "^", " ", "\"Releases for Drupal core\"", ". ", "drupal.org", ". Retrieved ", "2017-12-22", ".", "\u00a0", "\n", "^", " ", "\"Version 2.4.1 Released\"", ". exponentcms.org", ". Retrieved ", "2017-08-19", ".", "\u00a0", "\n", "^", " ", "\"Introducing eZ Publish Platform 5.4\"", ". eZ Systems", ". Retrieved ", "2014-12-12", ".", "\u00a0", "\n", "^", " ", "\"Release notes\"", ". eZ Systems.", "\u00a0", "\n", "^", " ", "\"2.1.3\"", ". Geeklog", ". Retrieved ", "2017-07-26", ".", "\u00a0", "\n", "^", " ", "\"Version Change Log | GetSimple CMS\"", ". ", "get-simple.info", ".", "\u00a0", "\n", "^", " ", "\"FAQ\"", ". ", "habariproject.org", ".", "\u00a0", "\n", "^", " ", "\"Habari Project\"", ". habariproject.org", ". Retrieved ", "2016-05-13", ".", "\u00a0", "\n", "^", " ", "https://sourceforge.net/projects/impresscms/files/", "\n", "^", " ", "\"ImpressPages 4.8.0\"", ". ", "impresspages.org", ".", "\u00a0", "\n", "^", " ", "\"Jamroom 6.1 Has Been Released\"", ". Jamroom", ". Retrieved ", "2017-08-30", ".", "\u00a0", "\n", "^", " ", "\"Joomla! 3.8.1 Released\"", ". ", "Joomla.org", ". 2017-10-04", ". Retrieved ", "2017-11-02", ".", "\u00a0", "\n", "^", " ", "\"Releases\"", ". github.com", ". Retrieved ", "10 June", " 2017", ".", "\u00a0", "\n", "^", " ", "https://github.com/idno/Known/releases", "\n", "^", " ", "\"Open Source Ecommerce Software & Solutions - Magento\"", ". ", "magentocommerce.com", ".", "\u00a0", "\n", "^", " ", "https://www.mediawiki.org/wiki/Manual:Installation_requirements#Database_server", "\n", "^", " ", "\"Welcome to MediaWiki.org\"", ". News section", ". Retrieved ", "12 December", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Home - MiaCMS Official Website\"", ". Miacms.org", ". Retrieved ", "2014-02-23", ".", "\u00a0", "\n", "^", " ", "\"Midgard2 12.09.1 \"Gjallarhorn\" released\"", " (Press release). The Midgard Project. Archived from ", "the original", " on 2012-10-15.", "\u00a0", "\n", "^", " ", "MODX Systems, LLC. ", "\"Downloads\"", ". MODX.", "\u00a0", "\n", "^", " ", "novius-os. ", "\"novius-os/CHANGELOG.md at elche \u00b7 novius-os/novius-os \u00b7 GitHub\"", ". Github.com", ". Retrieved ", "2014-02-23", ".", "\u00a0", "\n", "^", " ", "\"Nucleus CMS: Pure Publishing\"", ". ", "nucleuscms.org", ".", "\u00a0", "\n", "^", " ", "\"OctoberCMS Changelog\"", ".", "\u00a0", "\n", "^", " ", "\"Meet Omeka Classic 2.5 \u2013 Omeka\"", ". ", "omeka.org", ". Retrieved ", "2017-02-06", ".", "\u00a0", "\n", "^", " ", "\"papaya CMS / Open Source Content Management System (GPL) - Download\"", ". Papaya-cms.com", ". Retrieved ", "2014-02-23", ".", "\u00a0", "\n", "^", " ", "https://ph7cms.com/ph7cms-8-0-6-released/", "\n", "^", " ", "https://github.com/phirecms/phirecms/releases", "\n", "^", " ", "\"PHP-Nuke 8.3.2\"", ". ", "installatron.com", ".", "\u00a0", "\n", "^", " ", "carstenklapp. ", "\"PhpWiki\"", ". ", "SourceForge", ".", "\u00a0", "\n", "^", " ", "\"Get on board and download Pimcore! \u00b7 pimcore/pimcore\"", ". pimcore.org", ". Retrieved ", "2018-01-02", ".", "\u00a0", "\n", "^", " ", "\"PivotX 2.3.11 released - PivotX Blog\"", ". ", "pivotx.net", ".", "\u00a0", "\n", "^", " ", "\"home \u00b7 news \u00b7 Security Release 4.7.3\"", ". ", "pluck-cms.org", ".", "\u00a0", "\n", "^", " ", "\"PmWiki - PmWiki / FlatFileAdvantages\"", ". ", "pmwiki.org", ".", "\u00a0", "\n", "^", " ", "\"PmWiki - Cookbook / SQLite PageStore class\"", ". ", "pmwiki.org", ".", "\u00a0", "\n", "^", " ", "\"Release Notes\"", ". pmwiki.org", ". Retrieved ", "2018-01-05", ".", "\u00a0", "\n", "^", " ", "\"Download Older and Latest PrestaShop Versions. PrestaShop Developers\"", ". ", "prestashop.com", ".", "\u00a0", "\n", "^", " ", "\"ProcessWire 3.0.62\"", ". ", "processwire.com", ".", "\u00a0", "\n", "^", " ", "\"smwplus.com\"", ". smwplus.com", ". Retrieved ", "2014-02-23", ".", "\u00a0", "\n", "^", " ", "\"Serendipity 2.0.4 and 2.1-beta2 released\"", ". s9y.org. 2016-09-26", ". Retrieved ", "2016-11-18", ".", "\u00a0", "\n", "^", " ", "\"Download\"", ". ", "silverstripe.org", ".", "\u00a0", "\n", "^", " ", "http://www.spip.net/en_download", "\n", "^", " ", "\"Textpattern CMS 4.6.2 released: version string theory\"", ". Textpattern.com. 2016-10-21", ". Retrieved ", "2017-08-15", ".", "\u00a0", "\n", "^", " ", "\"Tiki 15.2, Tiki 14.4 and Tiki 12.9 released\"", ". Info.tiki.org. 2015-05-23", ". Retrieved ", "2016-07-07", ".", "\u00a0", "\n", "^", " ", "\"Download TYPO3\"", ". typo3.org", ". Retrieved ", "2017-10-24", ".", "\u00a0", "\n", "^", " ", "\"Releasing Wolf CMS 0.8.3.1\"", ". Retrieved ", "2015-08-15", ".", "\u00a0", "\n", "^", " ", "\"WordPress Versions\"", ". wordpress.org", ". Retrieved ", "2018-01-17", ".", "\u00a0", "\n", "^", " ", "http://www.xaraya.com/index.php/news/946", "\n", "^", " ", "http://xoops.org/modules/core/", "\n", "^", " ", "\"Mezzanine\"", ".", "\u00a0", "\n", "^", " ", "\"MoinMoinDownload - MoinMoin\"", ". ", "moinmo.in", ".", "\u00a0", "\n", "^", " ", "https://plone.org/products/plone/releases/5.0.4", "\n", "^", " ", "\"wagtail CHANGELOG\"", ". Retrieved ", "2017-09-29", ".", "\u00a0", "\n", "^", " ", "\"Download\"", ". ", "radiantcms.org", ".", "\u00a0", "\n", "^", " ", "\"radiant - RubyGems.org - your community gem host\"", ". ", "rubygems.org", ".", "\u00a0", "\n", "^", " ", "\"Refinery CMS 3.0.5 Released\"", ".", "\u00a0", "\n", "^", " ", "https://github.com/publify/publify/releases", "\n", "^", " ", "\"ContentBox\"", ". ortussolutions.com", ". Retrieved ", "2016-05-13", ".", "\u00a0", "\n", "^", " ", "http://www.getmura.com/blog/critical-security-update-for-mura-cms-all-versions-prior-to-7-0-6852/", "\n", "^", " ", "\"FarCry 7 (codename: Shiny) released\"", ". ", "FarCry Core Blog", ".", "\u00a0", "\n", "^", " ", "Ghost", " ", "https://github.com/TryGhost/Ghost/releases/tag/0.11.9", ".", "\u00a0", " ", "Missing or empty ", "|title=", " (", "help", ")", "\n", "^", " ", "\"TiddlyWiki \u2014 a non-linear personal web notebook\"", ". tiddlywiki.com", ". Retrieved ", "2017-06-16", ".", "\u00a0", "\n", "^", " ", "\"OpenACS 5.9.0 final released\"", ". ", "openacs.org", ".", "\u00a0", "\n", "^", " ", "dotCMS Cloud Content Management System", "\n", "^", " ", "\"alfrescowiki\"", ". ", "wiki.alfresco.com", ". Retrieved ", "2016-01-27", ".", "\u00a0", "\n", "^", " ", "Movable Type 6.3.2 released", ". MovableType.org (2016-09-27). Retrieved on 2017-01-10.", "\n", "^", " ", "\"Pulse 4.6.2 is here with deeper blog migration and more fixes\"", ". pulsecms.com", ". Retrieved ", "2016-12-20", ".", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", " Media related to ", "Content management systems", " at Wikimedia Commons", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Content management systems", " (", "list", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Enterprise content management (ECM)", "\n", "Web content management system (WCMS)", "\n", "Component content management system (CCMS)", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Website management", "\n", "\n", "\n", "\n", "Concepts", "\n", "\n", "\n", "\n", "Overselling", "\n", "Web document", "\n", "Web content", "\n", "Web content lifecycle", "\n", "Web hosting service", "\n", "Web server", "\n", "Webmaster", "\n", "Website governance", "\n", "\n", "\n", "\n", "\n", "\n", "Web hosting control panels", " (", "comparison", ")", "\n", "\n", "\n", "\n", "AlternC", "\n", "cPanel", "\n", "DirectAdmin", "\n", "Domain Technologie Control", "\n", "GNUPanel", "\n", "H-Sphere", "\n", "i-MSCP", "\n", "InterWorx", "\n", "ISPConfig", "\n", "Kloxo", "\n", "Kloxo-MR", "\n", "Plesk", "\n", "Usermin", "\n", "Webmin", "\n", "\n", "\n", "\n", "\n", "\n", "Top-level domain", " registries", "\n", "\n", "\n", "\n", "Afilias", "\n", "CentralNic", "\n", "CIRA", "\n", "Donuts", "\n", "Neustar", "\n", "OVH", "\n", "Public Interest Registry", "\n", "Uniregistry", "\n", "Verisign", "\n", "\n", "\n", "\n", "\n", "\n", "Domain name", " managers and ", "registrars", "\n", "\n", "\n", "\n", "AusRegistry", "\n", "CZ.NIC", "\n", "CNNIC", "\n", "DENIC", "\n", "DNPric.es", "\n", "DNS Belgium", "\n", "Domainz", "\n", "Dynadot", "\n", "Enom", "\n", "Freenom", "\n", "Gandi", "\n", "GoDaddy", "\n", "Hover", "\n", "Infomaniak", "\n", "Japan Registry Services", "\n", "Jimdo", "\n", "Melbourne IT", "\n", "Museum Domain Management Association", "\n", "Name.com", "\n", "Namecheap", "\n", "Network Solutions", "\n", "Net4", "\n", "NIC M\u00e9xico", "\n", "Register.com", "\n", "Tucows", "\n", "Uniregistry", "\n", "UK2", "\n", "Web.com", "\n", "Wix.com", "\n", "\n", "\n", "\n", "\n", "\n", "Web content management system", "\n", "\n", "\n", "\n", "Document management system", "\n", "Wiki software", "\n", "Blog software", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 17 January 2018, at 16:48."}, +{"title": "Node.js", "text": ["\n", "\n", "\n", "\n", "\n", "\n", "This article ", "relies too much on ", "references", " to ", "primary sources", ". ", "Please improve this by adding ", "secondary or tertiary sources", ".", " ", "(September 2015)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "\n", "Node.js", "\n", "\n", "\n", "\n", "\n", "Original author(s)", "\n", "Ryan Dahl", "\n", "\n", "\n", "Developer(s)", "\n", "Node.js Developers", ", ", "Joyent", ", ", "contributors", "\n", "\n", "\n", "Initial release", "\n", "May\u00a027, 2009", "; 8 years ago", "\u00a0(", "2009-05-27", ")", "[1]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "\n", "9.4.0 & 8.9.4\u00a0(LTS) / January\u00a010, 2018", "; 8 days ago", "\u00a0(", "2018-01-10", ")", "[2]", " & January\u00a02, 2018", "; 16 days ago", "\u00a0(", "2018-01-02", ")", "[3]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Repository", "\n", "\n", "\n", "\n", "https://github.com/nodejs/node", "\n", "\n", "\n", "\n", "\n", "\n", "Development status", "\n", "Active (", "complete release list", ")", "\n", "\n", "\n", "Written in", "\n", "C", ", ", "C++", ", ", "JavaScript", "\n", "\n", "\n", "Operating system", "\n", "Linux", ", ", "macOS", ", ", "Solaris", ", ", "FreeBSD", ", ", "OpenBSD", ", ", "Microsoft Windows", " (older versions require ", "Cygwin", "), ", "webOS", ", ", "NonStop OS", "\n", "\n", "\n", "Type", "\n", "Event-driven", " ", "networking", "\n", "\n", "\n", "License", "\n", "MIT", "[4]", "\n", "\n", "\n", "Website", "\n", "nodejs", ".org", "\n", "\n", "\n", "Node.js", " is an ", "open-source", ", ", "cross-platform", " ", "JavaScript", " ", "run-time environment", " for executing JavaScript code ", "server-side", ". Historically, JavaScript was used primarily for ", "client-side scripting", ", in which scripts written in JavaScript are embedded in a webpage's HTML, to be run client-side by a JavaScript engine in the user's web browser. Node.js enables JavaScript to be used for ", "server-side scripting", ", and runs scripts server-side to produce ", "dynamic web page", " content ", "before", " the page is sent to the user's web browser. Consequently, Node.js has become one of the foundational elements of the \"JavaScript everywhere\" paradigm,", "[5]", " allowing ", "web application", " development to unify around a single programming language, rather than rely on a different language for writing server side scripts.", "\n", "Though ", ".js", " is the conventional ", "filename extension", " for JavaScript code, the name \"Node.js\" does not refer to a particular file in this context and is merely the name of the product. Node.js has an ", "event-driven architecture", " capable of ", "asynchronous I/O", ". These design choices aim to optimize ", "throughput", " and ", "scalability", " in ", "Web applications", " with many input/output operations, as well as for ", "real-time Web", " applications (e.g., ", "real-time communication", " programs and ", "browser games", ").", "[6]", "\n", "The Node.js ", "distributed development", " project, governed by the Node.js Foundation,", "[7]", " is facilitated by the ", "Linux Foundation", "'s Collaborative Projects program.", "[8]", "\n", "Corporate users of Node.js software include ", "GoDaddy", ",", "[9]", " ", "Groupon", ",", "[10]", " ", "IBM", ",", "[11]", " ", "LinkedIn", ",", "[12]", "[13]", " ", "Microsoft", ",", "[14]", "[15]", " ", "Netflix", ",", "[16]", " ", "PayPal", ",", "[17]", "[18]", " ", "Rakuten", ", ", "SAP", ", ", "Tuenti", ",", "[19]", " ", "Voxer", ",", "[20]", " ", "Walmart", ",", "[21]", " ", "Yahoo!", ",", "[22]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "2", " ", "Overview", "\n", "\n", "2.1", " ", "Platform architecture", "\n", "2.2", " ", "Industry support", "\n", "\n", "\n", "3", " ", "Releases", "\n", "4", " ", "Technical details", "\n", "\n", "4.1", " ", "Threading", "\n", "4.2", " ", "V8", "\n", "4.3", " ", "Package management", "\n", "4.4", " ", "Unified API", "\n", "4.5", " ", "Event loop", "\n", "\n", "\n", "5", " ", "Project governance", "\n", "6", " ", "Alternatives", "\n", "7", " ", "See also", "\n", "8", " ", "References", "\n", "9", " ", "Further reading", "\n", "10", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "\n", "\n", "\n", "\nRyan Dahl, creator of Node.js, in 2010", "\n", "\n", "\n", "Node.js was originally written by ", "Ryan Dahl", " in 2009,", "[23]", " about thirteen years after the introduction of the first server-side JavaScript environment, Netscape's LiveWire Pro Web.", "[24]", " The initial release supported only Linux and Mac OS X. Its development and maintenance was led by Dahl and later sponsored by ", "Joyent", ".", "[25]", "\n", "Dahl was inspired to create Node.js after seeing a file upload ", "progress bar", " on ", "Flickr", ". The browser did not know how much of the file had been uploaded and had to query the Web server. Dahl desired an easier way.", "[6]", "[26]", "\n", "Dahl criticized the limited possibilities of the most popular web server in 2009, ", "Apache HTTP Server", ", to handle a lot of concurrent connections (up to 10,000 and more) and the most common way of creating code (sequential programming), when code either blocked the entire process or implied multiple execution stacks in the case of simultaneous connections.", "[27]", "\n", "Dahl demonstrated the project at the inaugural European JSConf on November 8, 2009.", "[28]", "[29]", "[30]", " Node.js combined ", "Google", "'s V8 JavaScript engine, an ", "event loop", ", and a low-level ", "I/O", " ", "API", ".", "[31]", "\n", "In January 2010, a ", "package manager", " was introduced for the Node.js environment called ", "npm", ".", "[32]", " The package manager makes it easier for programmers to publish and share source code of Node.js libraries and is designed to simplify installation, updating, and uninstallation of libraries.", "[31]", "\n", "In June 2011, Microsoft and Joyent implemented a native ", "Windows", " version of Node.js.", "[33]", " The first Node.js build supporting Windows was released in July 2011.", "\n", "In January 2012, Dahl stepped aside, promoting coworker and ", "npm", " creator Isaac Schlueter to manage the project.", "[34]", " In January 2014, Schlueter announced that Timothy J. Fontaine would lead the project.", "[35]", "\n", "In December 2014, Fedor Indutny started io.js, a ", "fork", " of Node.js. Due to the internal conflict over Joyent's governance, io.js was created as an ", "open governance", " alternative with a separate technical committee.", "[36]", "[37]", " Unlike Node.js,", "[38]", " the authors planned to keep io.js up-to-date with the latest releases of the ", "Google V8", " JavaScript engine.", "[39]", "\n", "In February 2015, the intent to form a neutral Node.js Foundation was announced. By June 2015, the Node.js and io.js communities voted to work together under the Node.js Foundation.", "[40]", "\n", "In September 2015, Node.js v0.12 and io.js v3.3 were merged back together into Node v4.0.", "[41]", " This brought V8 ", "ES6", " features into Node.js, and a long-term support release cycle.", "[42]", " As of 2016, the io.js website recommends that developers switch back to Node.js and that no further releases of io.js are planned due to the merger.", "[43]", "\n", "Overview", "[", "edit", "]", "\n", "Node.js allows the creation of ", "Web servers", " and networking tools using ", "JavaScript", " and a collection of \"modules\" that handle various core functionality.", "[28]", "[31]", "[44]", "[45]", "[46]", " Modules are provided for ", "file system", " I/O, networking (", "DNS", ", ", "HTTP", ", ", "TCP", ", ", "TLS/SSL", ", or ", "UDP", "), ", "binary", " data (buffers), ", "cryptography", " functions, ", "data streams", ", and other core functions.", "[31]", "[45]", "[47]", " Node.js's modules use an API designed to reduce the complexity of writing server applications.", "[31]", "[45]", "\n", "Node.js applications can run on ", "Linux", ", ", "macOS", ", ", "Microsoft Windows", ", ", "NonStop", ",", "[48]", " and ", "Unix", " servers. Alternatively, they can be written with ", "CoffeeScript", "[49]", " (a JavaScript alternative), ", "Dart", " or ", "TypeScript", " (", "strongly typed", " forms of JavaScript), or any other language that ", "can compile to JavaScript", ".", "[49]", "[50]", "\n", "Node.js is primarily used to build network programs such as Web servers.", "[44]", " The biggest difference between Node.js and ", "PHP", " is that most functions in PHP ", "block", " until completion (commands execute only after previous commands have completed), while functions in Node.js are designed to be ", "non-blocking", " (commands execute ", "concurrently", " or even in ", "parallel", ",", "[51]", "[52]", " and use ", "callbacks", " to signal completion or failure).", "[44]", "\n", "Platform architecture", "[", "edit", "]", "\n", "Node.js brings ", "event-driven programming", " to ", "web servers", ", enabling development of fast web servers in JavaScript.", "[31]", " Developers can create highly scalable servers without using ", "threading", ", by using a simplified model of ", "event-driven programming", " that uses callbacks to signal the completion of a task.", "[31]", " Node.js connects the ease of a scripting language (JavaScript) with the power of Unix network programming.", "[31]", "\n", "Node.js was built on the ", "Google", " ", "V8 JavaScript engine", " since it was open-sourced under the ", "BSD license", ", extremely fast, and proficient with internet fundamentals such as ", "HTTP", ", ", "DNS", ", ", "TCP", ".", "[28]", " Also, ", "JavaScript", " was a well-known language, making Node.js immediately accessible to the entire ", "web development community", ".", "[28]", "\n", "Industry support", "[", "edit", "]", "\n", "There are thousands of open-source libraries for Node.js, most of them hosted on the ", "npm", " website. The Node.js developer community has two main mailing lists and the ", "IRC", " channel #node.js on ", "freenode", ". There are multiple developer conferences and events that support the Node.js community including ", "NodeConf", ", ", "Node Interactive", " and ", "Node Summit", " as well as a number of regional events.", "\n", "The open-source community has developed ", "web frameworks", " to accelerate the development of applications. Such frameworks include Connect, ", "Express.js", ", ", "Socket.IO", ", Koa.js, Hapi.js, ", "Sails.js", ", ", "Meteor", ", Derby, and many others.", "[31]", "[53]", "\n", "Modern desktop ", "IDEs", " provide editing and debugging features specifically for Node.js applications. Such IDEs include ", "Atom", ", ", "Brackets", ", ", "JetBrains", " ", "WebStorm", ",", "[54]", "[55]", " ", "Microsoft Visual Studio", " (with Node.js Tools for Visual Studio,", "[56]", " or ", "TypeScript", " with Node definitions,", "[57]", "[58]", "[59]", "[60]", ") ", "NetBeans", ",", "[61]", " ", "Nodeclipse", " Enide Studio ", "[62]", " (", "Eclipse", "-based), and ", "Visual Studio Code", ".", "[63]", "[64]", " Certain online web-based IDEs also support Node.js, such as ", "Codeanywhere", ", ", "Codenvy", ", ", "Cloud9 IDE", ", ", "Koding", ", and the visual flow editor in ", "Node-RED", ".", "\n", "Releases", "[", "edit", "]", "\n", "\n", "\n", "Release", "\n", "Code name", "\n", "Release date", "\n", "LTS status", "\n", "Active LTS start", "\n", "Maintenance start", "\n", "Maintenance end", "\n", "\n", "\n", "v0.10.x", "\n", "\n", "2013-03-11", "\n", "Old version, no longer supported:", " End-of-life", "\n", "-", "\n", "2015-10-01", "\n", "2016-10-31", "\n", "\n", "\n", "v0.12.x", "\n", "\n", "2015-02-06", "\n", "Old version, no longer supported:", " End-of-life", "\n", "-", "\n", "2016-04-01", "\n", "2016-12-31", "\n", "\n", "\n", "4.x", "\n", "Argon", "\n", "2015-09-08", "\n", "Older version, yet still supported:", " Maintenance", "\n", "2015-10-01", "\n", "2017-04-01", "\n", "April 2018", "\n", "\n", "\n", "5.x", "\n", "\n", "2015-10-29", "\n", "No LTS", "\n", "N/A", "\n", "\n", "\n", "6.x", "\n", "Boron", "\n", "2016-04-26", "\n", "Current stable version:", " ", "Active", "\n", "2016-10-18", "\n", "April 2018", "\n", "April 2019", "\n", "\n", "\n", "7.x", "\n", "\n", "2016-10-25", "\n", "No LTS", "\n", "N/A", "\n", "\n", "\n", "8.x", "\n", "Carbon", "[65]", "\n", "2017-05-30", "\n", "Current stable version:", " ", "Active", "\n", "2017-10-31", "\n", "April 2019", "\n", "December 2019", "\n", "\n", "\n", "9.x", "\n", "\n", "2017-10-31", "\n", "No LTS", "\n", "N/A", "\n", "\n", "\n", "10.x", "\n", "\n", "\n", "Future release:", " Pending", "\n", "October 2018", "\n", "April 2020", "\n", "April 2021", "\n", "\n", "\n", "New major releases of Node.js are cut from the ", "GitHub", " master branch every six months. Even-numbered versions are cut in April and odd-numbered versions are cut in October. When a new odd version is released, the previous even version undergoes transition to Long Term Support (LTS), which gives that version 18 months of active support from the date it is designated LTS. After these 18 months expire, an LTS release will receive an additional 12 months of maintenance support. An active version will receive non-breaking backports of changes a few weeks after they land in the current release. A maintenance release will only receive critical fixes and documentation updates.", "[66]", "\n", "The strategy and policy of LTS releases are managed by the LTS Working Group in collaboration with the Technical Steering Committee of the Node.js Foundation.", "\n", "Technical details", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "This section ", "may be too technical for most readers to understand", ". Please ", "help improve it", " to ", "make it understandable to non-experts", ", without removing the technical details. ", "(August 2015)", " ", "(", "Learn how and when to remove this template message", ")", "\n", "\n", "\n", "\n", "Node.js is a Javascript runtime environment that processes incoming requests in a loop, called the ", "event loop", ".", "\n", "Threading", "[", "edit", "]", "\n", "Node.js operates on a ", "single thread", ", using ", "non-blocking I/O", " calls, allowing it to support tens of thousands of concurrent connections without incurring the cost of thread ", "context switching", ".", "[67]", " The design of sharing a single thread among all the requests that use the ", "observer pattern", " is intended for building highly concurrent applications, where any function performing I/O must use a ", "callback", ". In order to accommodate the single-threaded event loop, Node.js utilizes the ", "libuv", " library that, in turn, uses a fixed-sized thread pool that is responsible for some of the non-blocking asynchronous I/O operations.", "[6]", "\n", "A downside of this single-threaded approach is that Node.js doesn't allow ", "vertical scaling", " by increasing the number of ", "CPU cores", " of the machine it is running on without using an additional module, such as cluster,", "[51]", " StrongLoop Process Manager,", "[68]", " or pm2.", "[69]", " However, developers can increase the default number of threads in the libuv thread pool; these threads are likely to be distributed across multiple cores by the server operating system.", "[70]", "\n", "Execution of parallel tasks in Node.js is handled by a thread pool. The main thread call functions post tasks to the shared task queue that threads in the thread pool pull and execute. Inherently non-blocking system functions such as networking translates to kernel-side non-blocking sockets, while inherently blocking system functions such as file I/O run in a blocking way on its own thread. When a thread in the thread pool completes a task, it informs the main thread of this, which in turn, wakes up and execute the registered callback. Since callbacks are handled in serial on the main thread, long lasting computations and other CPU-bound tasks will freeze the entire event-loop until completion.", "[", "citation needed", "]", "\n", "V8", "[", "edit", "]", "\n", "V8", " is the JavaScript execution engine built for ", "Google Chrome", " and open-sourced by Google in 2008. Written in ", "C++", ", V8 compiles JavaScript source code to native ", "machine code", " instead of interpreting it in real time.", "[6]", "\n", "Node.js uses ", "libuv", " to handle asynchronous events. Libuv is an abstraction layer for network and file system functionality on both Windows and ", "POSIX", "-based systems such as Linux, macOS, OSS on NonStop, and Unix.", "\n", "The core functionality of Node.js resides in a JavaScript library. The Node.js bindings, written in C++, connect these technologies to each other and to the operating system.", "\n", "Package management", "[", "edit", "]", "\n", "npm", " is the pre-installed package manager for the Node.js server platform. It is used to install Node.js programs from the npm registry, organizing the installation and management of third-party Node.js programs. npm is not to be confused with the ", "CommonJS", " ", "require()", " statement. It is not used to load code; instead, it is used to install code and manage code dependencies from the command line. The packages found in the npm registry can range from simple helper libraries such as ", "Lodash", " to task runners such as ", "Grunt", ".", "\n", "Unified API", "[", "edit", "]", "\n", "Node.js can be combined with a browser, a database supporting JSON data (such as ", "Postgres", ",", "[71]", " ", "MongoDB", ", or ", "CouchDB", ") and ", "JSON", " for a unified JavaScript development stack. With the adaptation of what were essentially server-side development patterns such as ", "MVC", ", ", "MVP", ", ", "MVVM", ", etc., Node.js allows the ", "reuse", " of the same model and service interface between client-side and server-side.", "\n", "Event loop", "[", "edit", "]", "\n", "Node.js registers itself with the operating system in order to be notified when a connection is made, and the operating system will issue a callback. Within the Node.js runtime, each connection is a small ", "heap allocation", ". Traditionally, relatively heavyweight ", "OS", " processes or threads handled each connection. Node.js uses an event loop for scalability, instead of processes or threads.", "[72]", " In contrast to other event-driven servers, Node.js's event loop does not need to be called explicitly. Instead callbacks are defined, and the server automatically enters the event loop at the end of the callback definition. Node.js exits the event loop when there are no further callbacks to be performed.", "\n", "Project governance", "[", "edit", "]", "\n", "In 2015, various branches of the greater Node.js community began working under the vendor-neutral Node.js Foundation. The stated purpose of the organization \"is to enable widespread adoption and help accelerate development of Node.js and other related modules through an open governance model that encourages participation, technical contribution, and a framework for long-term stewardship by an ecosystem invested in Node.js' success.\"", "[73]", "\n", "The Node.js Foundation Technical Steering Committee (TSC) is the technical governing body of the Node.js Foundation. The TSC is responsible for the core Node.js repo as well as dependent and adjacent projects. Generally the TSC delegates administration of these projects to working groups or committees.", "[74]", " The LTS group that manages long term supported releases is one such group. Other current groups include: Website, Streams, Build, Diagnostics, i18n, Evangelism, Docker, Addon API, Benchmarking, Post-mortem, Intl, Documentation, and Testing.", "[75]", "\n", "In August, 2017, a governance breakdown precipitated efforts to repair the resulting damage and to create a path to future stability of governance.", "[76]", "\n", "Alternatives", "[", "edit", "]", "\n", "Similar open source event-driven server frameworks for other platforms include:", "\n", "\n", "EventMachine", " for ", "Ruby", "\n", "libuv", " for ", "C", "\n", "Perl Object Environment", " for ", "Perl", "\n", "ReactPHP (libev or libevent) or Amp (libev, libevent, or libuv) for ", "PHP", "\n", "Twisted", " for ", "Python", "\n", "Vert.x", " for ", "Java", ", ", "JavaScript", ", ", "Apache Groovy", ", ", "Ruby", ", ", "Python", ", ", "Scala", ", ", "Clojure", ", and ", "Ceylon", "\n", "\n", "Node.js may utilize code written in other programming languages using:", "\n", "\n", "Edge.js allows ", "Microsoft .NET", " applications to run Node.js scripts in-process, and allows Node.js servers to utilize .NET compiled code via async callbacks.", "[77]", "[78]", "[79]", "\n", "Luvit implements the Node.js APIs for the language ", "Lua", "[80]", "\n", "Node-julia allows using ", "Julia", " with Node.js/io.js", "\n", "The COBOL bridge for Node.js allows using ", "COBOL", " with Node.js", "[81]", "\n", "FreePascal", " 3.0.4 contains an Object Pascal to JavaScript transpiler, pas2js ", "[82]", " that can be configured to target Node.js and can utilize the ", "Lazarus (IDE)", " ide, including code completion and debugging.", "\n", "\n", "See also", "[", "edit", "]", "\n", "\n", "\n", "Free software portal", "\n", "\n", "\n", "\n", "List of JavaScript libraries", "\n", "MEAN (software bundle)", "\n", "Online JavaScript IDE", "\n", "Rhino (JavaScript engine)", "\n", "Node-RED", "\n", "Application server", "\n", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "^", " ", "\"node-v0.x-archive on GitHub\"", ". Retrieved ", "2 August", " 2014", ".", "\u00a0", "\n", "^", " ", "\"Node.js 9 ChangeLog\"", ". Retrieved ", "15 Nov", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Node.js 8 ChangeLog\"", ". Retrieved ", "6 Dec", " 2017", ".", "\u00a0", "\n", "^", " ", "\"node/LICENSE at master\"", ". ", "GitHub", ". Node.js Foundation. 12 July 2017", ". Retrieved ", "12 July", " 2017", ".", "\u00a0", "\n", "^", " ", "https://www.ibm.com/developerworks/community/blogs/gcuomo/entry/javascript_everywhere_and_the_three_amigos?lang=en", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Laurent Orsini", " (2013-11-07). ", "\"What You Need To Know About Node.js\"", ". readwrite. Archived from ", "the original", " on 2013-11-07", ". Retrieved ", "2016-01-22", ".", "\u00a0", "\n", "^", " ", "\"Node.js Foundation - Node.js\"", ". Retrieved ", "4 July", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Linux Foundation Collaborative Projects\"", ". Retrieved ", "4 July", " 2015", ".", "\u00a0", "\n", "^", " ", "Why GoDaddy's Nodejitsu deal is great for Node.js", ", ", "VentureBeat", ", February 10, 2015", "\n", "^", " ", "Geitgey, Adam (30 October 2013). ", "\"I-Tier: Dismantling the Monoliths\"", ". Groupon", ". Retrieved ", "30 April", " 2014", ".", "\u00a0", "\n", "^", " ", "\"IBM Bluemix\"", ". Retrieved ", "4 July", " 2015", ".", "\u00a0", "\n", "^", " ", "\"You'll never believe how LinkedIn built its new iPad app\"", ". VentureBeat. May 2, 2012", ". Retrieved ", "May 10,", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Blazing fast node.js: 10 performance tips from LinkedIn Mobile\"", ". Retrieved ", "7 April", " 2015", ".", "\u00a0", "\n", "^", " ", "Baxter-Reynolds, Matthew (November 9, 2011). ", "\"Here's why you should be happy that Microsoft is embracing Node.js\"", ". London: The Guardian", ". Retrieved ", "May 10,", " 2012", ".", "\u00a0", "\n", "^", " ", "\"WebMatrix - Front End Web Developers take note (ASP.NET, PHP, node.js and more)\"", ". Retrieved ", "2 August", " 2014", ".", "\u00a0", "\n", "^", " ", "Node.js in Flames", " November 19, 2014", "\n", "^", " ", "\"Clash of the Titans: Releasing the Kraken, NodeJS @paypal\"", ". fluentconf.com. May 28, 2013", ". Retrieved ", "September 11,", " 2013", ".", "\u00a0", "\n", "^", " ", "\"All such companies and their products in which Node.js is used\"", ". Retrieved ", "2 August", " 2014", ".", "\u00a0", "\n", "^", " ", "\"SAP AppBuilder\"", ". SAP. March 10, 2014", ". Retrieved ", "March 10,", " 2014", ".", "\u00a0", "\n", "^", " ", "The Node Ahead: JavaScript leaps from browser into future", ", ", "The Register", ", March 1, 2011", "\n", "^", " ", "\"Why Walmart is using Node.js\"", ". VentureBeat. January 24, 2012", ". Retrieved ", "May 10,", " 2012", ".", "\u00a0", "\n", "^", " ", "\"Why You Really Need (A) node.js development services\"", ". codebrahma. January 10, 2018", ". Retrieved ", "January 10,", " 2018", ".", "\u00a0", "\n", "^", " ", "\"About Node.js, and why you should add Node.js to your skill set?\"", ". ", "Training.com", ". Training.com", ". Retrieved ", "23 October", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Netscape opens intranet attack\"", ". ", "CNET", ". Retrieved ", "2017-04-20", ".", "\u00a0", "\n", "^", " ", "Ryan Dahl (2010-11-09). ", "\"Joyent and Node\"", ". Google Groups", ". Retrieved ", "2015-02-05", ".", "\u00a0", "\n", "^", " ", "Harris, Amber (April 1, 2012). ", "\"The Birth of Node: Where Did it Come From? Creator Ryan Dahl Shares the History\"", ". Devops Angle", ". Retrieved ", "26 October", " 2013", ".", "\u00a0", "\n", "^", " ", "\"PHP 7 vs Node.js? They Can Be Partners, Not Competitors For a Developer!\"", ". Retrieved ", "21 December", " 2016", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "Sams Teach Yourself Node.js in 24 Hours", ", Sams Publishing, 05-Sep-2012", "\n", "^", " ", "\"Ryan Dahl at JSConf EU 2009\"", ".", "\u00a0", "\n", "^", " ", "\"Ryan Dahl at JSConf EU 2009 Video\"", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "c", " ", "d", " ", "e", " ", "f", " ", "g", " ", "h", " ", "i", " ", "Professional Node.js: Building JavaScript Based Scalable Software", ", John Wiley & Sons, 01-Oct-2012", "\n", "^", " ", "\"Earliest releases of npm\"", ". ", "GitHub", ". Retrieved ", "27 July", " 2016", ".", "\u00a0", "\n", "^", " ", "\"Porting Node to Windows With Microsoft's Help\"", ". Retrieved ", "17 April", " 2016", ".", "\u00a0", "\n", "^", " ", "Dahl, Ryan. ", "\"New gatekeeper\"", ". Retrieved ", "26 October", " 2013", ".", "\u00a0", "\n", "^", " ", "Schlueter, Isaac (January 15, 2014). ", "\"The Next Phase of Node.js\"", ". Retrieved ", "21 January", " 2014", ".", "\u00a0", "\n", "^", " ", "Krill, Paul (Dec 4, 2014). ", "\"Why io.js Decided to Fork Node.js\"", ". JavaWorld", ". Retrieved ", "Dec 15,", " 2014", ".", "\u00a0", "\n", "^", " ", "Q&A: Why io.js decided to fork Node.js", ", ", "Infoworld", " Tech Watch", "\n", "^", " ", "Ben Noordhuis (Nov 12, 2014). ", "\"Issue 3692: function suddenly becomes undefined\"", ". V8 JavaScript Engine Issues", ". Retrieved ", "2 February", " 2015", ".", "\u00a0", "\n", "^", " ", "Mikeal, Rogers (January 28, 2015). ", "\"State of io.js\"", ". Retrieved ", "2 February", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance\"", ". Retrieved ", "4 July", " 2015", ".", "\u00a0", "\n", "^", " ", "\"Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release\"", ". Retrieved ", "28 Jan", " 2016", ".", "\u00a0", "\n", "^", " ", "\"io.js and Node.js merge\"", ". Retrieved ", "27 June", " 2015", ".", "\u00a0", "\n", "^", " ", "Io.js, JavaScript I/O", ", ", "\"io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above.\"", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Node.js for PHP Developers", ", O'Reilly Media, Inc., 2013", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Node.js Essentials", ", Packt Publishing, 09-Sep-2014", "\n", "^", " ", "Smashing Node.js: JavaScript Everywhere", ", John Wiley & Sons, 14-Aug-2012", "\n", "^", " ", "Modules", ", Nodejs Website", "\n", "^", " ", "\"bomBora - Node.js for NonStop\"", ". Infrasoft", ". Retrieved ", "14 August", " 2015", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"CoffeeScript on Node.js\"", ". O'Reilly Media, Inc. April 15, 2013", ". Retrieved ", "May 17,", " 2015", ".", "\u00a0", "\n", "^", " ", "\"List of languages that compile to JS\"", ". Retrieved ", "October 19,", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Node.js's cluster module\"", ". Retrieved ", "October 19,", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Node.js's child_process module\"", ". Retrieved ", "October 19,", " 2017", ".", "\u00a0", "\n", "^", " ", "Express.js Guide: The Comprehensive Book on Express.js", ", Azat Mardan, 28-May-2014", "\n", "^", " ", "Node.js", ", WebStorm supports integration with the Node.js runtime environment, WebStorm Help", "\n", "^", " ", "Running and Debugging Node.js", ", WebStorm Help", "\n", "^", " ", "\"Node.js Tools for Visual Studio\"", ". Retrieved ", "1 Feb", " 2016", ".", "\u00a0", "\n", "^", " ", "soywiz/typescript-node-definitions TypeScript's typings for some popular node.js modules", ", GitHub", "\n", "^", " ", "DefinitelyTyped", ", GitHub", "\n", "^", " ", "The repository for high quality TypeScript type definitions", " ", "Archived", " February 3, 2016, at the ", "Wayback Machine", ".", "\n", "^", " ", "ImageBoard, A Node.js + Express + MongoDB application built using TypeScript on the server", ", TypeScript Samples", "\n", "^", " ", "Krill, Paul (2015-11-10). ", "\"Node.js takes center stage in NetBeans 8.1\"", ". ", "InfoWorld", ".", "\u00a0", "\n", "^", " ", "Nodeclipse, Enide -- Node.JS development in Eclipse", ", Nodeclipse Website", "\n", "^", " ", "Hello Visual Studio Code (with NodeJS)", ", Channel 9, Microsoft", "\n", "^", " ", "Node.js Applications with VS Code", ", Visual Studio Code", "\n", "^", " ", "https://github.com/nodejs/LTS/issues/163", "\n", "^", " ", "\"nodejs/Release\"", ". ", "GitHub", ". Retrieved ", "2017-11-15", ".", "\u00a0", "\n", "^", " ", "\"Node.js w/1M concurrent connections!\"", ". ", "caustik's blog", ".", "\u00a0", "\n", "^", " ", "\"StrongLoop Process Manager\"", ".", "\u00a0", "\n", "^", " ", "\"GitHub - Unitech/pm2: Production process manager for Node.js applications with a built-in load balancer\"", ". ", "GitHub", ".", "\u00a0", "\n", "^", " ", "Aleksander Kasiuk (22 April 2015). ", "\"On problems with threads in node.js - Future Processing\"", ".", "\u00a0", "\n", "^", " ", "\"PostgreSQL: Documentation: 9.4: JSON Types\"", ". ", "www.postgresql.org", ". Retrieved ", "2016-10-20", ".", "\u00a0", "\n", "^", " ", "About Node.js", ", Node.js Website", "\n", "^", " ", "Foundation, Node.js. ", "\"Node.js Foundation | Node.js\"", ". ", "nodejs.org", ". Retrieved ", "2017-03-08", ".", "\u00a0", "\n", "^", " ", "\"nodejs/TSC\"", ". ", "GitHub", ". Retrieved ", "2017-03-08", ".", "\u00a0", "\n", "^", " ", "Foundation, Node.js. ", "\"Working Groups | Node.js\"", ". ", "nodejs.org", ". Retrieved ", "2017-03-08", ".", "\u00a0", "\n", "^", " ", "Whittaker, Zack, ", "After governance breakdown, Node.js leaders fight for its survival", ", ZDNet, August 25, 2017", "\n", "^", " ", "Tomasz Janczuk. ", "\"Edge.js\"", ".", "\u00a0", "\n", "^", " ", "Using Edge.js to combine Node.js and .NET", ", .NET Curry", "\n", "^", " ", "Edge.js bridges the gap between Node.js and .NET", ", TechRepublic, Tony Patton, July 1, 2014", "\n", "^", " ", "\"Luvit.io\"", ".", "\u00a0", "\n", "^", " ", "\"cobol\"", ".", "\u00a0", "\n", "^", " ", "\"pas2js\"", ".", "\u00a0", "\n", "\n", "\n", "Further reading", "[", "edit", "]", "\n", "\n", "\n", "Hughes-Croucher, Tom; Wilson, Mike (April 2012), ", "Up and Running with Node.js", " (First ed.), ", "O'Reilly Media", ", p.\u00a0204, ", "ISBN", "\u00a0", "978-1-4493-9858-3", "\u00a0", "\n", "Ornbo, George (September 2012), ", "Sams Teach Yourself Node.js in 24 Hours", " (First ed.), ", "SAMS Publishing", ", p.\u00a0440, ", "ISBN", "\u00a0", "978-0-672-33595-2", "\u00a0", "\n", "Teixeira, Pedro (October 2012), ", "Professional Node.js", " (First ed.), ", "John Wiley & Sons", ", p.\u00a0408, ", "ISBN", "\u00a0", "978-1-118-22754-1", "\u00a0", "\n", "Randal L. Schwartz", " and Aaron Newcomb (9 January 2013). ", "\"Episode 237: Node.js\"", ". ", "twit.tv/show/floss-weekly", " (Podcast). ", "TWiT.tv", ". Event occurs at 1:08:13", ". Retrieved ", "9 January", " 2013", ".", "\u00a0", "\n", "Kurniawan, Agus (July 2012), ", "Nodejs Programming By Example", " (First ed.), ", "PE Press", ", p.\u00a067", "\u00a0", "\n", "Gackenheimer, Cory (October 2013), ", "Node.js Recipes: A Problem-Solution Approach", " (First ed.), ", "Apress", ", p.\u00a0376, ", "ISBN", "\u00a0", "978-1-4302-6058-5", "\u00a0", "\n", "Ribeiro Pereira, Caio (February 2016), ", "Building APIs with Node.js", " (First ed.), ", "Leanpub", ", p.\u00a0152", "\u00a0", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "Wikimedia Commons has media related to ", "Node.js", ".", "\n", "\n", "\n", "\n", "Official website", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Node.js", "\n", "\n", "\n", "\n", "Platform", "\n", "\n", "\n", "\n", "Node.js", "\n", "NPM", "\n", "V8", "\n", "CommonJS", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Frameworks", "\n", "\n", "\n", "\n", "MEAN", "\n", "\n", "MongoDB", "\n", "Express.js", "\n", "AngularJS", "/", "Angular", "\n", "\n", "\n", "MEEN (substituted with ", "Ember.js", ")", "\n", "Backbone.js", "\n", "Meteor", "\n", "\n", "\n", "\n", "\n", "\n", "Libraries", "\n", "\n", "\n", "\n", "Lodash", "\n", "Underscore.js", "\n", "React.js", "\n", "\n", "\n", "\n", "\n", "\n", "Languages", "\n", "\n", "\n", "\n", "JavaScript", "\n", "CoffeeScript", "\n", "TypeScript", "\n", "\n", "\n", "\n", "\n", "\n", "Hosts", "\n", "\n", "\n", "\n", "Joyent", "\n", "Nodejitsu", "\n", "OpenShift", "\n", "Linode", "\n", "DigitalOcean", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "Code analysis", "\n", "\n", "\n", "\n", "JSHint", "\n", "JSLint", "\n", "\n", "\n", "\n", "\n", "\n", "Transcompilers", "\n", "\n", "\n", "\n", "CoffeeScript", "\n", "Dart", "\n", "Emscripten", "\n", "Google Closure Compiler", "\n", "Google Web Toolkit", "\n", "Morfik", "\n", "TypeScript", "\n", "AtScript", "\n", "Opa", "\n", "Haxe", "\n", "ClojureScript", "\n", "\n", "\n", "\n", "\n", "\n", "Concepts", "\n", "\n", "\n", "\n", "Ajax", "\n", "Client-side", "\n", "Dynamic HTML", "\n", "JavaScript library", "\n", "JavaScript syntax", "\n", "Unobtrusive JavaScript", "\n", "\n", "\n", "\n", "\n", "\n", "Debuggers", "\n", "\n", "\n", "\n", "Firebug", "\n", "Komodo IDE", "\n", "Microsoft Script Debugger", "\n", "Microsoft Script Editor", "\n", "Opera Dragonfly", "\n", "Venkman", "\n", "Web Inspector", "\n", "\n", "\n", "\n", "\n", "\n", "Doc generators", "\n", "\n", "\n", "\n", "JSDoc", "\n", "\n", "\n", "\n", "\n", "\n", "Editors (", "comparison", ")", "\n", "\n", "\n", "\n", "Ace", "\n", "\n", "Cloud9 IDE", "\n", "\n", "\n", "Atom", "\n", "CodeMirror", "\n", "\n", "Light Table", "\n", "Brackets", "\n", "\n", "\n", "Koding", "\n", "Orion", "\n", "Visual Studio", "\n", "\n", "Visual Studio Express", "\n", "\n", "\n", "Visual Studio Code", "\n", "Visual Studio Team Services", "\n", "\n", "\n", "\n", "\n", "\n", "Engines", "\n", "\n", "\n", "\n", "Comparison of layout engines", "\n", "List of ECMAScript engines", "\n", "List of JavaScript engines", "\n", "\n", "\n", "\n", "\n", "\n", "Frameworks", "\n", "\n", "\n", "\n", "Comparison of JavaScript frameworks", "\n", "List of JavaScript libraries", "\n", "\n", "\n", "\n", "\n", "\n", "Related ", "technologies", "\n", "\n", "\n", "\n", "Cascading Style Sheets", "\n", "Document Object Model", "\n", "HTML", "\n", "JSON", "\n", "WebAssembly", "\n", "\n", "\n", "\n", "\n", "\n", "Package managers", "\n", "\n", "\n", "\n", "npm", "\n", "NuGet", "\n", "\n", "\n", "\n", "\n", "\n", "Server-side", "\n", "\n", "\n", "\n", "Active Server Pages", "\n", "CommonJS", "\n", "JSGI", "\n", "Node.js", "\n", "Wakanda", "\n", "\n", "\n", "\n", "\n", "\n", "Unit testing", "\n", "\n", "\n", "\n", "Jasmine", "\n", "Mocha", "\n", "QUnit", "\n", "List of JavaScript unit testing frameworks", "\n", "\n", "\n", "\n", "\n", "\n", "People", "\n", "\n", "\n", "\n", "Douglas Crockford", "\n", "Brendan Eich", "\n", "John Resig", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Authority control", "\n", "\n", "\n", "\n", "GND", ": ", "1027030742", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 12 January 2018, at 21:22."}, +{"title": "Sails.js", "text": ["\n", "Sails.js", "\n", "\n", "\n", "Sails.js brand logo", "\n", "\n", "\n", "\n", "Developer(s)", "\n", "Mike McNeil", " and others", "\n", "\n", "\n", "Initial release", "\n", "2012", "; 6\u00a0years ago", "\u00a0(", "2012", ")", "\n", "\n", "\n", "Development status", "\n", "Active", "\n", "\n", "\n", "Written in", "\n", "JavaScript", "\n", "\n", "\n", "Operating system", "\n", "Cross-platform", "\n", "\n", "\n", "Platform", "\n", "Node.js", "\n", "\n", "\n", "Type", "\n", "Web framework", "\n", "\n", "\n", "License", "\n", "MIT License", "\n", "\n", "\n", "Website", "\n", "sailsjs", ".com", "\n", "\n", "\n", "Sails.js", " (or ", "Sails", ")", "[1]", " is a ", "Model-View-Controller", " (MVC) ", "web application framework", " developed atop the ", "Node.js", " environment,", "[2]", ":", "1, 19", " released as ", "free and open-source software", " under the ", "MIT License", ".", "[3]", "[4]", " It is designed to make it easy to build custom, enterprise-grade Node.js ", "web applications", " and ", "APIs", ".", "[3]", "[5]", " Emulating the MVC architecture of other frameworks, like ", "Ruby on Rails", ",", "[2]", ":", "19", " it offers similar pattern and familiarity, reducing the cognitive burden when switching between other frameworks/languages.", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "Features", "\n", "2", " ", "Community Acclaim", "\n", "3", " ", "References", "\n", "4", " ", "External links", "\n", "\n", "\n", "\n", "Features", "[", "edit", "]", "\n", "Sails.js offers a host of features and attributes. Because it is built on Node.js and ", "Express.js", ",", "[6]", " it enables applications to be built with 100% JavaScript. This not only includes models, views, and controllers; but also configuration files and adapters (e.g., database).", "\n", "Like Ruby on Rails,", "[1]", " Sails.js provides an ", "Object-relational mapping", " interface, using ", "Waterline.js", ", which abstracts the database interaction.", "[6]", " This enables a uniform API regardless of the underlying database being used.", "[7]", "\n", "A number of other packages are included to enable fast auto-generated ", "REST API", "S, ", "WebSockets", " by default using ", "Socket.io", ";", "[1]", " and compatibility features making it front-end agnostic so that many tools and frameworks (", "AngularJS", ", ", "React.js", ", ", "Android", ", ", "iOS", ", etc.) are supported.", "\n", "Community Acclaim", "[", "edit", "]", "\n", "As compared to other libraries/frameworks, like ", "FeathersJS", ", Sails offers a host of features out of the box and leads as the generally accepted Node.js framework for both full-stack development and REST APIs.", "[8]", "\n", "References", "[", "edit", "]", "\n", "\n", "\n", "\n", "^ ", "a", " ", "b", " ", "c", " ", "Krol, Jason (2014). ", "Web Development with MongoDB and Node.js", ". Packt. pp.\u00a0PT455. ", "ISBN", "\u00a0", "9781783987313", " \u2013 via Google Books (Preview).", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Shahid, Shaikh (2016). ", "Sails.js Essentials", ". Birmingham, UK: Packt. ", "ISBN", "\u00a0", "9781783554546", ". ", "OCLC", "\u00a0", "944986529", " \u2013 via Google Books (Preview).", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "\"Sails.js | Realtime MVC Framework for Node.js\"", ". The Sails Company", ". Retrieved ", "21 July", " 2017", ".", "\u00a0", "\n", "^", " ", "\"sails\"", ". npm, inc", ". Retrieved ", "21 July", " 2017", ".", "\u00a0", "\n", "^", " ", "Rajput, Mehul (12 December 2016). ", "\"Top Reasons Why Sails.js Is The Best Node.js Web Framework\"", ". ", "mindinvenory", ". Mindinventory", ". Retrieved ", "22 July", " 2017", ".", "\u00a0", "\n", "^ ", "a", " ", "b", " ", "Yang, Chuoxian. ", "\"Comparison Of Four Popular Node.js Frameworks | Toptal\"", ". ", "toptal", ". Toptal, LLC", ". Retrieved ", "22 July", " 2017", ".", "\u00a0", "\n", "^", " ", "\"Waterline.js home page\"", ".", "\u00a0", "\n", "^", " ", "\"Slant.co's Sails.js Review\"", ".", "\u00a0", "\n", "\n", "\n", "\n", "External links", "[", "edit", "]", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "Node.js", "\n", "\n", "\n", "\n", "Platform", "\n", "\n", "\n", "\n", "Node.js", "\n", "NPM", "\n", "V8", "\n", "CommonJS", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Frameworks", "\n", "\n", "\n", "\n", "MEAN", "\n", "\n", "MongoDB", "\n", "Express.js", "\n", "AngularJS", "/", "Angular", "\n", "\n", "\n", "MEEN (substituted with ", "Ember.js", ")", "\n", "Backbone.js", "\n", "Meteor", "\n", "\n", "\n", "\n", "\n", "\n", "Libraries", "\n", "\n", "\n", "\n", "Lodash", "\n", "Underscore.js", "\n", "React.js", "\n", "\n", "\n", "\n", "\n", "\n", "Languages", "\n", "\n", "\n", "\n", "JavaScript", "\n", "CoffeeScript", "\n", "TypeScript", "\n", "\n", "\n", "\n", "\n", "\n", "Hosts", "\n", "\n", "\n", "\n", "Joyent", "\n", "Nodejitsu", "\n", "OpenShift", "\n", "Linode", "\n", "DigitalOcean", "\n", "\n", "\n", "\n", "\n", "\n", "\n\n\n", "\n", "\n", "\n", "\n"], "lastUpdated": " 25 November 2017, at 16:44."}, +{"title": "JavaScript", "text": ["Not to be confused with ", "Java (programming language)", ", ", "Java (software platform)", ", or ", "Javanese script", ".", "\n", "\n", "JavaScript", "\n", "\n", "Paradigm", "\n", "Multi-paradigm", ": ", "object-oriented", " (", "prototype-based", "), ", "imperative", ", ", "functional", ", ", "event-driven", "[1]", "\n", "\n", "\n", "Designed\u00a0by", "\n", "Brendan Eich", "\n", "\n", "\n", "Developer", "\n", "Netscape Communications Corporation", ", ", "Mozilla Foundation", ", ", "Ecma International", "\n", "\n", "\n", "First\u00a0appeared", "\n", "December\u00a04, 1995", "; 22 years ago", "\u00a0(", "1995-12-04", ")", "[2]", "\n", "\n", "\n", "\n", "\n", "\n", "Stable release", "\n", "\n", "ECMAScript 2017", "[3]", " / June\u00a02017", "; 7\u00a0months ago", "\u00a0(", "2017-06", ")", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Typing discipline", "\n", "dynamic", ", ", "duck", "\n", "\n", "\n", "Filename extensions", "\n", ".js", "\n", "\n", "\n", "Website", "\n", "Mozilla", "\n", "\n", "\n", "Major ", "implementations", "\n", "\n", "\n", "V8", ", ", "JavaScriptCore", ", ", "SpiderMonkey", ", ", "Chakra", "\n", "\n", "\n", "Influenced by", "\n", "\n", "\n", "Lua", ", ", "Scheme", ", ", "Perl", ", ", "Self", ", ", "Java", ", ", "C", ", ", "Python", ", ", "AWK", ", ", "HyperTalk", "\n", "\n", "\n", "Influenced", "\n", "\n", "\n", "ActionScript", ", ", "AtScript", ", ", "CoffeeScript", ", ", "Dart", ", ", "JScript .NET", ", ", "LiveScript", ", ", "Objective-J", ", ", "Opa", ", ", "Perl 6", ", ", "QML", ", ", "TypeScript", "\n", "\n", "\n", "\n", "\n", " ", "JavaScript", " at Wikibooks", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", "\n", "\n", "Filename extension", "\n", ".js", "\n", "\n", "\n", "Internet media\u00a0type", "\n", "\n", "\n", "\n", "application/javascript", "\n", "text/javascript", "\u00a0(obsolete)", "[4]", "\n", "\n", "\n", "\n", "\n", "\n", "Uniform Type Identifier\u00a0(UTI)", "\n", "\n", "com.netscape.javascript-source", "\n", "[5]", "\n", "\n", "\n", "Type of format", "\n", "Scripting language", "\n", "\n", "\n", "\n", "\n", "Part of a ", "series", " on", "\n", "\n", "\n", "JavaScript", "\n", "\n", "\n", "\n", "\n", "JavaScript syntax", "\n", "JavaScript library", "\n", "Unobtrusive JavaScript", "\n", "JavaScript engine", "\n", "\n", "\n", "\n", "\n", "Lists of Frameworks and Libraries", "\n", "\n", "\n", "\n", "\n", "Ajax frameworks", "\n", "JavaScript web frameworks", "\n", "Comparison of JavaScript frameworks", "\n", "List of JavaScript libraries", "\n", "JavaScript unit testing frameworks", "\n", "\n", "\n", "\n", "\n", "JavaScript Object Notation", "\n", "\n", "\n", "\n", "See also", "\n", "\n", "ECMAScript", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "v", "\n", "t", "\n", "e", "\n", "\n", "\n", "\n", "\n", "\n", "JavaScript", " (", "/", "\u02c8", "d\u0292", "\u0251\u02d0", "v", "\u0259", "\u02cc", "s", "k", "r", "\u026a", "p", "t", "/", "[6]", "), often abbreviated as ", "JS", ", is a ", "high-level", ", ", "dynamic", ", ", "weakly typed", ", ", "prototype-based", ", ", "multi-paradigm", ", and ", "interpreted", " ", "programming language", ". Alongside ", "HTML", " and ", "CSS", ", JavaScript is one of the three core technologies of ", "World Wide Web", " ", "content production", ". It is used to make webpages interactive and provide online programs, including video games. The majority of ", "websites", " employ it, and all modern ", "web browsers", " support it without the need for ", "plug-ins", " by means of a built-in ", "JavaScript engine", ". Each of the many JavaScript engines represent a different implementation of JavaScript, all based on the ", "ECMAScript", " specification, with some engines not supporting the spec fully, and with many engines supporting additional features beyond ECMA.", "\n", "As a multi-paradigm language, JavaScript supports ", "event-driven", ", ", "functional", ", and ", "imperative", " (including ", "object-oriented", " and ", "prototype-based", ") ", "programming styles", ". It has an ", "API", " for working with text, ", "arrays", ", dates, ", "regular expressions", ", and basic manipulation of the ", "DOM", ", but the language itself does not include any ", "I/O", ", such as networking, storage, or graphics facilities, relying for these upon the host environment in which it is embedded.", "\n", "Initially only implemented ", "client-side", " in web browsers, JavaScript engines are now embedded in many other types of host software, including ", "server-side", " in web servers and databases, and in non-web programs such as word processors and ", "PDF", " software, and in runtime environments that make JavaScript available for writing mobile and desktop applications, including desktop widgets.", "\n", "Although there are strong outward similarities between JavaScript and Java, including language name, ", "syntax", ", and respective ", "standard libraries", ", the two languages are distinct and differ greatly in design; JavaScript was influenced by programming languages such as ", "Self", " and ", "Scheme", ".", "[7]", "\n", "\n", "\n", "\n", "Contents", "\n", "\n", "\n", "1", " ", "History", "\n", "\n", "1.1", " ", "Beginnings at Netscape", "\n", "1.2", " ", "Server-side JavaScript", "\n", "1.3", " ", "Adoption by Microsoft", "\n", "1.4", " ", "Standardization", "\n", "1.5", " ", "Later developments", "\n", "\n", "\n", "2", " ", "Trademark", "\n", "3", " ", "Vanilla JavaScript", "\n", "4", " ", "Features", "\n", "\n", "4.1", " ", "Universal support", "\n", "4.2", " ", "Imperative and structured", "\n", "4.3", " ", "Dynamic", "\n", "4.4", " ", "Prototype-based (object-oriented)", "\n", "4.5", " ", "Functional", "\n", "4.6", " ", "Delegative", "\n", "4.7", " ", "Miscellaneous", "\n", "4.8", " ", "Vendor-specific extensions", "\n", "\n", "\n", "5", " ", "Syntax", "\n", "\n", "5.1", " ", "Simple examples", "\n", "5.2", " ", "More advanced example", "\n", "\n", "\n", "6", " ", "Use in Web pages", "\n", "\n", "6.1", " ", "Example script", "\n", "6.2", " ", "Compatibility considerations", "\n", "\n", "\n", "7", " ", "Security", "\n", "\n", "7.1", " ", "Cross-site vulnerabilities", "\n", "7.2", " ", "Misplaced trust in the client", "\n", "7.3", " ", "Misplaced trust in developers", "\n", "7.4", " ", "Browser and plugin coding errors", "\n", "7.5", " ", "Sandbox implementation errors", "\n", "7.6", " ", "Hardware vulnerabilities", "\n", "\n", "\n", "8", " ", "Uses outside Web pages", "\n", "\n", "8.1", " ", "Embedded scripting language", "\n", "8.2", " ", "Scripting engine", "\n", "8.3", " ", "Application platform", "\n", "\n", "\n", "9", " ", "Development tools", "\n", "10", " ", "Benchmark tools for developers", "\n", "11", " ", "Version history", "\n", "12", " ", "Related languages and features", "\n", "\n", "12.1", " ", "Use as an intermediate language", "\n", "12.2", " ", "JavaScript and Java", "\n", "\n", "\n", "13", " ", "See also", "\n", "14", " ", "References", "\n", "15", " ", "Further reading", "\n", "16", " ", "External links", "\n", "\n", "\n", "\n", "History", "[", "edit", "]", "\n", "Beginnings at Netscape", "[", "edit", "]", "\n", "In 1993, the ", "National Center for Supercomputing Applications", " (NCSA), a unit of the ", "University of Illinois at Urbana-Champaign", ", released ", "NCSA Mosaic", ", the first popular graphical ", "Web browser", ", which played an important part in expanding the growth of the nascent ", "World Wide Web", ". In 1994, a company called ", "Mosaic Communications", " was founded in ", "Mountain View, California", " and employed many of the original NCSA Mosaic authors to create ", "Mosaic Netscape", ". However, it intentionally shared no code with NCSA Mosaic. The internal codename for the company's browser was Mozilla, which stood for \"Mosaic killer\", as the company's goal was to displace NCSA Mosaic as the world's number one web browser. The first version of the Web browser, Mosaic Netscape 0.9, was released in late 1994. Within four months it had already taken three-quarters of the browser market and became the main browser for the Internet in the 1990s. To avoid trademark ownership problems with the NCSA, the browser was subsequently renamed Netscape Navigator in the same year, and the company took the name Netscape Communications. Netscape Communications realized that the Web needed to become more dynamic. ", "Marc Andreessen", ", the founder of the company believed that ", "HTML", " needed a \"glue language\" that was easy to use by Web designers and part-time programmers to assemble components such as images and plugins, where the code could be written directly in the Web page markup.", "\n", "In 1995, Netscape Communications recruited ", "Brendan Eich", " with the goal of embedding the ", "Scheme", " programming language into its Netscape Navigator.", "[8]", " Before he could get started, Netscape Communications collaborated with ", "Sun Microsystems", " to include in Netscape Navigator Sun's more static programming language ", "Java", ", in order to compete with ", "Microsoft", " for user adoption of Web technologies and platforms.", "[9]", " Netscape Communications then decided that the scripting language they wanted to create would complement Java and should have a similar syntax, which excluded adopting other languages such as ", "Perl", ", ", "Python", ", ", "TCL", ", or Scheme. To defend the idea of JavaScript against competing proposals, the company needed a prototype. Eich wrote one in 10 days, in May 1995.", "\n", "Although it was developed under the name ", "Mocha", ", the language was officially called ", "LiveScript", " when it first shipped in beta releases of Netscape Navigator 2.0 in September 1995, but it was renamed ", "JavaScript", "[2]", " when it was deployed in the Netscape Navigator 2.0 beta 3 in December.", "[10]", " The final choice of name caused confusion, giving the impression that the language was a spin-off of the Java programming language, and the choice has been characterized", "[", "by whom?", "]", " as a marketing ploy by Netscape to give JavaScript the cachet of what was then the hot new Web programming language.", "\n", "There is a common misconception that JavaScript was influenced by an earlier Web page scripting language developed by ", "Nombas", " named Cmm (not to be confused with the later ", "C--", " created in 1997).", "[11]", "[12]", " Brendan Eich, however, had never heard of Cmm before he created LiveScript.", "[13]", " Nombas did pitch their embedded Web page scripting to Netscape, though Web page scripting was not a new concept, as shown by the ", "ViolaWWW", " Web browser.", "[14]", " Nombas later switched to offering JavaScript instead of Cmm in their ScriptEase product and was part of the TC39 group that standardized ECMAScript.", "[15]", "\n", "Server-side JavaScript", "[", "edit", "]", "\n", "In December 1995, soon after releasing JavaScript for browsers, Netscape introduced an implementation of the language for ", "server-side scripting", " with ", "Netscape Enterprise Server", ".", "[16]", "\n", "Since the mid-2000s, additional ", "server-side JavaScript implementations", " have been introduced, such as ", "Node.js", " in 2009.", "[17]", "\n", "Adoption by Microsoft", "[", "edit", "]", "\n", "Microsoft script technologies including ", "VBScript", " and ", "JScript", " were released in 1996. JScript, a reverse-engineered implementation of Netscape's JavaScript, was part of ", "Internet Explorer 3", ". JScript was also available for server-side scripting in ", "Internet Information Server", ". Internet Explorer 3 also included Microsoft's first support for CSS and various extensions to HTML, but in each case the implementation was noticeably different to that found in Netscape Navigator at the time.", "[18]", "[19]", " These differences made it difficult for designers and programmers to make a single website work well in both browsers, leading to the use of \"best viewed in Netscape\" and \"best viewed in Internet Explorer\" logos that characterized these early years of the ", "browser wars", ".", "[20]", " JavaScript began to acquire a reputation for being one of the roadblocks to a cross-platform and standards-driven Web. Some developers took on the difficult task of trying to make their sites work in both major browsers, but many could not afford the time.", "[18]", " With the release of ", "Internet Explorer 4", ", Microsoft introduced the concept of ", "Dynamic HTML", ", but the differences in language implementations and the different and proprietary ", "Document Object Models", " remained and were obstacles to widespread take-up of JavaScript on the Web.", "[18]", "\n", "Standardization", "[", "edit", "]", "\n", "In November 1996, Netscape submitted JavaScript to ", "Ecma International", " to carve out a standard specification, which other browser vendors could then implement based on the work done at Netscape. This led to the official release of the language specification ", "ECMAScript", " published in the first edition of the ECMA-262 standard in June 1997, with JavaScript being the most well known of the implementations. ", "ActionScript", " and ", "JScript", " are other well-known implementations of ECMAScript.", "\n", "The standards process continued in cycles, with the release of ECMAScript 2 in June 1998, which brings some modifications to conform to the ISO/IEC 16262 international standard. The release of ECMAScript 3 followed in December 1999, which is the baseline for modern day JavaScript. The original ECMAScript 4 work led by Waldemar Horwat (then at Netscape, now at ", "Google", ") started in 2000 and at first, ", "Microsoft", " seemed to participate and even implemented some of the proposals in their ", "JScript .NET", " language.", "\n", "Over time it was clear though that Microsoft had no intention of cooperating or implementing proper JavaScript in Internet Explorer, even though they had no competing proposal and they had a partial (and diverged at this point) implementation on the ", ".NET", " server side. So by 2003, the original ECMAScript 4 work was mothballed.", "\n", "The next major event was in 2005, with two major happenings in JavaScript's history. First, Brendan Eich and Mozilla rejoined Ecma International as a not-for-profit member and work started on ", "ECMAScript for XML", " (E4X), the ECMA-357 standard, which came from ex-Microsoft employees at ", "BEA Systems", " (originally acquired as Crossgain). This led to working jointly with ", "Macromedia", " (later acquired by ", "Adobe Systems", "), who were implementing E4X in ActionScript 3 (ActionScript 3 was a fork of original ECMAScript 4).", "\n", "So, along with Macromedia, work restarted on ECMAScript 4 with the goal of standardizing what was in ActionScript 3. To this end, Adobe Systems released the ActionScript Virtual Machine 2, code named ", "Tamarin", ", as an ", "open source", " project. But Tamarin and ActionScript 3 were too different from web JavaScript to converge, as was realized by the parties in 2007 and 2008.", "\n", "Alas, there was still turmoil between the various players; ", "Douglas Crockford", "\u2014then at ", "Yahoo!", "\u2014joined forces with Microsoft in 2007 to oppose ECMAScript 4, which led to the ECMAScript 3.1 effort. The development of ECMAScript 4 was never completed, but that work influenced subsequent versions.", "[21]", "\n", "While all of this was happening, the open source and developer communities set to work to revolutionize what could be done with JavaScript. This community effort was sparked in 2005 when ", "Jesse James Garrett", " released a white paper in which he coined the term ", "Ajax", ", and described a set of technologies, of which JavaScript was the backbone, used to create web applications where data can be loaded in the background, avoiding the need for full page reloads and leading to more dynamic applications. This resulted in a renaissance period of JavaScript usage spearheaded by open source libraries and the communities that formed around them, with libraries such as ", "Prototype", ", ", "jQuery", ", ", "Dojo Toolkit", ", ", "MooTools", ", and others being released.", "\n", "In July 2008, the disparate parties on either side came together in Oslo. This led to the eventual agreement in early 2009 to rename ECMAScript 3.1 to ECMAScript 5 and drive the language forward using an agenda that is known as Harmony. ECMAScript 5 was finally released in December 2009.", "\n", "In June 2011, ECMAScript 5.1 was released to fully align with the third edition of the ISO/IEC 16262 international standard. ECMAScript 2015 was released in June 2015. ECMAScript 2016 was released in June 2016. The current version is ECMAScript 2017, released in June 2017.", "[3]", "\n", "Later developments", "[", "edit", "]", "\n", "JavaScript has become one of the most popular programming languages on the Web. Initially, however, many professional programmers denigrated the language because, among other reasons, its target audience consisted of Web authors and other such \"amateurs\".", "[22]", " The advent of ", "Ajax", " returned JavaScript to the spotlight and brought more professional programming attention. The result was a proliferation of comprehensive ", "frameworks and libraries", ", improved JavaScript programming practices, and increased usage of JavaScript outside Web browsers, as seen by the proliferation of ", "server-side JavaScript", " platforms.", "\n", "In January 2009, the ", "CommonJS", " project was founded with the goal of specifying a common standard library mainly for JavaScript development outside the browser.", "[23]", "\n", "With the rise of ", "single-page applications", " and JavaScript-heavy sites, it is increasingly being used as a compile target for ", "source-to-source compilers", " from both ", "dynamic languages", " and ", "static languages", ".", "\n", "Trademark", "[", "edit", "]", "\n", "\"JavaScript\" is a ", "trademark", " of ", "Oracle Corporation", " in the United States.", "[24]", " It is used under license for technology invented and implemented by Netscape Communications and current entities such as the ", "Mozilla Foundation", ".", "[25]", "\n", "Vanilla JavaScript", "[", "edit", "]", "\n", "The terms ", "Vanilla JavaScript", " and ", "Vanilla JS", " refer to JavaScript not extended by any frameworks or additional libraries. Scripts written in Vanilla JS are plain JavaScript code.", "[26]", "[27]", "\n", "Features", "[", "edit", "]", "\n", "The following features are common to all conforming ECMAScript implementations, unless explicitly specified otherwise.", "\n", "Universal support", "[", "edit", "]", "\n", "All modern Web browsers support JavaScript with built-in interpreters.", "\n", "Imperative and structured", "[", "edit", "]", "\n", "JavaScript supports much of the ", "structured programming", " syntax from ", "C", " (e.g., ", "if", " statements, ", "while", " loops, ", "switch", " statements, ", "do while", " loops, etc.). One partial exception is ", "scoping", ": JavaScript originally had only ", "function scoping", " with ", "var", ". ECMAScript 2015 added keywords ", "let", " and ", "const", " for block scoping, meaning JavaScript now has both function and block scoping. Like C, JavaScript makes a distinction between ", "expressions", " and ", "statements", ". One syntactic difference from C is ", "automatic semicolon insertion", ", which allows the semicolons that would normally terminate statements to be omitted.", "[28]", "\n", "Dynamic", "[", "edit", "]", "\n", "\n", "Typing", "\n", "As with most ", "scripting languages", ", JavaScript is ", "dynamically typed", "; a ", "type", " is associated with each ", "value", ", rather than just with each expression. For example, a ", "variable", " that is at one time bound to a number may later be re-bound to a ", "string", ".", "[29]", " JavaScript supports various ways to test the type of an object, including ", "duck typing", ".", "[30]", "\n", "Run-time evaluation", "\n", "JavaScript includes an ", "eval", " function that can execute statements provided as strings at run-time.", "\n", "\n", "Prototype-based (object-oriented)", "[", "edit", "]", "\n", "JavaScript is almost entirely ", "object-based", ". In JavaScript, an ", "object", " is an ", "associative array", ", augmented with a prototype (see below); each string key provides the name for an object property, and there are two syntactical ways to specify such a name: dot notation (", "obj.x\u00a0=\u00a010", ") and bracket notation (", "obj['x']\u00a0=\u00a010", "). A property may be added, rebound, or deleted at run-time. Most properties of an object (and any property that belongs to an object's prototype inheritance chain) can be enumerated using a ", "for...in", " loop.", "\n", "JavaScript has a small number of built-in objects, including ", "Function", " and ", "Date", ".", "\n", "\n", "Prototypes", "\n", "JavaScript uses ", "prototypes", " where many other object-oriented languages use ", "classes", " for ", "inheritance", ".", "[31]", " It is possible to simulate many class-based features with prototypes in JavaScript.", "[32]", "\n", "Functions as object constructors", "\n", "Functions double as object constructors, along with their typical role. Prefixing a function call with ", "new", " will create an instance of a prototype, inheriting properties and methods from the constructor (including properties from the ", "Object", " prototype).", "[33]", " ECMAScript 5 offers the ", "Object.create", " method, allowing explicit creation of an instance without automatically inheriting from the ", "Object", " prototype (older environments can assign the prototype to ", "null", ").", "[34]", " The constructor's ", "prototype", " property determines the object used for the new object's internal prototype. New methods can be added by modifying the prototype of the function used as a constructor. JavaScript's built-in constructors, such as ", "Array", " or ", "Object", ", also have prototypes that can be modified. While it is possible to modify the ", "Object", " prototype, it is generally considered bad practice because most objects in JavaScript will inherit methods and properties from the ", "Object", " prototype, and they may not expect the prototype to be modified.", "[35]", "\n", "Functions as methods", "\n", "Unlike many object-oriented languages, there is no distinction between a function definition and a ", "method", " definition. Rather, the distinction occurs during function calling; when a function is called as a method of an object, the function's local ", "this", " keyword is bound to that object for that invocation.", "\n", "\n", "Functional", "[", "edit", "]", "\n", "A ", "function", " is ", "first-class", "; a function is considered to be an object. As such, a function may have properties and methods, such as ", ".call()", " and ", ".bind()", ".", "[36]", " A ", "nested", " function is a function defined within another function. It is created each time the outer function is invoked. In addition, each nested function forms a ", "lexical closure", ": The ", "lexical scope", " of the outer function (including any constant, local variable, or argument value) becomes part of the internal state of each inner function object, even after execution of the outer function concludes.", "[37]", " JavaScript also supports ", "anonymous functions", ".", "\n", "Delegative", "[", "edit", "]", "\n", "JavaScript supports implicit and explicit ", "delegation", ".", "\n", "\n", "Functions as roles (Traits and Mixins)", "\n", "JavaScript natively supports various function-based implementations of ", "Role", "[38]", " patterns like ", "Traits", "[39]", "[40]", " and ", "Mixins", ".", "[41]", " Such a function defines additional behavior by at least one method bound to the ", "this", " keyword within its ", "function", " body. A Role then has to be delegated explicitly via ", "call", " or ", "apply", " to objects that need to feature additional behavior that is not shared via the prototype chain.", "\n", "Object composition and inheritance", "\n", "Whereas explicit function-based delegation does cover ", "composition", " in JavaScript, implicit delegation already happens every time the prototype chain is walked in order to, e.g., find a method that might be related to but is not directly owned by an object. Once the method is found it gets called within this object's context. Thus ", "inheritance", " in JavaScript is covered by a delegation automatism that is bound to the prototype property of constructor functions.", "\n", "\n", "Miscellaneous", "[", "edit", "]", "\n", "\n", "Run-time environment", "\n", "JavaScript typically relies on a run-time environment (e.g., a ", "Web browser", ") to provide objects and methods by which scripts can interact with the environment (e.g., a webpage DOM). It also relies on the run-time environment to provide the ability to include/import scripts (e.g., ", "HTML", " ", "
Skip images
\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server\\'s response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you\\'re likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

'\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "params = {\n", + " 'api_key': SCRAPING_BEE_KEY,\n", + " 'url': 'https://www.target.com/p/-/A-83650487', \n", + " 'render_js': 'false'\n", + "}\n", + "response = requests.get('https://app.scrapingbee.com/api/v1/', params=params)\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "0ea96b44", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 2.073486089706421\n", + "HTTP status: 200\n", + "Response body: b'Web Scraping With Python - 2nd Edition By Ryan Mitchell (paperback) : Target
Skip images
\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server\\'s response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you\\'re likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

'\n" + ] + } + ], + "source": [ + "from scrapingbee import ScrapingBeeClient\n", + "\n", + "start = time.time()\n", + "client = ScrapingBeeClient(api_key=SCRAPING_BEE_KEY)\n", + "params = {'render_js': 'false'}\n", + "response = client.get('https://www.target.com/p/-/A-83650487', params=params)\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f8403823", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 2.085872173309326\n", + "HTTP status: 200\n", + "Response body: b'162.244.149.135\\n'\n" + ] + } + ], + "source": [ + "from scrapingbee import ScrapingBeeClient\n", + "\n", + "start = time.time()\n", + "client = ScrapingBeeClient(api_key=SCRAPING_BEE_KEY)\n", + "params = {'render_js': 'false'}\n", + "response = client.get('https://icanhazip.com/', params=params)\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "5b4f860c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 5.785068035125732\n", + "HTTP status: 200\n", + "Response body: b'64.67.52.107\\n'\n" + ] + } + ], + "source": [ + "from scrapingbee import ScrapingBeeClient\n", + "\n", + "start = time.time()\n", + "client = ScrapingBeeClient(api_key=SCRAPING_BEE_KEY)\n", + "params = {\n", + " 'render_js': 'false',\n", + " 'premium_proxy': 'true',\n", + " 'country_code':'us'\n", + "}\n", + "response = client.get('https://icanhazip.com/', params=params)\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3e9ba5be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 2.6187891960144043\n", + "HTTP status: 200\n", + "Response body: b'184.15.72.234\\n'\n" + ] + } + ], + "source": [ + "from scrapingbee import ScrapingBeeClient\n", + "\n", + "start = time.time()\n", + "client = ScrapingBeeClient(api_key=SCRAPING_BEE_KEY)\n", + "params = {\n", + " 'render_js': 'false',\n", + " 'premium_proxy': 'true',\n", + " 'country_code':'us'\n", + "}\n", + "response = client.get('https://icanhazip.com/', params=params)\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "54933d86", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 4.9734251499176025\n", + "HTTP status: 200\n", + "Response body: b'
194.15.107.195\\n
'\n" + ] + } + ], + "source": [ + "from scrapingbee import ScrapingBeeClient\n", + "\n", + "start = time.time()\n", + "client = ScrapingBeeClient(api_key=SCRAPING_BEE_KEY)\n", + "params = {\n", + " 'render_js': 'false',\n", + " 'stealth_proxy': 'true',\n", + "}\n", + "response = client.get('https://icanhazip.com/', params=params)\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "5a372987", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 5.2490880489349365\n", + "HTTP status: 200\n", + "Response body: b'
40.183.223.222\\n
'\n" + ] + } + ], + "source": [ + "from scrapingbee import ScrapingBeeClient\n", + "\n", + "start = time.time()\n", + "client = ScrapingBeeClient(api_key=SCRAPING_BEE_KEY)\n", + "params = {\n", + " 'render_js': 'false',\n", + " 'stealth_proxy': 'true',\n", + "}\n", + "response = client.get('https://icanhazip.com/', params=params)\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "markdown", + "id": "75daca46", + "metadata": {}, + "source": [ + "### ScraperAPI" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6c53cbdf", + "metadata": {}, + "outputs": [], + "source": [ + "SCRAPER_API_KEY = 'b832a8545143d657a393c08b030edc87'" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "52293cd8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 8.361520290374756\n", + "HTTP status: 200\n", + "Response body: b'Web Scraping With Python - 2nd Edition By Ryan Mitchell (paperback) : Target
Skip images
\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server\\'s response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you\\'re likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

'\n" + ] + } + ], + "source": [ + "import requests\n", + "import time \n", + "\n", + "start = time.time()\n", + "params = {\n", + " 'api_key': SCRAPER_API_KEY,\n", + " 'url': 'https://www.target.com/p/-/A-83650487'\n", + "}\n", + "response = requests.get('http://api.scraperapi.com', params=params)\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "89ef2529", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 4.349257946014404\n", + "HTTP status: 200\n", + "Response body: b'Web Scraping With Python - 2nd Edition By Ryan Mitchell (paperback) : Target
Skip images
\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server\\'s response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you\\'re likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

'\n" + ] + } + ], + "source": [ + "from scraper_api import ScraperAPIClient\n", + "\n", + "client = ScraperAPIClient(SCRAPER_API_KEY)\n", + "start = time.time()\n", + "result = client.get('https://www.target.com/p/-/A-83650487')\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')\n", + "#print(result.content)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "edd9190a", + "metadata": {}, + "outputs": [], + "source": [ + "class RyansAPIClient:\n", + " def __init__(self, key):\n", + " self.key = key\n", + " self.api_root = 'http://api.pythonscraping.com/ryansApiPath'\n", + "\n", + " def get(url):\n", + " params = {'key': self.key, 'url': url}\n", + " return requests.get(self.api_root, params=params)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a7fb192", + "metadata": {}, + "outputs": [], + "source": [ + "from scraper_api import ScraperAPIClient\n", + "\n", + "client = ScraperAPIClient(SCRAPER_API_KEY)\n", + "start = time.time()\n", + "result = client.get('https://www.target.com/p/-/A-83650487')\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')\n", + "#print(result.content)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "500260ab", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"name\":\"Web Scraping with Python: Collecting More Data from the Modern Web\",\"product_information\":{\"publisher\":\"‎O'Reilly Media; 2nd edition (May 8, 2018)\",\"language\":\"‎English\",\"paperback\":\"‎306 pages\",\"isbn_10\":\"‎1491985577\",\"isbn_13\":\"‎978-1491985571\",\"item_weight\":\"‎1.21 pounds\",\"dimensions\":\"‎7 x 0.65 x 9.19 inches\",\"best_sellers_rank\":[\"#245,938 in Books (See Top 100 in Books)\",\"#29 in Online Internet Searching\",\"#111 in Data Mining (Books)\",\"#247 in Python Programming\"],\"customer_reviews\":{\"ratings_count\":207,\"stars\":4.6}},\"brand\":\"by Ryan Mitchell (Author)\",\"brand_url\":null,\"full_description\":\"From the brand\\nPrevious page\\nExplore Python resources Visit the Store\\nSharing the knowledge of experts O'Reilly's mission is to change the world by sharing the knowledge of innovators. For over 40 years, we've inspired companies and individuals to do new things (and do them better) by providing the skills and understanding that are necessary for success. Our customers are hungry to build the innovations that propel the world forward. And we help them do just that.\\nNext page\\nFrom the Publisher\\nFrom the Preface What Is Web Scraping? The automated gathering of data from the internet is nearly as old as the internet itself. Although web scraping is not a new term, in years past the practice has been more commonly known as screen scraping, data mining, web harvesting, or similar variations. General consensus today seems to favor web scraping, so that is the term I use throughout the book, although I also refer to programs that specifically traverse multiple pages as web crawlers or refer to the web scraping programs themselves as bots. In theory, web scraping is the practice of gathering data through any means other than a program interacting with an API (or, obviously, through a human using a web browser). This is most commonly accomplished by writing an automated program that queries a web server, requests data (usually in the form of HTML and other files that compose web pages), and then parses that data to extract needed information. In practice, web scraping encompasses a wide variety of programming techniques and technologies, such as data analysis, natural language parsing, and information security. Because the scope of the field is so broad, this book covers the fundamental basics of web scraping and crawling in Part I and delves into advanced topics in Part II. I suggest that all readers carefully study the first part and delve into the more specific in the second part as needed. About This Book This book is designed to serve not only as an introduction to web scraping, but as a comprehensive guide to collecting, transforming, and using data from uncooperative sources. Although it uses the Python programming language and covers many Python basics, it should not be used as an introduction to the language. If you don’t know any Python at all, this book might be a bit of a challenge. Please do not use it as an introductory Python text. With that said, I’ve tried to keep all concepts and code samples at a beginning-to-intermediate Python programming level in order to make the content accessible to a wide range of readers. To this end, there are occasional explanations of more advanced Python programming and general computer science topics where appropriate. If you are a more advanced reader, feel free to skim these parts! If you’re looking for a more comprehensive Python resource, 'Introducing Python' by Bill Lubanovic (O’Reilly) is a good, if lengthy, guide. For those with shorter attention spans, the video series 'Introduction to Python' by Jessica McKellar (O’Reilly) is an excellent resource. I’ve also enjoyed 'Think Python' by a former professor of mine, Allen Downey (O’Reilly). This last book in particular is ideal for those new to programming, and teaches computer science and software engineering concepts along with the Python language. Technical books are often able to focus on a single language or technology, but web scraping is a relatively disparate subject, with practices that require the use of databases, web servers, HTTP, HTML, internet security, image processing, data science, and other tools. This book attempts to cover all of these, and other topics, from the perspective of 'data gathering.' It should not be used as a complete treatment of any of these subjects, but I believe they are covered in enough detail to get you started writing web scrapers!\",\"pricing\":\"\",\"list_price\":\"\",\"shipping_price\":\"FREE\",\"availability_quantity\":9,\"availability_status\":\"In Stock Only 9 left in stock - order soon.\",\"images\":[\"https://m.media-amazon.com/images/I/51KgwVgNVOL._SX218_BO1,204,203,200_QL40_FMwebp_.jpg\"],\"product_category\":\"Books › Computers & Technology › Databases & Big Data\",\"average_rating\":4.6,\"small_description\":\"\",\"feature_bullets\":[],\"total_reviews\":207,\"total_answered_questions\":0,\"customization_options\":{},\"seller_id\":\"ACPHWXHXI76S7\",\"seller_name\":\"Chris' bargain books\",\"fulfilled_by_amazon\":true,\"fast_track_message\":\" \\n \\n\",\"aplus_present\":true}\n" + ] + } + ], + "source": [ + "import requests\n", + "\n", + "payload = {\n", + " 'api_key': SCRAPER_API_KEY,\n", + " 'asin': '1491985577',\n", + "}\n", + "\n", + "response = requests.get('https://api.scraperapi.com/structured/amazon/product', params=payload)\n", + "print(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c08c55b1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "396667cf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 4.672130823135376\n", + "HTTP status: 200\n", + "Response body: {\"name\":\"Web Scraping with Python: Collecting More Data from the Modern Web\",\"product_information\":{\"publisher\":\"‎O'Reilly Media; 2nd edition (May 8, 2018)\",\"language\":\"‎English\",\"paperback\":\"‎306 pages\",\"isbn_10\":\"‎1491985577\",\"isbn_13\":\"‎978-1491985571\",\"item_weight\":\"‎1.21 pounds\",\"dimensions\":\"‎7 x 0.65 x 9.19 inches\",\"best_sellers_rank\":[\"#245,938 in Books (See Top 100 in Books)\",\"#29 in Online Internet Searching\",\"#111 in Data Mining (Books)\",\"#247 in Python Programming\"],\"customer_reviews\":{\"ratings_count\":207,\"stars\":4.6}},\"brand\":\"by Ryan Mitchell (Author)\",\"brand_url\":null,\"full_description\":\"From the brand\\nPrevious page\\nExplore Python resources Visit the Store\\nSharing the knowledge of experts O'Reilly's mission is to change the world by sharing the knowledge of innovators. For over 40 years, we've inspired companies and individuals to do new things (and do them better) by providing the skills and understanding that are necessary for success. Our customers are hungry to build the innovations that propel the world forward. And we help them do just that.\\nNext page\\nFrom the Publisher\\nFrom the Preface What Is Web Scraping? The automated gathering of data from the internet is nearly as old as the internet itself. Although web scraping is not a new term, in years past the practice has been more commonly known as screen scraping, data mining, web harvesting, or similar variations. General consensus today seems to favor web scraping, so that is the term I use throughout the book, although I also refer to programs that specifically traverse multiple pages as web crawlers or refer to the web scraping programs themselves as bots. In theory, web scraping is the practice of gathering data through any means other than a program interacting with an API (or, obviously, through a human using a web browser). This is most commonly accomplished by writing an automated program that queries a web server, requests data (usually in the form of HTML and other files that compose web pages), and then parses that data to extract needed information. In practice, web scraping encompasses a wide variety of programming techniques and technologies, such as data analysis, natural language parsing, and information security. Because the scope of the field is so broad, this book covers the fundamental basics of web scraping and crawling in Part I and delves into advanced topics in Part II. I suggest that all readers carefully study the first part and delve into the more specific in the second part as needed. About This Book This book is designed to serve not only as an introduction to web scraping, but as a comprehensive guide to collecting, transforming, and using data from uncooperative sources. Although it uses the Python programming language and covers many Python basics, it should not be used as an introduction to the language. If you don’t know any Python at all, this book might be a bit of a challenge. Please do not use it as an introductory Python text. With that said, I’ve tried to keep all concepts and code samples at a beginning-to-intermediate Python programming level in order to make the content accessible to a wide range of readers. To this end, there are occasional explanations of more advanced Python programming and general computer science topics where appropriate. If you are a more advanced reader, feel free to skim these parts! If you’re looking for a more comprehensive Python resource, 'Introducing Python' by Bill Lubanovic (O’Reilly) is a good, if lengthy, guide. For those with shorter attention spans, the video series 'Introduction to Python' by Jessica McKellar (O’Reilly) is an excellent resource. I’ve also enjoyed 'Think Python' by a former professor of mine, Allen Downey (O’Reilly). This last book in particular is ideal for those new to programming, and teaches computer science and software engineering concepts along with the Python language. Technical books are often able to focus on a single language or technology, but web scraping is a relatively disparate subject, with practices that require the use of databases, web servers, HTTP, HTML, internet security, image processing, data science, and other tools. This book attempts to cover all of these, and other topics, from the perspective of 'data gathering.' It should not be used as a complete treatment of any of these subjects, but I believe they are covered in enough detail to get you started writing web scrapers!\",\"pricing\":\"\",\"list_price\":\"\",\"shipping_price\":\"FREE\",\"availability_quantity\":9,\"availability_status\":\"In Stock Only 9 left in stock - order soon.\",\"images\":[\"https://m.media-amazon.com/images/I/51KgwVgNVOL._SX218_BO1,204,203,200_QL40_FMwebp_.jpg\"],\"product_category\":\"Books › Computers & Technology › Databases & Big Data\",\"average_rating\":4.6,\"small_description\":\"\",\"feature_bullets\":[],\"total_reviews\":207,\"total_answered_questions\":0,\"customization_options\":{},\"seller_id\":\"ACPHWXHXI76S7\",\"seller_name\":\"Chris' bargain books\",\"fulfilled_by_amazon\":true,\"fast_track_message\":\" \\n \\n\",\"aplus_present\":true}\n" + ] + } + ], + "source": [ + "from scraper_api import ScraperAPIClient\n", + "\n", + "client = ScraperAPIClient(SCRAPER_API_KEY)\n", + "start = time.time()\n", + "result = client.get('https://www.amazon.com/Web-Scraping-Python-Collecting-Modern/dp/1491985577')\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.text}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7bed0740", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "a1fed4a8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 0.09664416313171387\n", + "HTTP status: 200\n", + "Response body: b'{\"id\":\"728a365b-3a2a-4ed0-9209-cc4e7d88de96\",\"attempts\":0,\"status\":\"running\",\"statusUrl\":\"https://async.scraperapi.com/jobs/728a365b-3a2a-4ed0-9209-cc4e7d88de96\",\"url\":\"https://www.target.com/p/-/A-83650487\"}'\n" + ] + } + ], + "source": [ + "import requests\n", + "import time \n", + "\n", + "start = time.time()\n", + "params = {\n", + " 'apiKey': SCRAPER_API_KEY,\n", + " 'url': 'https://www.target.com/p/-/A-83650487'\n", + "}\n", + "response = requests.post('https://async.scraperapi.com/jobs', json=params)\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response.status_code}')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "e541ae05", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Response body: b'{\"id\":\"728a365b-3a2a-4ed0-9209-cc4e7d88de96\",\"attempts\":0,\"status\":\"finished\",\"statusUrl\":\"https://async.scraperapi.com/jobs/728a365b-3a2a-4ed0-9209-cc4e7d88de96\",\"url\":\"https://www.target.com/p/-/A-83650487\",\"response\":{\"headers\":{\"date\":\"Tue, 29 Aug 2023 02:41:46 GMT\",\"content-type\":\"text/html; charset=utf-8\",\"content-length\":\"214526\",\"connection\":\"close\",\"x-powered-by\":\"Express\",\"access-control-allow-origin\":\"undefined\",\"access-control-allow-headers\":\"Origin, X-Requested-With, Content-Type, Accept\",\"access-control-allow-methods\":\"HEAD,GET,POST,DELETE,OPTIONS,PUT\",\"access-control-allow-credentials\":\"true\",\"x-robots-tag\":\"none\",\"set-cookie\":[\"TealeafAkaSid=4r-gX5a7muvFOXHmk6i3MryVDSC7vsLF; Expires=Thu, 28 Sep 2023 02:41:46 GMT; Path=/; Domain=target.com;\",\"visitorId=018A3F2B21890201A62AA59B2A9BC06A; Max-Age=63072000; Expires=Thu, 28 Aug 2025 02:41:45 GMT; Path=/; Domain=.target.com; Secure\",\"sapphire=1; Max-Age=2629746; Expires=Thu, 28 Sep 2023 13:10:51 GMT; Path=/; Domain=.target.com; Secure\",\"TealeafAkaSid=4r-gX5a7muvFOXHmk6i3MryVDSC7vsLF; Expires=Thu, 28 Sep 2023 02:41:45 GMT; Path=/; Domain=target.com;\",\"GuestLocation=23229|37.600|-77.560|VA|US;Path=/; Secure; Max-Age=86400\"],\"sa-final-url\":\"https://www.target.com/p/-/A-83650487\",\"sa-statuscode\":\"200\",\"sa-credit-cost\":\"1\",\"sa-proxy-hash\":\"undefined\",\"etag\":\"W/\\\\\"345fe-3J2hu7P+GHJladrZ+9ZhEY9L6nQ\\\\\"\",\"vary\":\"Accept-Encoding\",\"strict-transport-security\":\"max-age=15724800; includeSubDomains\"},\"body\":\"Web Scraping With Python - 2nd Edition By Ryan Mitchell (paperback) : Target
Skip images
\\\\\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server\\'s response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you\\'re likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

\",\"statusCode\":200,\"credits\":1}}'\n" + ] + } + ], + "source": [ + "response = requests.get('https://async.scraperapi.com/jobs/\\\n", + " 728a365b-3a2a-4ed0-9209-cc4e7d88de96')\n", + "print(f'Response body: {response.content}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d3e32ce", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "218d1701", + "metadata": {}, + "source": [ + "### Zyte" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "91541aba", + "metadata": {}, + "outputs": [], + "source": [ + "ZYTE_KEY = '76cd6db740da41b9b5611d6fba1e4814'" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "99de9c64", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 0.6896157264709473\n", + "HTTP status: 200\n", + "Response body: b'Web Scraping With Python - 2nd Edition By Ryan Mitchell (paperback) : Target
Skip images
\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server\\'s response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you\\'re likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

'\n" + ] + } + ], + "source": [ + "import time\n", + "from base64 import b64decode\n", + "import requests\n", + "\n", + "\n", + "json_data = {\n", + " 'url': 'https://www.target.com/p/-/A-83650487',\n", + " 'httpResponseBody': True,\n", + "}\n", + "start = time.time()\n", + "response = requests.post('https://api.zyte.com/v1/extract',\n", + " auth=(ZYTE_KEY, ''), json=json_data)\n", + "\n", + "response = response.json()\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response[\"statusCode\"]}')\n", + "body = b64decode(response[\"httpResponseBody\"])\n", + "print(f'Response body: {body}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ee0fc3fe", + "metadata": {}, + "outputs": [], + "source": [ + "ZYTE_KEY='781815a89bf744dc8b2ba4658fd2120c'" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2f535537", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'query': {'id': '1693999701234-8f96058f28a8415c', 'domain': 'target.com', 'userAgent': 'python-requests/2.28.2', 'userQuery': {'url': 'https://www.target.com/p/-/A-83650487', 'pageType': 'product'}}, 'webPage': {'inLanguages': [{'code': 'en'}]}, 'product': {'name': 'Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)', 'description': \"Book Synopsis\\n\\nIf programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.\\n\\nPart I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server's response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you're likely to encounter.\\n\\nParse complicated HTML pages\\nDevelop crawlers with the Scrapy framework\\nLearn methods to store data you scrape\\nRead and extract data from documents\\nClean and normalize badly formatted data\\nRead and write natural languages\\nCrawl through forms and logins\\nScrape JavaScript and crawl through APIs\\nUse and write image-to-text software\\nAvoid scraping traps and bot blockers\\nUse scrapers to test your website\\n\\nAbout the Author\\n\\nRyan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.\", 'mainImage': 'https://target.scene7.com/is/image/Target/GUEST_f0070e94-a4ae-4e49-a0a9-a5f8049f86d9?wid=800&hei=800&qlt=80&fmt=pjpeg', 'images': ['https://target.scene7.com/is/image/Target/GUEST_f0070e94-a4ae-4e49-a0a9-a5f8049f86d9?wid=800&hei=800&qlt=80&fmt=pjpeg'], 'url': 'https://www.target.com/p/-/A-83650487', 'sku': 'A-83650487', 'breadcrumbs': [{'name': 'Target', 'link': 'https://www.target.com/'}, {'name': 'Movies, Music & Books', 'link': 'https://www.target.com/c/movies-music-books/-/N-5xsxe'}, {'name': 'Books', 'link': 'https://www.target.com/c/books-movies-music/-/N-5xsxd'}, {'name': 'All Book Genres', 'link': 'https://www.target.com/c/all-book-genres/-/N-5xsx1'}, {'name': 'Computers & Technology Books', 'link': 'https://www.target.com/c/computers-technology-books-all-book-genres-movies-music/-/N-5cstn'}], 'probability': 0.9967141, 'descriptionHtml': \"
\\n\\n



\\n\\n

Book Synopsis

\\n\\n

If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

\\n\\n

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server's response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you're likely to encounter.

\\n\\n
  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website
\\n\\n



\\n\\n

About the Author

\\n\\n

Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

\\n\\n
\", 'canonicalUrl': 'https://www.target.com/p/web-scraping-with-python-2nd-edition-by-ryan-mitchell-paperback/-/A-83650487'}, 'algorithmVersion': '21.12.7'}]\n", + "\n", + "Time: 20.882309198379517\n" + ] + }, + { + "ename": "TypeError", + "evalue": "'Response' object is not subscriptable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [14]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28mprint\u001b[39m(response)\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mTime: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;241m.\u001b[39mtime() \u001b[38;5;241m-\u001b[39m start\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 21\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHTTP status: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresponse[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatusCode\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 22\u001b[0m body \u001b[38;5;241m=\u001b[39m b64decode(response[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttpResponseBody\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mResponse body: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbody\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n", + "\u001b[0;31mTypeError\u001b[0m: 'Response' object is not subscriptable" + ] + } + ], + "source": [ + "import time\n", + "from base64 import b64decode\n", + "import requests\n", + "\n", + "\n", + "json_data = [{\n", + " 'url': 'https://www.target.com/p/-/A-83650487',\n", + " 'pageType': 'product',\n", + "}]\n", + "start = time.time()\n", + "response = requests.post(\n", + " 'https://autoextract.zyte.com/v1/extract',\n", + " auth=(ZYTE_KEY, ''),\n", + " json=json_data\n", + ")\n", + "\n", + "print(response.json())\n", + "\n", + "print(response)\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response[\"statusCode\"]}')\n", + "body = b64decode(response[\"httpResponseBody\"])\n", + "print(f'Response body: {body}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cdd9a461", + "metadata": {}, + "outputs": [], + "source": [ + "curl -vx https://proxy.zyte.com:8014 -U c447604ccef54fc08c4808b71a18b9b3: --cacert zyte-ca.crt https://httpbin.org/ip" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b9932ff4", + "metadata": {}, + "outputs": [], + "source": [ + "ZYTE_KEY = 'c447604ccef54fc08c4808b71a18b9b3'" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "bc2a5c20", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/RSpecht/opt/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py:1056: InsecureRequestWarning: Unverified HTTPS request is being made to host 'proxy.crawlera.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Web Scraping With Python - 2nd Edition By Ryan Mitchell (paperback) : Target
Skip images
\"Web

Already have this product?

Snap a pic for all to see!

Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)

Create or manage registry

About this item

Details

Description



Book Synopsis



If programming is magic then web scraping is surely a form of wizardry. By writing a simple automated program, you can query web servers, request data, and parse it to extract the information you need. The expanded edition of this practical book not only introduces you web scraping, but also serves as a comprehensive guide to scraping almost every type of data from the modern web.

Part I focuses on web scraping mechanics: using Python to request information from a web server, performing basic handling of the server's response, and interacting with sites in an automated fashion. Part II explores a variety of more specific tools and applications to fit any web scraping scenario you're likely to encounter.

  • Parse complicated HTML pages
  • Develop crawlers with the Scrapy framework
  • Learn methods to store data you scrape
  • Read and extract data from documents
  • Clean and normalize badly formatted data
  • Read and write natural languages
  • Crawl through forms and logins
  • Scrape JavaScript and crawl through APIs
  • Use and write image-to-text software
  • Avoid scraping traps and bot blockers
  • Use scrapers to test your website



About the Author



Ryan Mitchell is a Software Engineer at LinkeDrive in Boston, where she develops their API and data analysis tools. She is a graduate of Olin College of Engineering, and is a Masters degree student at Harvard University School of Extension Studies. Prior to joining LinkeDrive, she was a Software Engineer working on web scraping and data analysis at Abine.

Additional product information and recommendations

Similar items

Loading, please wait...

Your views

Loading, please wait...

More to consider

Loading, please wait...

Featured Products

Loading, please wait...

Guest Ratings & Reviews

Disclaimer

Get top deals, latest trends, and more.

Privacy policy

Footer

\n" + ] + } + ], + "source": [ + "import requests\n", + "\n", + "response = requests.get(\n", + " 'https://www.target.com/p/-/A-83650487',\n", + " proxies={\n", + " 'http': f'http://{ZYTE_KEY}:@proxy.crawlera.com:8011/',\n", + " 'https': f'http://{ZYTE_KEY}:@proxy.crawlera.com:8011/',\n", + " },\n", + " verify=False\n", + " #verify='/Users/RSpecht/Downloads/zyte-proxy-ca.crt' \n", + " \n", + ")\n", + "print(response.text)" + ] + }, + { + "cell_type": "markdown", + "id": "7ee97fe3", + "metadata": {}, + "source": [ + "### Oxylabs\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "141135a9", + "metadata": {}, + "outputs": [], + "source": [ + "# curl -x pr.oxylabs.io:7777 -U \"customer-rremitchell:dg5ACTzZu6kj\" https://ip.oxylabs.io\n", + "\n", + "# curl -x pr.oxylabs.io:7777 -U \"customer-ryan.e.mitchell@gmail.com:tek&x3Ll5zVnKSQ#\" https://ip.oxylabs.io" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cb9e6e5a", + "metadata": {}, + "outputs": [], + "source": [ + "# passwrd tek&x3Ll5zVnKSQ#" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5b87857a", + "metadata": {}, + "outputs": [], + "source": [ + "OXYLABS_USERNAME = 'rremitchell'\n", + "OXYLABS_PASSWORD = 'dg5ACTzZu6kj'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a70188a7", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import time\n", + "\n", + "start = time.time()\n", + "# Structure payload.\n", + "data = {\n", + " 'url': 'https://www.target.com/p/-/A-83650487',\n", + " 'source': 'universal',\n", + "}\n", + "\n", + "# Get response.\n", + "response = requests.post(\n", + " 'https://realtime.oxylabs.io/v1/queries',\n", + " auth=(OXYLABS_USERNAME, OXYLABS_PASSWORD),\n", + " json=data\n", + ")\n", + "\n", + "response = response.json()['results'][0]\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response[\"status_code\"]}')\n", + "print(f'Response body: {response[\"content\"]}')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0453af0c", + "metadata": {}, + "outputs": [], + "source": [ + "OXYLABS_USERNAME_ECOMMERCE = 'rremitchell2'\n", + "OXYLABS_PASSWORD = 'dg5ACTzZu6kj'" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e30d298a", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import time\n", + "\n", + "start = time.time()\n", + "# Structure payload.\n", + "data = {\n", + " 'url': 'https://www.amazon.com/Web-Scraping-Python-Collecting-Modern-dp-1491985577/dp/1491985577',\n", + " 'source': 'amazon_product',\n", + "}\n", + "\n", + "# Get response.\n", + "response = requests.post(\n", + " 'https://realtime.oxylabs.io/v1/queries',\n", + " auth=(OXYLABS_USERNAME_ECOMMERCE, OXYLABS_PASSWORD),\n", + " json=data\n", + ")\n", + "\n", + "response = response.json()\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "0c47a160", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import time\n", + "\n", + "start = time.time()\n", + "# Structure payload.\n", + "data = {\n", + " 'url': 'https://www.amazon.com/Web-Scraping-Python-Collecting-Modern-dp-1491985577/dp/1491985577',\n", + " 'source': 'amazon',\n", + " 'parse': True\n", + "}\n", + "\n", + "# Get response.\n", + "response = requests.post(\n", + " 'https://realtime.oxylabs.io/v1/queries',\n", + " auth=(OXYLABS_USERNAME_ECOMMERCE, OXYLABS_PASSWORD),\n", + " json=data\n", + ")\n", + "\n", + "response = response.json()\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "bdfb76f0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 27.079249143600464\n", + "HTTP status: 200\n", + "Response body: {'url': 'https://www.target.com/p/-/A-83650487', 'price': 44.99, 'title': 'Web Scraping with Python - 2nd Edition by Ryan Mitchell (Paperback)', '_errors': [\"'NoneType' object has no attribute 'xpath'\"], 'category': 'Target/Movies, Music & Books/Books/All Book Genres/Computers & Technology Books', 'currency': 'USD', 'description': 'Error while parsing `description`: `(, AttributeError(\"\\'NoneType\\' object has no attribute \\'xpath\\'\"))`.', 'rating_score': 0, 'parse_status_code': 12004}\n" + ] + } + ], + "source": [ + "import requests\n", + "import time\n", + "\n", + "start = time.time()\n", + "data = {\n", + " 'url': 'https://www.target.com/p/-/A-83650487',\n", + " 'source': 'universal',\n", + " 'parse': True\n", + "}\n", + "\n", + "response = requests.post(\n", + " 'https://realtime.oxylabs.io/v1/queries',\n", + " auth=(OXYLABS_USERNAME, OXYLABS_PASSWORD),\n", + " json=data\n", + ")\n", + "\n", + "response = response.json()['results'][0]\n", + "\n", + "print(f'Time: {time.time() - start}')\n", + "print(f'HTTP status: {response[\"status_code\"]}')\n", + "print(f'Response body: {response[\"content\"]}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0d8db4d8", + "metadata": {}, + "outputs": [], + "source": [ + "curl 'https://realtime.oxylabs.io/v1/queries' --user 'rremitchell:dg5ACTzZu6kj' -H 'Content-Type: application/json' -d '{\"source\": \"universal\", \"url\": \"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html\", \"geo-location\": \"United States\", \"render\": \"html\"}' -v\n", + "\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/README.md b/README.md index 5a14eab..fc126cd 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# python-scraping +# Web Scraping with Python Code Samples + +These code samples are for the book Web Scraping with Python 2nd Edition + +If you're looking for the first edition code files, they can be found in the v1 directory. + +Most code for the second edition is contained in Jupyter notebooks. Although these files can be viewed directly in your browser in Github, some formatting changes and oddities may occur. I recommend that you clone the repository, install Jupyter, and view them locally for the best experience. + +The web changes, libraries update, and make mistakes and typos more frequently than I'd like to admit! If you think you've spotted an error, please feel free to make a pull request against this repository. diff --git a/captcha.png b/captcha.png new file mode 100644 index 0000000..8420f5a Binary files /dev/null and b/captcha.png differ diff --git a/captchas/.DS_Store b/captchas/.DS_Store new file mode 100644 index 0000000..fec3a0f Binary files /dev/null and b/captchas/.DS_Store differ diff --git a/captchas/2F8S.png b/captchas/2F8S.png new file mode 100644 index 0000000..732427d Binary files /dev/null and b/captchas/2F8S.png differ diff --git a/captchas/2PHU.png b/captchas/2PHU.png new file mode 100644 index 0000000..0cb4abb Binary files /dev/null and b/captchas/2PHU.png differ diff --git a/captchas/2XMT.png b/captchas/2XMT.png new file mode 100644 index 0000000..8e0522f Binary files /dev/null and b/captchas/2XMT.png differ diff --git a/captchas/34PQ.png b/captchas/34PQ.png new file mode 100644 index 0000000..292e58b Binary files /dev/null and b/captchas/34PQ.png differ diff --git a/captchas/37QR.png b/captchas/37QR.png new file mode 100644 index 0000000..739230b Binary files /dev/null and b/captchas/37QR.png differ diff --git a/captchas/3A68.png b/captchas/3A68.png new file mode 100644 index 0000000..1cf3c4a Binary files /dev/null and b/captchas/3A68.png differ diff --git a/captchas/3BE8.png b/captchas/3BE8.png new file mode 100644 index 0000000..f58c0ab Binary files /dev/null and b/captchas/3BE8.png differ diff --git a/captchas/3DXJ.png b/captchas/3DXJ.png new file mode 100644 index 0000000..d08e9e7 Binary files /dev/null and b/captchas/3DXJ.png differ diff --git a/captchas/3FDB.png b/captchas/3FDB.png new file mode 100644 index 0000000..bcec5dc Binary files /dev/null and b/captchas/3FDB.png differ diff --git a/captchas/3FK7.png b/captchas/3FK7.png new file mode 100644 index 0000000..ec04dea Binary files /dev/null and b/captchas/3FK7.png differ diff --git a/captchas/3JW5.png b/captchas/3JW5.png new file mode 100644 index 0000000..1f1740c Binary files /dev/null and b/captchas/3JW5.png differ diff --git a/captchas/3LNK.png b/captchas/3LNK.png new file mode 100644 index 0000000..c4ec667 Binary files /dev/null and b/captchas/3LNK.png differ diff --git a/captchas/3QZZ.png b/captchas/3QZZ.png new file mode 100644 index 0000000..ac5a124 Binary files /dev/null and b/captchas/3QZZ.png differ diff --git a/captchas/3RW7.png b/captchas/3RW7.png new file mode 100644 index 0000000..dbfccaa Binary files /dev/null and b/captchas/3RW7.png differ diff --git a/captchas/3TCH.png b/captchas/3TCH.png new file mode 100644 index 0000000..d901f94 Binary files /dev/null and b/captchas/3TCH.png differ diff --git a/captchas/3YL8.png b/captchas/3YL8.png new file mode 100644 index 0000000..990b5cd Binary files /dev/null and b/captchas/3YL8.png differ diff --git a/captchas/3ZV3.png b/captchas/3ZV3.png new file mode 100644 index 0000000..4c355f6 Binary files /dev/null and b/captchas/3ZV3.png differ diff --git a/captchas/46VL.png b/captchas/46VL.png new file mode 100644 index 0000000..fd44ff7 Binary files /dev/null and b/captchas/46VL.png differ diff --git a/captchas/49K7.png b/captchas/49K7.png new file mode 100644 index 0000000..e0dd616 Binary files /dev/null and b/captchas/49K7.png differ diff --git a/captchas/4AUM.png b/captchas/4AUM.png new file mode 100644 index 0000000..d12a3a4 Binary files /dev/null and b/captchas/4AUM.png differ diff --git a/captchas/4QXS.png b/captchas/4QXS.png new file mode 100644 index 0000000..acf43fa Binary files /dev/null and b/captchas/4QXS.png differ diff --git a/captchas/4VHT.png b/captchas/4VHT.png new file mode 100644 index 0000000..2922bed Binary files /dev/null and b/captchas/4VHT.png differ diff --git a/captchas/4WSU.png b/captchas/4WSU.png new file mode 100644 index 0000000..3715bcb Binary files /dev/null and b/captchas/4WSU.png differ diff --git a/captchas/52X6.png b/captchas/52X6.png new file mode 100644 index 0000000..cbf1c08 Binary files /dev/null and b/captchas/52X6.png differ diff --git a/captchas/56AZ.png b/captchas/56AZ.png new file mode 100644 index 0000000..dd32fdd Binary files /dev/null and b/captchas/56AZ.png differ diff --git a/captchas/65KQ.png b/captchas/65KQ.png new file mode 100644 index 0000000..7bfa068 Binary files /dev/null and b/captchas/65KQ.png differ diff --git a/captchas/696R.png b/captchas/696R.png new file mode 100644 index 0000000..e1843bc Binary files /dev/null and b/captchas/696R.png differ diff --git a/captchas/6DM4.png b/captchas/6DM4.png new file mode 100644 index 0000000..34ab018 Binary files /dev/null and b/captchas/6DM4.png differ diff --git a/captchas/6MGR.png b/captchas/6MGR.png new file mode 100644 index 0000000..97e5b5d Binary files /dev/null and b/captchas/6MGR.png differ diff --git a/captchas/6PQ8.png b/captchas/6PQ8.png new file mode 100644 index 0000000..b94f357 Binary files /dev/null and b/captchas/6PQ8.png differ diff --git a/captchas/7994.png b/captchas/7994.png new file mode 100644 index 0000000..89ce9a8 Binary files /dev/null and b/captchas/7994.png differ diff --git a/captchas/7B63.png b/captchas/7B63.png new file mode 100644 index 0000000..9e82c21 Binary files /dev/null and b/captchas/7B63.png differ diff --git a/captchas/7CA2.png b/captchas/7CA2.png new file mode 100644 index 0000000..9b94d25 Binary files /dev/null and b/captchas/7CA2.png differ diff --git a/captchas/7HSD.png b/captchas/7HSD.png new file mode 100644 index 0000000..7fe48fd Binary files /dev/null and b/captchas/7HSD.png differ diff --git a/captchas/7MGH.png b/captchas/7MGH.png new file mode 100644 index 0000000..d3545b0 Binary files /dev/null and b/captchas/7MGH.png differ diff --git a/captchas/7R6J.png b/captchas/7R6J.png new file mode 100644 index 0000000..52b0132 Binary files /dev/null and b/captchas/7R6J.png differ diff --git a/captchas/7RK3.png b/captchas/7RK3.png new file mode 100644 index 0000000..dac0180 Binary files /dev/null and b/captchas/7RK3.png differ diff --git a/captchas/7VUC.png b/captchas/7VUC.png new file mode 100644 index 0000000..5fbd739 Binary files /dev/null and b/captchas/7VUC.png differ diff --git a/captchas/7X8F.png b/captchas/7X8F.png new file mode 100644 index 0000000..447fa23 Binary files /dev/null and b/captchas/7X8F.png differ diff --git a/captchas/7Y4S.png b/captchas/7Y4S.png new file mode 100644 index 0000000..5f267d8 Binary files /dev/null and b/captchas/7Y4S.png differ diff --git a/captchas/832C.png b/captchas/832C.png new file mode 100644 index 0000000..efbfbc0 Binary files /dev/null and b/captchas/832C.png differ diff --git a/captchas/83CA.png b/captchas/83CA.png new file mode 100644 index 0000000..2a961fb Binary files /dev/null and b/captchas/83CA.png differ diff --git a/captchas/8696.png b/captchas/8696.png new file mode 100644 index 0000000..0f0c56e Binary files /dev/null and b/captchas/8696.png differ diff --git a/captchas/88MU.png b/captchas/88MU.png new file mode 100644 index 0000000..9291f43 Binary files /dev/null and b/captchas/88MU.png differ diff --git a/captchas/8D8L.png b/captchas/8D8L.png new file mode 100644 index 0000000..d6f82f4 Binary files /dev/null and b/captchas/8D8L.png differ diff --git a/captchas/8MB6.png b/captchas/8MB6.png new file mode 100644 index 0000000..8338cd0 Binary files /dev/null and b/captchas/8MB6.png differ diff --git a/captchas/8N2Q.png b/captchas/8N2Q.png new file mode 100644 index 0000000..98aca6f Binary files /dev/null and b/captchas/8N2Q.png differ diff --git a/captchas/8N6D.png b/captchas/8N6D.png new file mode 100644 index 0000000..126a749 Binary files /dev/null and b/captchas/8N6D.png differ diff --git a/captchas/8NMS.png b/captchas/8NMS.png new file mode 100644 index 0000000..41d5348 Binary files /dev/null and b/captchas/8NMS.png differ diff --git a/captchas/8PRQ.png b/captchas/8PRQ.png new file mode 100644 index 0000000..34eff5c Binary files /dev/null and b/captchas/8PRQ.png differ diff --git a/captchas/8XAQ.png b/captchas/8XAQ.png new file mode 100644 index 0000000..5c39b95 Binary files /dev/null and b/captchas/8XAQ.png differ diff --git a/captchas/8YEP.png b/captchas/8YEP.png new file mode 100644 index 0000000..396704b Binary files /dev/null and b/captchas/8YEP.png differ diff --git a/captchas/9D6N.png b/captchas/9D6N.png new file mode 100644 index 0000000..7185eb2 Binary files /dev/null and b/captchas/9D6N.png differ diff --git a/captchas/9J8K.png b/captchas/9J8K.png new file mode 100644 index 0000000..5795ccf Binary files /dev/null and b/captchas/9J8K.png differ diff --git a/captchas/9J9F.png b/captchas/9J9F.png new file mode 100644 index 0000000..c137f99 Binary files /dev/null and b/captchas/9J9F.png differ diff --git a/captchas/A23U.png b/captchas/A23U.png new file mode 100644 index 0000000..adf1ce4 Binary files /dev/null and b/captchas/A23U.png differ diff --git a/captchas/A5HM.png b/captchas/A5HM.png new file mode 100644 index 0000000..3d03f65 Binary files /dev/null and b/captchas/A5HM.png differ diff --git a/captchas/ACQC.png b/captchas/ACQC.png new file mode 100644 index 0000000..4093d94 Binary files /dev/null and b/captchas/ACQC.png differ diff --git a/captchas/ADU5.png b/captchas/ADU5.png new file mode 100644 index 0000000..bc0d33c Binary files /dev/null and b/captchas/ADU5.png differ diff --git a/captchas/AK6F.png b/captchas/AK6F.png new file mode 100644 index 0000000..7e1153e Binary files /dev/null and b/captchas/AK6F.png differ diff --git a/captchas/ALX2.png b/captchas/ALX2.png new file mode 100644 index 0000000..6020bad Binary files /dev/null and b/captchas/ALX2.png differ diff --git a/captchas/APAR.png b/captchas/APAR.png new file mode 100644 index 0000000..0c59568 Binary files /dev/null and b/captchas/APAR.png differ diff --git a/captchas/AQF2.png b/captchas/AQF2.png new file mode 100644 index 0000000..1d85646 Binary files /dev/null and b/captchas/AQF2.png differ diff --git a/captchas/ASMW.png b/captchas/ASMW.png new file mode 100644 index 0000000..2c99e68 Binary files /dev/null and b/captchas/ASMW.png differ diff --git a/captchas/BGKH.png b/captchas/BGKH.png new file mode 100644 index 0000000..1ca1833 Binary files /dev/null and b/captchas/BGKH.png differ diff --git a/captchas/BX48.png b/captchas/BX48.png new file mode 100644 index 0000000..220fadb Binary files /dev/null and b/captchas/BX48.png differ diff --git a/captchas/C6TJ.png b/captchas/C6TJ.png new file mode 100644 index 0000000..9ff2e21 Binary files /dev/null and b/captchas/C6TJ.png differ diff --git a/captchas/CFGF.png b/captchas/CFGF.png new file mode 100644 index 0000000..d674ffb Binary files /dev/null and b/captchas/CFGF.png differ diff --git a/captchas/CQ34.png b/captchas/CQ34.png new file mode 100644 index 0000000..87b5963 Binary files /dev/null and b/captchas/CQ34.png differ diff --git a/captchas/CRET.png b/captchas/CRET.png new file mode 100644 index 0000000..10dc33f Binary files /dev/null and b/captchas/CRET.png differ diff --git a/captchas/CX5M.png b/captchas/CX5M.png new file mode 100644 index 0000000..aa69494 Binary files /dev/null and b/captchas/CX5M.png differ diff --git a/captchas/D675.png b/captchas/D675.png new file mode 100644 index 0000000..67eac4d Binary files /dev/null and b/captchas/D675.png differ diff --git a/captchas/DCSR.png b/captchas/DCSR.png new file mode 100644 index 0000000..efde66f Binary files /dev/null and b/captchas/DCSR.png differ diff --git a/captchas/DJFF.png b/captchas/DJFF.png new file mode 100644 index 0000000..7954664 Binary files /dev/null and b/captchas/DJFF.png differ diff --git a/captchas/DPML.png b/captchas/DPML.png new file mode 100644 index 0000000..a41ec00 Binary files /dev/null and b/captchas/DPML.png differ diff --git a/captchas/DTKQ.png b/captchas/DTKQ.png new file mode 100644 index 0000000..2091aec Binary files /dev/null and b/captchas/DTKQ.png differ diff --git a/captchas/DU9H.png b/captchas/DU9H.png new file mode 100644 index 0000000..4bd22a4 Binary files /dev/null and b/captchas/DU9H.png differ diff --git a/captchas/DZQW.png b/captchas/DZQW.png new file mode 100644 index 0000000..0bc471f Binary files /dev/null and b/captchas/DZQW.png differ diff --git a/captchas/E34Y.png b/captchas/E34Y.png new file mode 100644 index 0000000..e8543e4 Binary files /dev/null and b/captchas/E34Y.png differ diff --git a/captchas/E88R.png b/captchas/E88R.png new file mode 100644 index 0000000..7bad4fc Binary files /dev/null and b/captchas/E88R.png differ diff --git a/captchas/EASL.png b/captchas/EASL.png new file mode 100644 index 0000000..dde95a3 Binary files /dev/null and b/captchas/EASL.png differ diff --git a/captchas/EFZZ.png b/captchas/EFZZ.png new file mode 100644 index 0000000..8ca4197 Binary files /dev/null and b/captchas/EFZZ.png differ diff --git a/captchas/EJZV.png b/captchas/EJZV.png new file mode 100644 index 0000000..32952d2 Binary files /dev/null and b/captchas/EJZV.png differ diff --git a/captchas/EKJC.png b/captchas/EKJC.png new file mode 100644 index 0000000..4ab89f1 Binary files /dev/null and b/captchas/EKJC.png differ diff --git a/captchas/EMS3.png b/captchas/EMS3.png new file mode 100644 index 0000000..10d6e85 Binary files /dev/null and b/captchas/EMS3.png differ diff --git a/captchas/ERU6.png b/captchas/ERU6.png new file mode 100644 index 0000000..b776864 Binary files /dev/null and b/captchas/ERU6.png differ diff --git a/captchas/EW7Q.png b/captchas/EW7Q.png new file mode 100644 index 0000000..2105c52 Binary files /dev/null and b/captchas/EW7Q.png differ diff --git a/captchas/EYPK.png b/captchas/EYPK.png new file mode 100644 index 0000000..7699880 Binary files /dev/null and b/captchas/EYPK.png differ diff --git a/captchas/FAAS.png b/captchas/FAAS.png new file mode 100644 index 0000000..9a91d3f Binary files /dev/null and b/captchas/FAAS.png differ diff --git a/captchas/FFNS.png b/captchas/FFNS.png new file mode 100644 index 0000000..70fc604 Binary files /dev/null and b/captchas/FFNS.png differ diff --git a/captchas/FNT9.png b/captchas/FNT9.png new file mode 100644 index 0000000..ce1933b Binary files /dev/null and b/captchas/FNT9.png differ diff --git a/captchas/FP6Z.png b/captchas/FP6Z.png new file mode 100644 index 0000000..1a6a3e6 Binary files /dev/null and b/captchas/FP6Z.png differ diff --git a/captchas/FPL3.png b/captchas/FPL3.png new file mode 100644 index 0000000..27dd7f3 Binary files /dev/null and b/captchas/FPL3.png differ diff --git a/captchas/FUYF.png b/captchas/FUYF.png new file mode 100644 index 0000000..cf1035d Binary files /dev/null and b/captchas/FUYF.png differ diff --git a/captchas/FX8M.png b/captchas/FX8M.png new file mode 100644 index 0000000..5d4e52f Binary files /dev/null and b/captchas/FX8M.png differ diff --git a/captchas/GEV7.png b/captchas/GEV7.png new file mode 100644 index 0000000..ff8beaf Binary files /dev/null and b/captchas/GEV7.png differ diff --git a/captchas/GQ7W.png b/captchas/GQ7W.png new file mode 100644 index 0000000..81102af Binary files /dev/null and b/captchas/GQ7W.png differ diff --git a/captchas/GSAZ.png b/captchas/GSAZ.png new file mode 100644 index 0000000..7ebafa9 Binary files /dev/null and b/captchas/GSAZ.png differ diff --git a/captchas/GVPA.png b/captchas/GVPA.png new file mode 100644 index 0000000..eab7d07 Binary files /dev/null and b/captchas/GVPA.png differ diff --git a/captchas/GWH9.png b/captchas/GWH9.png new file mode 100644 index 0000000..4b2b48a Binary files /dev/null and b/captchas/GWH9.png differ diff --git a/captchas/GZ45.png b/captchas/GZ45.png new file mode 100644 index 0000000..f9d0943 Binary files /dev/null and b/captchas/GZ45.png differ diff --git a/captchas/H2U5.png b/captchas/H2U5.png new file mode 100644 index 0000000..a16dab1 Binary files /dev/null and b/captchas/H2U5.png differ diff --git a/captchas/HCEA.png b/captchas/HCEA.png new file mode 100644 index 0000000..c8cbf45 Binary files /dev/null and b/captchas/HCEA.png differ diff --git a/captchas/HF4F.png b/captchas/HF4F.png new file mode 100644 index 0000000..5163ff5 Binary files /dev/null and b/captchas/HF4F.png differ diff --git a/captchas/HH9N.png b/captchas/HH9N.png new file mode 100644 index 0000000..ffc64b7 Binary files /dev/null and b/captchas/HH9N.png differ diff --git a/captchas/HKUM.png b/captchas/HKUM.png new file mode 100644 index 0000000..e4d03a9 Binary files /dev/null and b/captchas/HKUM.png differ diff --git a/captchas/JTM7.png b/captchas/JTM7.png new file mode 100644 index 0000000..b5dacc3 Binary files /dev/null and b/captchas/JTM7.png differ diff --git a/captchas/K3WQ.png b/captchas/K3WQ.png new file mode 100644 index 0000000..8549da5 Binary files /dev/null and b/captchas/K3WQ.png differ diff --git a/captchas/K4U4.png b/captchas/K4U4.png new file mode 100644 index 0000000..a3feb1b Binary files /dev/null and b/captchas/K4U4.png differ diff --git a/captchas/KE7H.png b/captchas/KE7H.png new file mode 100644 index 0000000..b833ccb Binary files /dev/null and b/captchas/KE7H.png differ diff --git a/captchas/KQCT.png b/captchas/KQCT.png new file mode 100644 index 0000000..fce8648 Binary files /dev/null and b/captchas/KQCT.png differ diff --git a/captchas/KUR6.png b/captchas/KUR6.png new file mode 100644 index 0000000..f9c402a Binary files /dev/null and b/captchas/KUR6.png differ diff --git a/captchas/L4V8.png b/captchas/L4V8.png new file mode 100644 index 0000000..ba7db62 Binary files /dev/null and b/captchas/L4V8.png differ diff --git a/captchas/L95D.png b/captchas/L95D.png new file mode 100644 index 0000000..96244b6 Binary files /dev/null and b/captchas/L95D.png differ diff --git a/captchas/LADE.png b/captchas/LADE.png new file mode 100644 index 0000000..3a5a965 Binary files /dev/null and b/captchas/LADE.png differ diff --git a/captchas/LDS9.png b/captchas/LDS9.png new file mode 100644 index 0000000..68ae2d0 Binary files /dev/null and b/captchas/LDS9.png differ diff --git a/captchas/LH74.png b/captchas/LH74.png new file mode 100644 index 0000000..3c3ff3b Binary files /dev/null and b/captchas/LH74.png differ diff --git a/captchas/MBE7.png b/captchas/MBE7.png new file mode 100644 index 0000000..828f54d Binary files /dev/null and b/captchas/MBE7.png differ diff --git a/captchas/MD5K.png b/captchas/MD5K.png new file mode 100644 index 0000000..b20ea33 Binary files /dev/null and b/captchas/MD5K.png differ diff --git a/captchas/MKTX.png b/captchas/MKTX.png new file mode 100644 index 0000000..55575b6 Binary files /dev/null and b/captchas/MKTX.png differ diff --git a/captchas/MMB9.png b/captchas/MMB9.png new file mode 100644 index 0000000..8114958 Binary files /dev/null and b/captchas/MMB9.png differ diff --git a/captchas/N82K.png b/captchas/N82K.png new file mode 100644 index 0000000..2daa402 Binary files /dev/null and b/captchas/N82K.png differ diff --git a/captchas/NB7Y.png b/captchas/NB7Y.png new file mode 100644 index 0000000..2d0d152 Binary files /dev/null and b/captchas/NB7Y.png differ diff --git a/captchas/NEQT.png b/captchas/NEQT.png new file mode 100644 index 0000000..c4d3926 Binary files /dev/null and b/captchas/NEQT.png differ diff --git a/captchas/NNMB.png b/captchas/NNMB.png new file mode 100644 index 0000000..0fd1c6f Binary files /dev/null and b/captchas/NNMB.png differ diff --git a/captchas/NYJE.png b/captchas/NYJE.png new file mode 100644 index 0000000..63acb57 Binary files /dev/null and b/captchas/NYJE.png differ diff --git a/captchas/P9UC.png b/captchas/P9UC.png new file mode 100644 index 0000000..dce1c5c Binary files /dev/null and b/captchas/P9UC.png differ diff --git a/captchas/PC5N.png b/captchas/PC5N.png new file mode 100644 index 0000000..4122d1f Binary files /dev/null and b/captchas/PC5N.png differ diff --git a/captchas/PCEV.png b/captchas/PCEV.png new file mode 100644 index 0000000..1339262 Binary files /dev/null and b/captchas/PCEV.png differ diff --git a/captchas/PK7W.png b/captchas/PK7W.png new file mode 100644 index 0000000..180b33c Binary files /dev/null and b/captchas/PK7W.png differ diff --git a/captchas/PQWA.png b/captchas/PQWA.png new file mode 100644 index 0000000..9bbc89a Binary files /dev/null and b/captchas/PQWA.png differ diff --git a/captchas/PWF9.png b/captchas/PWF9.png new file mode 100644 index 0000000..11720b9 Binary files /dev/null and b/captchas/PWF9.png differ diff --git a/captchas/QDKW.png b/captchas/QDKW.png new file mode 100644 index 0000000..fadf76f Binary files /dev/null and b/captchas/QDKW.png differ diff --git a/captchas/QJJX.png b/captchas/QJJX.png new file mode 100644 index 0000000..6229310 Binary files /dev/null and b/captchas/QJJX.png differ diff --git a/captchas/QLAX.png b/captchas/QLAX.png new file mode 100644 index 0000000..eb8f26f Binary files /dev/null and b/captchas/QLAX.png differ diff --git a/captchas/QPP7.png b/captchas/QPP7.png new file mode 100644 index 0000000..a866bb3 Binary files /dev/null and b/captchas/QPP7.png differ diff --git a/captchas/QR3C.png b/captchas/QR3C.png new file mode 100644 index 0000000..b74a6a6 Binary files /dev/null and b/captchas/QR3C.png differ diff --git a/captchas/QTHL.png b/captchas/QTHL.png new file mode 100644 index 0000000..e452189 Binary files /dev/null and b/captchas/QTHL.png differ diff --git a/captchas/QTP6.png b/captchas/QTP6.png new file mode 100644 index 0000000..5649a45 Binary files /dev/null and b/captchas/QTP6.png differ diff --git a/captchas/QUEB.png b/captchas/QUEB.png new file mode 100644 index 0000000..c8fc618 Binary files /dev/null and b/captchas/QUEB.png differ diff --git a/captchas/QX4A.png b/captchas/QX4A.png new file mode 100644 index 0000000..a6bc374 Binary files /dev/null and b/captchas/QX4A.png differ diff --git a/captchas/QYWB.png b/captchas/QYWB.png new file mode 100644 index 0000000..b8a0e27 Binary files /dev/null and b/captchas/QYWB.png differ diff --git a/captchas/R66E.png b/captchas/R66E.png new file mode 100644 index 0000000..ce5c60b Binary files /dev/null and b/captchas/R66E.png differ diff --git a/captchas/RKE5.png b/captchas/RKE5.png new file mode 100644 index 0000000..9a23e21 Binary files /dev/null and b/captchas/RKE5.png differ diff --git a/captchas/RLZ7.png b/captchas/RLZ7.png new file mode 100644 index 0000000..4460b16 Binary files /dev/null and b/captchas/RLZ7.png differ diff --git a/captchas/RQTM.png b/captchas/RQTM.png new file mode 100644 index 0000000..b4714cb Binary files /dev/null and b/captchas/RQTM.png differ diff --git a/captchas/RSE8.png b/captchas/RSE8.png new file mode 100644 index 0000000..103400d Binary files /dev/null and b/captchas/RSE8.png differ diff --git a/captchas/S2UB.png b/captchas/S2UB.png new file mode 100644 index 0000000..145eef7 Binary files /dev/null and b/captchas/S2UB.png differ diff --git a/captchas/S5QK.png b/captchas/S5QK.png new file mode 100644 index 0000000..51fd2cb Binary files /dev/null and b/captchas/S5QK.png differ diff --git a/captchas/S8Z8.png b/captchas/S8Z8.png new file mode 100644 index 0000000..13cd0f8 Binary files /dev/null and b/captchas/S8Z8.png differ diff --git a/captchas/SAAM.png b/captchas/SAAM.png new file mode 100644 index 0000000..d6721d7 Binary files /dev/null and b/captchas/SAAM.png differ diff --git a/captchas/SZ34.png b/captchas/SZ34.png new file mode 100644 index 0000000..c0cce16 Binary files /dev/null and b/captchas/SZ34.png differ diff --git a/captchas/T2CS.png b/captchas/T2CS.png new file mode 100644 index 0000000..fdaa7ac Binary files /dev/null and b/captchas/T2CS.png differ diff --git a/captchas/T46Y.png b/captchas/T46Y.png new file mode 100644 index 0000000..12db8f4 Binary files /dev/null and b/captchas/T46Y.png differ diff --git a/captchas/TJ8H.png b/captchas/TJ8H.png new file mode 100644 index 0000000..c282691 Binary files /dev/null and b/captchas/TJ8H.png differ diff --git a/captchas/TJZS.png b/captchas/TJZS.png new file mode 100644 index 0000000..64ac833 Binary files /dev/null and b/captchas/TJZS.png differ diff --git a/captchas/TLRX.png b/captchas/TLRX.png new file mode 100644 index 0000000..ffb0517 Binary files /dev/null and b/captchas/TLRX.png differ diff --git a/captchas/TNBP.png b/captchas/TNBP.png new file mode 100644 index 0000000..183dafc Binary files /dev/null and b/captchas/TNBP.png differ diff --git a/captchas/TUCS.png b/captchas/TUCS.png new file mode 100644 index 0000000..7dbb049 Binary files /dev/null and b/captchas/TUCS.png differ diff --git a/captchas/TVLQ.png b/captchas/TVLQ.png new file mode 100644 index 0000000..14d3291 Binary files /dev/null and b/captchas/TVLQ.png differ diff --git a/captchas/U6GN.png b/captchas/U6GN.png new file mode 100644 index 0000000..8ad1227 Binary files /dev/null and b/captchas/U6GN.png differ diff --git a/captchas/U7CH.png b/captchas/U7CH.png new file mode 100644 index 0000000..8a76183 Binary files /dev/null and b/captchas/U7CH.png differ diff --git a/captchas/U9EH.png b/captchas/U9EH.png new file mode 100644 index 0000000..6161450 Binary files /dev/null and b/captchas/U9EH.png differ diff --git a/captchas/UGA6.png b/captchas/UGA6.png new file mode 100644 index 0000000..c6c0071 Binary files /dev/null and b/captchas/UGA6.png differ diff --git a/captchas/UKXW.png b/captchas/UKXW.png new file mode 100644 index 0000000..7448892 Binary files /dev/null and b/captchas/UKXW.png differ diff --git a/captchas/UNKE.png b/captchas/UNKE.png new file mode 100644 index 0000000..88f6660 Binary files /dev/null and b/captchas/UNKE.png differ diff --git a/captchas/UQZE.png b/captchas/UQZE.png new file mode 100644 index 0000000..ef45d51 Binary files /dev/null and b/captchas/UQZE.png differ diff --git a/captchas/USE7.png b/captchas/USE7.png new file mode 100644 index 0000000..8c7782a Binary files /dev/null and b/captchas/USE7.png differ diff --git a/captchas/UUFN.png b/captchas/UUFN.png new file mode 100644 index 0000000..b436270 Binary files /dev/null and b/captchas/UUFN.png differ diff --git a/captchas/V3YY.png b/captchas/V3YY.png new file mode 100644 index 0000000..e08e274 Binary files /dev/null and b/captchas/V3YY.png differ diff --git a/captchas/V9AH.png b/captchas/V9AH.png new file mode 100644 index 0000000..d5d4e89 Binary files /dev/null and b/captchas/V9AH.png differ diff --git a/captchas/VBUM.png b/captchas/VBUM.png new file mode 100644 index 0000000..3013894 Binary files /dev/null and b/captchas/VBUM.png differ diff --git a/captchas/VCMC.png b/captchas/VCMC.png new file mode 100644 index 0000000..0753330 Binary files /dev/null and b/captchas/VCMC.png differ diff --git a/captchas/VCUD.png b/captchas/VCUD.png new file mode 100644 index 0000000..544cd80 Binary files /dev/null and b/captchas/VCUD.png differ diff --git a/captchas/VDS5.png b/captchas/VDS5.png new file mode 100644 index 0000000..8c6a0d0 Binary files /dev/null and b/captchas/VDS5.png differ diff --git a/captchas/VFC5.png b/captchas/VFC5.png new file mode 100644 index 0000000..ebf0910 Binary files /dev/null and b/captchas/VFC5.png differ diff --git a/captchas/VTWE.png b/captchas/VTWE.png new file mode 100644 index 0000000..b2f4935 Binary files /dev/null and b/captchas/VTWE.png differ diff --git a/captchas/W43T.png b/captchas/W43T.png new file mode 100644 index 0000000..3631ba5 Binary files /dev/null and b/captchas/W43T.png differ diff --git a/captchas/WAP7.png b/captchas/WAP7.png new file mode 100644 index 0000000..58a98a1 Binary files /dev/null and b/captchas/WAP7.png differ diff --git a/captchas/WH3C.png b/captchas/WH3C.png new file mode 100644 index 0000000..f7f48b2 Binary files /dev/null and b/captchas/WH3C.png differ diff --git a/captchas/WKU5.png b/captchas/WKU5.png new file mode 100644 index 0000000..e1345af Binary files /dev/null and b/captchas/WKU5.png differ diff --git a/captchas/X5ZS.png b/captchas/X5ZS.png new file mode 100644 index 0000000..bc18488 Binary files /dev/null and b/captchas/X5ZS.png differ diff --git a/captchas/X7D4.png b/captchas/X7D4.png new file mode 100644 index 0000000..b3e8a66 Binary files /dev/null and b/captchas/X7D4.png differ diff --git a/captchas/XE48.png b/captchas/XE48.png new file mode 100644 index 0000000..5a02252 Binary files /dev/null and b/captchas/XE48.png differ diff --git a/captchas/XER2.png b/captchas/XER2.png new file mode 100644 index 0000000..16acea8 Binary files /dev/null and b/captchas/XER2.png differ diff --git a/captchas/XFCT.png b/captchas/XFCT.png new file mode 100644 index 0000000..842cfa6 Binary files /dev/null and b/captchas/XFCT.png differ diff --git a/captchas/XPGT.png b/captchas/XPGT.png new file mode 100644 index 0000000..90b1612 Binary files /dev/null and b/captchas/XPGT.png differ diff --git a/captchas/XU8Y.png b/captchas/XU8Y.png new file mode 100644 index 0000000..5ba780e Binary files /dev/null and b/captchas/XU8Y.png differ diff --git a/captchas/Y2Z3.png b/captchas/Y2Z3.png new file mode 100644 index 0000000..b023571 Binary files /dev/null and b/captchas/Y2Z3.png differ diff --git a/captchas/Y5L5.png b/captchas/Y5L5.png new file mode 100644 index 0000000..6fee6a1 Binary files /dev/null and b/captchas/Y5L5.png differ diff --git a/captchas/YAGV.png b/captchas/YAGV.png new file mode 100644 index 0000000..566b20d Binary files /dev/null and b/captchas/YAGV.png differ diff --git a/captchas/YEZY.png b/captchas/YEZY.png new file mode 100644 index 0000000..90d9c7d Binary files /dev/null and b/captchas/YEZY.png differ diff --git a/captchas/YGV4.png b/captchas/YGV4.png new file mode 100644 index 0000000..68f923c Binary files /dev/null and b/captchas/YGV4.png differ diff --git a/captchas/YMZM.png b/captchas/YMZM.png new file mode 100644 index 0000000..109bdf2 Binary files /dev/null and b/captchas/YMZM.png differ diff --git a/captchas/YRQ8.png b/captchas/YRQ8.png new file mode 100644 index 0000000..82659c1 Binary files /dev/null and b/captchas/YRQ8.png differ diff --git a/captchas/YSRA.png b/captchas/YSRA.png new file mode 100644 index 0000000..18362e2 Binary files /dev/null and b/captchas/YSRA.png differ diff --git a/captchas/ZCBP.png b/captchas/ZCBP.png new file mode 100644 index 0000000..1e08bb1 Binary files /dev/null and b/captchas/ZCBP.png differ diff --git a/captchas/ZNYD.png b/captchas/ZNYD.png new file mode 100644 index 0000000..612719c Binary files /dev/null and b/captchas/ZNYD.png differ diff --git a/captchas/ZTNL.png b/captchas/ZTNL.png new file mode 100644 index 0000000..60021e9 Binary files /dev/null and b/captchas/ZTNL.png differ diff --git a/captchas/ZXBW.png b/captchas/ZXBW.png new file mode 100644 index 0000000..5f4edc5 Binary files /dev/null and b/captchas/ZXBW.png differ diff --git a/chapter1/1-basicExample.py b/chapter1/1-basicExample.py deleted file mode 100644 index 558fb2a..0000000 --- a/chapter1/1-basicExample.py +++ /dev/null @@ -1,4 +0,0 @@ -from urllib.request import urlopen -#Retrieve HTML string from the URL -html = urlopen("http://www.pythonscraping.com/exercises/exercise1.html") -print(html.read()) \ No newline at end of file diff --git a/chapter1/2-beautifulSoup.py b/chapter1/2-beautifulSoup.py deleted file mode 100644 index 1911093..0000000 --- a/chapter1/2-beautifulSoup.py +++ /dev/null @@ -1,6 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://www.pythonscraping.com/exercises/exercise1.html") -bsObj = BeautifulSoup(html.read()) -print(bsObj.h1) diff --git a/chapter1/3-exceptionHandling.py b/chapter1/3-exceptionHandling.py deleted file mode 100644 index 331a7ee..0000000 --- a/chapter1/3-exceptionHandling.py +++ /dev/null @@ -1,26 +0,0 @@ -from urllib.request import urlopen -from urllib.error import HTTPError -from bs4 import BeautifulSoup -import sys - - -def getTitle(url): - try: - html = urlopen(url) - except HTTPError as e: - print(e) - return None - try: - bsObj = BeautifulSoup(html.read()) - title = bsObj.body.h1 - except AttributeError as e: - return None - return title - -title = getTitle("http://www.pythonscraping.com/exercises/exercise1.html") -if title == None: - print("Title could not be found") -else: - print(title) - - \ No newline at end of file diff --git a/chapter10/1-seleniumBasic.py b/chapter10/1-seleniumBasic.py deleted file mode 100644 index e6d328f..0000000 --- a/chapter10/1-seleniumBasic.py +++ /dev/null @@ -1,8 +0,0 @@ -from selenium import webdriver -import time - -driver = webdriver.PhantomJS(executable_path='') -driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html") -time.sleep(3) -print(driver.find_element_by_id("content").text) -driver.close() \ No newline at end of file diff --git a/chapter10/2-waitForLoad.py b/chapter10/2-waitForLoad.py deleted file mode 100644 index bc69109..0000000 --- a/chapter10/2-waitForLoad.py +++ /dev/null @@ -1,11 +0,0 @@ -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC - -driver = webdriver.PhantomJS(executable_path='') -driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html") -try: - element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "loadedButton"))) -finally: - print(driver.find_element_by_id("content").text) - driver.close() \ No newline at end of file diff --git a/chapter10/3-javascriptRedirect.py b/chapter10/3-javascriptRedirect.py deleted file mode 100644 index 1205b5e..0000000 --- a/chapter10/3-javascriptRedirect.py +++ /dev/null @@ -1,23 +0,0 @@ -from selenium import webdriver -import time -from selenium.webdriver.remote.webelement import WebElement -from selenium.common.exceptions import StaleElementReferenceException - -def waitForLoad(driver): - elem = driver.find_element_by_tag_name("html") - count = 0 - while True: - count += 1 - if count > 20: - print("Timing out after 10 seconds and returning") - return - time.sleep(.5) - try: - elem == driver.find_element_by_tag_name("html") - except StaleElementReferenceException: - return - -driver = webdriver.PhantomJS(executable_path='') -driver.get("http://pythonscraping.com/pages/javascript/redirectDemo1.html") -waitForLoad(driver) -print(driver.page_source) \ No newline at end of file diff --git a/chapter11/1-basicImage.py b/chapter11/1-basicImage.py deleted file mode 100644 index bc66c1f..0000000 --- a/chapter11/1-basicImage.py +++ /dev/null @@ -1,6 +0,0 @@ -from PIL import Image, ImageFilter - -kitten = Image.open("kitten.jpg") -blurryKitten = kitten.filter(ImageFilter.GaussianBlur) -blurryKitten.save("kitten_blurred.jpg") -blurryKitten.show() \ No newline at end of file diff --git a/chapter11/2-cleanImage.py b/chapter11/2-cleanImage.py deleted file mode 100644 index 34f3ac5..0000000 --- a/chapter11/2-cleanImage.py +++ /dev/null @@ -1,19 +0,0 @@ -from PIL import Image -import subprocess - -def cleanFile(filePath, newFilePath): - image = Image.open(filePath) - - #Set a threshold value for the image, and save - image = image.point(lambda x: 0 if x<143 else 255) - image.save(newFilePath) - - #call tesseract to do OCR on the newly created image - subprocess.call(["tesseract", newFilePath, "output"]) - - #Open and read the resulting data file - outputFile = open("output.txt", 'r') - print(outputFile.read()) - outputFile.close() - -cleanFile("text_2.png", "text_2_clean.png") \ No newline at end of file diff --git a/chapter11/3-readWebImages.py b/chapter11/3-readWebImages.py deleted file mode 100644 index d1616a0..0000000 --- a/chapter11/3-readWebImages.py +++ /dev/null @@ -1,36 +0,0 @@ -import time -from urllib.request import urlretrieve -import subprocess -from selenium import webdriver - -#driver = webdriver.PhantomJS(executable_path='/Users/ryan/Documents/pythonscraping/code/headless/phantomjs-1.9.8-macosx/bin/phantomjs') -driver = webdriver.Firefox() -driver.get("http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200") -time.sleep(2) - -driver.find_element_by_id("img-canvas").click() -#The easiest way to get exactly one of every page -imageList = set() - -#Wait for the page to load -time.sleep(10) -print(driver.find_element_by_id("sitbReaderRightPageTurner").get_attribute("style")) -while "pointer" in driver.find_element_by_id("sitbReaderRightPageTurner").get_attribute("style"): - #While we can click on the right arrow, move through the pages - driver.find_element_by_id("sitbReaderRightPageTurner").click() - time.sleep(2) - #Get any new pages that have loaded (multiple pages can load at once) - pages = driver.find_elements_by_xpath("//div[@class='pageImage']/div/img") - for page in pages: - image = page.get_attribute("src") - imageList.add(image) - -driver.quit() - -#Start processing the images we've collected URLs for with Tesseract -for image in sorted(imageList): - urlretrieve(image, "page.jpg") - p = subprocess.Popen(["tesseract", "page.jpg", "page"], stdout=subprocess.PIPE,stderr=subprocess.PIPE) - p.wait() - f = open("page.txt", "r") - print(f.read()) diff --git a/chapter11/4-solveCaptcha.py b/chapter11/4-solveCaptcha.py deleted file mode 100644 index ca5eba9..0000000 --- a/chapter11/4-solveCaptcha.py +++ /dev/null @@ -1,48 +0,0 @@ -from urllib.request import urlretrieve -from urllib.request import urlopen -from bs4 import BeautifulSoup -import subprocess -import requests -from PIL import Image -from PIL import ImageOps - -def cleanImage(imagePath): - image = Image.open(imagePath) - image = image.point(lambda x: 0 if x<143 else 255) - borderImage = ImageOps.expand(image,border=20,fill='white') - borderImage.save(imagePath) - -html = urlopen("http://www.pythonscraping.com/humans-only") -bsObj = BeautifulSoup(html) -#Gather prepopulated form values -imageLocation = bsObj.find("img", {"title": "Image CAPTCHA"})["src"] -formBuildId = bsObj.find("input", {"name":"form_build_id"})["value"] -captchaSid = bsObj.find("input", {"name":"captcha_sid"})["value"] -captchaToken = bsObj.find("input", {"name":"captcha_token"})["value"] - -captchaUrl = "http://pythonscraping.com"+imageLocation -urlretrieve(captchaUrl, "captcha.jpg") -cleanImage("captcha.jpg") -p = subprocess.Popen(["tesseract", "captcha.jpg", "captcha"], stdout= - subprocess.PIPE,stderr=subprocess.PIPE) -p.wait() -f = open("captcha.txt", "r") - -#Clean any whitespace characters -captchaResponse = f.read().replace(" ", "").replace("\n", "") -print("Captcha solution attempt: "+captchaResponse) - -if len(captchaResponse) == 5: - params = {"captcha_token":captchaToken, "captcha_sid":captchaSid, - "form_id":"comment_node_page_form", "form_build_id": formBuildId, - "captcha_response":captchaResponse, "name":"Ryan Mitchell", - "subject": "I come to seek the Grail", - "comment_body[und][0][value]": - "...and I am definitely not a bot"} - r = requests.post("http://www.pythonscraping.com/comment/reply/10", - data=params) - responseObj = BeautifulSoup(r.text) - if responseObj.find("div", {"class":"messages"}) is not None: - print(responseObj.find("div", {"class":"messages"}).get_text()) -else: - print("There was a problem reading the CAPTCHA correctly!") \ No newline at end of file diff --git a/chapter11/ghostdriver.log b/chapter11/ghostdriver.log deleted file mode 100644 index ee22e52..0000000 --- a/chapter11/ghostdriver.log +++ /dev/null @@ -1,36 +0,0 @@ -PhantomJS is launching GhostDriver... -[INFO - 2015-10-27T02:02:29.659Z] GhostDriver - Main - running on port 60643 -[INFO - 2015-10-27T02:02:29.699Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34","webSecurityEnabled":true} -[INFO - 2015-10-27T02:02:29.699Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.customHeaders: - {} -[INFO - 2015-10-27T02:02:29.699Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"1.9.8","driverName":"ghostdriver","driverVersion":"1.1.0","platform":"mac-10.10 (Yosemite)-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}} -[INFO - 2015-10-27T02:02:29.699Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: c741cde0-7c4e-11e5-9065-072e3a262f9e -[ERROR - 2015-10-27T02:02:33.292Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - msg: ReferenceError: Can't find variable: ue -[ERROR - 2015-10-27T02:02:33.292Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - stack: - (anonymous function) (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:9638) - (anonymous function) (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:201) - (anonymous function) (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:202) - (anonymous function) (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:205) -[ERROR - 2015-10-27T02:02:33.292Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - msg: TypeError: 'null' is not an object (evaluating 'old_error_handler.apply') -[ERROR - 2015-10-27T02:02:33.292Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - stack: - dpOnErrorOverride (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:1345) -[ERROR - 2015-10-27T02:02:33.794Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - msg: ReferenceError: Can't find variable: ue -[ERROR - 2015-10-27T02:02:33.794Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - stack: - (anonymous function) (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:9632) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:940) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:807) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:696) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:784) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:959) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:161) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:70) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:960) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:2608) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:2646) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:2772) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:161) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:2773) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:2778) - (anonymous function) (http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-7939884564._V1_.js:2781) -[ERROR - 2015-10-27T02:02:33.794Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - msg: TypeError: 'null' is not an object (evaluating 'old_error_handler.apply') -[ERROR - 2015-10-27T02:02:33.794Z] Session [c741cde0-7c4e-11e5-9065-072e3a262f9e] - page.onError - stack: - dpOnErrorOverride (http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200:1345) diff --git a/chapter11/page.jpg b/chapter11/page.jpg deleted file mode 100644 index 66dee1c..0000000 Binary files a/chapter11/page.jpg and /dev/null differ diff --git a/chapter11/page.txt b/chapter11/page.txt deleted file mode 100644 index fdd6a7f..0000000 --- a/chapter11/page.txt +++ /dev/null @@ -1,47 +0,0 @@ -WEI‘ nrrd Peace -Len Nlkelayevldu Iolfluy - -Readmg shmdd be ax -wlnvame asnossxble Wenfler -an mm m our cram: Llhvary - -— Leo Tmsloy was a Russian rwovelwst -I and moval phflmopher med lur -A ms Ideas 01 nonviolenx reswslance m 5 We range 0, “and” - -M. -known for ms genevosxly to the '°'”"“‘ ‘”' "*°’“‘* W‘"' - -reading dwnmuie,—a|\ -‘L °““"“‘ opnmizedfarreadabIh(y—so -readerscan tho the fnrmat - -ms best knawn nuvckave “War and - -Peace" (1869),w>v(h msmy regarded as an em ‘”“”L"‘5"‘°"‘ W‘ 599 ""19 -vamer man a novel, and "Anna Kavemna" mm) “” '“"" - -Nxswark was admued m hiswne by Doxlayevxky, - -Chxkoxa Turgenev, and Flauben and Water by Tm EaSyREad super - -wgmiz wow and )ame§Joyc vlsxon -onshuqhtlhrmlghlhevadherenzr(owrme He -tamures the essenze af Ne wwlh an R5 mancnges, -hardsmps andmys The maepm poV\raya\ at -numemus thataclerx lrom an xpheves m We wands -u unparalleled reahsm Aime dassm‘ - - - -su+u27o3ro2ar1 - -||I||| H - -cuvmumeu .21mna - - - diff --git a/chapter12/1-headers.py b/chapter12/1-headers.py deleted file mode 100644 index 3fe773c..0000000 --- a/chapter12/1-headers.py +++ /dev/null @@ -1,14 +0,0 @@ -import requests -from bs4 import BeautifulSoup - -session = requests.Session() -headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) - AppleWebKit 537.36 (KHTML, like Gecko) Chrome", - "Accept":"text/html,application/xhtml+xml,application/xml; - q=0.9,image/webp,*/*;q=0.8"} -url = "https://www.whatismybrowser.com/ - developers/what-http-headers-is-my-browser-sending" -req = session.get(url, headers=headers) - -bsObj = BeautifulSoup(req.text) -print(bsObj.find("table",{"class":"table-striped"}).get_text) \ No newline at end of file diff --git a/chapter12/2-seleniumCookies.py b/chapter12/2-seleniumCookies.py deleted file mode 100644 index 0dfc84a..0000000 --- a/chapter12/2-seleniumCookies.py +++ /dev/null @@ -1,18 +0,0 @@ -from selenium import webdriver - -driver = webdriver.PhantomJS(executable_path='') -driver.get("http://pythonscraping.com") -driver.implicitly_wait(1) -print(driver.get_cookies()) - -savedCookies = driver.get_cookies() - -driver2 = webdriver.PhantomJS(executable_path='') -driver2.get("http://pythonscraping.com") -driver2.delete_all_cookies() -for cookie in savedCookies: - driver2.add_cookie(cookie) - -driver2.get("http://pythonscraping.com") -driver.implicitly_wait(1) -print(driver2.get_cookies()) \ No newline at end of file diff --git a/chapter12/3-honeypotDetection.py b/chapter12/3-honeypotDetection.py deleted file mode 100644 index 9887ff8..0000000 --- a/chapter12/3-honeypotDetection.py +++ /dev/null @@ -1,14 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.remote.webelement import WebElement - -driver = webdriver.PhantomJS(executable_path='') -driver.get("http://pythonscraping.com/pages/itsatrap.html") -links = driver.find_elements_by_tag_name("a") -for link in links: - if not link.is_displayed(): - print("The link "+link.get_attribute("href")+" is a trap") - -fields = driver.find_elements_by_tag_name("input") -for field in fields: - if not field.is_displayed(): - print("Do not change value of "+field.get_attribute("name")) \ No newline at end of file diff --git a/chapter13/1-wikiUnitTest.py b/chapter13/1-wikiUnitTest.py deleted file mode 100644 index c3e05dd..0000000 --- a/chapter13/1-wikiUnitTest.py +++ /dev/null @@ -1,52 +0,0 @@ -from urllib.request import urlopen -from urllib.parse import unquote -import random -import re -from bs4 import BeautifulSoup -import unittest - -class TestWikipedia(unittest.TestCase): - - bsObj = None - url = None - - - def test_PageProperties(self): - global bsObj - global url - - url = "http://en.wikipedia.org/wiki/Monty_Python" - #Test the first 100 pages we encounter - for i in range(1, 100): - bsObj = BeautifulSoup(urlopen(url)) - titles = self.titleMatchesURL() - self.assertEquals(titles[0], titles[1]) - self.assertTrue(self.contentExists()) - url = self.getNextLink() - print("Done!") - - def titleMatchesURL(self): - global bsObj - global url - pageTitle = bsObj.find("h1").get_text() - urlTitle = url[(url.index("/wiki/")+6):] - urlTitle = urlTitle.replace("_", " ") - urlTitle = unquote(urlTitle) - return [pageTitle.lower(), urlTitle.lower()] - - def contentExists(self): - global bsObj - content = bsObj.find("div",{"id":"mw-content-text"}) - if content is not None: - return True - return False - - def getNextLink(self): - global bsObj - links = bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$")) - link = links[random.randint(0, len(links)-1)].attrs['href'] - print("Next link is: "+link) - return "http://en.wikipedia.org"+link - -if __name__ == '__main__': - unittest.main() diff --git a/chapter13/2-wikiSeleniumTest.py b/chapter13/2-wikiSeleniumTest.py deleted file mode 100644 index cf3fe3d..0000000 --- a/chapter13/2-wikiSeleniumTest.py +++ /dev/null @@ -1,8 +0,0 @@ -from selenium import webdriver - - -driver = webdriver.PhantomJS(executable_path='/Users/ryan/Documents/pythonscraping/code/headless/phantomjs-1.9.8-macosx/bin/phantomjs') -driver.get("http://en.wikipedia.org/wiki/Monty_Python") -assert "Monty Python" in driver.title -print("Monty Python was not in the title") -driver.close() \ No newline at end of file diff --git a/chapter13/3-interactiveTest.py b/chapter13/3-interactiveTest.py deleted file mode 100644 index 892c8bc..0000000 --- a/chapter13/3-interactiveTest.py +++ /dev/null @@ -1,27 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.remote.webelement import WebElement -from selenium.webdriver.common.keys import Keys -from selenium.webdriver import ActionChains - - -driver = webdriver.PhantomJS(executable_path='phantomjs/bin/phantomjs') -driver.get("http://pythonscraping.com/pages/files/form.html") - -firstnameField = driver.find_element_by_name("firstname") -lastnameField = driver.find_element_by_name("lastname") -submitButton = driver.find_element_by_id("submit") - -### METHOD 1 ### -firstnameField.send_keys("Ryan") -lastnameField.send_keys("Mitchell") -submitButton.click() -################ - -### METHOD 2 ### -actions = ActionChains(driver).click(firstnameField).send_keys("Ryan").click(lastnameField).send_keys("Mitchell").send_keys(Keys.RETURN) -actions.perform() -################ - -print(driver.find_element_by_tag_name("body").text) - -driver.close() \ No newline at end of file diff --git a/chapter13/4-dragAndDrop.py b/chapter13/4-dragAndDrop.py deleted file mode 100644 index 9376814..0000000 --- a/chapter13/4-dragAndDrop.py +++ /dev/null @@ -1,15 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.remote.webelement import WebElement -from selenium.webdriver import ActionChains - -driver = webdriver.PhantomJS(executable_path='phantomjs/bin/phantomjs') -driver.get('http://pythonscraping.com/pages/javascript/draggableDemo.html') - -print(driver.find_element_by_id("message").text) - -element = driver.find_element_by_id("draggable") -target = driver.find_element_by_id("div2") -actions = ActionChains(driver) -actions.drag_and_drop(element, target).perform() - -print(driver.find_element_by_id("message").text) \ No newline at end of file diff --git a/chapter13/5-takeScreenshot.py b/chapter13/5-takeScreenshot.py deleted file mode 100644 index 14c41ba..0000000 --- a/chapter13/5-takeScreenshot.py +++ /dev/null @@ -1,9 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.remote.webelement import WebElement -from selenium.webdriver import ActionChains - - -driver = webdriver.PhantomJS(executable_path='') -driver.implicitly_wait(5) -driver.get('http://www.pythonscraping.com/') -driver.get_screenshot_as_file('tmp/pythonscraping.png') \ No newline at end of file diff --git a/chapter13/6-combinedTest.py b/chapter13/6-combinedTest.py deleted file mode 100644 index 9ced109..0000000 --- a/chapter13/6-combinedTest.py +++ /dev/null @@ -1,27 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.remote.webelement import WebElement -from selenium.webdriver import ActionChains -import unittest - -class TestAddition(unittest.TestCase): - driver = None - def setUp(self): - global driver - driver = webdriver.PhantomJS(executable_path='') - url = 'http://pythonscraping.com/pages/javascript/draggableDemo.html' - driver.get(url) - - def tearDown(self): - print("Tearing down the test") - - def test_drag(self): - global driver - element = driver.find_element_by_id("draggable") - target = driver.find_element_by_id("div2") - actions = ActionChains(driver) - actions.drag_and_drop(element, target).perform() - - self.assertEqual("You are definitely not a bot!", driver.find_element_by_id("message").text) - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/chapter13/ghostdriver.log b/chapter13/ghostdriver.log deleted file mode 100644 index 66ef052..0000000 --- a/chapter13/ghostdriver.log +++ /dev/null @@ -1,6 +0,0 @@ -PhantomJS is launching GhostDriver... -[INFO - 2016-01-10T08:45:04.240Z] GhostDriver - Main - running on port 58176 -[INFO - 2016-01-10T08:45:05.042Z] Session [71f20ae0-b776-11e5-afb7-fbdb40be72f0] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34","webSecurityEnabled":true} -[INFO - 2016-01-10T08:45:05.042Z] Session [71f20ae0-b776-11e5-afb7-fbdb40be72f0] - page.customHeaders: - {} -[INFO - 2016-01-10T08:45:05.042Z] Session [71f20ae0-b776-11e5-afb7-fbdb40be72f0] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"1.9.8","driverName":"ghostdriver","driverVersion":"1.1.0","platform":"mac-unknown-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}} -[INFO - 2016-01-10T08:45:05.042Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: 71f20ae0-b776-11e5-afb7-fbdb40be72f0 diff --git a/chapter14/1-socks.py b/chapter14/1-socks.py deleted file mode 100644 index 4f3acfd..0000000 --- a/chapter14/1-socks.py +++ /dev/null @@ -1,7 +0,0 @@ -import socks -import socket -from urllib.request import urlopen - -socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150) -socket.socket = socks.socksocket -print(urlopen('http://icanhazip.com').read()) \ No newline at end of file diff --git a/chapter14/2-seleniumSocks.py b/chapter14/2-seleniumSocks.py deleted file mode 100644 index a921567..0000000 --- a/chapter14/2-seleniumSocks.py +++ /dev/null @@ -1,7 +0,0 @@ -from selenium import webdriver -service_args = [ '--proxy=localhost:9150', '--proxy-type=socks5', ] -driver = webdriver.PhantomJS(executable_path='', service_args=service_args) - -driver.get("http://icanhazip.com") -print(driver.page_source) -driver.close() \ No newline at end of file diff --git a/chapter2/.DS_Store b/chapter2/.DS_Store deleted file mode 100644 index 3497ce0..0000000 Binary files a/chapter2/.DS_Store and /dev/null differ diff --git a/chapter2/1-selectByClass.py b/chapter2/1-selectByClass.py deleted file mode 100644 index 7f4c489..0000000 --- a/chapter2/1-selectByClass.py +++ /dev/null @@ -1,8 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html") -bsObj = BeautifulSoup(html) -nameList = bsObj.findAll("span", {"class":"green"}) -for name in nameList: - print(name.get_text()) \ No newline at end of file diff --git a/chapter2/2-selectByAttribute.py b/chapter2/2-selectByAttribute.py deleted file mode 100644 index 01d9c90..0000000 --- a/chapter2/2-selectByAttribute.py +++ /dev/null @@ -1,7 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html") -bsObj = BeautifulSoup(html) -allText = bsObj.findAll(id="text") -print(allText[0].get_text()) \ No newline at end of file diff --git a/chapter2/3-findDescendants.py b/chapter2/3-findDescendants.py deleted file mode 100644 index 7b127de..0000000 --- a/chapter2/3-findDescendants.py +++ /dev/null @@ -1,8 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://www.pythonscraping.com/pages/page3.html") -bsObj = BeautifulSoup(html) - -for child in bsObj.find("table",{"id":"giftList"}).children: - print(child) \ No newline at end of file diff --git a/chapter2/4-findSiblings.py b/chapter2/4-findSiblings.py deleted file mode 100644 index c850ef1..0000000 --- a/chapter2/4-findSiblings.py +++ /dev/null @@ -1,7 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -html = urlopen("http://www.pythonscraping.com/pages/page3.html") -bsObj = BeautifulSoup(html) - -for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings: - print(sibling) \ No newline at end of file diff --git a/chapter2/5-findParents.py b/chapter2/5-findParents.py deleted file mode 100644 index d0e4593..0000000 --- a/chapter2/5-findParents.py +++ /dev/null @@ -1,6 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://www.pythonscraping.com/pages/page3.html") -bsObj = BeautifulSoup(html) -print(bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text()) \ No newline at end of file diff --git a/chapter2/6-regularExpressions.py b/chapter2/6-regularExpressions.py deleted file mode 100644 index ef12761..0000000 --- a/chapter2/6-regularExpressions.py +++ /dev/null @@ -1,9 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re - -html = urlopen("http://www.pythonscraping.com/pages/page3.html") -bsObj = BeautifulSoup(html) -images = bsObj.findAll("img", {"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")}) -for image in images: - print(image["src"]) diff --git a/chapter2/7-lambdaExpressions.py b/chapter2/7-lambdaExpressions.py deleted file mode 100644 index 1704fa9..0000000 --- a/chapter2/7-lambdaExpressions.py +++ /dev/null @@ -1,7 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -html = urlopen("http://www.pythonscraping.com/pages/page2.html") -bsObj = BeautifulSoup(html) -tags = bsObj.findAll(lambda tag: len(tag.attrs) == 2) -for tag in tags: - print(tag) \ No newline at end of file diff --git a/chapter3/.DS_Store b/chapter3/.DS_Store deleted file mode 100644 index bd8dfb9..0000000 Binary files a/chapter3/.DS_Store and /dev/null differ diff --git a/chapter3/1-getWikiLinks.py b/chapter3/1-getWikiLinks.py deleted file mode 100644 index 96ca211..0000000 --- a/chapter3/1-getWikiLinks.py +++ /dev/null @@ -1,16 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import datetime -import random -import re - -random.seed(datetime.datetime.now()) -def getLinks(articleUrl): - html = urlopen("http://en.wikipedia.org"+articleUrl) - bsObj = BeautifulSoup(html) - return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$")) -links = getLinks("/wiki/Kevin_Bacon") -while len(links) > 0: - newArticle = links[random.randint(0, len(links)-1)].attrs["href"] - print(newArticle) - links = getLinks(newArticle) \ No newline at end of file diff --git a/chapter3/2-crawlWikipedia.py b/chapter3/2-crawlWikipedia.py deleted file mode 100644 index ec62d06..0000000 --- a/chapter3/2-crawlWikipedia.py +++ /dev/null @@ -1,25 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re - -pages = set() -def getLinks(pageUrl): - global pages - html = urlopen("http://en.wikipedia.org"+pageUrl) - bsObj = BeautifulSoup(html) - try: - print(bsObj.h1.get_text()) - print(bsObj.find(id ="mw-content-text").findAll("p")[0]) - print(bsObj.find(id="ca-edit").find("span").find("a").attrs['href']) - except AttributeError: - print("This page is missing something! No worries though!") - - for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")): - if 'href' in link.attrs: - if link.attrs['href'] not in pages: - #We have encountered a new page - newPage = link.attrs['href'] - print("----------------\n"+newPage) - pages.add(newPage) - getLinks(newPage) -getLinks("") \ No newline at end of file diff --git a/chapter3/3-crawlSite.py b/chapter3/3-crawlSite.py deleted file mode 100644 index f34cc47..0000000 --- a/chapter3/3-crawlSite.py +++ /dev/null @@ -1,51 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re -import datetime -import random - -pages = set() -random.seed(datetime.datetime.now()) - -#Retrieves a list of all Internal links found on a page -def getInternalLinks(bsObj, includeUrl): - internalLinks = [] - #Finds all links that begin with a "/" - for link in bsObj.findAll("a", href=re.compile("^(/|.*"+includeUrl+")")): - if link.attrs['href'] is not None: - if link.attrs['href'] not in internalLinks: - internalLinks.append(link.attrs['href']) - return internalLinks - -#Retrieves a list of all external links found on a page -def getExternalLinks(bsObj, excludeUrl): - externalLinks = [] - #Finds all links that start with "http" or "www" that do - #not contain the current URL - for link in bsObj.findAll("a", href=re.compile("^(http|www)((?!"+excludeUrl+").)*$")): - if link.attrs['href'] is not None: - if link.attrs['href'] not in externalLinks: - externalLinks.append(link.attrs['href']) - return externalLinks - -def splitAddress(address): - addressParts = address.replace("http://", "").split("/") - return addressParts - -def getRandomExternalLink(startingPage): - html = urlopen(startingPage) - bsObj = BeautifulSoup(html) - externalLinks = getExternalLinks(bsObj, splitAddress(startingPage)[0]) - if len(externalLinks) == 0: - internalLinks = getInternalLinks(startingPage) - return getNextExternalLink(internalLinks[random.randint(0, - len(internalLinks)-1)]) - else: - return externalLinks[random.randint(0, len(externalLinks)-1)] - -def followExternalOnly(startingSite): - externalLink = getRandomExternalLink("http://oreilly.com") - print("Random external link is: "+externalLink) - followExternalOnly(externalLink) - -followExternalOnly("http://oreilly.com") \ No newline at end of file diff --git a/chapter3/4-getExternalLinks.py b/chapter3/4-getExternalLinks.py deleted file mode 100644 index 54fb854..0000000 --- a/chapter3/4-getExternalLinks.py +++ /dev/null @@ -1,56 +0,0 @@ -from urllib.request import urlopen -from urllib.parse import urlparse -from bs4 import BeautifulSoup -import re -import datetime -import random - -pages = set() -random.seed(datetime.datetime.now()) - -#Retrieves a list of all Internal links found on a page -def getInternalLinks(bsObj, includeUrl): - includeUrl = urlparse(includeUrl).scheme+"://"+urlparse(includeUrl).netloc - internalLinks = [] - #Finds all links that begin with a "/" - for link in bsObj.findAll("a", href=re.compile("^(/|.*"+includeUrl+")")): - if link.attrs['href'] is not None: - if link.attrs['href'] not in internalLinks: - if(link.attrs['href'].startswith("/")): - internalLinks.append(includeUrl+link.attrs['href']) - else: - internalLinks.append(link.attrs['href']) - return internalLinks - -#Retrieves a list of all external links found on a page -def getExternalLinks(bsObj, excludeUrl): - externalLinks = [] - #Finds all links that start with "http" or "www" that do - #not contain the current URL - for link in bsObj.findAll("a", href=re.compile( - "^(http|www)((?!"+excludeUrl+").)*$")): - if link.attrs['href'] is not None: - if link.attrs['href'] not in externalLinks: - externalLinks.append(link.attrs['href']) - return externalLinks - -def getRandomExternalLink(startingPage): - html = urlopen(startingPage) - bsObj = BeautifulSoup(html) - externalLinks = getExternalLinks(bsObj, urlparse(startingPage).netloc) - if len(externalLinks) == 0: - print("No external links, looking around the site for one") - domain = urlparse(startingPage).scheme+"://"+urlparse(startingPage).netloc - internalLinks = getInternalLinks(bsObj, domain) - return getRandomExternalLink(internalLinks[random.randint(0,len(internalLinks)-1)]) - else: - return externalLinks[random.randint(0, len(externalLinks)-1)] - -def followExternalOnly(startingSite): - externalLink = getRandomExternalLink(startingSite) - print("Random external link is: "+externalLink) - followExternalOnly(externalLink) - -followExternalOnly("http://oreilly.com") - - diff --git a/chapter3/5-getAllExternalLinks.py b/chapter3/5-getAllExternalLinks.py deleted file mode 100644 index c08b555..0000000 --- a/chapter3/5-getAllExternalLinks.py +++ /dev/null @@ -1,76 +0,0 @@ -from urllib.request import urlopen -from urllib.parse import urlparse -from bs4 import BeautifulSoup -import re -import datetime -import random - -pages = set() -random.seed(datetime.datetime.now()) - -#Retrieves a list of all Internal links found on a page -def getInternalLinks(bsObj, includeUrl): - includeUrl = urlparse(includeUrl).scheme+"://"+urlparse(includeUrl).netloc - internalLinks = [] - #Finds all links that begin with a "/" - for link in bsObj.findAll("a", href=re.compile("^(/|.*"+includeUrl+")")): - if link.attrs['href'] is not None: - if link.attrs['href'] not in internalLinks: - if(link.attrs['href'].startswith("/")): - internalLinks.append(includeUrl+link.attrs['href']) - else: - internalLinks.append(link.attrs['href']) - return internalLinks - -#Retrieves a list of all external links found on a page -def getExternalLinks(bsObj, excludeUrl): - externalLinks = [] - #Finds all links that start with "http" or "www" that do - #not contain the current URL - for link in bsObj.findAll("a", href=re.compile("^(http|www)((?!"+excludeUrl+").)*$")): - if link.attrs['href'] is not None: - if link.attrs['href'] not in externalLinks: - externalLinks.append(link.attrs['href']) - return externalLinks - - -def getRandomExternalLink(startingPage): - html = urlopen(startingPage) - bsObj = BeautifulSoup(html) - externalLinks = getExternalLinks(bsObj, urlparse(startingPage).netloc) - if len(externalLinks) == 0: - print("No external links, looking around the site for one") - domain = urlparse(startingPage).scheme+"://"+urlparse(startingPage).netloc - internalLinks = getInternalLinks(bsObj, domain) - return getRandomExternalLink(internalLinks[random.randint(0,len(internalLinks)-1)]) - else: - return externalLinks[random.randint(0, len(externalLinks)-1)] - -def followExternalOnly(startingSite): - externalLink = getRandomExternalLink(startingSite) - print("Random external link is: "+externalLink) - followExternalOnly(externalLink) - -#Collects a list of all external URLs found on the site -allExtLinks = set() -allIntLinks = set() -def getAllExternalLinks(siteUrl): - html = urlopen(siteUrl) - domain = urlparse(siteUrl).scheme+"://"+urlparse(siteUrl).netloc - bsObj = BeautifulSoup(html) - internalLinks = getInternalLinks(bsObj,domain) - externalLinks = getExternalLinks(bsObj,domain) - - for link in externalLinks: - if link not in allExtLinks: - allExtLinks.add(link) - print(link) - for link in internalLinks: - if link not in allIntLinks: - allIntLinks.add(link) - getAllExternalLinks(link) - -followExternalOnly("http://oreilly.com") - -allIntLinks.add("http://oreilly.com") -getAllExternalLinks("http://oreilly.com") diff --git a/chapter3/scrapy/.DS_Store b/chapter3/scrapy/.DS_Store deleted file mode 100644 index e32c32e..0000000 Binary files a/chapter3/scrapy/.DS_Store and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/.DS_Store b/chapter3/scrapy/wikiSpider/.DS_Store deleted file mode 100644 index efc9ae4..0000000 Binary files a/chapter3/scrapy/wikiSpider/.DS_Store and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/articles.csv b/chapter3/scrapy/wikiSpider/articles.csv deleted file mode 100644 index 36bfa43..0000000 --- a/chapter3/scrapy/wikiSpider/articles.csv +++ /dev/null @@ -1,67 +0,0 @@ -title -Python (programming language) -Boo (programming language) -Cobra (programming language) -Falcon (programming language) -F Sharp (programming language) -Modula-3 -D (programming language) -Perl -Lisp (programming language) -Java (programming language) -Go (programming language) -Icon (programming language) -Haskell (programming language) -Dylan (programming language) -C (programming language) -FreeDOS -GNOME Foundation -Free Software Movement of India -C++ -Contributor License Agreement -Comparison of free and open-source software licenses -zlib License -WTFPL -Main Page -Microsoft Open Specification Promise -Fork (software development) -Microsoft Developer Network -ZDNet -Comparison of Visual Basic and Visual Basic .NET -Comparison of the Java and .NET platforms -Comparison of C Sharp and Visual Basic .NET -Memory safety -Compiled language -System programming language -Comparison of C Sharp and Java -Newsqueak -Modula -Limbo (programming language) -occam (programming language) -OS X -Apple Dylan -Runtime system -Human-readable medium -License compatibility -Free software license -Library (computing) -libpng -Code Project Open License -French Institute for Research in Computer Science and Automation -Centre national de la recherche scientifique -Commissariat à l'énergie atomique et aux énergies alternatives -MySQL -MariaDB -Bitbucket -OpenOffice.org -Jagged array -Visual Basic .NET -Visual Basic -Comparison of Object Pascal and C -NOS (software) -JOVIAL -Control Data Corporation -C++ -Bill Roscoe -List of concurrent and parallel programming languages -XC (programming language) diff --git a/chapter3/scrapy/wikiSpider/articles.json b/chapter3/scrapy/wikiSpider/articles.json deleted file mode 100644 index 68dd118..0000000 --- a/chapter3/scrapy/wikiSpider/articles.json +++ /dev/null @@ -1,66 +0,0 @@ -[{"title": "Python (programming language)"}, -{"title": "Dylan (programming language)"}, -{"title": "Icon (programming language)"}, -{"title": "Boo (programming language)"}, -{"title": "Modula-3"}, -{"title": "Lisp (programming language)"}, -{"title": "Java (programming language)"}, -{"title": "Perl"}, -{"title": "Haskell (programming language)"}, -{"title": "C (programming language)"}, -{"title": "ABC (programming language)"}, -{"title": "C++"}, -{"title": "Stackless Python"}, -{"title": "PyPy"}, -{"title": "Cython"}, -{"title": "Trusted Computing"}, -{"title": "ALGOL 68"}, -{"title": "Main Page"}, -{"title": "Microsoft Open Specification Promise"}, -{"title": "Fork (software development)"}, -{"title": "Open-source software security"}, -{"title": "Software patents and free software"}, -{"title": "Unified Extensible Firmware Interface"}, -{"title": "SCO\u2013Linux controversies"}, -{"title": "Delegate (CLI)"}, -{"title": "Assembly (CLI)"}, -{"title": "Virtual Execution System"}, -{"title": "Platform Invocation Services"}, -{"title": "Common Type System"}, -{"title": "List of CIL instructions"}, -{"title": "Code Access Security"}, -{"title": "Comparison of Visual Basic and Visual Basic .NET"}, -{"title": "Orwell (programming language)"}, -{"title": "ML (programming language)"}, -{"title": "Miranda (programming language)"}, -{"title": "Kent Recursive Calculator"}, -{"title": "ISWIM"}, -{"title": "Id (programming language)"}, -{"title": "Hope (programming language)"}, -{"title": "OpenMP"}, -{"title": "Edsger W. Dijkstra"}, -{"title": "Tony Hoare"}, -{"title": "Cornelis H. A. Koster"}, -{"title": "Orthogonality"}, -{"title": "Context-free grammar"}, -{"title": "Van Wijngaarden grammar"}, -{"title": "IFIP Working Group 2.1"}, -{"title": "Samba (software)"}, -{"title": "gummiboot (software)"}, -{"title": "rEFInd"}, -{"title": "Real-time clock"}, -{"title": "Non-volatile random-access memory"}, -{"title": "Globally unique identifier"}, -{"title": "BIOS boot partition"}, -{"title": "GNU GRUB"}, -{"title": "Exception handling"}, -{"title": "Instruction set"}, -{"title": "Microsoft Developer Network"}, -{"title": "Object type (object-oriented programming)"}, -{"title": "Memory management"}, -{"title": "Reference type"}, -{"title": "Value type"}, -{"title": "Inheritance (object-oriented programming)"}, -{"title": "Eager evaluation"}, -{"title": "Peter Landin"}, -{"title": "Hindley\u2013Milner type system"} \ No newline at end of file diff --git a/chapter3/scrapy/wikiSpider/wiki.log b/chapter3/scrapy/wikiSpider/wiki.log deleted file mode 100644 index 999a381..0000000 --- a/chapter3/scrapy/wikiSpider/wiki.log +++ /dev/null @@ -1,18 +0,0 @@ -2015-03-09 00:11:36-0400 [scrapy] INFO: Scrapy 0.24.4 started (bot: wikiSpider) -2015-03-09 00:11:36-0400 [scrapy] INFO: Optional features available: ssl, http11 -2015-03-09 00:11:36-0400 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'wikiSpider.spiders', 'SPIDER_MODULES': ['wikiSpider.spiders'], 'LOG_FILE': 'wiki.log', 'BOT_NAME': 'wikiSpider'} -2015-03-09 00:11:36-0400 [scrapy] INFO: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState -2015-03-09 00:11:37-0400 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats -2015-03-09 00:11:37-0400 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware -2015-03-09 00:11:37-0400 [scrapy] INFO: Enabled item pipelines: -2015-03-09 00:11:37-0400 [article] INFO: Spider opened -2015-03-09 00:11:37-0400 [article] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) -2015-03-09 00:11:37-0400 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 -2015-03-09 00:11:37-0400 [scrapy] DEBUG: Web service listening on 127.0.0.1:6080 -2015-03-09 00:11:37-0400 [article] DEBUG: Crawled (200) (referer: None) -2015-03-09 00:11:37-0400 [scrapy] INFO: Received SIGINT, shutting down gracefully. Send again to force -2015-03-09 00:11:37-0400 [article] INFO: Closing spider (shutdown) -2015-03-09 00:11:37-0400 [article] DEBUG: Filtered offsite request to 'en.wikibooks.org': -2015-03-09 00:11:37-0400 [article] DEBUG: Filtered offsite request to 'code.google.com': -2015-03-09 00:11:37-0400 [article] DEBUG: Filtered offsite request to 'en.wikiquote.org': -2015-03-09 00:11:37-0400 [scrapy] INFO: Received SIGINT twice, forcing unclean shutdown diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/.DS_Store b/chapter3/scrapy/wikiSpider/wikiSpider/.DS_Store deleted file mode 100644 index ffc15f7..0000000 Binary files a/chapter3/scrapy/wikiSpider/wikiSpider/.DS_Store and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__init__.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__init__.pyc deleted file mode 100644 index 2aea624..0000000 Binary files a/chapter3/scrapy/wikiSpider/wikiSpider/__init__.pyc and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/items.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/items.pyc deleted file mode 100644 index d80c209..0000000 Binary files a/chapter3/scrapy/wikiSpider/wikiSpider/items.pyc and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/pipelines.py b/chapter3/scrapy/wikiSpider/wikiSpider/pipelines.py deleted file mode 100644 index 8ec6c0e..0000000 --- a/chapter3/scrapy/wikiSpider/wikiSpider/pipelines.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- - -# Define your item pipelines here -# -# Don't forget to add your pipeline to the ITEM_PIPELINES setting -# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html - - -class WikispiderPipeline(object): - def process_item(self, item, spider): - return item diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/settings.py b/chapter3/scrapy/wikiSpider/wikiSpider/settings.py deleted file mode 100644 index 8bf294d..0000000 --- a/chapter3/scrapy/wikiSpider/wikiSpider/settings.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -# Scrapy settings for wikiSpider project -# -# For simplicity, this file contains only the most important settings by -# default. All the other settings are documented here: -# -# http://doc.scrapy.org/en/latest/topics/settings.html -# - -BOT_NAME = 'wikiSpider' - -SPIDER_MODULES = ['wikiSpider.spiders'] -NEWSPIDER_MODULE = 'wikiSpider.spiders' - -# Crawl responsibly by identifying yourself (and your website) on the user-agent -#USER_AGENT = 'wikiSpider (+http://www.yourdomain.com)' diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/settings.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/settings.pyc deleted file mode 100644 index c69c338..0000000 Binary files a/chapter3/scrapy/wikiSpider/wikiSpider/settings.pyc and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.pyc deleted file mode 100644 index 78b171c..0000000 Binary files a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.pyc and /dev/null differ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py deleted file mode 100644 index b5a88cb..0000000 --- a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py +++ /dev/null @@ -1,20 +0,0 @@ -from scrapy.contrib.spiders import CrawlSpider, Rule -from wikiSpider.items import Article -from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor -from scrapy import log - -class ArticleSpider(CrawlSpider): - #log.start(logfile='log.txt', loglevel=log.CRITICAL) - name="article" - allowed_domains = ["en.wikipedia.org"] - start_urls = ["http://en.wikipedia.org/wiki/Python_%28programming_language%29"] - rules = [ - Rule(SgmlLinkExtractor(allow=('(/wiki/)((?!:).)*$'),), callback="parse_item", follow=True) - ] - - def parse_item(self, response): - item = Article() - title = response.xpath('//h1/text()')[0].extract() - print("Title is: "+title) - item['title'] = title - return item \ No newline at end of file diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.pyc deleted file mode 100644 index 39fe60f..0000000 Binary files a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.pyc and /dev/null differ diff --git a/chapter4/.DS_Store b/chapter4/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/chapter4/.DS_Store and /dev/null differ diff --git a/chapter4/1-searchTwitter.py b/chapter4/1-searchTwitter.py deleted file mode 100644 index f672ae2..0000000 --- a/chapter4/1-searchTwitter.py +++ /dev/null @@ -1,6 +0,0 @@ -from twitter import Twitter - -#Make sure to add the access tokens and consumer keys for your application -t = Twitter(auth=OAuth("Access Token","Access Token Secret","Consumer Key","Consumer Secret")) -pythonTweets = t.search.tweets(q = "#python") -print(pythonTweets) \ No newline at end of file diff --git a/chapter4/2-updateTwitter.py b/chapter4/2-updateTwitter.py deleted file mode 100644 index d32df78..0000000 --- a/chapter4/2-updateTwitter.py +++ /dev/null @@ -1,6 +0,0 @@ -from twitter import Twitter - -#Make sure to add the access tokens and consumer keys for your application -t = Twitter(auth=OAuth("Access Token","Access Token Secret","Consumer Key","Consumer Secret")) -statusUpdate = t.statuses.update(status='Hello, world!') -print(statusUpdate) \ No newline at end of file diff --git a/chapter4/3-getTwitterStatus.py b/chapter4/3-getTwitterStatus.py deleted file mode 100644 index 998dc2d..0000000 --- a/chapter4/3-getTwitterStatus.py +++ /dev/null @@ -1,6 +0,0 @@ -from twitter import Twitter, OAuth - -#Make sure to add the access tokens and consumer keys for your application -t = Twitter(auth=OAuth("Access Token","Access Token Secret","Consumer Key","Consumer Secret")) -pythonStatuses = t.statuses.user_timeline(screen_name="montypython", count=5) -print(pythonStatuses) diff --git a/chapter4/4-decodeJson.py b/chapter4/4-decodeJson.py deleted file mode 100644 index 04a8664..0000000 --- a/chapter4/4-decodeJson.py +++ /dev/null @@ -1,9 +0,0 @@ -import json -from urllib.request import urlopen - -def getCountry(ipAddress): - response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8') - responseJson = json.loads(response) - return responseJson.get("country_code") - -print(getCountry("50.78.253.58")) \ No newline at end of file diff --git a/chapter4/5-jsonParsing.py b/chapter4/5-jsonParsing.py deleted file mode 100644 index 1a279e5..0000000 --- a/chapter4/5-jsonParsing.py +++ /dev/null @@ -1,9 +0,0 @@ -import json - -jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit":"apple"},{"fruit":"banana"},{"fruit":"pear"}]}' -jsonObj = json.loads(jsonString) - -print(jsonObj.get("arrayOfNums")) -print(jsonObj.get("arrayOfNums")[1]) -print(jsonObj.get("arrayOfNums")[1].get("number")+jsonObj.get("arrayOfNums")[2].get("number")) -print(jsonObj.get("arrayOfFruits")[2].get("fruit")) \ No newline at end of file diff --git a/chapter4/6-wikiHistories.py b/chapter4/6-wikiHistories.py deleted file mode 100644 index 66a41f0..0000000 --- a/chapter4/6-wikiHistories.py +++ /dev/null @@ -1,53 +0,0 @@ -from urllib.request import urlopen -from urllib.request import HTTPError -from bs4 import BeautifulSoup -import datetime -import json -import random -import re - -random.seed(datetime.datetime.now()) -def getLinks(articleUrl): - html = urlopen("http://en.wikipedia.org"+articleUrl) - bsObj = BeautifulSoup(html) - return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$")) - -def getHistoryIPs(pageUrl): - #Format of revision history pages is: - #http://en.wikipedia.org/w/index.php?title=Title_in_URL&action=history - pageUrl = pageUrl.replace("/wiki/", "") - historyUrl = "http://en.wikipedia.org/w/index.php?title="+pageUrl+"&action=history" - print("history url is: "+historyUrl) - html = urlopen(historyUrl) - bsObj = BeautifulSoup(html) - #finds only the links with class "mw-anonuserlink" which has IP addresses - #instead of usernames - ipAddresses = bsObj.findAll("a", {"class":"mw-anonuserlink"}) - addressList = set() - for ipAddress in ipAddresses: - addressList.add(ipAddress.get_text()) - return addressList - - -def getCountry(ipAddress): - try: - response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8') - except HTTPError: - return None - responseJson = json.loads(response) - return responseJson.get("country_code") - -links = getLinks("/wiki/Python_(programming_language)") - - -while(len(links) > 0): - for link in links: - print("-------------------") - historyIPs = getHistoryIPs(link.attrs["href"]) - for historyIP in historyIPs: - country = getCountry(historyIP) - if country is not None: - print(historyIP+" is from "+country) - - newLink = links[random.randint(0, len(links)-1)].attrs["href"] - links = getLinks(newLink) diff --git a/chapter5/1-getPageMedia.py b/chapter5/1-getPageMedia.py deleted file mode 100644 index 02869a8..0000000 --- a/chapter5/1-getPageMedia.py +++ /dev/null @@ -1,42 +0,0 @@ -import os -from urllib.request import urlretrieve -from urllib.request import urlopen -from bs4 import BeautifulSoup - -downloadDirectory = "downloaded" -baseUrl = "http://pythonscraping.com" - -def getAbsoluteURL(baseUrl, source): - if source.startswith("http://www."): - url = "http://"+source[11:] - elif source.startswith("http://"): - url = source - elif source.startswith("www."): - url = source[4:] - url = "http://"+source - else: - url = baseUrl+"/"+source - if baseUrl not in url: - return None - return url - -def getDownloadPath(baseUrl, absoluteUrl, downloadDirectory): - path = absoluteUrl.replace("www.", "") - path = path.replace(baseUrl, "") - path = downloadDirectory+path - directory = os.path.dirname(path) - - if not os.path.exists(directory): - os.makedirs(directory) - - return path - -html = urlopen("http://www.pythonscraping.com") -bsObj = BeautifulSoup(html) -downloadList = bsObj.findAll(src=True) - -for download in downloadList: - fileUrl = getAbsoluteURL(baseUrl, download["src"]) - if fileUrl is not None: - print(fileUrl) - urlretrieve(fileUrl, getDownloadPath(baseUrl, fileUrl, downloadDirectory)) \ No newline at end of file diff --git a/chapter5/2-createCsv.py b/chapter5/2-createCsv.py deleted file mode 100644 index 17c4419..0000000 --- a/chapter5/2-createCsv.py +++ /dev/null @@ -1,11 +0,0 @@ -import csv -#from os import open - -csvFile = open("../files/test.csv", 'w+', newline='') -try: - writer = csv.writer(csvFile) - writer.writerow(('number', 'number plus 2', 'number times 2')) - for i in range(10): - writer.writerow( (i, i+2, i*2)) -finally: - csvFile.close() diff --git a/chapter5/3-scrapeCsv.py b/chapter5/3-scrapeCsv.py deleted file mode 100644 index 2c57942..0000000 --- a/chapter5/3-scrapeCsv.py +++ /dev/null @@ -1,20 +0,0 @@ -import csv -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://en.wikipedia.org/wiki/Comparison_of_text_editors") -bsObj = BeautifulSoup(html) -#The main comparison table is currently the first table on the page -table = bsObj.findAll("table",{"class":"wikitable"})[0] -rows = table.findAll("tr") - -csvFile = open("files/editors.csv", 'wt', newline='', encoding='utf-8') -writer = csv.writer(csvFile) -try: - for row in rows: - csvRow = [] - for cell in row.findAll(['td', 'th']): - csvRow.append(cell.get_text()) - writer.writerow(csvRow) -finally: - csvFile.close() diff --git a/chapter5/4-mysqlBasicExample.py b/chapter5/4-mysqlBasicExample.py deleted file mode 100644 index 9c3a28d..0000000 --- a/chapter5/4-mysqlBasicExample.py +++ /dev/null @@ -1,9 +0,0 @@ -import pymysql -conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock', - user='root', passwd=None, db='mysql') -cur = conn.cursor() -cur.execute("USE scraping") -cur.execute("SELECT * FROM pages WHERE id=1") -print(cur.fetchone()) -cur.close() -conn.close() \ No newline at end of file diff --git a/chapter5/5-storeWikiLinks.py b/chapter5/5-storeWikiLinks.py deleted file mode 100644 index 55440be..0000000 --- a/chapter5/5-storeWikiLinks.py +++ /dev/null @@ -1,34 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re -import datetime -import random -import pymysql - -conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock', user='root', passwd=None, db='mysql', charset='utf8') -cur = conn.cursor() -cur.execute("USE scraping") - -random.seed(datetime.datetime.now()) - -def store(title, content): - cur.execute("INSERT INTO pages (title, content) VALUES (\"%s\",\"%s\")", (title, content)) - cur.connection.commit() - -def getLinks(articleUrl): - html = urlopen("http://en.wikipedia.org"+articleUrl) - bsObj = BeautifulSoup(html) - title = bsObj.find("h1").get_text() - content = bsObj.find("div", {"id":"mw-content-text"}).find("p").get_text() - store(title, content) - return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$")) - -links = getLinks("/wiki/Kevin_Bacon") -try: - while len(links) > 0: - newArticle = links[random.randint(0, len(links)-1)].attrs["href"] - print(newArticle) - links = getLinks(newArticle) -finally: - cur.close() - conn.close() diff --git a/chapter5/6-6DegreesCrawlWiki.py b/chapter5/6-6DegreesCrawlWiki.py deleted file mode 100644 index 8af29db..0000000 --- a/chapter5/6-6DegreesCrawlWiki.py +++ /dev/null @@ -1,54 +0,0 @@ -from bs4 import BeautifulSoup -import re -import pymysql -from urllib.request import urlopen - -conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='mysql', charset='utf8') -cur = conn.cursor() -cur.execute("USE wikipedia") - -def pageScraped(url): - cur.execute("SELECT * FROM pages WHERE url = %s", (url)) - if cur.rowcount == 0: - return False - page = cur.fetchone() - - cur.execute("SELECT * FROM links WHERE fromPageId = %s", (int(page[0]))) - if cur.rowcount == 0: - return False - return True - -def insertPageIfNotExists(url): - cur.execute("SELECT * FROM pages WHERE url = %s", (url)) - if cur.rowcount == 0: - cur.execute("INSERT INTO pages (url) VALUES (%s)", (url)) - conn.commit() - return cur.lastrowid - else: - return cur.fetchone()[0] - -def insertLink(fromPageId, toPageId): - cur.execute("SELECT * FROM links WHERE fromPageId = %s AND toPageId = %s", (int(fromPageId), int(toPageId))) - if cur.rowcount == 0: - cur.execute("INSERT INTO links (fromPageId, toPageId) VALUES (%s, %s)", (int(fromPageId), int(toPageId))) - conn.commit() - -def getLinks(pageUrl, recursionLevel): - global pages - if recursionLevel > 4: - return - pageId = insertPageIfNotExists(pageUrl) - html = urlopen("http://en.wikipedia.org"+pageUrl) - bsObj = BeautifulSoup(html) - for link in bsObj.findAll("a", href=re.compile("^(/wiki/)((?!:).)*$")): - insertLink(pageId, insertPageIfNotExists(link.attrs['href'])) - if not pageScraped(link.attrs['href']): - #We have encountered a new page, add it and search it for links - newPage = link.attrs['href'] - print(newPage) - getLinks(newPage, recursionLevel+1) - else: - print("Skipping: "+str(link.attrs['href'])+" found on "+pageUrl) -getLinks("/wiki/Kevin_Bacon", 0) -cur.close() -conn.close() diff --git a/chapter5/7-sendEmail.py b/chapter5/7-sendEmail.py deleted file mode 100644 index 6dcace9..0000000 --- a/chapter5/7-sendEmail.py +++ /dev/null @@ -1,12 +0,0 @@ -import smtplib -from email.mime.text import MIMEText - -msg = MIMEText("The body of the email is here") - -msg['Subject'] = "An Email Alert" -msg['From'] = "ryan@pythonscraping.com" -msg['To'] = "webmaster@pythonscraping.com" - -s = smtplib.SMTP('localhost') -s.send_message(msg) -s.quit() \ No newline at end of file diff --git a/chapter5/8-sendEmailWhenChristmas.py b/chapter5/8-sendEmailWhenChristmas.py deleted file mode 100644 index d738ec3..0000000 --- a/chapter5/8-sendEmailWhenChristmas.py +++ /dev/null @@ -1,22 +0,0 @@ -import smtplib -from email.mime.text import MIMEText -from bs4 import BeautifulSoup -from urllib.request import urlopen -import time - -def sendMail(subject, body): - msg = MIMEText(body) - msg['Subject'] = subject - msg['From'] = "christmas_alerts@pythonscraping.com" - msg['To'] = "ryan@pythonscraping.com" - - s = smtplib.SMTP('localhost') - s.send_message(msg) - s.quit() - -bsObj = BeautifulSoup(urlopen("https://isitchristmas.com/")) -while(bsObj.find("a", {"id":"answer"}).attrs['title'] == "NO"): - print("It is not Christmas yet.") - time.sleep(3600) - bsObj = BeautifulSoup(urlopen("https://isitchristmas.com/")) -sendMail("It's Christmas!", "According to http://itischristmas.com, it is Christmas!") diff --git a/chapter6/1-getText.py b/chapter6/1-getText.py deleted file mode 100644 index 2e41f94..0000000 --- a/chapter6/1-getText.py +++ /dev/null @@ -1,4 +0,0 @@ -from urllib.request import urlopen - -textPage = urlopen("http://www.pythonscraping.com/pages/warandpeace/chapter1.txt") -print(textPage.read()) \ No newline at end of file diff --git a/chapter6/2-getUtf8Text.py b/chapter6/2-getUtf8Text.py deleted file mode 100644 index 5764c3c..0000000 --- a/chapter6/2-getUtf8Text.py +++ /dev/null @@ -1,9 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -html = urlopen("http://en.wikipedia.org/wiki/Python_(programming_language)") -bsObj = BeautifulSoup(html) -content = bsObj.find("div", {"id":"mw-content-text"}).get_text() -content = bytes(content, "UTF-8") -content = content.decode("UTF-8") -print(content) \ No newline at end of file diff --git a/chapter6/3-readingCsv.py b/chapter6/3-readingCsv.py deleted file mode 100644 index a44a747..0000000 --- a/chapter6/3-readingCsv.py +++ /dev/null @@ -1,10 +0,0 @@ -from urllib.request import urlopen -from io import StringIO -import csv - -data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii', 'ignore') -dataFile = StringIO(data) -csvReader = csv.reader(dataFile) - -for row in csvReader: - print("The album \""+row[0]+"\" was released in "+str(row[1])) \ No newline at end of file diff --git a/chapter6/4-readingCsvDict.py b/chapter6/4-readingCsvDict.py deleted file mode 100644 index dfd8028..0000000 --- a/chapter6/4-readingCsvDict.py +++ /dev/null @@ -1,12 +0,0 @@ -from urllib.request import urlopen -from io import StringIO -import csv - -data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii', 'ignore') -dataFile = StringIO(data) -dictReader = csv.DictReader(dataFile) - -print(dictReader.fieldnames) - -for row in dictReader: - print(row) \ No newline at end of file diff --git a/chapter6/5-readPdf.py b/chapter6/5-readPdf.py deleted file mode 100644 index c4ecee8..0000000 --- a/chapter6/5-readPdf.py +++ /dev/null @@ -1,24 +0,0 @@ -from pdfminer.pdfinterp import PDFResourceManager, process_pdf -from pdfminer.converter import TextConverter -from pdfminer.layout import LAParams -from io import StringIO -from io import open -from urllib.request import urlopen - -def readPDF(pdfFile): - rsrcmgr = PDFResourceManager() - retstr = StringIO() - laparams = LAParams() - device = TextConverter(rsrcmgr, retstr, laparams=laparams) - - process_pdf(rsrcmgr, device, pdfFile) - device.close() - - content = retstr.getvalue() - retstr.close() - return content - -pdfFile = urlopen("http://pythonscraping.com/pages/warandpeace/chapter1.pdf") -outputString = readPDF(pdfFile) -print(outputString) -pdfFile.close() diff --git a/chapter6/6-readDocx.py b/chapter6/6-readDocx.py deleted file mode 100644 index 203a9bd..0000000 --- a/chapter6/6-readDocx.py +++ /dev/null @@ -1,14 +0,0 @@ -from zipfile import ZipFile -from urllib.request import urlopen -from io import BytesIO -from bs4 import BeautifulSoup - -wordFile = urlopen("http://pythonscraping.com/pages/AWordDocument.docx").read() -wordFile = BytesIO(wordFile) -document = ZipFile(wordFile) -xml_content = document.read('word/document.xml') - -wordObj = BeautifulSoup(xml_content.decode('utf-8')) -textStrings = wordObj.findAll("w:t") -for textElem in textStrings: - print(textElem.text) \ No newline at end of file diff --git a/chapter6/from urllib.request import urlopen b/chapter6/from urllib.request import urlopen deleted file mode 100644 index 52fe6b8..0000000 --- a/chapter6/from urllib.request import urlopen +++ /dev/null @@ -1,10 +0,0 @@ -from urllib.request import urlopen -from io import StringIO -import csv - -data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii', 'ignore') -dataFile = StringIO(data) -csvReader = csv.reader(dataFile) - -for row in csvReader: -print(row) \ No newline at end of file diff --git a/chapter6/readPdf.py b/chapter6/readPdf.py deleted file mode 100644 index c4ecee8..0000000 --- a/chapter6/readPdf.py +++ /dev/null @@ -1,24 +0,0 @@ -from pdfminer.pdfinterp import PDFResourceManager, process_pdf -from pdfminer.converter import TextConverter -from pdfminer.layout import LAParams -from io import StringIO -from io import open -from urllib.request import urlopen - -def readPDF(pdfFile): - rsrcmgr = PDFResourceManager() - retstr = StringIO() - laparams = LAParams() - device = TextConverter(rsrcmgr, retstr, laparams=laparams) - - process_pdf(rsrcmgr, device, pdfFile) - device.close() - - content = retstr.getvalue() - retstr.close() - return content - -pdfFile = urlopen("http://pythonscraping.com/pages/warandpeace/chapter1.pdf") -outputString = readPDF(pdfFile) -print(outputString) -pdfFile.close() diff --git a/chapter7/1-2grams.py b/chapter7/1-2grams.py deleted file mode 100644 index 9b06084..0000000 --- a/chapter7/1-2grams.py +++ /dev/null @@ -1,16 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup - -def getNgrams(input, n): - input = input.split(' ') - output = [] - for i in range(len(input)-n+1): - output.append(input[i:i+n]) - return output - -html = urlopen("http://en.wikipedia.org/wiki/Python_(programming_language)") -bsObj = BeautifulSoup(html) -content = bsObj.find("div", {"id":"mw-content-text"}).get_text() -ngrams = getNgrams(content, 2) -print(ngrams) -print("2-grams count is: "+str(len(ngrams))) \ No newline at end of file diff --git a/chapter7/2-clean2grams.py b/chapter7/2-clean2grams.py deleted file mode 100644 index 9613f8a..0000000 --- a/chapter7/2-clean2grams.py +++ /dev/null @@ -1,41 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re -import string -from collections import OrderedDict - -def cleanInput(input): - input = re.sub('\n+', " ", input) - input = re.sub('\[[0-9]*\]', "", input) - input = re.sub(' +', " ", input) - input = bytes(input, "UTF-8") - input = input.decode("ascii", "ignore") - cleanInput = [] - input = input.split(' ') - for item in input: - item = item.strip(string.punctuation) - if len(item) > 1 or (item.lower() == 'a' or item.lower() == 'i'): - cleanInput.append(item) - return cleanInput - -def getNgrams(input, n): - input = cleanInput(input) - output = dict() - for i in range(len(input)-n+1): - newNGram = " ".join(input[i:i+n]) - if newNGram in output: - output[newNGram] += 1 - else: - output[newNGram] = 1 - return output - -html = urlopen("http://en.wikipedia.org/wiki/Python_(programming_language)") -bsObj = BeautifulSoup(html) -content = bsObj.find("div", {"id":"mw-content-text"}).get_text() -#ngrams = getNgrams(content, 2) -#print(ngrams) -#print("2-grams count is: "+str(len(ngrams))) - -ngrams = getNgrams(content, 2) -ngrams = OrderedDict(sorted(ngrams.items(), key=lambda t: t[1], reverse=True)) -print(ngrams) \ No newline at end of file diff --git a/chapter8/1-count2Grams.py b/chapter8/1-count2Grams.py deleted file mode 100644 index 403dfc3..0000000 --- a/chapter8/1-count2Grams.py +++ /dev/null @@ -1,35 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re -import string -import operator - - -def cleanInput(input): - input = re.sub('\n+', " ", input).lower() - input = re.sub('\[[0-9]*\]', "", input) - input = re.sub(' +', " ", input) - input = bytes(input, "UTF-8") - input = input.decode("ascii", "ignore") - cleanInput = [] - input = input.split(' ') - for item in input: - item = item.strip(string.punctuation) - if len(item) > 1 or (item.lower() == 'a' or item.lower() == 'i'): - cleanInput.append(item) - return cleanInput - -def getNgrams(input, n): - input = cleanInput(input) - output = {} - for i in range(len(input)-n+1): - ngramTemp = " ".join(input[i:i+n]) - if ngramTemp not in output: - output[ngramTemp] = 0 - output[ngramTemp] += 1 - return output - -content = str(urlopen("http://pythonscraping.com/files/inaugurationSpeech.txt").read(),'utf-8') -ngrams = getNgrams(content, 2) -sortedNGrams = sorted(ngrams.items(), key = operator.itemgetter(1), reverse=True) -print(sortedNGrams) \ No newline at end of file diff --git a/chapter8/2-countUncommon2Grams.py b/chapter8/2-countUncommon2Grams.py deleted file mode 100644 index 4ed1781..0000000 --- a/chapter8/2-countUncommon2Grams.py +++ /dev/null @@ -1,56 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import re -import string -import operator - -def isCommon(ngram): - commonWords = ["the", "be", "and", "of", "a", "in", "to", "have", "it", "i", "that", "for", "you", "he", "with", "on", "do", "say", "this", "they", "is", "an", "at", "but","we", "his", "from", "that", "not", "by", "she", "or", "as", "what", "go", "their","can", "who", "get", "if", "would", "her", "all", "my", "make", "about", "know", "will","as", "up", "one", "time", "has", "been", "there", "year", "so", "think", "when", "which", "them", "some", "me", "people", "take", "out", "into", "just", "see", "him", "your", "come", "could", "now", "than", "like", "other", "how", "then", "its", "our", "two", "more", "these", "want", "way", "look", "first", "also", "new", "because", "day", "more", "use", "no", "man", "find", "here", "thing", "give", "many", "well"] - for word in ngram: - if word in commonWords: - return True - return False - -def cleanText(input): - input = re.sub('\n+', " ", input).lower() - input = re.sub('\[[0-9]*\]', "", input) - input = re.sub(' +', " ", input) - input = re.sub("u\.s\.", "us", input) - input = bytes(input, "UTF-8") - input = input.decode("ascii", "ignore") - return input - -def cleanInput(input): - input = cleanText(input) - cleanInput = [] - input = input.split(' ') - for item in input: - item = item.strip(string.punctuation) - if len(item) > 1 or (item.lower() == 'a' or item.lower() == 'i'): - cleanInput.append(item) - return cleanInput - -def getNgrams(input, n): - input = cleanInput(input) - output = {} - for i in range(len(input)-n+1): - ngramTemp = " ".join(input[i:i+n]) - if ngramTemp not in output: - output[ngramTemp] = 0 - output[ngramTemp] += 1 - return output - -def getFirstSentenceContaining(ngram, content): - #print(ngram) - sentences = content.split(".") - for sentence in sentences: - if ngram in sentence: - return sentence - return "" - -content = str(urlopen("http://pythonscraping.com/files/space.txt").read(), 'utf-8') -ngrams = getNgrams(content, 2) -sortedNGrams = sorted(ngrams.items(), key = operator.itemgetter(1), reverse = True) -print(sortedNGrams) - - diff --git a/chapter8/3-markovGenerator.py b/chapter8/3-markovGenerator.py deleted file mode 100644 index 292f252..0000000 --- a/chapter8/3-markovGenerator.py +++ /dev/null @@ -1,62 +0,0 @@ -from urllib.request import urlopen -from random import randint - -def wordListSum(wordList): - sum = 0 - for word, value in wordList.items(): - sum += value - return sum - -def retrieveRandomWord(wordList): - - randIndex = randint(1, wordListSum(wordList)) - for word, value in wordList.items(): - randIndex -= value - if randIndex <= 0: - return word - -def buildWordDict(text): - #Remove newlines and quotes - text = text.replace("\n", " ") - text = text.replace("\"", "") - - #Make sure puncuation are treated as their own "word," so they will be included - #in the Markov chain - punctuation = [',','.',';',':'] - for symbol in punctuation: - text = text.replace(symbol, " "+symbol+" ") - - words = text.split(" ") - #Filter out empty words - words = [word for word in words if word != ""] - - wordDict = {} - for i in range(1, len(words)): - if words[i-1] not in wordDict: - #Create a new dictionary for this word - wordDict[words[i-1]] = {} - if words[i] not in wordDict[words[i-1]]: - wordDict[words[i-1]][words[i]] = 0 - wordDict[words[i-1]][words[i]] += 1 - - return wordDict - -text = str(urlopen("http://pythonscraping.com/files/inaugurationSpeech.txt").read(), 'utf-8') -wordDict = buildWordDict(text) - -#Generate a Markov chain of length 100 -length = 100 -chain = "" -currentWord = "I" -for i in range(0, length): - chain += currentWord+" " - #print(wordDict[currentWord]) - currentWord = retrieveRandomWord(wordDict[currentWord]) - -print(chain) - - - - - - diff --git a/chapter8/4-6DegreesFinder.py b/chapter8/4-6DegreesFinder.py deleted file mode 100644 index 7fc4263..0000000 --- a/chapter8/4-6DegreesFinder.py +++ /dev/null @@ -1,48 +0,0 @@ -from urllib.request import urlopen -from bs4 import BeautifulSoup -import pymysql - - -conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='mysql', charset='utf8') -cur = conn.cursor() -cur.execute("USE wikipedia") - -def getUrl(pageId): - cur.execute("SELECT url FROM pages WHERE id = %s", (int(pageId))) - if cur.rowcount == 0: - return None - return cur.fetchone()[0] - -def getLinks(fromPageId): - cur.execute("SELECT toPageId FROM links WHERE fromPageId = %s", (int(fromPageId))) - if cur.rowcount == 0: - return None - return [x[0] for x in cur.fetchall()] - -def searchBreadth(targetPageId, currentPageId, depth, nodes): - if nodes is None or len(nodes) == 0: - return None - if depth <= 0: - for node in nodes: - if node == targetPageId: - return [node] - return None - #depth is greater than 0 -- go deeper! - for node in nodes: - found = searchBreadth(targetPageId, node, depth-1, getLinks(node)) - if found is not None: - return found.append(currentPageId) - return None - -nodes = getLinks(1) -targetPageId = 123428 -for i in range(0,4): - found = searchBreadth(targetPageId, 1, i, nodes) - if found is not None: - print(found) - for node in found: - print(getUrl(node)) - break - else: - print("No path found") - diff --git a/chapter8/5-NltkTokenize.py b/chapter8/5-NltkTokenize.py deleted file mode 100644 index bb5e040..0000000 --- a/chapter8/5-NltkTokenize.py +++ /dev/null @@ -1,5 +0,0 @@ -from nltk import word_tokenize -from nltk import Text - -tokens = word_tokenize("Here is some not very interesting text") -text = Text(tokens) \ No newline at end of file diff --git a/chapter8/6-NltkSearch.py b/chapter8/6-NltkSearch.py deleted file mode 100644 index 6697b23..0000000 --- a/chapter8/6-NltkSearch.py +++ /dev/null @@ -1,6 +0,0 @@ -from nltk.book import * -from nltk import ngrams -fourgrams = ngrams(text6, 4) -for fourgram in fourgrams: - if fourgram[0] == "coconut": - print(fourgram) \ No newline at end of file diff --git a/chapter8/7-NltkAnalysis.py b/chapter8/7-NltkAnalysis.py deleted file mode 100644 index 2f9f77c..0000000 --- a/chapter8/7-NltkAnalysis.py +++ /dev/null @@ -1,10 +0,0 @@ -from nltk import word_tokenize, sent_tokenize, pos_tag -sentences = sent_tokenize("Google is one of the best companies in the world. I constantly google myself to see what I'm up to.") -nouns = ['NN', 'NNS', 'NNP', 'NNPS'] - -for sentence in sentences: - if "google" in sentence.lower(): - taggedWords = pos_tag(word_tokenize(sentence)) - for word in taggedWords: - if word[0].lower() == "google" and word[1] in nouns: - print(sentence) diff --git a/chapter9/1-fileSubmission.py b/chapter9/1-fileSubmission.py deleted file mode 100644 index 9a7e413..0000000 --- a/chapter9/1-fileSubmission.py +++ /dev/null @@ -1,5 +0,0 @@ -import requests - -files = {'uploadFile': open('../files/Python-logo.png', 'rb')} -r = requests.post("http://pythonscraping.com/pages/processing2.php", files=files) -print(r.text) \ No newline at end of file diff --git a/chapter9/1-simpleForm.py b/chapter9/1-simpleForm.py deleted file mode 100644 index dc7e141..0000000 --- a/chapter9/1-simpleForm.py +++ /dev/null @@ -1,5 +0,0 @@ -import requests - -params = {'firstname': 'Ryan', 'lastname': 'Mitchell'} -r = requests.post("http://pythonscraping.com/files/processing.php", data=params) -print(r.text) \ No newline at end of file diff --git a/chapter9/2-fileSubmission.py b/chapter9/2-fileSubmission.py deleted file mode 100644 index de3b2df..0000000 --- a/chapter9/2-fileSubmission.py +++ /dev/null @@ -1,6 +0,0 @@ -import requests - -files = {'uploadFile': open('../files/Python-logo.png', 'rb')} -r = requests.post("http://pythonscraping.com/pages/processing2.php", - files=files) -print(r.text) \ No newline at end of file diff --git a/chapter9/3-cookies.py b/chapter9/3-cookies.py deleted file mode 100644 index 6e66f04..0000000 --- a/chapter9/3-cookies.py +++ /dev/null @@ -1,10 +0,0 @@ -import requests - -params = {'username': 'Ryan', 'password': 'password'} -r = requests.post("http://pythonscraping.com/pages/cookies/welcome.php", params) -print("Cookie is set to:") -print(r.cookies.get_dict()) -print("-----------") -print("Going to profile page...") -r = requests.get("http://pythonscraping.com/pages/cookies/profile.php", cookies=r.cookies) -print(r.text) \ No newline at end of file diff --git a/chapter9/4-sessionCookies.py b/chapter9/4-sessionCookies.py deleted file mode 100644 index caa82fa..0000000 --- a/chapter9/4-sessionCookies.py +++ /dev/null @@ -1,12 +0,0 @@ -import requests - -session = requests.Session() - -params = {'username': 'username', 'password': 'password'} -s = session.post("http://pythonscraping.com/pages/cookies/welcome.php", params) -print("Cookie is set to:") -print(s.cookies.get_dict()) -print("-----------") -print("Going to profile page...") -s = session.get("http://pythonscraping.com/pages/cookies/profile.php") -print(s.text) \ No newline at end of file diff --git a/chapter9/5-BasicAuth.py b/chapter9/5-BasicAuth.py deleted file mode 100644 index 4b839f4..0000000 --- a/chapter9/5-BasicAuth.py +++ /dev/null @@ -1,7 +0,0 @@ -import requests -from requests.auth import AuthBase -from requests.auth import HTTPBasicAuth - -auth = HTTPBasicAuth('ryan', 'password') -r = requests.post(url="http://pythonscraping.com/pages/auth/login.php", auth=auth) -print(r.text) \ No newline at end of file diff --git a/downloaded/cdn.oreillystatic.com/ajax/libs/jquery/3.3.1/jquery.min.js b/downloaded/cdn.oreillystatic.com/ajax/libs/jquery/3.3.1/jquery.min.js new file mode 100644 index 0000000..4d9b3a2 --- /dev/null +++ b/downloaded/cdn.oreillystatic.com/ajax/libs/jquery/3.3.1/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("'); + } + + // Render recaptcha + var recaptcha_interval = setInterval(function(){ + + if(!pagelayer_empty(window.grecaptcha)){ + grecaptcha.ready(function() { + try{ + var widgetID = grecaptcha.render(jEle.get(0), {'sitekey' : jEle.data("sitekey")}); + jEle.attr('recaptcha-widget-id', widgetID); + }catch(e){ + console.log("There is some issue in rendering reCaptcha. Please check your recaptcha site-key !"); + } + + }); + clearInterval(recaptcha_interval); + } + + }, 500); + +} + +// Scroll to element button effect +function pagelayer_button_element_scroll(jEle) { + + var speed = parseInt(jEle.attr('pagelayer_scrollto_speed') * 1000); + var idspacing = 0; + var scrollId = jEle.attr('pagelayer_scrollto_id'); + + if(jEle.attr('pagelayer_scrollto_type') == 'toid'){ + + var scrolltoEle = jQuery('#' + scrollId); + + if(pagelayer_empty(scrollId) || scrolltoEle.length < 1){ + return; + } + + var idpos = parseInt(scrolltoEle.offset().top); + var spacing = parseInt(jEle.attr('pagelayer_scrollto_id_viewport')); + + if (isNaN(spacing)) { + spacing = 0; + } + + idspacing = idpos + spacing; + + } + + jEle.on('click', function (e) { + e.preventDefault(); + jQuery('html, body').animate({ scrollTop: idspacing }, speed); + }); + +} + +//////////// +// Freemium +//////////// + +// Contact Form handler - Premium +function pagelayer_contact_form(jEle){ + + jEle = jQuery(jEle); + var id = jEle.attr('pagelayer-id'); + + // Set pagelayer id to input field + jEle.find('form input[name="cfa-pagelayer-id"]').val(id); + +} + +// Contact Form Submit handler - Premium +function pagelayer_contact_submit(jEle, e){ + e.preventDefault(); + + // Checking for required checkboxes. + for(var checkbox_div of jQuery(jEle).find('.pagelayer-contact-checkbox')){ + checkbox_div = jQuery(checkbox_div); + if(checkbox_div.attr('required') == 'required'){ + if(pagelayer_empty(checkbox_div.find('input:checked').length)){ + alert('Kindly select the required checkbox'); + return; + } + } + } + + // Trigger an action + jQuery(document).trigger('pagelayer_contact_submit', e, jEle); + + // Disabling submit button with loading animation. + jQuery(jEle).find('.pagelayer-contact-submit-btn').prop('disabled', true); + jQuery(jEle).find('.pagelayer-contact-submit-btn .fa-spin').show('0.6'); + + //var fdata = jQuery(jEle).closest('form').serialize(); + var redirect = jQuery(jEle).find('input[name="cfa-redirect"]'); + var formData = new FormData( jQuery(jEle)[0] ); + var par = jQuery(jEle).parent(); + + // Append the nonce + formData.append('pagelayer_nonce', pagelayer_global_nonce); + + // Hide any message + par.find(".pagelayer-message-box").hide(); + + // Message pos to use ? + var msg_pos = 'top'; + if(par.parent().hasClass('pagelayer-message-box-bottom')){ + msg_pos = 'bottom'; + } + + par.find(".pagelayer-message-box").removeClass('pagelayer-cf-msg-err pagelayer-cf-msg-suc'); + + jQuery.ajax({ + url: pagelayer_ajaxurl+'action=pagelayer_contact_submit', + type: "POST", + data: formData, + processData: false, + contentType: false, + cache:false, + success:function(result){ + var json = jQuery.parseJSON(result); + + jQuery(jEle).find('.pagelayer-contact-submit-btn').prop('disabled', false); + jQuery(jEle).find('.pagelayer-contact-submit-btn .fa-spin').hide('0.6'); + + if('success' in json){ + par.find(".pagelayer-message-"+msg_pos).addClass('pagelayer-cf-msg-suc').html(json['success']).fadeIn(); + + if(redirect.length > 0 && !pagelayer_empty(redirect.val())){ + window.location.href = redirect.val(); + } + }else{ + par.find(".pagelayer-message-"+msg_pos).addClass('pagelayer-cf-msg-err').html(json['failed']).fadeIn(); + } + }, + error:function(result){ + par.find(".pagelayer-message-"+msg_pos).addClass('pagelayer-cf-msg-err').html(json['failed']).fadeIn(); + } + }); + jEle.reset(); + + jQuery(jEle).find('.pagelayer-recaptcha').each(function(){ + var widgetID = jQuery(this).attr('recaptcha-widget-id'); + + if(!pagelayer_empty(window.grecaptcha)){ + grecaptcha.reset(widgetID); + } + }); + + return false; +} + +// Primary Menu Handler - Premium +function pagelayer_primary_menu(jEle){ + + var container = jEle.find('.pagelayer-wp-menu-container'); + var menu_bar = jEle.find('.pagelayer-primary-menu-bar i'); + var menu_holder = jEle.find('.pagelayer-wp-menu-holder'); + var layout = menu_holder.data('layout'); + var submenu_ind = menu_holder.data('submenu_ind'); + var responsive = menu_holder.data('responsive'); + var drop_breakpoint = menu_holder.data('drop_breakpoint'); + var close = jEle.find('.pagelayer-wp_menu-close'); + + var media_mode = pagelayer_get_media_mode(); + + if( (drop_breakpoint == 'tablet' && (media_mode == 'tablet' || media_mode == 'mobile')) || (drop_breakpoint == 'mobile' && media_mode == 'mobile') ){ + + menu_holder.addClass('pagelayer-wp-menu-dropdown'); + container.addClass('pagelayer-menu-type-dropdown'); + container.removeClass('pagelayer-menu-type-'+layout); + layout = 'dropdown'; + + }else{ + menu_holder.removeClass('pagelayer-wp-menu-dropdown'); + container.removeClass('pagelayer-menu-type-dropdown'); + container.addClass('pagelayer-menu-type-'+layout); + } + + // Menu toggle + var toggle_class; + jQuery(menu_bar).unbind('click'); + jQuery(menu_bar).click(function(){ + jQuery(container).toggleClass('pagelayer-togglt-on'); + + toggle_class = jQuery(this).data('icon'); + toggle_class = ( pagelayer_empty(toggle_class) ? 'fas fa-bars' : toggle_class ); + + if(jQuery(container).hasClass('pagelayer-togglt-on')){ + jQuery(this).removeClass(toggle_class); + jQuery(this).addClass('fas fa-times'); + }else{ + jQuery(this).removeClass('fas fa-times'); + jQuery(this).addClass(toggle_class); + } + }); + + // If has sub-menu the as icon + var aEle_sub_menu = jQuery(container).find('.pagelayer-wp_menu-ul li ul.sub-menu').parent().children('a'); + + if(aEle_sub_menu.children('.after-icon').length < 1){ + aEle_sub_menu.append(''); + } + + // Toggle Sub nav + var after_icon = jQuery(container).find('.pagelayer-wp_menu-ul li.menu-item-has-children .after-icon'); + + after_icon.unbind('click'); + after_icon.click(function(e){ + e.preventDefault(); + if(window.matchMedia("(max-width: "+pagelayer_settings['tablet_breakpoint']+"px)").matches || layout != 'horizontal'){ + jQuery(this).closest('li').toggleClass('active-sub-menu'); + }else{ + jQuery(this).closest('li').removeClass('active-sub-menu'); + } + }); + + close.unbind('click'); + close.click(function(){ + jQuery(container).toggleClass('pagelayer-togglt-on'); + jQuery(menu_bar).removeClass('fas fa-times'); + jQuery(menu_bar).addClass(toggle_class); + }) + +} + +var count_int ={}; +// Show countdown render +function pagelayer_countdown(jEle){ + + var expiry_date = jEle.find('.pagelayer-countdown-container').attr('pagelayer-expiry-date'); + var timetype = jEle.find('.pagelayer-countdown-container').attr('pagelayer-time-type'); + var jEle_id = jEle.attr('pagelayer-id'); + + if(pagelayer_empty(expiry_date) || expiry_date == "{{date}}"){ + var expiry_date = new Date(new Date().getTime() + 24 * 60 * 60 * 1000); + } + + var now; + if(timetype == "server"){ + now = new Date(pagelayer_server_time*1000).getTime(); + }else{ + now = new Date().getTime(); + } + + var countDownDate = new Date(expiry_date).getTime(); + var distance = countDownDate - now; + + clearInterval(count_int[jEle_id]); + count_int[jEle_id] = setInterval(function() { + + // Time calculations for days, hours, minutes and seconds + var days = Math.floor(distance / (1000 * 60 * 60 * 24)); + var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); + var seconds = Math.floor((distance % (1000 * 60)) / 1000); + + jEle.find('.pagelayer-days-count').html(days); + jEle.find('.pagelayer-hours-count').html(hours); + jEle.find('.pagelayer-minutes-count').html(minutes); + jEle.find('.pagelayer-seconds-count').html(seconds); + + // If the count down is over, write some text + if(distance < 0) { + clearInterval(count_int[jEle_id]); + jEle.find('.pagelayer-countdown-expired').show(); + jEle.find('.pagelayer-countdown-counter').hide(); + } + + distance = distance - 1000; + + }, 1000); +} + +function pagelayer_pl_testimonial_slider(jEle){ + var ul = jQuery(jEle.find('.pagelayer-testimonials-holder')); + + // Build the options + var options = pagelayer_fetch_dataAttrs(ul, 'data-slides-'); + + pagelayer_owl_init(jEle, ul, options); +} + +function pagelayer_anim_heading(jEle){ + var animationDelay = 2500, + //loading bar effect + barAnimationDelay = 3800, + barWaiting = barAnimationDelay - 3000, //3000 is the duration of the transition on the loading bar - set in the scss/css file + //letters effect + lettersDelay = 50, + //type effect + typeLettersDelay = 150, + selectionDuration = 500, + typeAnimationDelay = selectionDuration + 800, + //clip effect + revealDuration = 600, + revealAnimationDelay = 1500; + + initHeadline(); + + function initHeadline(){ + //insert element for each letter of a changing word + singleLetters(jEle.find('.pagelayer-aheading-holder.letters').find('span')); + //initialise headline animation + animateHeadline(jEle.find('.pagelayer-aheading-holder')); + } + + function singleLetters($words){ + $words.each(function(){ + var word = jQuery(this), + letters = word.text().split(''), + selected = word.hasClass('pagelayer-is-visible'); + for (i in letters) { + if(word.parents('.pagelayer-aheading-rotate2').length > 0) letters[i] = '' + letters[i] + ''; + letters[i] = (selected) ? '' + letters[i] + '': '' + letters[i] + ''; + } + var newLetters = letters.join(''); + word.html(newLetters).css('opacity', 1); + }); + } + + function animateHeadline($headlines){ + var duration = animationDelay; + $headlines.each(function(){ + var headline = jQuery(this); + + if(headline.hasClass('pagelayer-aheading-loading-bar')){ + duration = barAnimationDelay; + setTimeout(function(){ headline.find('.pagelayer-words-wrapper').addClass('pagelayer-is-loading') }, barWaiting); + }else if(headline.hasClass('pagelayer-aheading-clip')){ + var spanWrapper = headline.find('.pagelayer-words-wrapper'), + newWidth = spanWrapper.width() + 10; + spanWrapper.css('width', newWidth); + } else if (!headline.hasClass('type') ){ + var words = headline.find('.pagelayer-words-wrapper span'), + width = 0; + words.each(function(){ + var wordWidth = jQuery(this).width(); + if (wordWidth > width) width = wordWidth; + }); + headline.find('.pagelayer-words-wrapper').css('width', width); + }; + + //trigger animation + setTimeout(function(){ hideWord( headline.find('.pagelayer-is-visible').eq(0) ) }, duration); + }); + } + + function hideWord($word){ + var nextWord = takeNext($word); + + if($word.parents('.pagelayer-aheading-holder').hasClass('letters')){ + var bool = ($word.children('strong').length >= nextWord.children('strong').length) ? true : false; + hideLetter($word.find('strong').eq(0), $word, bool, lettersDelay); + showLetter(nextWord.find('strong').eq(0), nextWord, bool, lettersDelay); + + }else if($word.parents('.pagelayer-aheading-holder').hasClass('pagelayer-aheading-clip')){ + $word.parents('.pagelayer-words-wrapper').animate({ width : '2px' }, revealDuration, function(){ + switchWord($word, nextWord); + showWord(nextWord); + }); + + }else if($word.parents('.pagelayer-aheading-holder').hasClass('pagelayer-aheading-loading-bar')){ + $word.parents('.pagelayer-words-wrapper').removeClass('pagelayer-is-loading'); + switchWord($word, nextWord); + setTimeout(function(){ hideWord(nextWord) }, barAnimationDelay); + setTimeout(function(){ $word.parents('.pagelayer-words-wrapper').addClass('pagelayer-is-loading') }, barWaiting); + + }else{ + switchWord($word, nextWord); + setTimeout(function(){ hideWord(nextWord) }, animationDelay); + } + } + + function showWord($word, $duration){ + if($word.parents('.pagelayer-aheading-holder').hasClass('pagelayer-aheading-clip')){ + $word.parents('.pagelayer-words-wrapper').animate({ 'width' : $word.width() + 10 }, revealDuration, function(){ + setTimeout(function(){ hideWord($word) }, revealAnimationDelay); + }); + } + } + + function hideLetter($letter, $word, $bool, $duration){ + $letter.removeClass('pagelayer-aheading-in').addClass('pagelayer-aheading-out'); + + if(!$letter.is(':last-child')){ + setTimeout(function(){ hideLetter($letter.next(), $word, $bool, $duration); }, $duration); + }else if($bool){ + setTimeout(function(){ hideWord(takeNext($word)) }, animationDelay); + } + + if($letter.is(':last-child') && jQuery('html').hasClass('pagelayer-no-csstransitions')){ + var nextWord = takeNext($word); + switchWord($word, nextWord); + } + } + + function showLetter($letter, $word, $bool, $duration){ + $letter.addClass('pagelayer-aheading-in').removeClass('pagelayer-aheading-out'); + + if(!$letter.is(':last-child')){ + setTimeout(function(){ showLetter($letter.next(), $word, $bool, $duration); }, $duration); + }else{ + if(!$bool) { setTimeout(function(){ hideWord($word) }, animationDelay) } + } + } + + function takeNext($word){ + return (!$word.is(':last-child')) ? $word.next() : $word.parent().children().eq(0); + } + + function switchWord($oldWord, $newWord){ + $oldWord.removeClass('pagelayer-is-visible').addClass('pagelayer-is-hidden'); + if(!$newWord.hasClass('pagelayer-is-visible')){ + $newWord.removeClass('pagelayer-is-hidden').addClass('pagelayer-is-visible'); + } + } +} + +function pagelayer_pl_row_slider(jEle){ + var index = 0; + + var imageEls = jEle.find('.pagelayer-bgimg-slide'); // Get the images to be cycled. + var speed = jEle.data('speed'); // Get the speed of loop. + imageEls.first().addClass('pagelayer-slide-show'); + setInterval(function (){ + // Get the next index. If at end, restart to the beginning. + index = index + 1 < imageEls.length ? index + 1 : 0; + + // Show the next + imageEls.eq(index).addClass('pagelayer-slide-show'); + + // Hide the previous + imageEls.eq(index - 1).removeClass('pagelayer-slide-show'); + }, speed); +} + +function pagelayer_pl_social_profile(jEle){ + var icon_holder = jEle.find('.pagelayer-icon-holder'); + + // Assigning animation classes to icon holder + if(!pagelayer_empty(jEle.attr('pagelayer-animation'))){ + icon_holder.addClass('pagelayer-animation-'+jEle.attr('pagelayer-animation')); + } +} + +// Mega menu function which applies id and adjust position +function pagelayer_mega_menu_position(mEle){ + + var jEle = mEle.find('.pagelayer-mega_menu'); + var id = jEle.attr('pagelayer-id'); + + mEle.attr('pagelayer-mega-menu-id', id); + + colWidth = mEle.parents('.pagelayer-col').first(); + mEle.offset({'left':(colWidth.offset().left - mEle.parent().offset().left)}); +} + +//////////////// +// Freemium End +//////////////// + +/* + * Nivo Lightbox v1.3.1 + * http://dev7studios.com/nivo-lightbox + * + * Copyright 2013, Dev7studios + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + */ +!function(t,i,o,e){function n(i,o){this.el=i,this.$el=t(this.el),this.options=t.extend({},l,o),this._defaults=l,this._name=a,this.init()}var a="nivoLightbox",l={effect:"fade",theme:"default",keyboardNav:!0,clickImgToClose:!1,clickOverlayToClose:!0,onInit:function(){},beforeShowLightbox:function(){},afterShowLightbox:function(t){},beforeHideLightbox:function(){},afterHideLightbox:function(){},beforePrev:function(t){},onPrev:function(t){},beforeNext:function(t){},onNext:function(t){},errorMessage:"The requested content cannot be loaded. Please try again later."};n.prototype={init:function(){var i=this;t("html").hasClass("nivo-lightbox-notouch")||t("html").addClass("nivo-lightbox-notouch"),"ontouchstart"in o&&t("html").removeClass("nivo-lightbox-notouch"),this.$el.on("click",function(t){i.showLightbox(t)}),this.options.keyboardNav&&t("body").off("keyup").on("keyup",function(o){var e=o.keyCode?o.keyCode:o.which;27==e&&i.destructLightbox(),37==e&&t(".nivo-lightbox-prev").trigger("click"),39==e&&t(".nivo-lightbox-next").trigger("click")}),this.options.onInit.call(this)},showLightbox:function(i){var o=this,e=this.$el,n=this.checkContent(e);if(n){i.preventDefault(),this.options.beforeShowLightbox.call(this);var a=this.constructLightbox();if(a){var l=a.find(".nivo-lightbox-content");if(l){if(t("body").addClass("nivo-lightbox-body-effect-"+this.options.effect),this.processContent(l,e),this.$el.attr("data-lightbox-gallery")){var h=t('[data-lightbox-gallery="'+this.$el.attr("data-lightbox-gallery")+'"]');t(".nivo-lightbox-nav").show(),t(".nivo-lightbox-prev").off("click").on("click",function(i){i.preventDefault();var n=h.index(e);e=h.eq(n-1),t(e).length||(e=h.last()),t.when(o.options.beforePrev.call(this,[e])).done(function(){o.processContent(l,e),o.options.onPrev.call(this,[e])})}),t(".nivo-lightbox-next").off("click").on("click",function(i){i.preventDefault();var n=h.index(e);e=h.eq(n+1),t(e).length||(e=h.first()),t.when(o.options.beforeNext.call(this,[e])).done(function(){o.processContent(l,e),o.options.onNext.call(this,[e])})})}setTimeout(function(){a.addClass("nivo-lightbox-open"),o.options.afterShowLightbox.call(this,[a])},1)}}}},checkContent:function(t){var i=t.attr("href"),o=i.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);return null!==i.match(/\.(jpeg|jpg|gif|png)$/i)||(!!o||("ajax"==t.attr("data-lightbox-type")||("#"==i.substring(0,1)&&"inline"==t.attr("data-lightbox-type")||"iframe"==t.attr("data-lightbox-type"))))},processContent:function(o,e){var n=this,a=e.attr("href"),l=a.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);if(o.html("").addClass("nivo-lightbox-loading"),this.isHidpi()&&e.attr("data-lightbox-hidpi")&&(a=e.attr("data-lightbox-hidpi")),null!==a.match(/\.(jpeg|jpg|gif|png)$/i)){var h=t("",{src:a,class:"nivo-lightbox-image-display"});h.one("load",function(){var e=t('
');e.append(h),o.html(e).removeClass("nivo-lightbox-loading"),e.css({"line-height":t(".nivo-lightbox-content").height()+"px",height:t(".nivo-lightbox-content").height()+"px"}),t(i).resize(function(){e.css({"line-height":t(".nivo-lightbox-content").height()+"px",height:t(".nivo-lightbox-content").height()+"px"})})}).each(function(){this.complete&&t(this).load()}),h.error(function(){var i=t('

'+n.options.errorMessage+"

");o.html(i).removeClass("nivo-lightbox-loading")})}else if(l){var s="",r="nivo-lightbox-video";if("youtube"==l[1]&&(s="//www.youtube.com/embed/"+l[4],r="nivo-lightbox-youtube"),"youtube-nocookie"==l[1]&&(s=a,r="nivo-lightbox-youtube"),"youtu"==l[1]&&(s="//www.youtube.com/embed/"+l[3],r="nivo-lightbox-youtube"),"vimeo"==l[1]&&(s="//player.vimeo.com/video/"+l[3],r="nivo-lightbox-vimeo"),s){var c=t("'),c.attr("height",h),c.attr("width",g),"youtube"===f.type?c.attr("src","//www.youtube.com/embed/"+f.id+"?autoplay=1&rel=0&v="+f.id):"vimeo"===f.type?c.attr("src","//player.vimeo.com/video/"+f.id+"?autoplay=1"):"vzaar"===f.type&&c.attr("src","//view.vzaar.com/"+f.id+"/player?autoplay=true"),a(c).wrap('
').insertAfter(e.find(".pagelayer-owl-video")),this._playing=e.addClass("pagelayer-owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("pagelayer-owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.pagelayerOwlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1, +animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated pagelayer-owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated pagelayer-owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated pagelayer-owl-animated-out pagelayer-owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.pagelayerOwlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.pagelayerOwlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['',''],navSpeed:!1,navElement:'button type="button" role="presentation"',navContainer:!1,navContainerClass:"pagelayer-owl-nav",navClass:["pagelayer-owl-prev","pagelayer-owl-next"],slideBy:1,dotClass:"pagelayer-owl-dot",dotsClass:"pagelayer-owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a('