SlideShare a Scribd company logo
1 of 24
Erlang Sucks
or How I Lost All Hope
Covering Erlang news for the past 5 years


Moved to Sweden just to program in Erlang


Was a web programmer (PHP, Python,
Coldfusion)
Where do I begin?
To tell the story of how
great Erlang could be...
Erlang
Rest of the world
Package/library/dependency
       management
  Perl         CPAN

  Python       easy_install

  Ruby         gem

  Node.js      npm
Package/library/dependency
       management
Package/library/dependency
       management

  rebar

  erlware

  CEAN

  agner

  epm
Package/library/dependency
       management


  gem install package_name

  easy_install package_name

  pear install package_name (PHP 0_o)
Package/library/dependency
       management
{deps, [application_name,

        {application_name, "1.0.*"},

        {application_name, "1.0.*",

        {git, "git://github.com/basho/
rebar.git", {branch, "master"}}}]}.
Package/library/dependency
       management
{deps, [application_name,

        {application_name, "1.0.*"},

        {application_name, "1.0.*",

        {git, "git://github.com/basho/
rebar.git", {branch, "master"}}}]}.
Package/library/dependency
       management
{deps, [application_name,

        {application_name, "1.0.*"},

        {application_name, "1.0.*",

        {git, "git://github.com/basho/
rebar.git", {branch, "master"}}}]}.

1> agner fetch package_name
Libraries: Imaging
Perl            2971 hits on CPAN

Python          PIL

Ruby            105 hits on rubygems

Node.js         37 entries in npm

PHP             built-in

Haskell         242 entries on Hackage

Go              5 packages
Libraries: Imaging
Libraries: Imaging



erl_img
Libraries: Formatted Text
          Markdown   Textile   BBCode   ...

Python

 Ruby

Haskell

  Go



Erlang
Libraries: The Cloud
           Amazon Rackspace Heroku   ...

Python

 Ruby

Haskell

Node.js



Erlang
You see?
http://erlanger.ru/
 News     3 years PHP
          2 years Erlang

 Forum    PHP

 Wiki     PHP
Sucks             Not
 Frontend         Backbone

 “Mainstream”     Some of backend
 libraries
                  Management
 Small projects
                  If it ain’t 5 million hits
 Medium           a day, it’s not a
 projects         project

 GUI
Moral of the story
funny and insightful at the same time
Credit where it’s due
Mad Scientist:
http://raydillon.deviantart.com/art/Mad-
Scientist-92248962

Cool hipster kids by Gaultier:
http://zippercut.wordpress.com/2010/01/18/
the-kids-are-alright/

Cricket:
http://findicons.com/icon/575/cricket
Credit where it’s due
Tick, cross:
http://www.iconfinder.com/search/?q=iconset
%3Abasicset

Cool hipster kids by Gaultier:
http://zippercut.wordpress.com/2010/01/18/
the-kids-are-alright/

Cricket:
http://findicons.com/icon/575/cricket

More Related Content

Similar to Erlang sucks. EUC 2012

DiUS Computing Lca Rails Final
DiUS  Computing Lca Rails FinalDiUS  Computing Lca Rails Final
DiUS Computing Lca Rails FinalRobert Postill
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIYoni Davidson
 
Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...
Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...
Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...confluent
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in PerlNaveen Gupta
 
Ruby v cpp_preso
Ruby v cpp_presoRuby v cpp_preso
Ruby v cpp_presojessicard
 
Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...
Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...
Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...Anne Nicolas
 
Presentation distro recipes-2013
Presentation distro recipes-2013Presentation distro recipes-2013
Presentation distro recipes-2013olberger
 
Packaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything ElsePackaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything Elsemckern
 
Debugging PySpark - PyCon US 2018
Debugging PySpark -  PyCon US 2018Debugging PySpark -  PyCon US 2018
Debugging PySpark - PyCon US 2018Holden Karau
 
Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)Tim Bunce
 
YAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlYAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlCosimo Streppone
 
The Art of Evolutionary Algorithms Programming
The Art of Evolutionary Algorithms ProgrammingThe Art of Evolutionary Algorithms Programming
The Art of Evolutionary Algorithms ProgrammingJuan J. Merelo
 
Debugging Apache Spark - Scala & Python super happy fun times 2017
Debugging Apache Spark -   Scala & Python super happy fun times 2017Debugging Apache Spark -   Scala & Python super happy fun times 2017
Debugging Apache Spark - Scala & Python super happy fun times 2017Holden Karau
 
Using software modules welcome to hell!
Using software modules   welcome to hell!Using software modules   welcome to hell!
Using software modules welcome to hell!Baruch Sadogursky
 
Perl Myths 200909
Perl Myths 200909Perl Myths 200909
Perl Myths 200909Tim Bunce
 

Similar to Erlang sucks. EUC 2012 (20)

DiUS Computing Lca Rails Final
DiUS  Computing Lca Rails FinalDiUS  Computing Lca Rails Final
DiUS Computing Lca Rails Final
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-API
 
Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...
Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...
Kafka Summit SF 2017 - Streaming Processing in Python – 10 ways to avoid summ...
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in Perl
 
Ruby v cpp_preso
Ruby v cpp_presoRuby v cpp_preso
Ruby v cpp_preso
 
Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...
Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...
Distro Recipes 2013 : Contribution of RDF metadata for traceability among pro...
 
Presentation distro recipes-2013
Presentation distro recipes-2013Presentation distro recipes-2013
Presentation distro recipes-2013
 
Packaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything ElsePackaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything Else
 
Look beyond PHP
Look beyond PHPLook beyond PHP
Look beyond PHP
 
Debugging PySpark - PyCon US 2018
Debugging PySpark -  PyCon US 2018Debugging PySpark -  PyCon US 2018
Debugging PySpark - PyCon US 2018
 
Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)Perl Myths 200802 with notes (OUTDATED, see 200909)
Perl Myths 200802 with notes (OUTDATED, see 200909)
 
Git::Hooks
Git::HooksGit::Hooks
Git::Hooks
 
YAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlYAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses Perl
 
The Art of Evolutionary Algorithms Programming
The Art of Evolutionary Algorithms ProgrammingThe Art of Evolutionary Algorithms Programming
The Art of Evolutionary Algorithms Programming
 
Learn python
Learn pythonLearn python
Learn python
 
Debugging Apache Spark - Scala & Python super happy fun times 2017
Debugging Apache Spark -   Scala & Python super happy fun times 2017Debugging Apache Spark -   Scala & Python super happy fun times 2017
Debugging Apache Spark - Scala & Python super happy fun times 2017
 
Using software modules welcome to hell!
Using software modules   welcome to hell!Using software modules   welcome to hell!
Using software modules welcome to hell!
 
Php extensions
Php extensionsPhp extensions
Php extensions
 
Perl Myths 200909
Perl Myths 200909Perl Myths 200909
Perl Myths 200909
 
Pharo Status
Pharo StatusPharo Status
Pharo Status
 

Recently uploaded

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

Erlang sucks. EUC 2012

  • 1. Erlang Sucks or How I Lost All Hope
  • 2. Covering Erlang news for the past 5 years Moved to Sweden just to program in Erlang Was a web programmer (PHP, Python, Coldfusion)
  • 3. Where do I begin? To tell the story of how great Erlang could be...
  • 5. Rest of the world
  • 6.
  • 7. Package/library/dependency management Perl CPAN Python easy_install Ruby gem Node.js npm
  • 9. Package/library/dependency management rebar erlware CEAN agner epm
  • 10. Package/library/dependency management gem install package_name easy_install package_name pear install package_name (PHP 0_o)
  • 11. Package/library/dependency management {deps, [application_name,         {application_name, "1.0.*"},         {application_name, "1.0.*",         {git, "git://github.com/basho/ rebar.git", {branch, "master"}}}]}.
  • 12. Package/library/dependency management {deps, [application_name,         {application_name, "1.0.*"},         {application_name, "1.0.*",         {git, "git://github.com/basho/ rebar.git", {branch, "master"}}}]}.
  • 13. Package/library/dependency management {deps, [application_name,         {application_name, "1.0.*"},         {application_name, "1.0.*",         {git, "git://github.com/basho/ rebar.git", {branch, "master"}}}]}. 1> agner fetch package_name
  • 14. Libraries: Imaging Perl 2971 hits on CPAN Python PIL Ruby 105 hits on rubygems Node.js 37 entries in npm PHP built-in Haskell 242 entries on Hackage Go 5 packages
  • 17. Libraries: Formatted Text Markdown Textile BBCode ... Python Ruby Haskell Go Erlang
  • 18. Libraries: The Cloud Amazon Rackspace Heroku ... Python Ruby Haskell Node.js Erlang
  • 20. http://erlanger.ru/ News 3 years PHP 2 years Erlang Forum PHP Wiki PHP
  • 21. Sucks Not Frontend Backbone “Mainstream” Some of backend libraries Management Small projects If it ain’t 5 million hits Medium a day, it’s not a projects project GUI
  • 22. Moral of the story funny and insightful at the same time
  • 23. Credit where it’s due Mad Scientist: http://raydillon.deviantart.com/art/Mad- Scientist-92248962 Cool hipster kids by Gaultier: http://zippercut.wordpress.com/2010/01/18/ the-kids-are-alright/ Cricket: http://findicons.com/icon/575/cricket
  • 24. Credit where it’s due Tick, cross: http://www.iconfinder.com/search/?q=iconset %3Abasicset Cool hipster kids by Gaultier: http://zippercut.wordpress.com/2010/01/18/ the-kids-are-alright/ Cricket: http://findicons.com/icon/575/cricket

Editor's Notes

  1. The goal of this presentation was, basically, to commit suicide, since Joe Armstrong was in the audience\n
  2. Who am I? Just a regular guy doing regular stuff\n
  3. Joe Armstrong: With Erlang it’s very easy to do the impossible and very hard to do the easy stuff\n
  4. Erlang is crazy weird wonderful stuff created by mad scientists to be used in crazy weird wonderful stuff created by other mad scientists. Just look at the topics at EUC\n
  5. Whereas other languages are these hipster kids showing off their new shiny toys.\nPeople coming from these languages keep asking: “Can you do this or that?” Let’s see if we can.\n
  6. This here is a cricket. You know, when there’s silence or some vast empty space filled, well, with emptiness and scilence, that’s when you hear the crickets. I’ll use this cricket to illustrate a point\n
  7. How do you manage stuff in other languages? Easy\n
  8. What about Erlang?\n
  9. Well, there have been attempts at that in the past and currently\n
  10. See, it’s insanely easy in some languages. For the love of all that’s good and holy, it’s even easy in PHP!\n
  11. Obviously, it’s as easy in Erlang... Or is it?\n
  12. You can use agner, but there some problems with it\n
  13. Ok, what about other stuff. Perl isn’t even funny, but even Go has 5 packages. \n
  14. Erlang is on par with them, is it not?\n
  15. Well, if your goal is only to read EXIF data, then yes, of course\n
  16. What about some really basic stuff?\n
  17. What about this next great thing everyone’s talking about: the cloud? I mean, c’mon. Node.js is two years old and it has everything\n
  18. This really goes beyond just the few things I’ve shown here. If you need something insanely cool and hardcore, someone’s doing it with Erlang. If you want something simple that everyone in other languages seems to be using, you’r out of luck.\n
  19. I know what I’m talking about, some of this stuff is impossible even today\n
  20. I’d say that Erlang really doesn’t suck... in some pretty serious areas. And sucks in some less serious ones\n
  21. Really, there was no moral :) If we want Erlang to be more “mainstream”, we should really try and build some of the stuff the “hipster kids” take for granted. Obviously, I want someone else to do that :)\n
  22. \n
  23. \n