text:
A collection of links that cover what happened during ElixirConf 2017. Please feel free to submit a PR!

## Photos

- [600 Developers](images/elixir-conf-600-developers.JPG)
- [Audience](images/elixir-conf-crowd.JPG)
- [José Keynote](images/elixir-conf-happy-josé.JPG)

## Day 1

### Talks

#### Opening Keynote by [Justin Schneck](https://twitter.com/mobileoverlord)

- [Video](https://www.youtube.com/watch?v=bd_EIWU9GzQ)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [Nerves](http://nerves-project.org/)
    + [Nerves Test Server](https://github.com/nerves-project/nerves_test_server)

#### Alchemist Gopher: My Journey from Go to Elixir by [Veronica Lopez](http://twitter.com/maria_fibonacci)

- [Video](https://www.youtube.com/watch?v=f979XY2A2HU)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Elixir Native UI by [Boyd Multerer](http://twitter.com/@BoydMulterer)

- [Video](https://www.youtube.com/watch?v=77FW-jrCyCs)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [OpenGL](https://www.opengl.org/)
    + [Learn OpenGL](https://learnopengl.com/)
    + [GLUT](https://www.opengl.org/resources/libraries/glut/)
    + [Retained Mode Versus Immediate Mode](https://msdn.microsoft.com/en-us/library/windows/desktop/ff684178(v=vs.85).aspx)
    + [Scene graph](https://webglfundamentals.org/webgl/lessons/webgl-scene-graph.html)
    + [Matrix transformations](https://www.khanacademy.org/math/linear-algebra/matrix-transformations)

#### HTTP/2 Plug to Phoenix, Cowboy too by [Gary Rennie](http://twitter.com/TheGazler)

- [Video](https://www.youtube.com/watch?v=Mq_tb2fkROo)
- [Slides](http://blog.gazler.com/talks/http2-plug-to-phoenix)
- Links:
    + [HTTP/2](https://http2.github.io/)
    + [Plug](https://github.com/elixir-plug/plug)
    + [cowboy](https://github.com/ninenines/cowboy)
    + [cowlib](https://github.com/ninenines/cowlib)
    + [ranch](https://github.com/ninenines/ranch)
    + [gun](https://github.com/ninenines/gun)
    + [Phoenix](http://phoenixframework.org/)
    + [Cowboy 2.0: The Shape of Things to Come](https://ninenines.eu/talks/cowboy-2/#/)
    + [A Tale of 2.0 Cowboys](http://www.erlang-factory.com/euc2017/loic-hoguin)
    + [Plug Cowboy 2.0 Adapter](https://github.com/VoiceLayer/plug_cowboy2)
    + [Phoenix HTTP/2 Client demo](https://github.com/VoiceLayer/phoenix_http2_client)
    + [Phoenix Cowboy 2.0 demo](https://github.com/VoiceLayer/phoenix_cowboy2_example)

#### Building an Artificial Pancreas with Elixir and Nerves by [Tim Mecklem](http://twitter.com/tim_mecklem)

- [Video](https://www.youtube.com/watch?v=ARQD4BN_5ns)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Don't Write Macros (But Do Learn How They Work) by [Jesse J. Anderson](http://twitter.com/jessejanderson)

- [Video](https://www.youtube.com/watch?v=Bo48sQDb-hk&t=1s)
- [Slides](https://speakerdeck.com/jessejanderson/dont-write-macros-but-do-learn-how-they-work)
- Links:
    + [Article - Understanding Elixir Macros](http://theerlangelist.com/article/macros_1) by Saša Jurić
    + [Book - Metaprogramming Elixir](https://pragprog.com/book/cmelixir/metaprogramming-elixir) by Chris McCord
    + [Community - Elixir Slack Group](https://elixir-slackin.herokuapp.com/)
    + [Official Docs - Kernel](https://hexdocs.pm/elixir/Kernel.html)
    + [Official Docs - Kernel.SpecialForms](https://hexdocs.pm/elixir/Kernel.SpecialForms.html)
    + [Official Docs - Macro](https://hexdocs.pm/elixir/Macro.html)
    + [Official Guide - Quote and unquote](https://elixir-lang.org/getting-started/meta/quote-and-unquote.html)
    + [Official Guide - Macros](https://elixir-lang.org/getting-started/meta/macros.html)
    + [Official Guide - Domain Specific Languages](https://elixir-lang.org/getting-started/meta/domain-specific-languages.html)
    + [Video - Elixir in Elixir](https://youtu.be/p8MGNw045AE) by Jay Hayes
    + [Video - Write Less, Do More (and Have Fun!) with Elixir Macros](https://youtu.be/mkoYqXdXl5Y) by Chris McCord

#### Thinking In Ecto by [Darin Wilson](http://twitter.com/darinwilson)

- [Video](https://www.youtube.com/watch?v=YQxopjai0CU)
- [Slides](https://drive.google.com/file/d/0B3_AFNqIYFlHZHk5WnF2UXF5b00/view?usp=sharing)
- Links:
    + [ecto](https://github.com/elixir-ecto/ecto)
    + [Active Record pattern](https://en.wikipedia.org/wiki/Active_record_pattern)

#### Elixir by the Bellyful by [Bryan Hunter](http://twitter.com/bryan_hunter)

- [Video](https://www.youtube.com/watch?v=iswld-Rpi_g)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Embedded Elixir for Monitoring the Built Environment by [Christopher Coté](http://twitter.com/entropealab)

- [Video](https://www.youtube.com/watch?v=_zQ_u7o1rNo)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Phoenix after 100,000 lines by [Renan Ranelli](http://twitter.com/renanranelli)

- [Video](https://www.youtube.com/watch?v=blGJ_p4plbc)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [Awesome Elixir](https://github.com/h4cc/awesome-elixir)
    + [Ecto.Type](https://hexdocs.pm/ecto/Ecto.Type.html)
    + [Solid Ground by Saša Juric](https://www.youtube.com/watch?v=5SbWapbXhKo)
    + [The fallacies of web application performance](http://blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/)

#### It's Better Unstated by [TJ Stankus](http://twitter.com/tjstankus)

- [Video](https://www.youtube.com/watch?v=S2-1Rt-R2cY)
- [Slides](https://github.com/tjstankus/elixir-conf-talk-2017/blob/master/slides.pdf)
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Working with legacy databases in Ecto by [Geoffrey Lessel](http://twitter.com/geolessel)

- [Video](https://www.youtube.com/watch?v=3W2dMOQL2CM)
- [Slides](https://speakerdeck.com/geolessel/working-with-legacy-databases-in-ecto-elixirconf-2017)
- Links:
    + [Code examples and notes](http://geoffreylessel.com/elixirconf2017)
    + [Using Ecto With an Existing Database](http://geoffreylessel.com/2016/using-ecto-with-an-existing-mysql-database/)

#### Back on Your Feet by [Claudio Ortolina](http://twitter.com/cloud8421)

- [Video](https://www.youtube.com/watch?v=kWYgrA2YshE)
- [Slides](https://speakerdeck.com/cloud8421/back-on-your-feet)
- Links:
    + [Out of the Tar Pit](https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf)
    + [ETS](http://erlang.org/doc/man/ets.html)
    + [shards](https://github.com/cabol/shards)
    + [Sharding support for ETS](https://cabol.github.io/posts/2016/04/14/sharding-support-for-ets.html/)

#### Perhap: Applying Domain Driven Design and Reactive Architectures to Functional Programming by [Rob Martin](http://twitter.com/version2beta)

- [Video](https://www.youtube.com/watch?v=kq4qTk18N-c)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [Perhap](https://github.com/Perhap/perhap)
    + [Domain Driven Design: Tackling Complexity in the Heart of Software](https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215)
    + [Reactive Microservices Architecture: Design Principles for Distributed Systems](http://www.oreilly.com/programming/free/reactive-microservices-architecture-orm.csp)
    + [Commanded](https://github.com/slashdotdash/commanded)
    + [Lonestar ElixirConf 2017 - KEYNOTE: Phoenix 1.3 by Chris McCord](https://www.youtube.com/watch?v=tMO28ar0lW8)
    + [Domain Modeling Made Functional by Scott Wlaschin](https://pragprog.com/book/swdddf/domain-modeling-made-functional)

#### Writing an Editor in Elixir by [Ian Duggan](http://twitter.com/ijcd)

- [Video](https://www.youtube.com/watch?v=6lIVWVmuPao)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + Editors mentioned
        + [ed](https://en.wikipedia.org/wiki/Ed_(text_editor))
        + [vi](https://en.wikipedia.org/wiki/Vi)/[vim](https://en.wikipedia.org/wiki/Vim_(text_editor))
        + [Squeak](http://squeak.org/)
        + [IntelliJ](https://www.jetbrains.com/idea/)
        + [Eclipse](https://www.eclipse.org/)
        + [NetBeans](https://netbeans.org/)
        + [TextMate](https://macromates.com/)
        + [Sublime](https://www.sublimetext.com/)
        + [Atom](https://atom.io/)
        + [Emacs](https://www.gnu.org/software/emacs/)
    + [Rope (data structure)](https://en.wikipedia.org/wiki/Rope_(data_structure))
    + [Ropes in Elixir](https://github.com/copenhas/ropex)
    + [Ropes in Rust](https://github.com/google/xi-editor/tree/master/rust/rope)
    + [wx](http://erlang.org/doc/man/wx.html)
    + [wx Elixir wrapper](https://github.com/ijcd/wx_widgets)
    + [combine](https://github.com/bitwalker/combine)

#### Cajoling the Bird: How we squeezed more out of Phoenix PubSub by [Simon Zelazny](http://twitter.com/simonzelazny)

- [Video](https://www.youtube.com/watch?v=bodV9Tk_kpQ)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Keep an Eye on the Sky with Nerves and Phoenix by [Jeff Smith](http://twitter.com/electricshaman)

- [Video](https://www.youtube.com/watch?v=UoSQBOP_Siw)
- [Slides](https://speakerdeck.com/electricshaman/keep-an-eye-on-the-sky-with-nerves-and-phoenix)
- Links:
    + [Squitter app](https://github.com/electricshaman/squitter)
    + [Parts List (PDF on Dropbox)](https://www.dropbox.com/s/prkyoin528ylvcz/Squitter%20Parts%20List.pdf?dl=0)
    + [ADS-B on FlightAware](http://flightaware.com/adsb/)
    + [ADS-B Decoding Guide](https://adsb-decode-guide.readthedocs.io/en/latest/index.html)
    + [Custom Nerves System for SDR on Raspberry Pi 3](https://hex.pm/packages/nerves_system_rpi3_sdr)
    + [LeafletJS](http://leafletjs.com/)
    + [Hobbyist's Guide to the RTL-SDR](https://www.amazon.com/Hobbyists-Guide-RTL-SDR-Software-Defined/dp/1514716690)
    + [RTL-SDR Amazon.ca](https://www.amazon.ca/gp/product/B01GDN1T4S)
    + [RTL-SDR Amazon.com](https://www.amazon.com/dp/B01GDN1T4S)

#### Scaling Up Elixir at TpT by [Shanti Chellaram](http://twitter.com/@theccoder)

- [Video](https://www.youtube.com/watch?v=aN6cLayCekk)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Streaming Video with Elixir by [John Wahba](https://github.com/johnwahba)

- [Video](https://www.youtube.com/watch?v=eNe5dmRP9Cc)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- [Demo](https://github.com/johnwahba/vdemo2017)
- Links:
    + [FFmpeg](https://www.ffmpeg.org/)
    + [Porcelain](https://github.com/alco/porcelain)
    + [Erlang Ports](http://erlang.org/doc/reference_manual/ports.html)

#### Lightning Talks

- [QRCode](https://github.com/sunboshan/qrcode)
- [Thesis](https://github.com/infinitered/thesis-phoenix)
- [XProf](https://github.com/Appliscale/xprof)
- [Mohd Maqbool Alam](https://twitter.com/maqboolism)
  + [slides(λ Calculus in ५ minutes)](https://slides.com/maqbool/lambda)
  + [Elixir Delhi Community](https://meetup.com/Elixirlang-Delhi-NCR/)
  + [Elixir Delhi telegram group](https://t.me/elixirdelhi)
- [ElixirMock](https://github.com/wanderanimrod/elixir_mock): Creating inspectable mock modules for testing

## Day 2

### Talks

#### Opening Keynote by [José Valim](https://twitter.com/josevalim)

- [Video](https://www.youtube.com/watch?v=Wa7_I_pc0yo)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [Add new AtU8 beam chunk](https://github.com/erlang/otp/pull/1078)
    + [Introduce new "Dbgi" chunk](https://github.com/erlang/otp/pull/1367)

#### Live APIs with GraphQL Subscriptions by [Bruce Williams](http://twitter.com/wbruce) & [Ben Wilson](http://twitter.com/benwilson512)

- [Video](https://www.youtube.com/watch?v=PEckzwggd78)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### ElixirBridge: How Do We Shape Community? by [Anna Neyzberg](http://twitter.com/ANeyzb)

- [Video](https://www.youtube.com/watch?v=SB0bfI8DiOM)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Dr. Erlang/OTP or: How I Learned to Stop Worrying and Love `:disk_log` by [Eric Entin](http://twitter.com/antipax)

- [Video](https://www.youtube.com/watch?v=lQmJZVcHYds)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [`disk_log`](http://erlang.org/doc/man/disk_log.html)
    + [mnesia](http://erlang.org/doc/man/mnesia.html)
    + [Jinterface](http://erlang.org/doc/apps/jinterface/jinterface_users_guide.html)
    + [wx](http://erlang.org/doc/man/wx.html)
    + [ssh](http://erlang.org/doc/man/ssh.html)
    + [dialyzer](http://erlang.org/doc/man/dialyzer.html)
    + [dialyxir](https://github.com/jeremyjh/dialyxir)
    + [yecc](http://erlang.org/doc/man/yecc.html)
    + [leex](http://erlang.org/doc/man/leex.html)
    + [Elixir parser](https://github.com/elixir-lang/elixir/blob/master/lib/elixir/src/elixir_parser.yrl)
    + [gen_statem](http://erlang.org/doc/man/gen_statem.html)
    + [gen_state_machine](https://github.com/antipax/gen_state_machine)
    + [Stately Machines](http://ericent.in/elixir/erlang/gen_statem/gen_state_machine/2016/07/27/stately-machines.html)
    + [digraph](http://erlang.org/doc/man/digraph.html)
    + [zlib](http://erlang.org/doc/man/zlib.html)
    + [pg2](http://erlang.org/doc/man/pg2.html)
    + [heart](http://erlang.org/doc/man/heart.html)
    + [rpc](http://erlang.org/doc/man/rpc.html)
    + [beam_lib](http://erlang.org/doc/man/beam_lib.html)
    + [proc_lib](http://erlang.org/doc/man/proc_lib.html)
    + [xmerl](http://erlang.org/doc/man/xmerl.html)

#### Patience: Using Phoenix.Presence in a Primary Care Clinic by [Keith Gautreaux](http://twitter.com/kgautreaux)

- [Video](https://www.youtube.com/watch?v=1dyo5hmfUXs)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Elixir + Neo4j by [Regina Imhoff](http://twitter.com/stabbymcduck)

- [Video](https://www.youtube.com/watch?v=fWQy7aS_gd8)
- Slides - [Neo4j + Elixir](https://www.slideshare.net/ReginaImhoff/elixir-neo4j)
- Links:
    + [Elixir Ravelry Project](https://github.com/StabbyMcDuck/elixir_ravelry)
    + [Neo4j](https://neo4j.com/)
    + [O'Reilly Graph Databases book -- FREE DOWNLOAD](https://neo4j.com/graph-databases-book/)
    + [Cypher Reference Card](http://neo4j.com/docs/cypher-refcard/current/)

#### Managing Tables With Elixir and OTP by [Robert Beene](http://twitter.com/robert_beene)

- [Video](https://www.youtube.com/watch?v=ENolm5T0bkU)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Elixir as a first language by Alexis Huefner

- [Video](https://www.youtube.com/watch?v=TUOeFdFvOk8)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### The Power of Zero by [Andrew Forward](http://twitter.com/a4word)

- [Video](https://www.youtube.com/watch?v=4LIXBW58yIk)
- [Slides](https://www.slideshare.net/aaforward/power-of-zero-79570500)
- Links:
    + [bootleg](https://github.com/labzero/bootleg)
    + [edeliver](https://github.com/edeliver/edeliver)
    + [doex](https://github.com/capbash/doex)

#### Well-Behaved Native Implemented Functions for Elixir by [Andrew Bennett](http://twitter.com/potatosaladx)

- [Video](https://www.youtube.com/watch?v=FYQcn9zcZVA)
- [Slides](https://gitpitch.com/potatosalad/elixirconf2017)
- [Resources](https://github.com/potatosalad/elixirconf2017)
- Links:
    + [erl_nif](http://erlang.org/doc/man/erl_nif.html)
    + [Latency of Native Functions for Erlang and Elixir](https://potatosalad.io/2017/08/05/latency-of-native-functions-for-erlang-and-elixir.html)
    + [The BEAM Book](https://github.com/happi/theBeamBook)
    + [crypto.c](https://github.com/erlang/otp/blob/master/lib/crypto/c_src/crypto.c)
    + [Load Testing cowboy 2.0.0-rc.1](https://potatosalad.io/2017/08/20/load-testing-cowboy-2-0-0-rc-1.html)

#### Building an Open Source, Real-Time Forum with Phoenix and Elm by [Josh Adams](http://twitter.com/knewter)

- [Video](https://www.youtube.com/watch?v=GFyFR5LdnrU)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Elixir, The Toyota Way by [Powell Kinney](http://twitter.com/pkinney)

- [Video](https://www.youtube.com/watch?v=37V6L1EA4ac)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Elixir Power Tracing by [Gabi Zuniga](http://twitter.com/gabiz)

- [Video](https://www.youtube.com/watch?v=i8ibIH5_-zA)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [dtrace](http://www.brendangregg.com/dtrace.html)
    + [`:erlang.trace/3`](http://erlang.org/doc/man/erlang.html#trace-3)
    + [`:erlang.trace_pattern/3`](http://erlang.org/doc/man/erlang.html#trace_pattern-3)
    + [observer](http://erlang.org/doc/man/observer.html)
    + [dbg](http://erlang.org/doc/man/dbg.html)
    + [dbg (Elixir)](https://github.com/fishcakez/dbg)
    + [LTTng](https://lttng.org/)
    + [erlyberly](https://github.com/andytill/erlyberly)
    + [recon](https://github.com/ferd/recon)
    + [recon_ex](https://github.com/tatsuya6502/recon_ex)
    + [SystemTap](https://sourceware.org/systemtap/)
    + [xprof](https://github.com/Appliscale/xprof)
    + [redbug](https://github.com/massemanet/redbug)
    + [tracer](https://github.com/gabiz/tracer)

#### Plugging the Security Holes in Your Phoenix Application by [Griffin Byatt](http://twitter.com/griffinbyatt)

- [Video](https://www.youtube.com/watch?v=w3lKmFsmlvQ)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [sobelow](https://github.com/nccgroup/sobelow)

#### Building Realtime Mobile Apps with React Native and Elixir by [Osayame Gaius-Obaseki](http://github.com/osayame)

- [Video](https://www.youtube.com/watch?v=Kbhl379x1cw)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Implementing a MQTT client in Elixir by [Martin Gausby](http://twitter.com/gausby)

- [Video](https://www.youtube.com/watch?v=ImcAcDBa8Dg)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [MQTT](http://mqtt.org/documentation)

#### Realtime Vehicle Tracking with Elixir and Phoenix by [James Smith](http://twitter.com/st23am)

- [Video](https://www.youtube.com/watch?v=aLnSO6FQpHs)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Idea Scaling by [Hannah Howard](http://twitter.com/techgirlwonder)

- Video - Not uploaded yet
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + None yet. Open a [PR](https://github.com/poteto/elixirconf-2017/pulls)!

#### Elixir with Kafka by [Mathew Gardner](http://github.com/mathewdgardner)

- [Video](https://www.youtube.com/watch?v=6ijgMvXJyuo)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [gen_stage](https://github.com/elixir-lang/gen_stage)
    + [flow](https://github.com/elixir-lang/flow)
    + [kafkaex](https://github.com/kafkaex/kafka_ex)
    + [brod](https://github.com/klarna/brod)

#### Closing Keynote by [Chris McCord](https://twitter.com/chris_mccord)

- [Video](https://www.youtube.com/watch?v=zbbK0WOvWII)
- Slides - Not uploaded yet. Submit a [PR](https://github.com/poteto/elixirconf-2017/pulls) if you find it!
- Links:
    + [Phoenix contexts](https://hexdocs.pm/phoenix/contexts.html)


text:
#include "hw-main.h"
#include "hw-base.h"

#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif

#if HAVE_STDLIB_H
#include <stdlib.h>
#endif

#include <ctype.h>

#include "hw-config.h"

struct hw_base_data
{
  int finished_p;
  const struct hw_descriptor *descriptor;
  hw_delete_callback *to_delete;
};

static int
generic_hw_unit_decode (struct hw *bus,
			const char *unit,
			hw_unit *phys)
{
  memset (phys, 0, sizeof (*phys));
  if (unit == NULL)
    return 0;
  else
    {
      int nr_cells = 0;
      const int max_nr_cells = hw_unit_nr_address_cells (bus);
      while (1)
	{
	  char *end = NULL;
	  unsigned long val;
	  val = strtoul (unit, &end, 0);
	  /* parse error? */
	  if (unit == end)
	    return -1;
	  /* two many cells? */
	  if (nr_cells >= max_nr_cells)
	    return -1;
	  /* save it */
	  phys->cells[nr_cells] = val;
	  nr_cells++;
	  unit = end;
	  /* more to follow? */
	  if (isspace (*unit) || *unit == '\0')
	    break;
	  if (*unit != ',')
	    return -1;
	  unit++;
	}
      if (nr_cells < max_nr_cells)
	{
	  /* shift everything to correct position */
	  int i;

	  for (i = 1; i <= nr_cells; i++)
	    phys->cells[max_nr_cells - i] = phys->cells[nr_cells - i];
	  for (i = 0; i < (max_nr_cells - nr_cells); i++)
	    phys->cells[i] = 0;
	}
      phys->nr_cells = max_nr_cells;
      return max_nr_cells;
  }
}

static int
generic_hw_unit_encode (struct hw *bus,
			const hw_unit *phys,
			char *buf,
			int sizeof_buf)
{
  int i;
  int len;
  char *pos = buf;
  /* skip leading zero's */
  for (i = 0; i < phys->nr_cells; i++)
    {
      if (phys->cells[i] != 0)
	break;
    }
  /* don't output anything if empty */
  if (phys->nr_cells == 0)
    {
      strcpy (pos, "");
      len = 0;
    }
  else if (i == phys->nr_cells)
    {
      /* all zero */
      strcpy (pos, "0");
      len = 1;
    }
  else
    {
      for (; i < phys->nr_cells; i++)
	{
	  if (pos != buf)
	    {
	      strcat (pos, ",");
	      pos = strchr (pos, '\0');
	    }
	  if (phys->cells[i] < 10)
	    sprintf (pos, "%ld", (unsigned long)phys->cells[i]);
	  else
	    sprintf (pos, "0x%lx", (unsigned long)phys->cells[i]);
	  pos = strchr (pos, '\0');
	}
      len = pos - buf;
    }
  if (len >= sizeof_buf)
    hw_abort (NULL, "generic_unit_encode - buffer overflow\n");
  return len;
}

static int
generic_hw_unit_address_to_attach_address (struct hw *me,
					   const hw_unit *address,
					   int *attach_space,
					   unsigned_word *attach_address,
					   struct hw *client)
{
  int i;
  for (i = 0; i < address->nr_cells - 2; i++)
    {
      if (address->cells[i] != 0)
	hw_abort (me, "Only 32bit addresses supported");
    }
  if (address->nr_cells >= 2)
    *attach_space = address->cells[address->nr_cells - 2];
  else
    *attach_space = 0;
  *attach_address = address->cells[address->nr_cells - 1];
  return 1;
}

static int
generic_hw_unit_size_to_attach_size (struct hw *me,
				     const hw_unit *size,
				     unsigned *nr_bytes,
				     struct hw *client)
{
  int i;
  for (i = 0; i < size->nr_cells - 1; i++)
    {
      if (size->cells[i] != 0)
	hw_abort (me, "Only 32bit sizes supported");
    }
  *nr_bytes = size->cells[0];
  return *nr_bytes;
}

/* ignore/passthrough versions of each function */

static void
passthrough_hw_attach_address (struct hw *me,
			       int level,
			       int space,
			       address_word addr,
			       address_word nr_bytes,
			       struct hw *client) /*callback/default*/
{
  if (hw_parent (me) == NULL)
    hw_abort (client, "hw_attach_address: no parent attach method");
  hw_attach_address (hw_parent (me), level,
		     space, addr, nr_bytes,
		     client);
}

static void
passthrough_hw_detach_address (struct hw *me,
			       int level,
			       int space,
			       address_word addr,
			       address_word nr_bytes,
			       struct hw *client) /*callback/default*/
{
  if (hw_parent (me) == NULL)
    hw_abort (client, "hw_attach_address: no parent attach method");
  hw_detach_address (hw_parent (me), level,
		     space, addr, nr_bytes,
		     client);
}

static unsigned
panic_hw_io_read_buffer (struct hw *me,
			 void *dest,
			 int space,
			 unsigned_word addr,
			 unsigned nr_bytes)
{
  hw_abort (me, "no io-read method");
  return 0;
}

static unsigned
panic_hw_io_write_buffer (struct hw *me,
			  const void *source,
			  int space,
			  unsigned_word addr,
			  unsigned nr_bytes)
{
  hw_abort (me, "no io-write method");
  return 0;
}

static unsigned
passthrough_hw_dma_read_buffer (struct hw *me,
				void *dest,
				int space,
				unsigned_word addr,
				unsigned nr_bytes)
{
  if (hw_parent (me) == NULL)
    hw_abort (me, "no parent dma-read method");
  return hw_dma_read_buffer (hw_parent (me), dest,
			     space, addr, nr_bytes);
}

static unsigned
passthrough_hw_dma_write_buffer (struct hw *me,
				 const void *source,
				 int space,
				 unsigned_word addr,
				 unsigned nr_bytes,
				 int violate_read_only_section)
{
  if (hw_parent (me) == NULL)
    hw_abort (me, "no parent dma-write method");
  return hw_dma_write_buffer (hw_parent (me), source,
			      space, addr,
			      nr_bytes,
			      violate_read_only_section);
}

static void
ignore_hw_delete (struct hw *me)
{
  /* NOP */
}

static const char *
full_name_of_hw (struct hw *leaf,
		 char *buf,
		 unsigned sizeof_buf)
{
  /* get a buffer */
  char full_name[1024];
  if (buf == (char*)0)
    {
      buf = full_name;
      sizeof_buf = sizeof (full_name);
    }

  /* use head recursion to construct the path */

  if (hw_parent (leaf) == NULL)
    /* root */
    {
      if (sizeof_buf < 1)
	hw_abort (leaf, "buffer overflow");
      *buf = '\0';
    }
  else
    /* sub node */
    {
      char unit[1024];
      full_name_of_hw (hw_parent (leaf), buf, sizeof_buf);
      if (hw_unit_encode (hw_parent (leaf),
			  hw_unit_address (leaf),
			  unit + 1,
			  sizeof (unit) - 1)
	  > 0)
	unit[0] = '@';
      else
	unit[0] = '\0';
      if (strlen (buf) + strlen ("/") + strlen (hw_name (leaf)) + strlen (unit)
	  >= sizeof_buf)
	hw_abort (leaf, "buffer overflow");
      strcat (buf, "/");
      strcat (buf, hw_name (leaf));
      strcat (buf, unit);
    }

  /* return it usefully */
  if (buf == full_name)
    buf = hw_strdup (leaf, full_name);
  return buf;
}

struct hw *
hw_create (struct sim_state *sd,
	   struct hw *parent,
	   const char *family,
	   const char *name,
	   const char *unit,
	   const char *args)
{
 /* NOTE: HW must be allocated using ZALLOC, others use HW_ZALLOC */
  struct hw *hw = ZALLOC (struct hw);

  /* our identity */
  hw->family_of_hw = hw_strdup (hw, family);
  hw->name_of_hw = hw_strdup (hw, name);
  hw->args_of_hw = hw_strdup (hw, args);

  /* a hook into the system */
  if (sd != NULL)
    hw->system_of_hw = sd;
  else if (parent != NULL)
    hw->system_of_hw = hw_system (parent);
  else
    hw_abort (parent, "No system found");

  /* in a tree */
  if (parent != NULL)
    {
      struct hw **sibling = &parent->child_of_hw;
      while ((*sibling) != NULL)
	sibling = &(*sibling)->sibling_of_hw;
      *sibling = hw;
      hw->parent_of_hw = parent;
    }

  /* top of tree */
  if (parent != NULL)
    {
      struct hw *root = parent;
      while (root->parent_of_hw != NULL)
	root = root->parent_of_hw;
      hw->root_of_hw = root;
    }

  /* a unique identifier for the device on the parents bus */
  if (parent != NULL)
    {
      hw_unit_decode (parent, unit, &hw->unit_address_of_hw);
    }

  /* Determine our path */
  if (parent != NULL)
    hw->path_of_hw = full_name_of_hw (hw, NULL, 0);
  else
    hw->path_of_hw = "/";

  /* create our base type */
  hw->base_of_hw = HW_ZALLOC (hw, struct hw_base_data);
  hw->base_of_hw->finished_p = 0;

  /* our callbacks */
  set_hw_io_read_buffer (hw, panic_hw_io_read_buffer);
  set_hw_io_write_buffer (hw, panic_hw_io_write_buffer);
  set_hw_dma_read_buffer (hw, passthrough_hw_dma_read_buffer);
  set_hw_dma_write_buffer (hw, passthrough_hw_dma_write_buffer);
  set_hw_unit_decode (hw, generic_hw_unit_decode);
  set_hw_unit_encode (hw, generic_hw_unit_encode);
  set_hw_unit_address_to_attach_address (hw, generic_hw_unit_address_to_attach_address);
  set_hw_unit_size_to_attach_size (hw, generic_hw_unit_size_to_attach_size);
  set_hw_attach_address (hw, passthrough_hw_attach_address);
  set_hw_detach_address (hw, passthrough_hw_detach_address);
  set_hw_delete (hw, ignore_hw_delete);

  /* locate a descriptor */
  {
    const struct hw_descriptor **table;
    for (table = hw_descriptors;
	 *table != NULL;
	 table++)
      {
	const struct hw_descriptor *entry;
	for (entry = *table;
	     entry->family != NULL;
	     entry++)
	  {
	    if (strcmp (family, entry->family) == 0)
	      {
		hw->base_of_hw->descriptor = entry;
		break;
	      }
	  }
      }
    if (hw->base_of_hw->descriptor == NULL)
      {
	hw_abort (parent, "Unknown device `%s'", family);
      }
  }

  /* Attach dummy ports */
  create_hw_alloc_data (hw);
  create_hw_property_data (hw);
  create_hw_port_data (hw);
  create_hw_event_data (hw);
  create_hw_handle_data (hw);
  create_hw_instance_data (hw);

  return hw;
}

int
hw_finished_p (struct hw *me)
{
  return (me->base_of_hw->finished_p);
}

void
hw_finish (struct hw *me)
{
  if (hw_finished_p (me))
    hw_abort (me, "Attempt to finish finished device");

  /* Fill in the (hopefully) defined address/size cells values */
  if (hw_find_property (me, "#address-cells") != NULL)
    me->nr_address_cells_of_hw_unit =
      hw_find_integer_property (me, "#address-cells");
  else
    me->nr_address_cells_of_hw_unit = 2;
  if (hw_find_property (me, "#size-cells") != NULL)
    me->nr_size_cells_of_hw_unit =
      hw_find_integer_property (me, "#size-cells");
  else
    me->nr_size_cells_of_hw_unit = 1;

  /* Fill in the (hopefully) defined trace variable */
  if (hw_find_property (me, "trace?") != NULL)
    me->trace_of_hw_p = hw_find_boolean_property (me, "trace?");
  /* allow global variable to define default tracing */
  else if (! hw_trace_p (me)
	   && hw_find_property (hw_root (me), "global-trace?") != NULL
	   && hw_find_boolean_property (hw_root (me), "global-trace?"))
    me->trace_of_hw_p = 1;

  /* Allow the real device to override any methods */
  me->base_of_hw->descriptor->to_finish (me);
  me->base_of_hw->finished_p = 1;
}

void
hw_delete (struct hw *me)
{
  /* give the object a chance to tidy up */
  me->base_of_hw->to_delete (me);

  delete_hw_instance_data (me);
  delete_hw_handle_data (me);
  delete_hw_event_data (me);
  delete_hw_port_data (me);
  delete_hw_property_data (me);

  /* now unlink us from the tree */
  if (hw_parent (me))
    {
      struct hw **sibling = &hw_parent (me)->child_of_hw;
      while (*sibling != NULL)
	{
	  if (*sibling == me)
	    {
	      *sibling = me->sibling_of_hw;
	      me->sibling_of_hw = NULL;
	      me->parent_of_hw = NULL;
	      break;
	    }
	}
    }

  /* some sanity checks */
  if (hw_child (me) != NULL)
    {
      hw_abort (me, "attempt to delete device with children");
    }
  if (hw_sibling (me) != NULL)
    {
      hw_abort (me, "attempt to delete device with siblings");
    }

  /* blow away all memory belonging to the device */
  delete_hw_alloc_data (me);

  /* finally */
  free (me);
}

void
set_hw_delete (struct hw *hw, hw_delete_callback method)
{
  hw->base_of_hw->to_delete = method;
}

/* Go through the devices various reg properties for those that
   specify attach addresses */

void
do_hw_attach_regs (struct hw *hw)
{
  static const char *(reg_property_names[]) = {
    "attach-addresses",
    "assigned-addresses",
    "reg",
    "alternate-reg" ,
    NULL
  };
  const char **reg_property_name;
  int nr_valid_reg_properties = 0;
  for (reg_property_name = reg_property_names;
       *reg_property_name != NULL;
       reg_property_name++)
    {
      if (hw_find_property (hw, *reg_property_name) != NULL)
	{
	  reg_property_spec reg;
	  int reg_entry;
	  for (reg_entry = 0;
	       hw_find_reg_array_property (hw, *reg_property_name, reg_entry,
					   &reg);
	       reg_entry++)
	    {
	      unsigned_word attach_address;
	      int attach_space;
	      unsigned attach_size;
	      if (!hw_unit_address_to_attach_address (hw_parent (hw),
						      &reg.address,
						      &attach_space,
						      &attach_address,
						      hw))
		continue;
	      if (!hw_unit_size_to_attach_size (hw_parent (hw),
						&reg.size,
						&attach_size, hw))
		continue;
	      hw_attach_address (hw_parent (hw),
				 0,
				 attach_space, attach_address, attach_size,
				 hw);
	      nr_valid_reg_properties++;
	    }
	  /* if first option matches don't try for any others */
	  if (reg_property_name == reg_property_names)
	    break;
	}
    }
}

redpajama_set_name: RedPajamaGithub


text:
    #pragma warning(push, 1)
#endif
#include <QtCore>
#include <QtWidgets>
#ifdef _WIN32
    #pragma warning(pop)
#endif

// Infra:
#include <AMDTApplicationFramework/Include/afProjectSettingsExtension.h>

#include <TSingleton.h>

#include "GPUProjectHandler.h"
#include "ProjectSettings.h"

/// Project Settings page for OpenCL Tracing options
class OpenCLTraceOptions : public afProjectSettingsExtension, public GPUProjectHandler
{
    Q_OBJECT

public:

    /// Destructor
    virtual ~OpenCLTraceOptions();

    /// singleton access
    /// \return the singleton value
    static OpenCLTraceOptions* Instance();

    /// Inherited function from framework to initialize page components
    virtual void Initialize();

    /// Gets the extension name
    /// \return the extension name
    virtual gtString ExtensionXMLString();

    /// Gets the extension display name (may contain spaces):
    /// \return the extension display name (may contain spaces):
    virtual gtString ExtensionTreePathAsString();

    /// Load the project settings into XML format into a string
    /// \param projectAsXMLString project setting string in XML format
    /// \return true on success, else false
    virtual bool GetXMLSettingsString(gtString& projectAsXMLString);

    /// Save the project settings
    /// \param projectAsXMLString project setting string in XML format
    /// \return true on success, else false
    virtual bool SetSettingsFromXMLString(const gtString& projectAsXMLString);

    /// Restore the control content to default settings
    virtual void RestoreDefaultProjectSettings();

    /// Set the current project data on the widgets
    /// \return true on success, else false.
    virtual bool RestoreCurrentSettings();

    /// Are current settings set in the widget valid?
    /// \param invalidMessageStr invalid string
    /// \return true on success, else false.
    virtual bool AreSettingsValid(gtString& invalidMessageStr);

    /// Get the data from the widget
    /// \returns true on success, else false.
    virtual bool SaveCurrentSettings();

    /// Create project setting string in XML format
    /// \param projectAsXMLString will contain final string
    /// \param projectPage  page name
    /// \return true on success, else false
    bool getProjectSettingsXML(gtString& projectAsXMLString, gtString& projectPage);

    /// Write project settings into XML string format
    /// \param projectAsXMLString will contain final string
    /// \param type name of the type
    void writeSession(gtString& projectAsXMLString, const gtString& type);

    /// Will update Trace options with user selected TraceOptions
    /// \param[out] apiTraceOptions update with user selected Trace options
    /// \return True on success, else false
    bool SetTraceOptions(APITraceOptions& apiTraceOptions);

    /// Save selected rules
    /// \param filePath Will contain selected rules
    /// \return True on success, else false
    bool GenerateRules(const QString& filePath);

private:
    /// hidden constructor to initialize the singleton object
    /// \param parent the parent widget
    OpenCLTraceOptions(QWidget* parent = 0);

    /// Will initialize Rules TreeView
    void InitializeRulesTreeView();

    /// Will initialize API filter TreeView
    void InitializeAPIFilterTreeView();

    /// Adds all the OpenCL function to the API tree:
    void AddCLAPIFunctionsToTree();

    /// Adds all the HSA function to the API tree:
    void AddHSAAPIFunctionsToTree();

    /// Update OpenCL API filter list
    void UpdateAPIFilterList();

    /// Update Rules list
    void UpdateRuleList();

    /// Update project settings
    void UpdateProjectSettings();

    /// Sets project setting available in XML format
    /// \param projectAsXMLString will contain final string
    /// \returns true on success, else false
    bool setProjectSettingsXML(const gtString& projectAsXMLString);

    /// Will handle change event for TreeWidget item
    /// \param topOfTree Top level tree widget
    /// \param item changed item
    /// \param column column of the tree
    /// \param topOfTreeString top of the tree string.
    void HandleTreeWidgetItemChangeEvent(QTreeWidget* topOfTree, QTreeWidgetItem* item, int column, QString topOfTreeString);

    /// Restore the API and rules trees items check state from saved settings
    void RestoreTreesDataFromSettings();

    /// fix tree items top levels state
    /// \param the tree to be fixed
    void UpdateTreeCheckState(QTreeWidget* tree);

    /// Fix recursively sub tree state
    /// \param root item for sub tree
    /// \returns Check State for sub tree parent
    Qt::CheckState GetSubTreeCheckState(QTreeWidgetItem* parent);

    /// Show / hide the relevant tree items for the selected API type:
    /// \param apiType the user selected api type
    void FitTreesToAPIType(APIToTrace api);

    QRadioButton*              m_pOpenCLRadioButton;                ///< Radiobutton for OpenCL applications
    QRadioButton*              m_pHSARadioButton;                 ///< Radiobutton for HSA applications
    QCheckBox*                 m_pShowAPIErrorCodeCB;               ///< CheckBox for "Always show API error code"
    QCheckBox*                 m_pCollapseCallsCB;                  ///< CheckBox for collapse calls
    QCheckBox*                 m_pEnableNavigationCB;               ///< CheckBox for navigate to source code
    QTreeWidget*               m_pAPIRulesTW;                       ///< TreeWidget to show rules
    QTreeWidget*               m_pAPIsToTraceTW;                    ///< TreeWidget to show list of OpenCL APIs
    QRadioButton*              m_pAPIsToTraceRB;                    ///< Radio button for filter APIs
    QRadioButton*              m_pGenerateSummaryPageRB;            ///< RadioButton for generate summary pages
    QLabel*                    m_pMaxNumberOfAPIsLB;                ///< Label for maximum number of APIs
    QSpinBox*                  m_pMaxNumberOfAPIsSB;                ///< SpinBox for maximum number of APIs to be traced
    QCheckBox*                 m_pWriteDataTimeOutCB;               ///< CheckBox for write data TimeOut (shown on Windows only)
    QLabel*                    m_pTimeoutIntervalLB;                ///< Label for timeout interval spinbox (shown on Linux only)
    QSpinBox*                  m_pTimeOutIntervalSB;                ///< SpinBox for timeout interval
    QCheckBox*                 m_pGenerateOccupancyCB;              ///< CheckBox for generate occupancy data

    QTreeWidgetItem* m_pOpenCLRootItem;                             ///< The top level item representing the CL API
    QTreeWidgetItem* m_pHSARootItem;                                ///< The top level item representing the HSA API

    APITraceOptions m_currentSettings;                              ///< Resource class for OpenCL trace page

    QVector<QTreeWidgetItem*> m_hsaRulesTreeWidgetItems;            ///< Holds a vector of tree items to show when the HSA api is selected

    static OpenCLTraceOptions* m_spInstance;                       /// static member singleton. Not using SINGLETON template since should not automatically delete at the end

private slots:
    /// Called when item changed in RuleTreeWidget.
    /// \param item TreeWidget item
    /// \param column of the item
    void RulesTreeItemChanged(QTreeWidgetItem* item, int column);

    /// Called when item changed in OpenCL APIsTreeWidget.
    /// \param item TreeWidget item
    /// \param column of the item
    void APIsTreeItemChanged(QTreeWidgetItem* item, int column);

    /// Called when radiobutton will get toggled.
    /// \param isChecked will have radiobutton state
    void RadioButtonToggled(bool isChecked);

    /// Called when the HSA / OpenCL radiobutton will get toggled.
    void OnAPITypeRadioButtonToggled();

    /// Called when timeout checkbox state changes
    /// \param state will indicate the current state of the checkbox
    void WriteTimeOutStateChanged(int state);

};

#endif //_OPENCL_TRACE_SETTING_PAGE_H_


text:
// Copyright © 2017-2019 Andy Goryachev <andy@goryachev.com>
package goryachev.fx;

/**
 * Standard Formatters.
 */
public class Formatters
{
	private static FxDecimalFormatter integerFormatter;

	public static FxFormatter getIntegerFormat()
	{
		if(integerFormatter == null)
		{
			integerFormatter = new FxDecimalFormatter("#,##0");
		}
		return integerFormatter;
	}
}


text:
using System;
using System.ComponentModel;

namespace JosePedroSilva.TFSScrumExtensions.BusinessObjects
{
    public class TaskTemplateCustomProperty : INotifyPropertyChanged
    {
        #region Private Variables

        private String _name;
        private String _value;

        #endregion

        #region Public Variables

        /// <summary>
        /// Occurs when a property value changes.
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        #region Properties

        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <value>
        /// The name.
        /// </value>
        public String Name
        {
            get
            {
                return this._name;
            }

            set
            {
                if (this._name != value)
                {
                    this._name = value;
                    this.OnPropertyChanged("Name");
                }
            }
        }

        /// <summary>
        /// Gets or sets the value.
        /// </summary>
        /// <value>
        /// The value.
        /// </value>
        public String Value
        {
            get
            {
                return this._value;
            }

            set
            {
                if (this._value != value)
                {
                    this._value = value;
                    this.OnPropertyChanged("Value");
                }
            }
        }

        #endregion

        #region Constructors
        #endregion

        #region Private & Internal Methods
        #endregion

        #region Public Methods

        /// <summary>
        /// Called to trigger property changed event.
        /// </summary>
        /// <param name="propertyName">Name of the property.</param>
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion

        #region Event handling Methods
        #endregion
    }
}


text:
/* Simple program to test the SDL joystick hotplugging */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "SDL.h"
#include "SDL_haptic.h"

#if !defined SDL_JOYSTICK_DISABLED && !defined SDL_HAPTIC_DISABLED

int
main(int argc, char *argv[])
{
    SDL_Joystick *joystick = NULL;
    SDL_Haptic *haptic = NULL;
    SDL_JoystickID instance = -1;
    SDL_bool keepGoing = SDL_TRUE;
    int i;
    SDL_bool enable_haptic = SDL_TRUE;
    Uint32 init_subsystems = SDL_INIT_VIDEO | SDL_INIT_JOYSTICK;

    for (i = 1; i < argc; ++i) {
        if (SDL_strcasecmp(argv[i], "--nohaptic") == 0) {
            enable_haptic = SDL_FALSE;
        }
    }

    if(enable_haptic) {
        init_subsystems |= SDL_INIT_HAPTIC;
    }

    /* Enable standard application logging */
    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);

    SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");

    /* Initialize SDL (Note: video is required to start event loop) */
    if (SDL_Init(init_subsystems) < 0) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
        exit(1);
    }

    //SDL_CreateWindow("Dummy", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 128, 128, 0);

    SDL_Log("There are %d joysticks at startup\n", SDL_NumJoysticks());
    if (enable_haptic)
        SDL_Log("There are %d haptic devices at startup\n", SDL_NumHaptics());

    while(keepGoing)
    {
        SDL_Event event;
        while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {
                case SDL_QUIT:
                    keepGoing = SDL_FALSE;
                    break;
                case SDL_JOYDEVICEADDED:
                    if (joystick != NULL)
                    {
                        SDL_Log("Only one joystick supported by this test\n");
                    }
                    else
                    {
                        joystick = SDL_JoystickOpen(event.jdevice.which);
                        instance = SDL_JoystickInstanceID(joystick);
                        SDL_Log("Joy Added  : %d : %s\n", event.jdevice.which, SDL_JoystickName(joystick));
                        if (enable_haptic)
                        {
                            if (SDL_JoystickIsHaptic(joystick))
                            {
                                haptic = SDL_HapticOpenFromJoystick(joystick);
                                if (haptic)
                                {
                                    SDL_Log("Joy Haptic Opened\n");
                                    if (SDL_HapticRumbleInit( haptic ) != 0)
                                    {
                                        SDL_Log("Could not init Rumble!: %s\n", SDL_GetError());
                                        SDL_HapticClose(haptic);
                                        haptic = NULL;
                                    }
                                } else {
                                    SDL_Log("Joy haptic open FAILED!: %s\n", SDL_GetError());
                                }
                            }
                            else
                            {
                                SDL_Log("No haptic found\n");
                            }
                        }
                    }
                    break;
                case SDL_JOYDEVICEREMOVED:
                    if (instance == event.jdevice.which)
                    {
                        SDL_Log("Joy Removed: %d\n", event.jdevice.which);
                        instance = -1;
                        if(enable_haptic && haptic)
                        {
                            SDL_HapticClose(haptic);
                            haptic = NULL;
                        }
                        SDL_JoystickClose(joystick);
                        joystick = NULL;
                    } else {
                        SDL_Log("Unknown joystick diconnected\n");
                    }
                    break;
                case SDL_JOYAXISMOTION:
//                    SDL_Log("Axis Move: %d\n", event.jaxis.axis);
                    if (enable_haptic)
                        SDL_HapticRumblePlay(haptic, 0.25, 250);
                    break;
                case SDL_JOYBUTTONDOWN:
                    SDL_Log("Button Press: %d\n", event.jbutton.button);
                    if(enable_haptic && haptic)
                    {
                        SDL_HapticRumblePlay(haptic, 0.25, 250);
                    }
					if (event.jbutton.button == 0) {
						SDL_Log("Exiting due to button press of button 0\n");
						keepGoing = SDL_FALSE;
					}
                    break;
                case SDL_JOYBUTTONUP:
                    SDL_Log("Button Release: %d\n", event.jbutton.button);
                    break;
            }
        }
    }

    SDL_Quit();

    return 0;
}
#else

int
main(int argc, char *argv[])
{
    SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick and haptic support.\n");
    return 1;
}

#endif


text:
package edu.princeton.safe.internal.cytoscape.controller;

import java.awt.Component;
import java.io.IOException;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;

import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.events.SetCurrentNetworkViewEvent;
import org.cytoscape.application.events.SetCurrentNetworkViewListener;
import org.cytoscape.application.swing.CySwingApplication;
import org.cytoscape.application.swing.CytoPanel;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelComponent2;
import org.cytoscape.application.swing.CytoPanelState;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.events.ColumnCreatedEvent;
import org.cytoscape.model.events.ColumnCreatedListener;
import org.cytoscape.model.events.ColumnDeletedEvent;
import org.cytoscape.model.events.ColumnDeletedListener;
import org.cytoscape.model.events.ColumnNameChangedEvent;
import org.cytoscape.model.events.ColumnNameChangedListener;
import org.cytoscape.model.subnetwork.CyRootNetwork;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.session.CySession;
import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
import org.cytoscape.session.events.SessionAboutToBeSavedListener;
import org.cytoscape.session.events.SessionLoadedEvent;
import org.cytoscape.session.events.SessionLoadedListener;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedEvent;
import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedListener;

import com.carrotsearch.hppc.LongObjectHashMap;
import com.carrotsearch.hppc.LongObjectMap;
import com.carrotsearch.hppc.cursors.ObjectCursor;

import edu.princeton.safe.AnnotationProvider;
import edu.princeton.safe.grouping.ClusterBasedGroupingMethod;
import edu.princeton.safe.grouping.JaccardDistanceMethod;
import edu.princeton.safe.internal.cytoscape.SafeCytoPanelComponent;
import edu.princeton.safe.internal.cytoscape.SafeUtil;
import edu.princeton.safe.internal.cytoscape.SelectionTracker;
import edu.princeton.safe.internal.cytoscape.UiUtil;
import edu.princeton.safe.internal.cytoscape.event.EventService;
import edu.princeton.safe.internal.cytoscape.event.SetCompositeMapListener;
import edu.princeton.safe.internal.cytoscape.event.SetEnrichmentLandscapeListener;
import edu.princeton.safe.internal.cytoscape.io.SafeSessionSerializer;
import edu.princeton.safe.internal.cytoscape.model.SafeSession;
import edu.princeton.safe.model.CompositeMap;
import edu.princeton.safe.model.EnrichmentLandscape;
import edu.princeton.safe.restriction.RadiusBasedRestrictionMethod;
import net.miginfocom.swing.MigLayout;

public class SafeController
        implements SetCurrentNetworkViewListener, NetworkViewAboutToBeDestroyedListener, ColumnCreatedListener,
        ColumnDeletedListener, ColumnNameChangedListener, SessionLoadedListener, SessionAboutToBeSavedListener {

    private static final String STEP_1_TITLE = "Step 1: Build Enrichment Landscapes";
    private static final String STEP_2_TITLE = "Step 2: View Enrichment Landscapes";
    private static final String STEP_3_TITLE = "Step 3: Build Composite Map";
    private static final String STEP_4_TITLE = "Step 4: View Composite Map";

    final CyServiceRegistrar registrar;
    final CySwingApplication application;
    final CyApplicationManager applicationManager;

    final EventService eventService;
    final SafeSessionSerializer serializer;

    final ImportPanelController importPanel;
    final AttributeBrowserController attributeBrowser;
    final CompositeMapController compositeMapPanel;
    final DomainBrowserController domainBrowser;
    final SelectionTracker selectionTracker;

    CytoPanelComponent2 cytoPanelComponent;

    LongObjectMap<SafeSession> sessionsBySuid;
    SafeSession session;
    final Object sessionMutex = new Object();

    final Object panelMutex = new Object();
    boolean panelVisible;

    Component panel;

    ExpanderController step2Controller;
    ExpanderController step4Controller;

    public SafeController(CyServiceRegistrar registrar,
                          CySwingApplication application,
                          CyApplicationManager applicationManager,
                          ImportPanelController importPanel,
                          AttributeBrowserController attributeBrowser,
                          CompositeMapController compositeMapPanel,
                          DomainBrowserController domainBrowser,
                          EventService eventService,
                          SafeSessionSerializer serializer,
                          SelectionTracker selectionTracker) {

        this.registrar = registrar;
        this.application = application;
        this.applicationManager = applicationManager;

        this.importPanel = importPanel;
        this.attributeBrowser = attributeBrowser;
        this.compositeMapPanel = compositeMapPanel;
        this.domainBrowser = domainBrowser;
        this.eventService = eventService;
        this.serializer = serializer;
        this.selectionTracker = selectionTracker;

        sessionsBySuid = new LongObjectHashMap<>();
    }

    @Override
    public void handleEvent(SetCurrentNetworkViewEvent event) {
        CyNetworkView view = event.getNetworkView();
        setNetworkView(view);
    }

    @Override
    public void handleEvent(SessionLoadedEvent event) {
        CyNetworkView view = applicationManager.getCurrentNetworkView();
        try {
            loadSessionData(event.getLoadedSession());
            setNetworkView(view);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void handleEvent(SessionAboutToBeSavedEvent event) {
        Set<SafeSession> sessions = new HashSet<>();
        for (ObjectCursor<SafeSession> cursor : sessionsBySuid.values()) {
            sessions.add(cursor.value);
        }
        serializer.saveToSession(sessions.toArray(new SafeSession[sessions.size()]));
    }

    void loadSessionData(CySession cySession) throws IOException {
        sessionsBySuid = serializer.loadFromSession(cySession);
    }

    void setNetworkView(CyNetworkView view) {
        if (view == null) {
            setSession(null);
            return;
        }

        long suid = view.getSUID();
        synchronized (sessionMutex) {
            SafeSession session = sessionsBySuid.get(suid);
            if (session == null) {
                session = createNewSession(view);
                sessionsBySuid.put(suid, session);

                CyNetwork network = view.getModel();
                CyTable nodeTable = network.getDefaultNodeTable();
                sessionsBySuid.put(nodeTable.getSUID(), session);
            }
            setSession(session);
        }
    }

    SafeSession createNewSession(CyNetworkView view) {
        SafeSession session = new SafeSession();
        session.setNetworkView(view);
        session.setNameColumn(CyRootNetwork.SHARED_NAME);
        session.setIdColumn(CyRootNetwork.SHARED_NAME);
        session.setDistanceThreshold(0.5);
        session.setForceUndirectedEdges(true);
        session.setMinimumLandscapeSize(10);
        session.setSimilarityThreshold(0.75);
        session.setRestrictionMethod(new RadiusBasedRestrictionMethod(0, 0));
        session.setGroupingMethod(new ClusterBasedGroupingMethod(0, new JaccardDistanceMethod(d -> d != 0)));
        return session;
    }

    @Override
    public void handleEvent(NetworkViewAboutToBeDestroyedEvent event) {
        synchronized (sessionMutex) {
            CyNetworkView view = event.getNetworkView();
            CyNetwork network = view.getModel();
            CyTable nodeTable = network.getDefaultNodeTable();
            sessionsBySuid.remove(nodeTable.getSUID());

            long suid = view.getSUID();
            SafeSession session = sessionsBySuid.remove(suid);
            if (session != null && this.session == session) {
                setSession(null);
            }
        }
    }

    @Override
    public void handleEvent(ColumnCreatedEvent e) {
        checkTable(e.getSource());
    }

    @Override
    public void handleEvent(ColumnDeletedEvent e) {
        checkTable(e.getSource());
    }

    @Override
    public void handleEvent(ColumnNameChangedEvent e) {
        checkTable(e.getSource());
    }

    void checkTable(CyTable table) {
        if (session == null) {
            return;
        }

        SafeSession session = sessionsBySuid.get(table.getSUID());
        if (this.session == session) {
            updateColumns();
        }
    }

    void updateColumns() {
        updateColumnList();
    }

    private void setSession(SafeSession session) {
        synchronized (sessionMutex) {
            this.session = session;
            attributeBrowser.setSession(session);
            importPanel.setSession(session);
            compositeMapPanel.setSession(session);
            selectionTracker.setSession(session);
            updateColumnList();

            EnrichmentLandscape landscape = session != null ? session.getEnrichmentLandscape() : null;
            CompositeMap compositeMap = session != null ? session.getCompositeMap() : null;

            eventService.notifyListeners(landscape);
            eventService.notifyListeners(compositeMap);
        }
    }

    void updateColumnList() {
        synchronized (sessionMutex) {
            importPanel.updateColumnList();
        }
    }

    Component getPanel() {
        if (panel == null) {
            Component panel = createPanel();
            cytoPanelComponent = new SafeCytoPanelComponent(panel);
            setNetworkView(applicationManager.getCurrentNetworkView());
        }
        return panel;
    }

    Component createPanel() {
        JPanel panel = UiUtil.createJPanel();
        panel.setLayout(new MigLayout("fillx, hidemode 3"));

        Component step1Section = importPanel.getPanel();
        ExpanderController step1Controller = SafeUtil.addExpandingSection(panel, STEP_1_TITLE, step1Section, null,
                                                                          "grow, wrap");
        SafeUtil.addSeparator(panel);

        Component step2Section = attributeBrowser.getPanel();
        step2Controller = SafeUtil.addExpandingSection(panel, STEP_2_TITLE, step2Section, attributeBrowser,
                                                       "grow, hmin 100, wrap");
        SafeUtil.addSeparator(panel);

        Component step3Section = compositeMapPanel.getPanel();
        ExpanderController step3Controller = SafeUtil.addExpandingSection(panel, STEP_3_TITLE, step3Section, null,
                                                                          "grow, wrap");
        SafeUtil.addSeparator(panel);

        Component step4Section = domainBrowser.getPanel();
        step4Controller = SafeUtil.addExpandingSection(panel, STEP_4_TITLE, step4Section, domainBrowser,
                                                       "grow, hmin 100, hmax 300, wrap");

        JScrollPane container = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                                                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        if (UiUtil.isMacOSX()) {
            container.setOpaque(false);
            container.setBorder(BorderFactory.createEmptyBorder());
            JViewport viewport = container.getViewport();
            viewport.setOpaque(false);
        }

        SetEnrichmentLandscapeListener landscapeListener = landscape -> {
            if (landscape == null) {
                step1Controller.setExpanded(true);

                step2Controller.setExpanded(false);
                step2Controller.setEnabled(false);

                step3Controller.setExpanded(false);
                step3Controller.setEnabled(false);
            } else {
                step1Controller.setExpanded(false);

                step2Controller.setExpanded(true);
                step2Controller.setEnabled(true);

                AnnotationProvider annotationProvider = landscape.getAnnotationProvider();
                if (annotationProvider.getAttributeCount() < 2) {
                    step3Controller.setExpanded(false);
                    step3Controller.setEnabled(false);
                } else {
                    step3Controller.setExpanded(true);
                    step3Controller.setEnabled(true);
                }
            }
        };

        SetCompositeMapListener compositeMapListener = compositeMap -> {
            if (compositeMap == null) {
                step4Controller.setEnabled(false);
                step4Controller.setExpanded(false);
            } else if (compositeMap.getDomains(EnrichmentLandscape.TYPE_HIGHEST) == null
                    && compositeMap.getDomains(EnrichmentLandscape.TYPE_LOWEST) == null) {
                step4Controller.setEnabled(false);
                step4Controller.setExpanded(false);
            } else {
                step1Controller.setExpanded(false);
                step2Controller.setExpanded(false);
                step3Controller.setExpanded(false);

                step4Controller.setEnabled(true);
                step4Controller.setExpanded(true);
            }
        };

        landscapeListener.set(null);
        compositeMapListener.set(null);

        eventService.addEnrichmentLandscapeListener(landscapeListener);
        eventService.addCompositeMapListener(compositeMapListener);

        return container;
    }

    public void showPanel() {
        synchronized (panelMutex) {
            if (cytoPanelComponent == null) {
                getPanel();
                setNetworkView(applicationManager.getCurrentNetworkView());
            }

            if (!panelVisible) {
                registrar.registerService(cytoPanelComponent, CytoPanelComponent.class, new Properties());
                panelVisible = true;
            }

            CytoPanel panel = application.getCytoPanel(cytoPanelComponent.getCytoPanelName());
            int index = panel.indexOfComponent(cytoPanelComponent.getIdentifier());

            if (panel.getState() == CytoPanelState.HIDE) {
                panel.setState(CytoPanelState.DOCK);
            }

            if (index != -1) {
                panel.setSelectedIndex(index);
            }
        }
    }

    public void hidePanel() {
        synchronized (panelMutex) {
            if (!panelVisible) {
                return;
            }
            registrar.unregisterService(cytoPanelComponent, CytoPanelComponent.class);
            panelVisible = false;
        }
    }
}


text:
http_path = "/"
css_dir = "css"
sass_dir = "sass"
images_dir = "images"
javascripts_dir = "javascripts"
output_style = :compressed


text:
package com.wenyu.Data;

import com.wenyu.Utils.ConstantClassField;

public interface Urls {
public final static String Url_Search = ConstantClassField.SERVICE_URL+"service/globalSearch";
public final static String Url_Register = ConstantClassField.SERVICE_URL+"service/registers";
public final static String Url_Certify = ConstantClassField.SERVICE_URL+"service/addAuthentication";
public final static String Url_Checkcode = ConstantClassField.SERVICE_URL+"service/applyVerificationCode";
public final static String Url_Resetpwd = ConstantClassField.SERVICE_URL+"/service/resetPwd";
public final static String Url_Enshrine =ConstantClassField.SERVICE_URL+ "service/myEnshrine";
public final static String Url_addEnshrine =ConstantClassField.SERVICE_URL+ "service/addEnshrine";
public final static String Url_CancelEnshrine = ConstantClassField.SERVICE_URL+"service/removeEnshrine";
public final static String Url_Footmark = ConstantClassField.SERVICE_URL+"service/myFootmark";
public final static String Url_addFootmark = ConstantClassField.SERVICE_URL+"service/addFootmark";
public final static String Url_cancelFootmark = ConstantClassField.SERVICE_URL+"service/removeEnshrine";
public static final String ProductionActivityTitle = ConstantClassField.SERVICE_URL+"service/equipstop";
public static final String ProductionActivityContent = ConstantClassField.SERVICE_URL+"service/storelist";
public static final String ProductionActivityContentequip = ConstantClassField.SERVICE_URL+"service/equiplist";
public static final String LightNearbyActivity = ConstantClassField.SERVICE_URL+"service/store";
public static final String LightNearbyActivityEquip = ConstantClassField.SERVICE_URL+"service/equip";
public static final String Url_Logins = ConstantClassField.SERVICE_URL+"service/logins";
public static final String Url_Details = ConstantClassField.SERVICE_URL+"service/detail";
public static final String Url_PersonInfoUpdate = ConstantClassField.SERVICE_URL+"service/updateCustomerInfo";
public static final String Url_photos = ConstantClassField.SERVICE_URL+"service/photo";
public static final String Url_getIMID = ConstantClassField.SERVICE_URL+"service/getIMIDBySendToID";
public static final String Url_getIMCustomerInfo = ConstantClassField.SERVICE_URL+"service/getCustomerInfoByIMID";
public static final String SimilarAc = ConstantClassField.SERVICE_URL+"service/findsimilar";

}


text:
namespace Rawr
{
    partial class FormItemComparison
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.addSetButton = new System.Windows.Forms.Button();
            this.graphScrollBar = new System.Windows.Forms.VScrollBar();
            this.comparisonPanel = new System.Windows.Forms.Panel();
            this.comparisonGraph = new Rawr.ComparisonGraph();
            this.tabControl = new System.Windows.Forms.TabControl();
            this.comparisonPanel.SuspendLayout();
            this.SuspendLayout();
            //
            // addSetButton
            //
            this.addSetButton.AutoSize = true;
            this.addSetButton.Location = new System.Drawing.Point(143, 372);
            this.addSetButton.Name = "addSetButton";
            this.addSetButton.Size = new System.Drawing.Size(80, 23);
            this.addSetButton.TabIndex = 1;
            this.addSetButton.Text = "Add New Set";
            this.addSetButton.UseVisualStyleBackColor = true;
            this.addSetButton.Click += new System.EventHandler(this.addSetButton_Click);
            //
            // graphScrollBar
            //
            this.graphScrollBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.graphScrollBar.LargeChange = 41;
            this.graphScrollBar.Location = new System.Drawing.Point(433, 0);
            this.graphScrollBar.Maximum = 40;
            this.graphScrollBar.Name = "graphScrollBar";
            this.graphScrollBar.Size = new System.Drawing.Size(17, 483);
            this.graphScrollBar.SmallChange = 32;
            this.graphScrollBar.TabIndex = 1;
            this.graphScrollBar.Visible = false;
            //
            // comparisonPanel
            //
            this.comparisonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.comparisonPanel.BackColor = System.Drawing.Color.White;
            this.comparisonPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            this.comparisonPanel.Controls.Add(this.comparisonGraph);
            this.comparisonPanel.Controls.Add(this.graphScrollBar);
            this.comparisonPanel.Location = new System.Drawing.Point(229, 0);
            this.comparisonPanel.Name = "comparisonPanel";
            this.comparisonPanel.Size = new System.Drawing.Size(454, 487);
            this.comparisonPanel.TabIndex = 2;
            //
            // comparisonGraph
            //
            this.comparisonGraph.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.comparisonGraph.BackColor = System.Drawing.Color.White;
            this.comparisonGraph.Character = null;
            this.comparisonGraph.CustomRendered = false;
            this.comparisonGraph.CustomRenderedChartName = null;
            this.comparisonGraph.DisplayMode = Rawr.ComparisonGraph.GraphDisplayMode.Subpoints;
            this.comparisonGraph.Font = new System.Drawing.Font("Verdana", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.comparisonGraph.ItemCalculations = new Rawr.ComparisonCalculationBase[0];
            this.comparisonGraph.Location = new System.Drawing.Point(0, 0);
            this.comparisonGraph.Margin = new System.Windows.Forms.Padding(4);
            this.comparisonGraph.Name = "comparisonGraph";
            this.comparisonGraph.RoundValues = true;
            this.comparisonGraph.ScrollBar = this.graphScrollBar;
            this.comparisonGraph.Size = new System.Drawing.Size(432, 480);
            this.comparisonGraph.SlotMap = null;
            this.comparisonGraph.Sort = Rawr.ComparisonGraph.ComparisonSort.Overall;
            this.comparisonGraph.TabIndex = 0;
            //
            // tabControl
            //
            this.tabControl.Location = new System.Drawing.Point(3, 3);
            this.tabControl.Name = "tabControl";
            this.tabControl.SelectedIndex = 0;
            this.tabControl.Size = new System.Drawing.Size(220, 363);
            this.tabControl.TabIndex = 0;
            //
            // FormItemComparison
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(683, 487);
            this.Controls.Add(this.addSetButton);
            this.Controls.Add(this.tabControl);
            this.Controls.Add(this.comparisonPanel);
            this.MinimumSize = new System.Drawing.Size(626, 441);
            this.Name = "FormItemComparison";
            this.ShowIcon = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
            this.Text = "Item Set Comparison";
            this.comparisonPanel.ResumeLayout(false);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button addSetButton;
        private ComparisonGraph comparisonGraph;
        private System.Windows.Forms.VScrollBar graphScrollBar;
        private System.Windows.Forms.Panel comparisonPanel;
        private System.Windows.Forms.TabControl tabControl;
    }
}


text:
#include "config.h"
#include "platform/text/StringTruncator.h"

#include "platform/fonts/Font.h"
#include "platform/text/TextBreakIterator.h"
#include "platform/text/TextRun.h"
#include "wtf/Assertions.h"
#include "wtf/unicode/CharacterNames.h"

namespace blink {

#define STRING_BUFFER_SIZE 2048

typedef unsigned TruncationFunction(const String&, unsigned length, unsigned keepCount, UChar* buffer);

static inline int textBreakAtOrPreceding(const NonSharedCharacterBreakIterator& it, int offset)
{
    if (it.isBreak(offset))
        return offset;

    int result = it.preceding(offset);
    return result == TextBreakDone ? 0 : result;
}

static inline int boundedTextBreakFollowing(const NonSharedCharacterBreakIterator& it, int offset, int length)
{
    int result = it.following(offset);
    return result == TextBreakDone ? length : result;
}

static unsigned centerTruncateToBuffer(const String& string, unsigned length, unsigned keepCount, UChar* buffer)
{
    ASSERT(keepCount < length);
    ASSERT(keepCount < STRING_BUFFER_SIZE);

    unsigned omitStart = (keepCount + 1) / 2;
    NonSharedCharacterBreakIterator it(string);
    unsigned omitEnd = boundedTextBreakFollowing(it, omitStart + (length - keepCount) - 1, length);
    omitStart = textBreakAtOrPreceding(it, omitStart);

    unsigned truncatedLength = omitStart + 1 + (length - omitEnd);
    ASSERT(truncatedLength <= length);

    string.copyTo(buffer, 0, omitStart);
    buffer[omitStart] = horizontalEllipsisCharacter;
    string.copyTo(&buffer[omitStart + 1], omitEnd, length - omitEnd);

    return truncatedLength;
}

static unsigned rightTruncateToBuffer(const String& string, unsigned length, unsigned keepCount, UChar* buffer)
{
    ASSERT(keepCount < length);
    ASSERT(keepCount < STRING_BUFFER_SIZE);

    NonSharedCharacterBreakIterator it(string);
    unsigned keepLength = textBreakAtOrPreceding(it, keepCount);
    unsigned truncatedLength = keepLength + 1;

    string.copyTo(buffer, 0, keepLength);
    buffer[keepLength] = horizontalEllipsisCharacter;

    return truncatedLength;
}

static float stringWidth(const Font& renderer, const String& string)
{
    TextRun run(string);
    return renderer.width(run);
}

static float stringWidth(const Font& renderer, const UChar* characters, unsigned length)
{
    TextRun run(characters, length);
    return renderer.width(run);
}

static String truncateString(const String& string, float maxWidth, const Font& font, TruncationFunction truncateToBuffer)
{
    if (string.isEmpty())
        return string;

    ASSERT(maxWidth >= 0);

    float currentEllipsisWidth = stringWidth(font, &horizontalEllipsisCharacter, 1);

    UChar stringBuffer[STRING_BUFFER_SIZE];
    unsigned truncatedLength;
    unsigned keepCount;
    unsigned length = string.length();

    if (length > STRING_BUFFER_SIZE) {
        keepCount = STRING_BUFFER_SIZE - 1; // need 1 character for the ellipsis
        truncatedLength = centerTruncateToBuffer(string, length, keepCount, stringBuffer);
    } else {
        keepCount = length;
        string.copyTo(stringBuffer, 0, length);
        truncatedLength = length;
    }

    float width = stringWidth(font, stringBuffer, truncatedLength);
    if (width <= maxWidth)
        return string;

    unsigned keepCountForLargestKnownToFit = 0;
    float widthForLargestKnownToFit = currentEllipsisWidth;

    unsigned keepCountForSmallestKnownToNotFit = keepCount;
    float widthForSmallestKnownToNotFit = width;

    if (currentEllipsisWidth >= maxWidth) {
        keepCountForLargestKnownToFit = 1;
        keepCountForSmallestKnownToNotFit = 2;
    }

    while (keepCountForLargestKnownToFit + 1 < keepCountForSmallestKnownToNotFit) {
        ASSERT(widthForLargestKnownToFit <= maxWidth);
        ASSERT(widthForSmallestKnownToNotFit > maxWidth);

        float ratio = (keepCountForSmallestKnownToNotFit - keepCountForLargestKnownToFit)
            / (widthForSmallestKnownToNotFit - widthForLargestKnownToFit);
        keepCount = static_cast<unsigned>(maxWidth * ratio);

        if (keepCount <= keepCountForLargestKnownToFit) {
            keepCount = keepCountForLargestKnownToFit + 1;
        } else if (keepCount >= keepCountForSmallestKnownToNotFit) {
            keepCount = keepCountForSmallestKnownToNotFit - 1;
        }

        ASSERT(keepCount < length);
        ASSERT(keepCount > 0);
        ASSERT(keepCount < keepCountForSmallestKnownToNotFit);
        ASSERT(keepCount > keepCountForLargestKnownToFit);

        truncatedLength = truncateToBuffer(string, length, keepCount, stringBuffer);

        width = stringWidth(font, stringBuffer, truncatedLength);
        if (width <= maxWidth) {
            keepCountForLargestKnownToFit = keepCount;
            widthForLargestKnownToFit = width;
        } else {
            keepCountForSmallestKnownToNotFit = keepCount;
            widthForSmallestKnownToNotFit = width;
        }
    }

    if (!keepCountForLargestKnownToFit)
        keepCountForLargestKnownToFit = 1;

    if (keepCount != keepCountForLargestKnownToFit) {
        keepCount = keepCountForLargestKnownToFit;
        truncatedLength = truncateToBuffer(string, length, keepCount, stringBuffer);
    }

    return String(stringBuffer, truncatedLength);
}

String StringTruncator::centerTruncate(const String& string, float maxWidth, const Font& font)
{
    return truncateString(string, maxWidth, font, centerTruncateToBuffer);
}

String StringTruncator::rightTruncate(const String& string, float maxWidth, const Font& font)
{
    return truncateString(string, maxWidth, font, rightTruncateToBuffer);
}

float StringTruncator::width(const String& string, const Font& font)
{
    return stringWidth(font, string);
}

} // namespace blink


text:
A-Star Path Finding
====================

A simple iPad app to demonstrate path finding with A-star algorithm.

Launch the app and tap on any two grids to find the shortest path between them.

![Imgur](http://i.imgur.com/e9uyBoG.png)


text:
"""
[path]
cd /Users/brunoflaven/Documents/01_work/blog_articles/stop_starting_start_stopping/pandas_convert_json/

[file]
python 004_pandas_convert_json_wp.py

[source]
- 001. https://github.com/BindiChen/machine-learning/blob/master/data-analysis/027-pandas-convert-json/pandas-convert-json.ipynb

# great stuff
https://medium.com/swlh/converting-nested-json-structures-to-pandas-dataframes-e8106c59976e

https://www.datacourses.com/an-api-based-etl-pipeline-with-python-part-2-397/

https://www.datacourses.com/transform-json-into-a-dataframe-416/

https://www.geeksforgeeks.org/pandas-parsing-json-dataset/

https://www.geeksforgeeks.org/read-json-file-using-python/

https://towardsdatascience.com/how-to-parse-json-data-with-python-pandas-f84fbd0b1025

https://pandas.pydata.org/pandas-docs/version/1.2.0/reference/api/pandas.json_normalize.html

https://kanoki.org/2019/12/12/how-to-work-with-json-in-pandas/

"""
import json
import pandas as pd
from pandas.io.json import json_normalize

# df = pd.read_json('data/raw_nyc_phil_3.json')
with open('data/raw_nyc_phil_3.json') as f:
    d = json.load(f)

# OUTPUT_1
# lets put the data into a pandas df
# clicking on raw_nyc_phil.json under "Input Files"
# tells us parent node is 'programs'
# nycphil = json_normalize(d['programs'])
# result = nycphil.head(3)
# print(result)

# OUTPUT_2
# works_data = json_normalize(data= d['programs'],
#                             record_path='works',
#                             meta=['id', 'orchestra', 'programID', 'season'])

# result = works_data.head(3)
# print(result)

# OUTPUT_3
soloist_data = json_normalize(data=d['programs'],
                              record_path=['works', 'soloists'],
                              meta=['id'])

result = soloist_data.head(3)
print(result)