SlideShare ist ein Scribd-Unternehmen logo
1 von 15
How We Became A 'Go' Company
●
Highly-threaded scalable server software,
●
Recalling C++ as the choice to go,
– Alternatives: java, c#, c
●
So … C was chosen
– With proper enterprise support (using XML)
Previous Decade
●
creating tons of threads (couple of hundreds)
●
memory management hell,
●
thread hell,
●
codebase grew uncontrolled much of the time,
●
(too) much of the time was spent on fixing segmentation faults (mostly
memory management issues)
Two Years Ago
We Needed A Hero ...
●
Personally toyed with the language a bit before 1.0 release
●
Fast, concurred and minimalistic,
●
Based on a true story:
me: “hey, what if we try this 'Go' thing?”
boss: “okay, let's make a prototype”
… two weeks later …
me: “here's the prototype”
boss:
Go Language
●
Working prototype had 26% less code, fully garbage collected
– some performance penalty (binary network protocol, reflection),
– smooth learning curve, small specs, C-family language
●
Next-generation server software 100% written in Go
– debugger-less programming,
– no memory issues at all,
– resulting in 42% less code,
– most of the time, things just work ...
Go Language
Go Language
Okular NetworkManager
Gateway
socketsocket
socket
Okular NetworkManager
Gateway
ZMQ message bus
(other components)
Unix socket-based IPC
ZeroMQ-based IPC
●
Some projects have short life-span
●
web framework paradise (goweb, web-go, martini, revel, negroni),
●
lesssion learned: choose dependencies very carefully
●
Language changes can break dependencies
– Go 1.3 CGO changes totally broke Gtk+ 3 bindings
External dependencies
●
Go 1.3 won't allow referring to an incomplete C type from one package
to another
– Package a: func CallC() *C.some_struct
– Package b: res := a.CallC()
●
Solution: encapsulate C types inside a struct
●
Fixing the problem:
– hot-fixing in our fork,
– cooperating with project maintainers
Things Can Also Go Bad
●
Often discussed topic,
●
Community moves towards godep,
●
Tons of other solutions
(https://code.google.com/p/go-wiki/wiki/PackageManagementTools)
●
We use git subtree:
– early solution to vendor locking,
– easy to pull latest code
Dependency Management
●
Binaries without external dependencies work on every compatible
system
●
In reality, one build for one system
●
Tests simply run after build and before packaging (w/o extra web
services)
– fails are still properly reported
Deploying
●
don't regret nothing
●
most of the software is now written in Go (including the whole server
software and various web back-ends),
●
our python/nodejs devs love Go – prefer Go for some projects
The End
Visionect
• Developing electronic paper
products since 2007
• 20 employees focusing on
epaper development
• 11 international awards
Signage solutions developed by
Visionect have been working for
more than 2 years, and stretch
from ice-cold Alpine ski resorts to
scorching hot Australian roads.
Visionect is the only company in the
world with extensive
outdoor electronic paper
experience.
Visionect d.o.o.
www.visionect.com
Luka Napotnik
luka.napotnik@visione
ct.com

Weitere ähnliche Inhalte

Was ist angesagt?

Introducing Yeoman 1.0 beta
Introducing Yeoman 1.0 betaIntroducing Yeoman 1.0 beta
Introducing Yeoman 1.0 beta
digitalzombie
 

Was ist angesagt? (20)

Evolution or stagnation programming languages
Evolution or stagnation programming languagesEvolution or stagnation programming languages
Evolution or stagnation programming languages
 
ATO 2014 - So You Think You Know 'Go'? The Go Programming Language
ATO 2014 - So You Think You Know 'Go'? The Go Programming LanguageATO 2014 - So You Think You Know 'Go'? The Go Programming Language
ATO 2014 - So You Think You Know 'Go'? The Go Programming Language
 
Opensource pnp container based waf
Opensource pnp container based wafOpensource pnp container based waf
Opensource pnp container based waf
 
Writing native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScriptWriting native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScript
 
Golang from Scala developer’s perspective
Golang from Scala developer’s perspectiveGolang from Scala developer’s perspective
Golang from Scala developer’s perspective
 
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
 
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
 
Why you should care about Go (Golang)
Why you should care about Go (Golang)Why you should care about Go (Golang)
Why you should care about Go (Golang)
 
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)
 
A First Look at Google's Go Programming Language
A First Look at Google's Go Programming LanguageA First Look at Google's Go Programming Language
A First Look at Google's Go Programming Language
 
What the HACK is HHVM?
What the HACK is HHVM?What the HACK is HHVM?
What the HACK is HHVM?
 
WebAssembly: In a Nutshell
WebAssembly: In a NutshellWebAssembly: In a Nutshell
WebAssembly: In a Nutshell
 
Як РНР розробник пише код на Kotlin
Як РНР розробник пише код на KotlinЯк РНР розробник пише код на Kotlin
Як РНР розробник пише код на Kotlin
 
Dev + DevOps для PHP розробника
Dev + DevOps для PHP розробникаDev + DevOps для PHP розробника
Dev + DevOps для PHP розробника
 
PHP and node.js Together
PHP and node.js TogetherPHP and node.js Together
PHP and node.js Together
 
Introducing Yeoman 1.0 beta
Introducing Yeoman 1.0 betaIntroducing Yeoman 1.0 beta
Introducing Yeoman 1.0 beta
 
Python debugging techniques
Python debugging techniquesPython debugging techniques
Python debugging techniques
 
Daniel Sloof: Magento on HHVM
Daniel Sloof: Magento on HHVMDaniel Sloof: Magento on HHVM
Daniel Sloof: Magento on HHVM
 
Modules and artifacts in NPM by Anton Cherednikov
Modules and artifacts in NPM by Anton CherednikovModules and artifacts in NPM by Anton Cherednikov
Modules and artifacts in NPM by Anton Cherednikov
 
Go language presentation
Go language presentationGo language presentation
Go language presentation
 

Andere mochten auch

BOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINAL
BOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINALBOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINAL
BOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINAL
Dr. Asterios Bouzoukas MBA, MSc
 
SBPA Newsletter May 15 FINAL
SBPA Newsletter May 15 FINALSBPA Newsletter May 15 FINAL
SBPA Newsletter May 15 FINAL
James E. Gross Jr
 
NCYSS Briefing Book - February 2015
NCYSS Briefing Book - February 2015NCYSS Briefing Book - February 2015
NCYSS Briefing Book - February 2015
Ashlyn Shockley, JD
 
Razul Eniego power point presentation about the importance of technology in e...
Razul Eniego power point presentation about the importance of technology in e...Razul Eniego power point presentation about the importance of technology in e...
Razul Eniego power point presentation about the importance of technology in e...
eniego1234
 

Andere mochten auch (15)

Dallas Huddle Program (2)
Dallas Huddle Program (2)Dallas Huddle Program (2)
Dallas Huddle Program (2)
 
PTCIL
PTCILPTCIL
PTCIL
 
BOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINAL
BOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINALBOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINAL
BOUZOUKAS_A. _INNOVATION WEEK ON RES_PRESENTATION_2013_EN_FINAL
 
June Documentation
June DocumentationJune Documentation
June Documentation
 
OnlineExam
OnlineExamOnlineExam
OnlineExam
 
Organization chart
Organization chartOrganization chart
Organization chart
 
Professional teacher pp
Professional teacher ppProfessional teacher pp
Professional teacher pp
 
port
portport
port
 
SBPA Newsletter May 15 FINAL
SBPA Newsletter May 15 FINALSBPA Newsletter May 15 FINAL
SBPA Newsletter May 15 FINAL
 
NCYSS Briefing Book - February 2015
NCYSS Briefing Book - February 2015NCYSS Briefing Book - February 2015
NCYSS Briefing Book - February 2015
 
Problem – based learning.report
Problem – based learning.reportProblem – based learning.report
Problem – based learning.report
 
Social media metrics for event sponsorships: a new performance measurement sy...
Social media metrics for event sponsorships: a new performance measurement sy...Social media metrics for event sponsorships: a new performance measurement sy...
Social media metrics for event sponsorships: a new performance measurement sy...
 
Organization chart
Organization chartOrganization chart
Organization chart
 
الجنس الآخر
الجنس الآخرالجنس الآخر
الجنس الآخر
 
Razul Eniego power point presentation about the importance of technology in e...
Razul Eniego power point presentation about the importance of technology in e...Razul Eniego power point presentation about the importance of technology in e...
Razul Eniego power point presentation about the importance of technology in e...
 

Ähnlich wie How We Bacame a 'Go' Company

Ähnlich wie How We Bacame a 'Go' Company (20)

Why Go Lang?
Why Go Lang?Why Go Lang?
Why Go Lang?
 
Go at Skroutz
Go at SkroutzGo at Skroutz
Go at Skroutz
 
Mender.io | Develop embedded applications faster | Comparing C and Golang
Mender.io | Develop embedded applications faster | Comparing C and GolangMender.io | Develop embedded applications faster | Comparing C and Golang
Mender.io | Develop embedded applications faster | Comparing C and Golang
 
Introduction to Go
Introduction to GoIntroduction to Go
Introduction to Go
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
Mono Repo
Mono RepoMono Repo
Mono Repo
 
Managing Software Dependencies and the Supply Chain_ MIT EM.S20.pdf
Managing Software Dependencies and the Supply Chain_ MIT EM.S20.pdfManaging Software Dependencies and the Supply Chain_ MIT EM.S20.pdf
Managing Software Dependencies and the Supply Chain_ MIT EM.S20.pdf
 
Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016
 
Comparing C and Go
Comparing C and GoComparing C and Go
Comparing C and Go
 
What every C++ programmer should know about modern compilers (w/ comments, AC...
What every C++ programmer should know about modern compilers (w/ comments, AC...What every C++ programmer should know about modern compilers (w/ comments, AC...
What every C++ programmer should know about modern compilers (w/ comments, AC...
 
10 reasons to be excited about go
10 reasons to be excited about go10 reasons to be excited about go
10 reasons to be excited about go
 
Go After 4 Years in Production - QCon 2015
Go After 4 Years in Production - QCon 2015Go After 4 Years in Production - QCon 2015
Go After 4 Years in Production - QCon 2015
 
An Introduction to Go
An Introduction to GoAn Introduction to Go
An Introduction to Go
 
Introduction-to-C-Part-1 (1).doc
Introduction-to-C-Part-1 (1).docIntroduction-to-C-Part-1 (1).doc
Introduction-to-C-Part-1 (1).doc
 
C++ helps you to format the I/O operations like determining the number of dig...
C++ helps you to format the I/O operations like determining the number of dig...C++ helps you to format the I/O operations like determining the number of dig...
C++ helps you to format the I/O operations like determining the number of dig...
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
 
One Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launchesOne Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launches
 
C++Basics2022.pptx
C++Basics2022.pptxC++Basics2022.pptx
C++Basics2022.pptx
 
Full stack development
Full stack developmentFull stack development
Full stack development
 
C++ was developed by Bjarne Stroustrup, as an extension to the C language. cp...
C++ was developed by Bjarne Stroustrup, as an extension to the C language. cp...C++ was developed by Bjarne Stroustrup, as an extension to the C language. cp...
C++ was developed by Bjarne Stroustrup, as an extension to the C language. cp...
 

Kürzlich hochgeladen

Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Dr.Costas Sachpazis
 
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
rknatarajan
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
Tonystark477637
 

Kürzlich hochgeladen (20)

The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptx
 
Glass Ceramics: Processing and Properties
Glass Ceramics: Processing and PropertiesGlass Ceramics: Processing and Properties
Glass Ceramics: Processing and Properties
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
 
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
Online banking management system project.pdf
Online banking management system project.pdfOnline banking management system project.pdf
Online banking management system project.pdf
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 

How We Bacame a 'Go' Company

  • 1. How We Became A 'Go' Company
  • 2. ● Highly-threaded scalable server software, ● Recalling C++ as the choice to go, – Alternatives: java, c#, c ● So … C was chosen – With proper enterprise support (using XML) Previous Decade
  • 3. ● creating tons of threads (couple of hundreds) ● memory management hell, ● thread hell, ● codebase grew uncontrolled much of the time, ● (too) much of the time was spent on fixing segmentation faults (mostly memory management issues) Two Years Ago
  • 4. We Needed A Hero ...
  • 5.
  • 6. ● Personally toyed with the language a bit before 1.0 release ● Fast, concurred and minimalistic, ● Based on a true story: me: “hey, what if we try this 'Go' thing?” boss: “okay, let's make a prototype” … two weeks later … me: “here's the prototype” boss: Go Language
  • 7. ● Working prototype had 26% less code, fully garbage collected – some performance penalty (binary network protocol, reflection), – smooth learning curve, small specs, C-family language ● Next-generation server software 100% written in Go – debugger-less programming, – no memory issues at all, – resulting in 42% less code, – most of the time, things just work ... Go Language
  • 8. Go Language Okular NetworkManager Gateway socketsocket socket Okular NetworkManager Gateway ZMQ message bus (other components) Unix socket-based IPC ZeroMQ-based IPC
  • 9. ● Some projects have short life-span ● web framework paradise (goweb, web-go, martini, revel, negroni), ● lesssion learned: choose dependencies very carefully ● Language changes can break dependencies – Go 1.3 CGO changes totally broke Gtk+ 3 bindings External dependencies
  • 10. ● Go 1.3 won't allow referring to an incomplete C type from one package to another – Package a: func CallC() *C.some_struct – Package b: res := a.CallC() ● Solution: encapsulate C types inside a struct ● Fixing the problem: – hot-fixing in our fork, – cooperating with project maintainers Things Can Also Go Bad
  • 11. ● Often discussed topic, ● Community moves towards godep, ● Tons of other solutions (https://code.google.com/p/go-wiki/wiki/PackageManagementTools) ● We use git subtree: – early solution to vendor locking, – easy to pull latest code Dependency Management
  • 12. ● Binaries without external dependencies work on every compatible system ● In reality, one build for one system ● Tests simply run after build and before packaging (w/o extra web services) – fails are still properly reported Deploying
  • 13. ● don't regret nothing ● most of the software is now written in Go (including the whole server software and various web back-ends), ● our python/nodejs devs love Go – prefer Go for some projects The End
  • 14. Visionect • Developing electronic paper products since 2007 • 20 employees focusing on epaper development • 11 international awards
  • 15. Signage solutions developed by Visionect have been working for more than 2 years, and stretch from ice-cold Alpine ski resorts to scorching hot Australian roads. Visionect is the only company in the world with extensive outdoor electronic paper experience. Visionect d.o.o. www.visionect.com Luka Napotnik luka.napotnik@visione ct.com