Cross-platform, compiler-independent build system generator
POPULARITY
Join Scott as he continues working on CircuitPython's Zephyr port. Hopefully he'll have WiFi working. He'll also answer any questions folks have. Visit the Adafruit shop online - http://www.adafruit.com 0:00 Getting Started 1:19 hello everyone - 1:50 circuit python (CP) / python on microcontrollers 2:39 building CP on top of zephyr 3:18 circu.it for discord chat 3:47 CircuitPython2025 wrapup https://blog.adafruit.com/2025/01/15/thank-you-for-circuitpython2025/ 8:46 Daisy Seed development board https://electro-smith.com/products/daisy-seed 9:37 NRF development board 5340 ( not supported yet), 7002 wifi processor 12:20 USB working ( tinyusb ) 13:55 serial / unique id working 14:50 some elements of dir(board) come from device tree 16:40 time.sleep(1) 17:00 gc.mem_free(), interacts with zephyr heap 18:50 zephyr samples ( looking for wifi scanning ) 23:00 zephyrproject.or doxygen Wi_Fi net manager 29:52 esp driver sources 35:20 cisco mouse? 46:33 looking for starting command for managment scan NET_REQUEST_WIFI_SCAN 51:00 checking out the Nordic 5 clause license ( only use with nordic chips ) 1:04:30 sysbuild explanation https://docs.zephyrproject.org/latest/build/sysbuild/index.html 1:18:44 think about global network manager instance 1:19:13 cptools in cpbuild.py ( much smaller than CMake :-) ) 1:30:00 sysbuild / Nordic and binary blobs 1:32:30 need to use west command to pull down blob 1:34:18 scanning workflow - get it compiling the load it into circuit python 1:37:30 menu config / decisions about mbed tls 1:45:35 with Zephyr - we support more stuff, and it works the same or better 1:46:33 dig into menuconfig 1:51:00 update/debug configuration CMake extensions.cmake 1:53:20 edit build.ninja / CMakelist.txt external project 1:57:00 wrapping up - planning to be here next week ----------------------------------------- LIVE CHAT IS HERE! http://adafru.it/discord Subscribe to Adafruit on YouTube: http://adafru.it/subscribe New tutorials on the Adafruit Learning System: http://learn.adafruit.com/ -----------------------------------------
Tim Flink, a Senior Quality Engineer from Red Hat joins us to talk about AI on Fedora. This week Noah and Steve talk about their struggles with the Linux Desktop. -- During The Show -- 02:30 Helping a Non-techy friend - Sleuth The plan Locked down second hand Android device Ting Flex plan Tracar (https://www.traccar.org/) JMP.Chat Sim Plan Mint Mobile Steer people away from sms/calls Matrix Telegram etc 08:47 News Wire Calibre 7.21 - calibre-ebook.com (https://download.calibre-ebook.com/7.21.0/) Cmake 3.31 - cmake.org (https://cmake.org/cmake/help/latest/release/3.31.html) Curl 8.11 - curl.se (https://curl.se/ch/) Scraperr 1.0 - github.com (https://github.com/jaypyles/Scraperr) LXQT 2.1 - lxqt-project.org (https://lxqt-project.org/release/2024/11/05/release-lxqt-2-1-0/) Ubuntu Touch OTA-6 - ubports.com (https://ubports.com/en/blog/ubports-news-1/post/ubuntu-touch-ota-6-focal-release-3942) Debian 12.8 - debian.org (https://www.debian.org/News/2024/20241109) Torvalds 2.6% Performance Patch - theregister.com (https://www.theregister.com/2024/11/06/torvalds_patch_linux_performance/) 3800% Performance Improvement - phoronix.com (https://www.phoronix.com/news/Intel-Linux-3888.9-Performance) CRON#TRAP Malware - thehackernews.com (https://thehackernews.com/2024/11/new-crontrap-malware-infects-windows-by.html) AMD OLMo LLM - computerworld.com (https://www.computerworld.com/article/3600762/amd-rolls-out-open-source-olmo-llm-to-compete-with-ai-giants.html) 09:58 Tim Flink - Senior Quality Engineer - Red Hat Where should you start with AI? PyTorch (https://pytorch.org/) Orders of magnitude faster on a GPU VRAM is the biggest factor How is Fedora using AI? OpenQA (https://fedoraproject.org/wiki/OpenQA) RocM and PyTorch Efforts around packaging Why are you focusing on RocM? Where is a good place to help out? AI/ML SIG (https://fedoraproject.org/wiki/SIGs/AI-ML) Containers coming What does open source mean to you? 22:28 Kubuntu and Docker Broken - Michael Fisher Docker Compose Pastebin (https://pastebin.com/EHa4sHGQ) Docker Logs Pastebin (https://pastebin.com/UWE7Ss1a) Docker internal DNS having issues 24:36 What's the deal with Linux Desktop Environments? Steve's workflow Static vs Dynamic approach How close can I get to immutable with flatpaks Software KVM Synergy (proprietary) Barrior (abandoned) Input Leap (https://github.com/input-leap/input-leap) 3 Monitors, 2 horizontal and 1 vertical KDE hates Steve NVIDIA drivers Why is it so hard to put software in hardware? Ubuntu won't say its up to date because of Ubuntu Pro Can't install LibreOffice on Ubuntu because of Snap All operating systems have issues 45:20 MacOS vs EndlessOS vs Windows 10 Mac Book No working battery Disposable 3+ Hours just to install the OS ThinkPad with EndlessOS Flatpak for Office 365 Windows Can't upgrade to windows 11 Windows 11 requires online account Windows 11 requires TPM chip 2 People both chose the EndlessOS Endless OS No forced updates All the icons right there Open source Allows you to fix things Unix philosophy The answers are there -- The Extra Credit Section -- For links to the articles and material referenced in this week's episode check out this week's page from our podcast dashboard! This Episode's Podcast Dashboard (http://podcast.asknoahshow.com/415) Phone Systems for Ask Noah provided by Voxtelesys (http://www.voxtelesys.com/asknoah) Join us in our dedicated chatroom #GeekLab:linuxdelta.com on Matrix (https://element.linuxdelta.com/#/room/#geeklab:linuxdelta.com) -- Stay In Touch -- Find all the resources for this show on the Ask Noah Dashboard Ask Noah Dashboard (http://www.asknoahshow.com) Need more help than a radio show can offer? Altispeed provides commercial IT services and they're excited to offer you a great deal for listening to the Ask Noah Show. Call today and ask about the discount for listeners of the Ask Noah Show! Altispeed Technologies (http://www.altispeed.com/) Contact Noah live [at] asknoahshow.com -- Twitter -- Noah - Kernellinux (https://twitter.com/kernellinux) Ask Noah Show (https://twitter.com/asknoahshow) Altispeed Technologies (https://twitter.com/altispeed) YouTube Show Notes & Podcast Download available at http://podcast.asknoahshow.com Support us on Patreon ------------- https://www.patreon.com/linuxdelta --- Connect with us! --- On Twitter ------------------------ https://twitter.com/asknoahshow On Facebook ----------------------- https://www.facebook.com/asknoahshow Email The Show -------------------- live@asknoahshow.com • Ask Noah Show © CC-BY-ND 2021 •
The Dangers of Magic in Software AbstractionsIn this episode of the Agile Embedded Podcast, hosts Jeff Gable and Luca Ingianni discuss the pitfalls of relying on 'magic' in software development, particularly in tooling, build systems, and frameworks. They illuminate how seemingly helpful abstractions can become burdensome when they obscure necessary complexities or become hard to debug. Through various examples, including comparisons of Arduino and CMake, they explore what makes a good abstraction versus a bad one. The conversation also delves into the importance of composability, testability, and the real-world impact of overly simplistic or 'magical' solutions in long-term projects. The episode wraps up with practical advice for selecting and designing more effective coding abstractions to mitigate risks.00:00 Introduction and Episode Theme00:19 The Problem with Magic in Programming02:54 Examples of Good and Bad Abstractions04:45 Frameworks and Tools: Arduino vs. CMake08:10 Vendor-Supplied Tools and Their Pitfalls13:05 Characteristics of Good Abstractions29:04 Testing and Abstractions37:10 Final Thoughts and Contact Information You can find Jeff at https://jeffgable.com.You can find Luca at https://luca.engineer.Want to join the agile Embedded Slack? Click here
Mark “Murch” Erhardt and Mike Schmidt are joined by Bastien Teinturier and Hennadii Stepanov to discuss Newsletter #316. News New time warp vulnerability in testnet4 (1:05) Onion message DoS risk discussion (14:20) Optional identification and authentication of LN payers (28:04) Bitcoin Core switch to CMake build system (36:15) Releases and release candidates BDK 1.0.0-beta.1 (53:55) Core Lightning 24.08rc2 (54:10) LND v0.18.3-beta.rc1 (54:29) Notable code and documentation changes Bitcoin Core #29519 (55:01) Bitcoin Core #30598 (59:29) Bitcoin Core #28280 (1:02:18) Bitcoin Core #28052 (1:04:47) Core Lightning #7528 (1:08:01) Core Lightning #7533 (1:10:11) Core Lightning #7517 (1:11:19) LND #8955 (1:13:08) LND #8886 (1:14:39) LND #8967 (1:19:45) LDK #3215 (1:22:13) BLIPs #27 (1:26:27)
This week Mauro Gaspari and Lukas Märdian join us to give us a deep dive into using Netplan on an Ubuntu vHost. We give you a self hosted way to track your car's maintenance, and a suite of tools to use if you work in production or in live performances! -- During The Show -- 00:40 Cosmic Desktop Started with Elementary OS External displays Cosmic is a complete remake Cosmic splits the difference i3 shortcuts Releasing this fall 07:30 3CX vs Asterisk - jisbetterthanj 3CX 20 stamps out all open source clients Have you opened Asterisk to the internet? Write in about your open source VOIP experiences 10:18 Steve VPN Split VPN issues Guide followed (https://www.youtube.com/watch?v=ulRgecz0UsQ) 12:00 Vehicle Regulations Legislation requiring things Manufactures making it harder to work on vehicles Advanced drunk and impaired driving prevention technology Automatic Shutoff Technology (HR 3684 Section 24205) LubeLogger (https://lubelogger.com/) LubeLogger YouTube Video (https://www.youtube.com/watch?v=Thqo_mm7iUQ) 19:51 News Wire New Gnome Font - OMG Linux (https://www.omglinux.com/gnome-may-switch-to-inter-font/) Firefox 128 - Mozilla (https://www.mozilla.org/en-US/firefox/128.0/releasenotes/) Finnix 126 - Finnix (https://blog.finnix.org/2024/07/04/finnix-126-released/) Cmake 3.30 - Cmake.org (https://cmake.org/cmake/help/latest/release/3.30.html) GnuCash 5.8 - GnuCash (https://www.gnucash.org/news.phtml) OpenSSH Vulnerability - Marc.info (https://marc.info/?l=oss-security&m=172045570013195&w=2) Eldorado Ransomware - Tha Hacker News (https://thehackernews.com/2024/07/new-ransomware-as-service-eldorado.html) Gogs Flaws - The Hacker News (https://thehackernews.com/2024/07/critical-vulnerabilities-disclosed-in.html) Hot Plugging RAM - Toms Hardware (https://www.tomshardware.com/pc-components/cpus/risc-v-chips-will-support-replacing-ram-sticks-without-powering-off-the-system-hot-plugging-functionality-arriving-in-newer-flavors-of-linux) Monocle - Help Net Security (https://www.helpnetsecurity.com/2024/07/08/monocle-open-source-llm-binary-analysis-search/) Multi-Token Prediction Models - Silicon Angle (https://siliconangle.com/2024/07/04/meta-open-sources-new-multi-token-prediction-language-models/) RTX Remix Rest API - Toms Hardware (https://www.tomshardware.com/pc-components/gpus/nvidia-rtx-remix-goes-open-source) 21:35 NetPlan Mauro Gaspari Lukas Märdian - NetPlan Maintainer Bridging libvirt with NetPlan Special thanks to Lukas Märdian Danilo Egea Gondolfo Robert Krátký 3 Scenerios Single host, single NIC with bridge (https://netplan.readthedocs.io/en/latest/single-nic-vm-host/) Single host, single NIC, with VLANs and bridges (https://netplan.readthedocs.io/en/latest/single-nic-vm-host-with-vlans/) Single host, multiple NICs, with bonding, VLANs, and bridges (https://netplan.readthedocs.io/en/latest/multi-nic-vm-host-with-bonds-and-vlans/) NetPlan Why it exists What it is Where and how is it used Canonical Open Documentation Academy (https://discourse.ubuntu.com/t/about-the-open-documentation-academy/39615) You can contribute with out knowing code or command line 40:00 Stage Hacks Stage Hacks.com (https://www.stagehacks.com/) VDO Ninja (https://vdo.ninja/) Tally Arbiter (http://tallyarbiter.com/) OnTime (https://www.getontime.no/) StageTimer.io (https://stagetimer.io/) Dicaffine (https://dicaffeine.com/) NDI streamer for Linux HX and restreaming via RTMP Donations welcome DeckRack mounting hardware for Stream Decks Docs site Exploring the network Sound reference Cabling and more Production has unique technology challenges -- The Extra Credit Section -- For links to the articles and material referenced in this week's episode check out this week's page from our podcast dashboard! This Episode's Podcast Dashboard (http://podcast.asknoahshow.com/398) Phone Systems for Ask Noah provided by Voxtelesys (http://www.voxtelesys.com/asknoah) Join us in our dedicated chatroom #GeekLab:linuxdelta.com on Matrix (https://element.linuxdelta.com/#/room/#geeklab:linuxdelta.com) -- Stay In Touch -- Find all the resources for this show on the Ask Noah Dashboard Ask Noah Dashboard (http://www.asknoahshow.com) Need more help than a radio show can offer? Altispeed provides commercial IT services and they're excited to offer you a great deal for listening to the Ask Noah Show. Call today and ask about the discount for listeners of the Ask Noah Show! Altispeed Technologies (http://www.altispeed.com/) Contact Noah live [at] asknoahshow.com -- Twitter -- Noah - Kernellinux (https://twitter.com/kernellinux) Ask Noah Show (https://twitter.com/asknoahshow) Altispeed Technologies (https://twitter.com/altispeed) Special Guests: Lukas Märdian and Mauro Gaspari.
What's the best way to roll central authentication? What's the best Google replacement suite? This week Noah and Steve dig into hosting questions, as always your calls go to the front of the line! -- During The Show -- 01:36 PHP, Kanban etc - Joe Nextcloud Deck Our Note Organizer (https://github.com/JoeMrCoffee/OurNoteOrganizer) 03:40 NIX Feedback - Alexander People time rank/prioritize "What problem does it solve" is a framework Effective evangelizing Making something "sticky" No bad questions 13:22 Caller Tony from Toronto Central Authentication? FreeIPA (https://www.freeipa.org/page/Main_Page) Samaba4 Distros Zentyal (https://zentyal.com/) 20:48 Grimnir from Mumble Volumio (https://volumio.com/) Locking it down SSH Samaba Home Assistant (https://www.home-assistant.io/) Adding music Separate Volumio from the PI 25:00 Nextcloud? - Craig Nextcloud (https://nextcloud.com/) is challenging on iOS Head Scale (https://headscale.net/) SpiderOak Immich (https://immich.app/) SeaFile (https://www.seafile.com/en/home/) Encrypt locally, then upload to "cloud" Fastmail (https://www.fastmail.com/) 36:20 Vivaldi & Hosting questions - Ben Hugo (https://gohugo.io/) Altispeed Hosting Vivaldi 41:25 Database Questions - Anton Argument against DIY OpenEMR (https://www.open-emr.org/) Open Source No lock in Form editor CPT/ICD10 codes WikiJS (https://js.wiki/) Weasis (https://weasis.org/en/getting-started/download-dicom-viewer/) 47:26 News Wire OSI Election Results - opensource.org (https://opensource.org/blog/results-of-2024-elections-of-osi-board-of-directors) Red Hat Nova - lore.kernel.org (https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/) Linux 6.9 RC - lkml.iu.edu (https://lkml.iu.edu/hypermail/linux/kernel/2403.3/00300.html) Regata OS 24 - betanews.com (https://betanews.com/2024/03/19/regata-os-24-arctic-fox-linux/) Wine 9.5 - gitlab.winehq.org (https://gitlab.winehq.org/wine/wine/-/releases/wine-9.5) Kafka UI 1.0 - GitHub (https://github.com/kafbat/kafka-ui) Firefox 124 - Mozilla (https://www.mozilla.org/en-US/firefox/124.0/releasenotes/) Gnome 45.5 - Gnome (https://discourse.gnome.org/t/gnome-45-5-released/20043) Gnome 46 - Gnome (https://release.gnome.org/46/) Emacs 29.3 - Gnu.org (https://lists.gnu.org/archive/html/emacs-devel/2024-03/msg00611.html) Cmake 3.29 - Cmake.org (https://cmake.org/cmake/help/latest/release/3.29.html) OpenVPN - OpenVPN (https://openvpn.net/community-downloads/) SysVInit 3.09 - Phoronix (https://www.phoronix.com/news/SysVinit-3.09) Docker 26 - Docker (https://docs.docker.com/engine/release-notes/26.0/) Lemur Pro - System76 (https://blog.system76.com/post/lemur-pro-ultraportable-laptops) Devika - Market Tech Post (https://www.marktechpost.com/2024/03/25/meet-devika-an-open-source-ai-software-engineer-that-aims-to-be-a-competitive-alternative-to-devin-by-cognition-ai/) GitHub (https://github.com/stitionai/devika) Ubuntu LTS 12 Year Support - How To Geek (https://www.howtogeek.com/ubuntu-linux-legacy-support-program/) 49:05 Shufflecake Shufflecake (https://shufflecake.net/) Linux encryption tool Makes hidden volumes Spiritual successor to TrueCrypt and VeriCrypt GPG encryption -- The Extra Credit Section -- For links to the articles and material referenced in this week's episode check out this week's page from our podcast dashboard! This Episode's Podcast Dashboard (http://podcast.asknoahshow.com/382) Phone Systems for Ask Noah provided by Voxtelesys (http://www.voxtelesys.com/asknoah) Join us in our dedicated chatroom #GeekLab:linuxdelta.com on Matrix (https://element.linuxdelta.com/#/room/#geeklab:linuxdelta.com) -- Stay In Touch -- Find all the resources for this show on the Ask Noah Dashboard Ask Noah Dashboard (http://www.asknoahshow.com) Need more help than a radio show can offer? Altispeed provides commercial IT services and they're excited to offer you a great deal for listening to the Ask Noah Show. Call today and ask about the discount for listeners of the Ask Noah Show! Altispeed Technologies (http://www.altispeed.com/) Contact Noah live [at] asknoahshow.com -- Twitter -- Noah - Kernellinux (https://twitter.com/kernellinux) Ask Noah Show (https://twitter.com/asknoahshow) Altispeed Technologies (https://twitter.com/altispeed)
Jay Conrod is currently a Software Engineer at EngFlow. EngFlow is a startup providing remote build and execution for Bazel, Cmake, Reclient and more, dramatically speeding up builds and tests for large software projects. Jay was previously part of the Go Team at Google and has had a large impact in the Software Industry. In this episode, Jay takes us on a journey through his time in the tech industry while sharing valuable insight and entertaining stories along the way.00:00 Introduction00:56 What is Jay Doing Today? 07:25 First Memories of a Computer18:30 Mentality and Ability27:20 Direction after High School 37:30 Internships During University43:00 Diversity in Programming55:30 Getting Hired at Google1:03:10 Joining the Go Team1:10:00 Go - Tech Talk 1:20:00 Moving to EngFlow1:38:00 What Would You Remove From Go?1:45:30 Contact InfoConnect with Jay: Twitter: https://twitter.com/JayConrodLinkedIn: https://www.linkedin.com/in/jayconrod/Jay's Website: https://jayconrod.comMentioned in today's episode:EngFlow: https://www.engflow.com/Zig: https://ziglang.org/The Art of Learning: https://www.amazon.com/Art-Learning-Journey-Optimal-Performance-ebook/dp/B000QCQ970Want more from Ardan Labs? You can learn Go, Kubernetes, Docker & more through our video training, live events, or through our blog!Online Courses : https://ardanlabs.com/education/ Live Events : https://www.ardanlabs.com/live-training-events/ Blog : https://www.ardanlabs.com/blog Github : https://github.com/ardanlabs
With Gianluca Delfino, Frances Buontempo, Vladimír Arnošt, Andrew Fodiman, Paul Etheridge and other colleagues.Notes: https://cppclub.uk/meetings/2023/162/Video: https://youtu.be/ok-g9NAyrcg
Ben and Ceora talk through some thorny issues around AI-generated music and art, explain why creators are suing AI companies for copyright infringement, and compare notes on the most amusing/alarming AI-generated content making the rounds (Pope coat, anyone?).Episode notes:Getty Images is suing the company behind AI art generator Stable Diffusion for copyright infringement, accusing the company of copying 12 million images without permission or compensation to train its AI model.Meanwhile, a group of artists is suing the companies behind Midjourney, DreamUp, and Stable Diffusion for “scraping and collaging” their work to train AI models. One of those artists, Sarah Anderson, wrote an op-ed in The New York Times about seeing her comics gobbled up by AI models and regurgitated as far-right memes.Speaking of copyright violations, did Vanilla Ice really steal that hook from David Bowie and Freddie Mercury? (Yes.)Check out the AI model trained on Kanye's voice that sounds almost indistinguishable from Ye himself.Read The Verge's deep dive into the intersection of AI-generated music and IP/copyright laws.Watch the AI-generated video of Will Smith eating spaghetti that's been called “the natural end point for AI development.”ICYMI: The Pope coat was real in our hearts.Columbia University's Data Science Institute recently wrote about how blockchain can give creators more control over their IP, now that AI-generated art is clearly here to stay.Congrats to today's Lifeboat badge winner, herohuyongtao, for answering How can I add a prebuilt static library in a project using CMake?.
Richard Smith joins Timur and Phil. After the usual news round-up, we chat with Richard about the new C++ successor language, Carbon. Richard is one of the three lead contributors to Carbon and he discusses the philosophy and some of the special features that make Carbon different. Show Notes News Conan 2.0 release CMake debugger in Visual Studio Unreal Engine - C++ Complete Guide The Italian C++ Conference Links P1881R0 - Epochs proposal P2137R0 - “Goals and priorities for C++” (from March 2020) Carbon GitHub org - with lots of links
5 Talents Podcast - Commercial Real Estate, REI, Financial Freedom
Monika Jazyk, is a wife and proud mother of four wonderful, yet expensive, children. After the completion of her Masters in Teaching and the birth of her eldest son, Monika chose to stay home with her growing family, sacrificing her income of a full-time wage. To create monthly income to be able to fund immediate and future expenses for her children, Monika and her husband Vaughan chose Real Estate as an investment vehicle to build passive income and long-term wealth. They have created a successful Real Estate Portfolio consisting of Buy Rent Hold properties allowing Monika to stay home to raise her 4 children while assuring all of their immediate and future needs are met.Monika is also co-owner of Real Property Investments, a Real Estate Investment Corporation that helps Real People build Real wealth through Real Estate![00:01 - 06:49] Opening SegmentIntroducing Monika to the show!She shares her knowledge through books, courses, and real estate investmentsSavers are losers because money does not have the same value as it used to[06:50 - 16:19] Planning For Contingencies And Stress TestingJob security is not the same as it used to be, so passive income is importantStress test mortgage rates and have a plan A, B, and CMake money when you buy the propertyCommon sense is key – ask yourself if you would live thereHave enough reserves and contingencies in placeRecession-proof your business and investments[16:20 - 29:42] Avoiding Million-Dollar Mistakes And Finding SuccessInvestors need to be able to make money in any marketShe wrote a book with her husband, “Real Estate Mistakes”Providing solutions to help people avoid making the same mistakesHer mission is to help fill the wealth gap in developed nations by helping middle-working-class people improve their financial literacy[29:43 - 34:37] Closing SegmentMonika advises listeners to See the links below to connect with Monika!Quotes:“It's a whole new world once you start, but it's impossible not to make mistakes.” - Monika Jazyk“In real estate investing, there are all these courses, there's all this information, but until you do the application. That's when the learning really starts.” - Monika JazykConnect Monika through Website & Facebook!Connect with me:www.5talents.capitalLinkedInInstagramWatch 5T CRE on YouTubeLeave us a review and receive your free ebookEmail us --> abel@5tcre.com5 TALENTS CAPITAL | ABEL PACHECOIf you are ready to start your investment journey with 5 Talents Capital, here are the next steps you should take:View our informational video and case study at https://5talents.capital/grow-your-wealth/After viewing the video follow the prompts which will lead you to a scheduling link to meet one on one with Abel Pacheco. Register for our investor portal here investor portal once registered you will be able to review some of our past deals and you will receive alerts for upcoming investment opportunities.Support the show
Mike Daum joins Phil and Timur. After some community news, including the state of modules support in CMake and a new compile-time parsing library inspired by Rust's macros, we talk to Mike about CppNorth - what it is, how it got started and what makes it different - then about company cultures, a new language from Epic, and the importance of catering to "Dark Matter Developers". Show Notes News ACCU Schedule and registration CMake blog post about the state of C++20 Modules support P1689R5 "Format for describing dependencies of source files" "Macro Rules" - compile-time parser library from Max Pasichnyk Reddit discussion of Macro Rules Links CppNorth CppNorth mentoring email CppNorth mentoring channel on Discord "The Analogy of the Beekeeper" - please let us know if you find a link for this! Verse, the new Unreal scripting language Talk on Verse, by Simon Peyton Jones "C++ Software Design" (book) - Klaus Iglberger
Rob and Jason are back, at least for the holidays, and are joined by Timur Doumler and Phil Nash to talk about some of their recent news, and a super secret new project they are working on together. News Boost 1.81.0 released CLion 2022.3 released, with CMake debug and new (opt-in) UI C++ support in JetBrains' Fleet C++ passes Java on the TIOBE index Safety in C++: "If we must, let's talk about safety" (Corentin Jabot) P2723R0 "Zero-initialize objects of automatic storage duration" (JF Bastien) Conferences: NDC TechTown - Call for Speakers (ends May 19th) C++ on Sea - Call for Speakers (ends Jan 8th) ACCU - speakers selected, schedule soon Links P1774R8 "Portable Assumptions" ([[assume]]) P2590R2 "Explicit lifetime managerment" (std::start_lifetime_as) "Type punning in modern C++" (video) "The Rules of Three, Five and Zero" (article) "Beyond the Rules of Three, Five and Zero" (article) "The Power of Clean C++" (webinar) Jason's C++ eBooks Jason's C++ print books Jason's "C++ Weekly" Youtube channel "Making C++ Fun, Safe, and Accessible" - Jason's C++ on Sea keynote
John's websiteshttps://livefree.academy/https://odysee.com/@johnbushlivefreenow:cMake a Donation to Forbidden Knowledge News http://supportfkn.comhttps://www.paypal.me/forbiddenknowledgeneThe Forbidden Knowledge Network https://forbiddenknowledge.news/Sign up for remote viewing classes!https://www.irva.org/events/registrationCentropix Frequency Healing Devices https://linktr.ee/CentropixC60 PurplePower https://go.c60purplepower.com/knowledge10/Become Self-Sufficient With A Food Forest!!https://foodforestabundance.com/get-started/?ref=CHRISTOPHERMATHUse coupon code: FORBIDDENJustin Pedini's Facebook and YouTube https://www.facebook.com/profile.php?id=100078444041811https://youtube.com/user/SOLIDPEDINIhttps://www.tiktok.com/t/ZTRPXe3xS/One Great Work Network https://onegreatworknetwork.com/Karen Holton https://karenholtonhealthcoach.comSustainable Communities Telegram Grouphttps://t.me/+kNxt1F0w-_cwYmExThe FKN Store!https://www.fknstore.net/
Random Encounter this week about the excitement of conquering a development. Part 2 of Organizing a Game Design Document will be next Arena. Check out my Social Media Twitter - https://twitter.com/vigmu2 Tumblr - https://meedajoe0417.tumblr.com/ Discord - https://discord.gg/AYEAK5RmFR If you would like to donate for my current work and for further content! You can donate here -- https://bit.ly/3ea8q3u Provide thoughts on show and join email list for show notifications: https://bit.ly/3hGNqEP --- This episode is sponsored by · Anchor: The easiest way to make a podcast. https://anchor.fm/app --- Send in a voice message: https://anchor.fm/vigmu2-games/message Support this podcast: https://anchor.fm/vigmu2-games/support
Rainer Grimm joins Rob and Jason. They first talk about a new implementation of the ninja build system and updates to Qt Creator and CMake. Then they talk to Rainer Grimm about his mentorship program, and history of teaching C++. News N2: revisiting ninja Qt Creator 7 released Cmake 3.23.0 available C++20 Ranges: The Key Advantage - Algorithm Composition Links Modernes C++ Rainer's German Blog Mentoring Program Sponsors Use code JetBrainsForCppCast during checkout atJetBrains.com for a 25% discount
CMake is a very useful open-source software for ease of generating build files for Windows, MacOS, etc. This Random Encounter happened when a successful CMake-Based came together. YouTube: CMake Based Project https://youtu.be/R2EN3Y6xBXw Check out my Social Media Twitter - https://twitter.com/vigmu2 Tumblr - https://meedajoe0417.tumblr.com/ Discord - https://discord.gg/AYEAK5RmFR If you would like to donate for my current work and for further content! You can donate here -- https://bit.ly/3ea8q3u Provide thoughts on show and join email list for show notifications: https://bit.ly/3hGNqEP --- This episode is sponsored by · Anchor: The easiest way to make a podcast. https://anchor.fm/app --- Send in a voice message: https://anchor.fm/vigmu2-games/message Support this podcast: https://anchor.fm/vigmu2-games/support
Audacity vs. Tenacity https://www.engadget.com/audacity-privacy-policy-spyware-accusations-data-collection-210001803.html https://hackaday.com/2021/07/23/new-privacy-policy-gets-audacity-back-on-track Tenacity project page https://tenacityaudio.org Reason for forking the Audacity project Motivation Our project initially started as a fork of Audacity as a result of multiple controversies and public relation crises, which you can find out more about here: Privacy policy which may violate the original project's GPL license Contributor's License Agreement (CLA) which may violate the same GPL license Attempts at adding telemetry using Google services for data collection Nevertheless, the goal of this project is to pick up what the original developers of Audacity the decades-long work by the original creators of Audacity and create an audio editor that is fresh, more modern, convenient and practical to use, with the help and the guidance of our users and our community. https://github.com/tenacityteam/tenacity#motivation Community section https://tenacityaudio.org/#community-buttons Flatpak nightly build https://github.com/tenacityteam/tenacity-flatpak-nightly/blob/main/README.md flatpak remote-add tenacity oci+https://tenacityteam.github.io/tenacity-flatpak-nightly flatpak install tenacity org.tenacityaudio.Tenacity Update Flatpak flatpak update tenacity org.tenacityaudio.Tenacity Build instructions for Cmake https://gist.github.com/ricemark20/17382125f04083b3cdcda3d8bed64e4a Clone Tenacity from the Tenacity GitHub project. $ git clone https://github.com/tenacityteam/tenacity/ $ cd tenacity Configure Tenacity using CMake: $ mkdir build && cd build $ cmake -G "Unix Makefiles" -Duse_ffmpeg=loaded .. By default, Debug build will be configured. To change that, pass -DCMAKE_BUILD_TYPE=Release to CMake. Build Tenacity: $ make -j`nproc` $ sudo make install Current version:3.0.2-895-g0665614
This week we put together our first QT Py accessory board which turns the diminutive board into a tiny gaming platform with 10 buttons, a TFT screen, micro SD card, and headphone out. The PCBs showed up late last week so we quickly soldered one together and we pretty much got it going! then we ported arcada to it (that's our Arduino button/display library) so that we could do basic tests on the hardware. finally we spent friday and saturday on getting retro-go to work so we could use it as an emulator for nes/gameboy/sms/doom/etc. most of that was picking the right idf, learning how to work with CMake and doing the hardware port to support the i2c gpio expander. The Great Search - Slim TRRS Headphone Jack https://www.digikey.com/short/40n7fbp9 For our little QT Py gamer, we want to have an onboard headphone jack that folks can plug into to get audio out. Last week we picked out a headphone amplifier chip. This week we'll be sourcing a headphone jack we can use that will be slim enough to fit between the headers. #deskofladyada #thegreatsearch #adafruit Visit the Adafruit shop online - http://www.adafruit.com ----------------------------------------- LIVE CHAT IS HERE! http://adafru.it/discord Adafruit on Instagram: https://www.instagram.com/adafruit Subscribe to Adafruit on YouTube: http://adafru.it/subscribe New tutorials on the Adafruit Learning System: http://learn.adafruit.com/ -----------------------------------------
Want to learn about the latest and greatest in the 64-bit Visual Studio 2022? Join Scott Hanselman and Visual Studio product team as they take Visual Studio 2022 for a spin. [00:00] Intro[00:39] Why you should care about Visual Studio 2022?[02:20] Performance improvements in Visual Studio 2022[04:39] Why 64-bit now?[08:00] IntelliCode, type less code more[11:35] Hot reload for C++[13:47] New for WPF and WinForms (Hot Reload, Design time data, XAML live preview)[17:20] Hot Reload in ASP.NET[20:27] Profiling .NET apps in Visual Studio 2022[23:19] Cross platform apps with WSL and CMake in Visual Studio 2022[26:07] Testing your .NET app on Linux[28:00] Easily create CI/CD pipelines using GitHub actions with Visual Studio 2022[30:40] Balloon drop! https://aka.ms/VS2022LaunchLearnTV https://aka.ms/vsperftip https://aka.ms/intellicode https://aka.ms/cppinvs https://aka.ms/vswpf https://aka.ms/webinvs https://aka.ms/vsprofiler https://aka.ms/vscmake https://aka.ms/vstesttools https://aka.ms/azureinvs
Rob and Matt are joined by Matt McCormick from Kitware. They first discuss a blog post on using C++20 modules with GCC11 and Qt Multimedia support in Web Assembly. Then they talk to Matt about the history of Insight Toolkit, some of its applications and its role in the origin of CMake. News C++20 modules with GCC11 JSON for Modern C++ 3.10.0 released Qt Multimedia has a new friend Links Insight Toolkit Insight Toolkit on GitHub 3D-Slicer CMake itk.js vtk.js dockcross Sponsors C++ Builder
02:01 - Sy's Superpower: Making Complex Topics Digestible * Sy on YouTube: "Computer Science Explained with my Cats" (https://www.youtube.com/SyBrandPlusCats) 06:28 - Approaching Learning to Code: Do Something That Motivates You * Greater Than Code Episode 246: Digital Democracy and Indigenous Storytelling with Rudo Kemper (https://www.greaterthancode.com/digital-democracy-and-indigenous-storytelling) * Ruby For Good (https://rubyforgood.org/) * Terrastories (https://terrastories.io/) 11:25 - Computers Can Hurt Our Bodies! * Logitech M570 Max (https://www.amazon.com/Logitech-M570-Wireless-Trackball-Mouse/dp/B0043T7FXE) * Dvorak Keyboard (https://www.dvorak-keyboard.com/) 13:57 - Motivation (Cont'd) * Weekend Game Jams * The I Do, We Do, You Do Pattern (https://theowlteacher.com/examples-of-i-do-you-do-we-do/) 22:15 - Sy's Content (Cont'd) * Sy on YouTube: "Computer Science Explained with my Cats" (https://www.youtube.com/SyBrandPlusCats) * Content Creation and Choosing Topics 33:58 - Code As Art * code:art (https://code-art.xyz/) / @codeart_journal (https://twitter.com/codeart_journal) * trashheap (https://trashheap.party/) / @trashheapzine (https://twitter.com/trashheapzine) * Submission Guidelines (https://trashheap.party/submit/) * Casey's Viral TikTok! (https://www.tiktok.com/@heycaseywattsup/video/6988571925811367173?lang=en&is_copy_url=1&is_from_webapp=v1) 41:34 - #include <C++> (https://www.includecpp.org/) * Lessons learned creating an inclusive space in a decades old community (Sy's Talk) (https://developerrelations.com/community/lessons-learned-creating-an-inclusive-space-in-a-decades-old-community) * QueerJS (https://queerjs.com/) * Emscripten (https://emscripten.org/) * Graphiz it! (http://graphviz.it/#/gallery) Reflections: Mandy: Digging into Sy's videos. Casey: Working within content creation constraints. Sy: Make a video on register allocation. This episode was brought to you by @therubyrep (https://twitter.com/therubyrep) of DevReps, LLC (http://www.devreps.com/). To pledge your support and to join our awesome Slack community, visit patreon.com/greaterthancode (https://www.patreon.com/greaterthancode) To make a one-time donation so that we can continue to bring you more content and transcripts like this, please do so at paypal.me/devreps (https://www.paypal.me/devreps). You will also get an invitation to our Slack community this way as well. Transcript: Software is broken, but it can be fixed. Test Double's superpower is improving how the world builds software by building both great software and great teams and you can help. Test Double is looking for empathetic senior software engineers and dev ops engineers. We work in JavaScript, Ruby, Elixir, and a lot more. Test Double trusts developers with autonomy and flexibility at a 100% remote employee-owned software consulting agency. Are you trying to grow? Looking for more challenges? Enjoy lots of variety in projects working with the best teams in tech as a developer consultant at Test Double. Find out more and check out remote openings at link.testdouble.com/join. That's link.testdouble.com/join. MANDY: Hello and welcome to Greater Than Code, Episode 247. My name is Mandy Moore and I'm here with my friend, Casey Watts. CASEY: Hi, I'm Casey, and we're both here with our guest today, Sy Brand. SY: Hey, everyone! CASEY: Sy is Microsoft's C++ Developer Advocate. Their background is in compilers and debuggers for embedded accelerators. They're particularly interested in generic library design, making complex concepts understandable, and making our communities more welcoming and inclusive. They can usually be found on Twitter, playing with their three cats, writing, or watching experimental movies. Hi, Sy! Good to have you. SY: Hey, thanks for having me on. CASEY: The first question we like to ask, I think you're prepared for it, is what is your superpower and how did you acquire it? SY: Yeah, so very topically, I think one of my superpowers is forgetting what topics I want to talk about when recording podcasts and that, I acquired through having ADHD and forgetting to write things down. But I did write things down this time so maybe that won't be too much of a problem. But I think one of my other ones is making complex topics digestible, trying to take computer science topics and distill them down into things which are understandable without necessarily having a lot of the background knowledge, the resources you'd expect. I gained that mostly through my background in computer science and then my interest in public speaking and communication and performance poetry, trying to blend those together to make things easier to understand, lower the barrier for entry. CASEY: I love it. Making complex topics digestible. That's definitely a skill we need more of in the world. MANDY: Absolutely. So Casey told me you are a bit of a teacher and you do a lot of teaching on, is it YouTube? So making things easier to digest. Like I said, during the preshow, I've been trying to learn to code on and off for 12 years, as long as I've had this career, and I've started and stopped, gotten frustrated and stopped, and I've tried different things. I've had mentors and I feel like I've let my mentors down and I've tried this and that. I've tried the code academy and I don't know. So how do you do it? Can you tell us a little bit about how you do that? SY: Sure. So most of the topics that I am interested in teaching is, because I come from a background of compilers and debuggers and very low-level systems, those are the things that I want people to get excited about because I think people look at compilers, or C++, or low-level programming and think, “Oh, this is not very interesting,” or new, or it's too complex, or it requires too much of a degree, or whatever. But none of that is true. You can write a compiler without having to have a lot of the background knowledge you might expect and you can learn C++ without having to – it can be a lot easier than people make art. So I want to make these concepts seem interesting and understandable because they're deeply interesting to me and they've been working on them for a large part of my life and I still love it and find them fascinating. So I want to share that with people. CASEY: What's your motivation when you're working on these? Is it to understand things that are complex, or are you solving problems you have, or other people have, or maybe a blend, or other motivations? I'm wondering what gets you so pumped about it. SY: Yeah, so I think it's a few different things. I make videos on Twitter, or YouTube, things like that of explaining concepts that I'm already familiar with and it's pretty much stuff that I could write an entire video off the top of my head without having to do any research. So I've done videos on explaining what a compiler is and all the stages of compilation, or a video on higher cash performance works, or [in audible 05:48] cash configurancy, garbage collection. These are all things I could just sit down and write something on and don't have to do a lot of research. Then there's the more exploratory stuff. I've been live streaming the development of a Ranges library for C++, which is being able to compose operations, building up a pipeline of operations for your data and then declarative manner so that you don't have to deal with a lot of memory allocations and moving data, or a range yourself. You just say, “Here's all the steps that I want to occur,” and then someone who has written all of these pipeline operations deals with how that actually happens. I've been developing that library live and trying to teach myself hired to do all of these things as while also teaching other people at the same time. MANDY: So is it right to assume that maybe I've been going about learning to code in all the wrong ways and that I've just picked a language and tried to dive in, or did I miss some of the conceptual stuff? And if so, as I suspect, a lot of the conceptual stuff has gone over my head. So where do you suggest, if you were giving me advice, which yes, you are giving me advice. [laughter] Where would you suggest, as a brand-new beginner coder, what kind of software concepts I need to research and understand before actually diving into an actual programming language? SY: Honestly, I don't think that there's a single answer there and I don't think there's a lot of wrong answers there. From my perspective, the best way to learn how to code is doing something that motivates you and that gets you excited because coding is hard and when you hit those bumps and things are going wrong, if you don't have that motivation to keep going, then it's very easy to stop. I know I've done it in trying to learn certain concepts and things like that before, because I felt like, “Oh, I should learn this thing, but I wasn't really interested in it,” and then I find out it was hard and stopped. The best way that I learn is finding something where I'm like, “Hey, I want to build this thing,” or “I want to understand this because I want to solve this problem,” or “because I want to dove on that knowledge with something else.” It's always the motivation, but then I'm coming from if you're someone with ADHD, or something like me, then it's pretty much impossible to do anything without [chuckles] having a strong motivation behind it. So that kind of comes into my way of learning as well. MANDY: That's super interesting. Actually, the last episode we did was with Rudo Kemper and he did a project with Ruby for Good. I went to that and I actually got really excited, intrigued, and wanted to get involved and learn how to code because I was really interested and passionate about the project that he presented, which was Terrastories, which was handing down indigenous knowledge technologically so that stories aren't lost in just having oral traditions, that these stories are actually being recorded and are living somewhere on the internet. So that's really interesting. I went to that and then of course, pandemic happened. It didn't happen again last year, but I'm thinking about going back this year. I'm hoping maybe I can be on a team with somebody that could just shadow and sit there and maybe Casey would let me be that person because rumor has it, Casey is going to be there. Ruby for Good on the East Coast in the fall. CASEY: Yeah, I'll be there. I'd be happy to have you shadow me. Also, my role lately has been a higher level. Last time I was a product manager for the team not coding and this year I'm going to be helping the teams be happy and effective across the board because there's always a team, or two that need some alignment work so that they can be productive the whole weekend. MANDY: That's interesting. Okay. Well, I'm sure I'll find somebody who wouldn't mind me doing a kind of shadow. CASEY: For sure. MANDY: Yeah, cool. CASEY: That's the kind of environment it is. MANDY: Absolutely. CASEY: Yeah. SY: That definitely sounds like the right kind of thing like something where you hear about something, or you look at this project and you think, “Hey, I want to get involved. I want to contribute to this.” That's what can drive a positive learning experience, I think it's that motivation and that motivation could just be, “Hey, I want to get into the tech industry because it pays well and we need money to live because capitalism.” That's like totally legit as well. Whatever you find motivates you to work. MANDY: Yeah, that's why I'm here. I had to find a way for my daughter and I to live. SY: Yeah. MANDY: So I got into tech and podcasts and then I'm working for all these people who I always considered so much smarter than me. I was like, “I could never learn that. I'm not good enough.” But now since joining the podcast as a host and coming on here, I'm feeling more and more like I am smart enough, I could do the thing and so, I'm actually really getting into it more. But it's just that being on the computer for so many hours doing the work stuff makes it hard to also break into the wanting to do the learning outside of my work hours – [overtalk] SY: Right, yeah. MANDY: Because it's so much computering. SY: Yeah, or just split the good screen from bad screen. CASEY: I've been computering so much, I have a tendonitis in my right pinky now from using the arrow keys on the keyboard too much, I think and bad posture, which I've been working on for years. Computers can hurt our bodies. SY: Yeah, definitely. I use the Logitech M570 mouse, which I switched to a number of years ago and was one of the best changes I ever made for using the computer and also, switching to Dvorak for keyboard layout. CASEY: Okay. I use that, too. SY: Nice! CASEY: Dvorak. It's not better, but I learned it. [laughter] It might be more better for my health maybe, but I'm not faster. That's what people always ask. SY: I'm definitely – [overtalk] CASEY: Instead of ASDF, it's a AOEU under your fingers; the common letters right at your fingertips. You don't need the semicolon under your right pinky. [laughter] Why is that there? SY: Yeah. MANDY: Yeah. I was going to ask for us what you were even talking about there. So it's just basically reconfiguring your keyboard to not be QWERTY thing? SY: Yeah, exactly. MANDY: Okay. SY: That means you have to completely relearn how to type, which can take a while. Like when I completely stopped using QWERTY at all and just switched to Dvorak, I didn't even buy a Dvorak keyboard, I just printed out the keyboard layout and stuck it to my monitor and just learned. For the first while, it's excruciating because you're trying to type an email and you're typing 15 words per minute, or something. That's bad. I did definitely did get faster shifting to Dvorak. Before I think I used to type at like 70, 80; I type around a 100 words per minute so it changed my speed a bit. But to be fair, I don't think I typed properly on QWERTY. I switched 10 years ago, though so I can't even remember a whole lot. [chuckles] MANDY: That's interesting, though. That gives me something I want to play around with right there and it's not even really coding. [laughter] It's just I'll be just trying to teach myself to type in a different way. That's really interesting. Thank you. [chuckles] CASEY: Yeah. It was fun for when I learned it, too. I think I learned in middle school and I was I practiced on AIM, AOL Instant Messenger, and RuneScape. SY: Nice. CASEY: I didn't dare practice while I had essays due and I had to write those up. That was too stressful. [laughter] CASEY: Summer was better for me. SY: Yeah, I switched during a summer break at university. CASEY: Low stakes. I needed the low stakes for that to succeed. SY: [laughs] Yeah. CASEY: We were talking about what motivates you to learn programming and I wrote up a story about that for me actually recently. SY: Okay. CASEY: At the highest level, my first programming class, we modeled buoys and boats and it was so boring. I don't know why we were doing it. It didn't have a purpose. There was no end goal, no user, nobody was ever going to use the code. It was fine for learning concepts, I guess, but it wasn't motivated and I hated it and I stopped doing CS for years until I had the opportunity to work on an app that I actually used every day. I was like, “Yeah, I want to edit that.” I just want to add this little checkbox there. Finally, I'll learn programming for that and relearn programming to do useful things for people. Motivation is key. SY: Yeah. I think because I started doing programming when I was quite young, I knew it was definitely the classic video games, wanting to learn how to make video games and then by the time I actually got to university, then I was like, “Yeah, don't want go into the games industry.” So didn't end up doing that. But I still enjoy game jams and things like that. If you're not again. CASEY: That's another thing you might like, Mandy. It's a weekend game jam. MANDY: Hm. CASEY: I don't know how into gaming you are, but it's also fun, lower stakes. People are just partying. Not unlike Ruby for Good. They happen more often and I like how it feels at a game jam, a little better than a hackathon because you're building something fun and creative instead of using a company's API because they told you to. SY: [laughs] Yeah. MANDY: Yeah, I was honestly never exposed to video games as a child. They were a no-no in my household and that's one of the things that I always cursed my parents for is the fact that I am the worst gamer. [laughs] My daughter makes fun of me. I'll sit down and like try to – she's 12 and I'll try to do something. She'll be like, “Wow, this is hurting me to watch you, Mom,” [laughs] and I'm like – [overtalk] CASEY: Ouch. MANDY: No, she called me a try hard and I was like, “Yeah, I'm trying really hard to just go forward.” Like I'm trying really hard to just jump over this object, [chuckles] I was like, “If that makes me a try hard well, then yes, I'm trying very hard. Thank you.” SY: Yeah. My 6-year-old has now got to the point where he can beat me at Super Smash Brothers so I'm not feeling too good about that. [laughs] CASEY: Yeah. My 6-year-old nephew beat us all in Mario Kart a couple weeks. SY: Yeah. [laughs] I can still beat in the Mario Kart. That, I could do. [laughs] MANDY: Yeah. A lot of the games she does looks fun, though so it's something I would be interested in, it's just something that I haven't been exposed to. I'm really excited now that—I don't want to say the pandemic is nearing an end because it seems to be not happening, but I'm excited – [overtalk] CASEY: True. Things are opening up. MANDY: Right now. Until they start closing down again. CASEY: Yeah. MANDY: Because I'm so excited for things like Ruby for Good, driving down to D.C. and seeing some of my friends, and I would be interested in going to one of those game things, as long as people are just like, “Oh yeah, we can be patient with her because she's never done a game before.” [laughs] CASEY: Yeah. My last game jam had eight people on the team and zero had ever done game development before. We figured something out. SY: [chuckles] Yeah. MANDY: Oh, that's fun. SY: Like muddle along. CASEY: Yeah. Somebody did like level design. They did a title map. Someone did sprites. They were like, “I'm going to do a sprite tutorial now.” Sprite is moving like a walking character. We had learned all the terms for it. We didn't know the terms either, but it was a good environment to learn. MANDY: It seems it. It seems like if you have a happy, healthy environment. For me, it was just, I was becoming stressed out. I had a standing meeting once a week with a really, really awesome person and it felt like it was more of like, I was like, “Oh my gosh, I have to work this into my already busy workweek and if I don't, then I'm completely wasting their time,” and I started to feel guilty to the point it brought me down. I was just like, “I don't think this is good for either one of us right now” because I'm feeling too much pressure, especially with the once-a-week thing and it's like to get through this chapter and then get through this chapter, and then I'd have a question and I'm not good at writing things down and then I'd forget. It seems like that might be more of a strategy to learn for me. I think a lot of people, there's different strategies like you have your visual learners, or you have your audio learners and I think for me, it would be cool just like I said, shadowing somebody. Like, if I just like sat there and it wasn't weird for me just to watch it over somebody's shoulder while they're doing this thing, that would a more conducive environment to the way I learn. CASEY: Yeah. I like the pattern, You do, We do, I do. Have you heard of that one? MANDY: No. CASEY: Or I do, We do, You do depending on the perspective. So it's like shadowing first and then doing it together where you're both involved and then you can do it on your own. It's a three-step process to make it a little bit easier to learn things from other people. SY: Yeah, that makes sense. MANDY: Yeah, that sounds like how kids learn. It's how we teach our children like I do, now we're going to do it together, now you do it. Yeah, I definitely have used that with my kid. [chuckles] CASEY: And it's just completely reasonable to do that as adults. That's how human brains work. MANDY: Yeah. No, I don't feel – that's the thing I would have to not almost get over, but just be like, “Oh my gosh, I'm 2 years old. I'm learning like I'm a toddler and that's so embarrassing.” But I think that that is a great way to learn and a great way to approach learning in general. I just started a book on learning more about crystals and it's the beginner's guide and she said, “You read this book and then you can move on to reading this other 700-page book that I've authored, but you should probably read this concise guide first.” I think a lot of people feel the pressure to dive into the super smart, or what they perceive as being the super smart way of diving in like, picking up the Ruby book, or the books that everyone talks about when there's so many other great resources exist that break it into smaller, bite-sized, digestible chunks. I think there's no shame in learning like that and I think a lot of people think that they just need to dive right in and be like, “Oh, this is the hard book, I'm going to go for the hard book first.” Like no, start with the easiest, start small. SY: Yeah. I think as you say, it definitely depends on how you learn what kind of resources you find interesting and engaging. CASEY: I've heard a similar story from a lot of friends, Mandy, where they really want to learn something, maybe programming in general, or a language, and then they psych themselves out, or they don't have the bandwidth in the first place, but they don't realize it and they struggle through that and the guilt because they want to, but they don't have time, or energy, which you also need. It's really common. A lot of people that I know are really motivated to do a lot of stuff; they want to do everything. I know some people who are fine not doing everything and that's great because they're probably more grounded. [chuckles] [laughter] But a lot of people I know really want to learn at all and it's a tension; you don't have infinite time and energy. SY: Yeah. I definitely fall into wanting to learn absolutely everything and right now. MANDY: So what kind of things are you teaching right now, Sy? What kind of content are you putting out there? SY: Yeah. So like I said, a lot of it's to do with low-level programming, like how memory actually works on a computer and how it affects how we program things. Because for a lot of people, if you come from a higher-level programming background, you're used to memory being abstracted away from what you do. You deal with variables, you deal with objects, and the implementation of the programming language deals with how that actually maps onto the underlying hardware. But if you really need to get the most performance you possibly can out of your system and you're using a little bit lower-level language like C, or C++, or Rust, or Swift, or something, then you need to understand how your processor is actually handling the instructions and that is actually handling your memory accesses in order for your performance to actually be good. Some of it is not obvious as well and does not match with how you might think memory works because the processors which we're using today are based in so much history and legacy. A lot of the time, they're essentially trying to mimic behavior of older processors in order to give us a programming model, which we can understand and work with, but then that means that they have to work in certain ways in order to actually get performance for the high-performance modern systems we need. So having an understanding of how our caches work, how instruction pipelines work, and things like that can actually make a really big difference down with the low-level programming. MANDY: Okay. So I'm looking at your Twitter and then looking at your pinned tweet, it says, “I made a YouTube channel for my ‘Computer Science Explained with my Cats' videos.” How do you explain computer science with your cats? Because that's something I could probably get into. SY: Yeah. So I have three cats and – [overtalk] MANDY: I've got you beat by one. SY: Nice. What were your cats called? MANDY: I have four. I have Nicks after Stevie Nicks. I have Sphinx because he looks so regal and I have Chessy and I have Jolie. SY: Cool. Mine are Milkshake, Marshmallow, and Lexical Analysis cat. MANDY: [laughs] Cool. SY: [chuckles] Yeah. So the things explained with my cats, it's mostly I wanted to explain things with my cats and random things, which I find around my house. So I remember I have a Discord server, which I help to moderate called #include , which is a welcoming inclusive organization for the C++ community. We were talking about hash maps and how hash maps are actually implemented, and I realized that there's a lot of different design areas in hash maps, which can be difficult to understand. I wanted to try and explain it using boxes and teddies and my cats so I set up a bunch of boxes. These are all of the buckets, which your items could go into it and then there's some way to map a given teddy to a given box. Let's say, it could be how cute it is. So if it's super cute and it goes in the west most box, and if it's kind of cute, then it goes into the box after that and so on and so forth. That's kind of how hash maps work. They have a bunch of memory, which is allocated somewhere, a bunch of boxes, and they have some way of mapping given items to a given box, which is called a hash function. In this case, it was how cute they are and then you have some way of what happens if two teddies happened to be as cute as each other, how do you deal with that? There's a bunch of different ways that you could handle that and that's called hash collision. Like, what do you do with collisions? Do you stick them in the same box and have a way of dealing with that, or do you just put them in the next box up, or a few boxes up, or something like that? There's whole decades worth of research and designing, which go into these things, but the concepts map quite nicely onto boxes and teddies and how cute they are. [chuckles] MANDY: I love that. SY: They are also explaining how caching works with chocolate, like the intuition with memory access is you ask for some chunk of memory and you get that chunks. You ask for a single chunk of chocolate and you get that chunk of chocolate, but in reality, that's not what happens in most cases. In most cases, you're actually going to get back a whole row of chocolate because it's most likely that if you're going to get a bit of chocolate, you're probably going to be accessing the bits which are right next to it. Like, if you have an array and you're processing all of the elements in that array, then you're just going to be stepping along all of those elements. So it's much faster to bring all of those elements would be right into memory at once. That's what happens in modern processors. Without you having to ask for it, they just bring in that whole row of chocolate. So I tried to – [overtalk] CASEY: That's so polite. [laughs] When your friend asks for a single chip, or a single piece of chocolate, you know what they want more. SY: [laughs] Yeah. CASEY: How generous of you to give them the whole bag. [laughs] Whether they want it, or not though. SY: Yeah. MANDY: So are these videos relatively short, or are they more long-form videos? SY: Yeah, they are 2 minutes long. MANDY: Oh, cool. SY: I try and keep them within the video limit for Twitter videos, which is 2 minutes, 20 seconds. MANDY: Okay, cool. See, that's something I could probably commit to is watching one of those videos not even maybe once a day because sometimes that's a little bit, much pressure every day. So maybe I try to work out three to four times a week. So saying I'm going to do this three to four times a week and I'm going to not stress on I'm going to do this every Monday. Generally three to four times a week, I think that's something I could, could commit to. SY: Yeah. Trying to get them within 2 minutes, 20 seconds can be really tough sometimes. Like it's quite – [overtalk] MANDY: Do you do a lot of editing? SY: Yeah. I would sit down and I'll write the whole episode, or video, or whatever and just get in all of the content that I want, just put it onto a text document and then I'll start filming it in whatever order I want, and then I start editing and then quite often, I realized that I've got 2 minutes, 40 seconds worth of content, or something and I can't quite cut it down and I have to reshoot something and then reedit it. I try to get it all done within a single day because if I don't get it done in a single day, then it ends up taking even longer because I get distracted and things like that. I need to focus just getting this one thing done. MANDY: So you're doing these within hours? SY: Yeah. MANDY: From start to finish, how many hours would you say you invest in these videos? SY: Start to finish, about 5, 6 hours, something like that. Like I said, I don't really have to do a lot of research for them because they're things I know very well, so I can pretty much sit down and just write something and then most of the time is spent in editing and then captioning as well. MANDY: Very cool. CASEY: I've been doing a bit of video editing lately and it takes so long. SY: Yeah, it really does. CASEY: I'm not surprised it takes 5, or 6 hours. [laughter] MANDY: No, I'm not either. I do all the podcasts editing. For those of you listening, who do not know, I edit all these podcasts and it takes roughly even 5 to 6 hours for audio, because I also put other work into that, like doing the show notes and getting the transcripts. Now I have those outsourced because I don't have enough hours in the day, but there's a lot of different parts to editing, podcasting, screen casting, and stuff that I don't think a lot of people know that these 2-minute videos that you do really do take 5 to 6 hours and you're putting these out there for free? SY: Yeah. MANDY: Wow. That's amazing. I assume you have a full-time job on top of that. SY: Yeah. Because my position is a developer advocate, I can count that as is doing work so I don't have to do that in my own time. MANDY: Very cool. Yeah, that's cool. I love DevRel so working in DevRel, I do that, too. I'm a Renaissance woman, basically. Podcast editing, DevRel conference organizing, it's a lot. SY: Yeah. MANDY: So I give you mad props for putting stuff out there and just giving a shout out to people who might not be aware that content creation is not easy and it does take time. So thank you. Thank you for that. Because this seems like the kind of stuff I would be able to ingest. SY: Yeah, thanks. MANDY: And that's cool. CASEY: I'm especially impressed, Sy that you have these interests that are complex would expand and you can explain the well and you find the overlap with what people want to know about. [chuckle] I think maybe in part from the Discord, you hear people asking questions. Can you tell us a little bit about what that's like? How do you decide what's interesting? SY: Yeah. I ask people on Twitter what they would find it interesting, but I also, because right now I'm not really going to conferences, but previously I'd go to a lot of conferences and people would come up to me and if I give a talk on compilers, for example, come and say like, “Oh hey, I never knew how register allocation worked. It was super interesting to know.” So I don't think I've done a video on register allocation yet actually. I should do one of those. MANDY: Write that down. SY: [laughs] Yeah. That's the kind of thing. Just because I spent a lot of time in communities, conferences, Discords, on Twitter, you get a feel for the kind of topics which people find interesting and maybe want to know how they work under the covers and just haven't found a good topic. Even function calls like, how does a function call work in C at the hardware level? If you call a function, what's actually happening? I did a video on that because it feels like such a fundamental thing, calling a function, but there's a lot of magic which goes into it, or it can seem like a lot of magic. It's actually, I want to say very well-defined, sometimes less so, but [laughs] they are real so there is random reason. MANDY: Very cool. I want to talk about the other content creation that you do. So code art journal and trashheap zine, do you want to talk about those a minute? SY: Sure. So code art was an idea that I had. It's a journal of code as art. I'd hear a lot of people saying, “Oh, coding is an art form.” I'd be like, “Okay. Yes. Sometimes, maybe. When is it an art form? When is it not? What's the difference between these?” Like, I spent a lot of time thinking about art because I'm a poet and I spend most of my free time researching and watching movies. Code as art is something which really interested me so I made this journal, which is a collection of things which people send in of code which they think is art and sometimes, it's something you might immediately see and look at it and think, “Okay, right, this is code and it's fulfilling some functional purpose,” and maybe that functional purpose gives it some artistic qualities just by how it achieved something, or if it does something in a very performant manner, or a very interesting manner. Other times, you might look at it and say, “Okay, well, this is code, but it's more aesthetic than functional.” And sometimes it's things which you might look at and think, “Okay, is this even code?” Like there was someone sent in a program written in a language called Folders, which is a esoteric programming language entirely programmed using empty folders on your hard drive, which I absolutely love. I'm super into esoteric programming languages so I absolutely loved that one. [chuckles] But yeah, so the – [overtalk] CASEY: That sounds so cool. Where can people find it? Is it online also? SY: Yes, it's in print and there's also, you can get the issues online for free in PDF form. There is a third issue, which is pretty much fully put together on my machine, I just haven't done the finishing touches and it's been one of those things that's just sat, not doing anything for months and I need to get finished. [chuckles] And then trashheap zine is another thing that I co-edit, which is just utter trash, because as much as I love more explicitly artistic films and writing and things like that, I also have a deep love of utter, utter trash. So this is the trashiest stuff that we could possibly find, even the submission guidelines that I wrote for that is essentially a trash pond, but random submission guidelines. So if you have trash, please send our way. MANDY: Yeah. I was going to say, what you consider trash? What trashiest [laughs] enough to be in these zines? SY: I can read out, where's my submission guidelines? The URL for the zine is trashyheap.party, which I was very, very pleased with and the website looks awful. I spent a lot of time making it as awful as I possibly could. Things like any kind of – [overtalk] CASEY: I love the sparkles. SY: Yes! CASEY: When the mouse moves, it sparkles. SY: Isn't it the best, seriously? Yeah. CASEY: Every website should have that. SY: Yeah, totally. Like texts you sent your crush at 4:00 AM while drunk where you misspelled their name and they never spoke to you again, or draft tweets which you thought better of sending, purely Photoshop pictures of our website. [laughter] A medically inaccurate explanation of the digestive system of raccoon dogs. All good stuff. MANDY: That's amazing. CASEY: I know a lot of people who would be cracking up reading this together. [laughter] CASEY: That sounds great. There's so much treasure in this trash heap. MANDY: Yeah. Don't worry, folks, we'll put links in the show notes. CASEY: Oh, yeah. SY: Yeah. One of my favorite things with it was when we'd get all of the submissions, we would get together and just project them up on a wall and read them together and so much so bad, it's hilarious in the most wonderful way. CASEY: That sounds like a party itself. SY: It is, yes. CASEY: The be trashheap party. SY: Absolutely. CASEY: It's kind of taking me back to early pre-YouTube internet when we watch flash cartoons all the time and a lot of those were terrible, but we loved them. SY: Yes. I made some as well, they were so bad. [laughter] I remember getting a very non legal version of flash and making the worst stick flash renovations I possibly could. CASEY: Oh, speaking of content creation, I've been learning some animation and 3D modeling animation lately. I had my first ever viral TikTok; it had over 9,000 views. SY: Wow! Nice. CASEY: And so when I look at my phone, if it's not the notifications muted, it's annoying. I have to turn it off. [laughter] SY: Yeah – [overtalk] MANDY: Congratulations! [laughs] CASEY: Thank you. So the video is a USB thumb drive that won't insert, even though you flip it over. That's been done before, but what I added was misheard lyrics by the band Maroon 5. Sugar! USB! That's what I hear every time. Mandy, have you done any art? MANDY: Have I done any art? CASEY: Lately? MANDY: Oh. Yeah. Well, actually – [overtalk] CASEY: You've been doing some home stuff, I know. MANDY: Yeah. I've been doing plant stuff, gardening, but this weekend, I actually took my daughter to a workshop. It was called working with resin—epoxy. SY: Oh, cool. MANDY: And we got to make coasters. The teacher brought stickers, feathers, and crystals and it was like a 3-hour workshop and I think my daughter had extra resin. Her birthday is on Thursday this week and I noticed she was making kind of the same ones and I said, “What are you doing?” And she said, “I'm making gifts for my friends that come to my birthday party.” I just thought it was so sweet that I was like – [overtalk] SY: Oh, so sweet. MANDY: Usually birthday parties, you receive gifts, or whatever and she's like, “No, I would like to give them gifts for my birthday,” and I was like, “Oh, that's adorable.” So I've been trying to do more things with my hands and get off the screens more, which has been the major thing keeping me back from being on code. I've made a strict weekend policy where I do not touch my computer from Friday evening to Monday morning, unless it's an absolute dumpster fire, I need to do something, or if a takeout menu looks better on my computer than it does on my phone. [laughter] Then I'll pop it open, but I won't read the email, or do the Slack. And then this Saturday I'm taking a course in astrology. It's all-day workshop so I'm excited to kind of dive into that stuff a little bit more. CASEY: So cool. It's hard to believe we can do these in person again. I'm not over it. MANDY: I know. I'm so afraid to get excited over it and then have it be taken away again. CASEY: Yeah. Sy, tell us a little more about #includes . I've actually heard of it. It's a little bit famous online. It's an inclusive community, I know from the name. SY: Yes. CASEY: Tell us more about it. SY: So it actually started off on Twitter as a half joke; Guy Davidson tweeted being like, “Hey, so why isn't there a diversity and inclusion organization for C++ called #include?” Because #include is it's like a language concept in C and C++ and people were like, “Hahaha yeah, you're right,” and then Kate Gregory was like, “You're right. We should make one.” So we did [chuckles] and we started off with like six of us in a Slack channel and then ended up moving to Discord and starting our own server there and now we are a few thousand members. Back when we had in-person conferences, we would have a booth at pretty much every major C++ conference, we had scholarships, which we would send people on, we got conferences to improve by having live captioning and wheelchair accessible stages and gender-neutral bathrooms instituting and upholding code of conduct, things like that. We started off thinking, “Hey, if we could get some conferences to have a code of conduct or something that would be great,” and then it ended up being way, way, way bigger than any of us thought it would become, which is amazing to see. CASEY: That's so cool. What a success story. SY: Yeah. CASEY: How long has it been going on now? SY: I guess about 3, or 4 years. Yeah, probably closer to 4 years. My sense of time is not good the best of times, but something around 4 years. CASEY: I'm curious if another language community wanted to do something similar if they're inspired. Is there a writeup about what y'all have done? SY: I've given talks. CASEY: That we can point people to. We can put that in the show notes. SY: Yeah. I've given a couple of talks, as I said. CASEY: Talks, that would be good. SY: Other people have given talks as well. I gave a slightly longer form talk DevRelCon, London in 2019, I think, which was on the lessons which we learned through trying to build a welcoming and inclusive community. Community which has already been around for decades because C++ was first standardized in 1998 so it's been around for quite a long time and has a lot of history. CASEY: That sounds great. I can't wait to watch it. SY: Yeah. I know that there's other languages. You have JavaScript, QueerJS, which is a really cool community and I'm sure there are other languages which have similar things going as well. CASEY: I had never heard of QueerJS. I'm queer and JS. SY: Yeah. CASEY: I'm glad I had this moment just now. SY: It's cool. They have a Discord and I can't remember how active the Discord is, but they would have meetups across the world, they have one in London and in Berlin and bunch of other places, and talks and community. It seems really cool. CASEY: That's awesome. SY: I wanted to give a talk about C++ and JavaScript because you could link target JavaScript with C++ these days, which is kind of cool. CASEY: I've used Emscripten before. SY: Yeah. CASEY: I didn't use it directly, other people did. It turned Graphviz into a JavaScript. A program that runs in JavaScript instead of normally, it's just CSS. So I could draw circles pointing to other circles in the browser, which is what I always wanted to do. Graphviz.it, that “it” is my favorite Graphviz editor. It's online. SY: Cool. I like Graphviz a lot. Emscripten is really cool, though. Basically a way of compiling C++ plus to JavaScript and then having the interoperation with the browser and the ecosystem that you might want to be able to call JS functions from C++, or other way around, and do things which seem operating systems E, but have to be mapped inside the browser environment. CASEY: That's powerful. I'm also glad I've never had to use it directly. Other people made libraries doing it what I needed. Thank goodness. [chuckles] Abstraction! SY: Yeah. I've not used a whole lot, but I did find it fairly nice to work with when I did. I made a silly esoteric programming language called Enjamb, which is a language where the programs are cones and it runs on a stack-based abstract machine and the interpreter for it is written in C++. I wrote a command line driver for it and also, a version which runs in the browser and that compiles using Emscripten. It was really cool and I picked it all up with CMake, which is the main C++ build systems that you could just say, “Hey, I want to build the combine line version for my platform” like Windows, or Mac, or Linux, or whatever, or “Hey, I want to build it for the web,” and it would build the JavaScript version in HTML page and things like that. It's pretty cool. I recently made another esoteric programming language, which you program using MS Paint. You literally make shapes with MS Paint and you give the compiler an image file, and then it uses OCR and computer vision in order to parse your code and then generate C from that. [laughs] It's pretty ridiculous, but I had so much fun with it. CASEY: OCR is Optical Character Recognition? SY: Yes, exactly. CASEY: So I'm picturing if I wrote a program on a napkin and a computer could maybe OCR that into software. SY: Yeah. So it uses OCR for things like function names because it supports function calls and then uses shapes for most things. It has things like a plus sign, which means increment what it's currently being pointed to, or right, or left, or up, or down arrow is for moving things around. You would actually make an image file with those symbols and then I used OpenCV for working out what the shapes were. It was the first time I've ever done any kind of image recognition stuff. It was a lot easier than I expected it to be; I thought we'd have to write a lot of code in order to get things up and running and to do image detection. But most of the simple things like recognizing hey, this is a triangle, or this is a plus sign, or this is a square, and things like that were pretty, you don't need a lot of code in order to do them. That was mostly when you had to say like, “Okay, this is a triangle, but which direction is it pointing in?” It got a little bit more complicated; I had to do some maths and things like that and I'm terrible at maths. [chuckles] So that was a little bit more difficult, but it was a lot fun to get started with and I had a much lower barrier to entry than I expected. CASEY: Now I want to play with OCR and image recognition. I haven't done that for 10 years. It was not easy when I tried it last time with whatever tool that was. SY: [chuckles] Yeah, I did it – [overtalk] CASEY: For the future! SY: [laughs] Definitely. Yeah. I did it with Python and Python has fairly nice OpenCV bindings and there's a ton of resources out there for predicting most of the basic stuff that you would expect. So there's a lot of learning resources and decent library solutions out there now. CASEY: Cool. All right. We're getting near the end of time. At the end, we like to go through reflections, which is what's something interesting that stood out to you, something you'll take with you going forward from our conversations today. MANDY: I really am excited to dig into Sy's videos. They seem, like I said earlier in the show, something I could commit to a few times a week to watching these videos especially when they are concepts that seem so much fun, like cats, teddy bears, cuteness levels, and things like that. I think that would be a great start for me just to in the morning while I'm still drinking tea just before I even dive into my email, check out one of those videos. So I think I'll do that. SY: Thanks. CASEY: Sy, I liked hearing about your process side with your constraints like 2 minutes, 20 seconds on Twitter, that's such a helpful constraint to make sure it's really polished and dense. It takes you 5 to 6 hours and you make things that people ask about, that they're interested in. That whole process is fascinating to me as I try to make more viral TikToks. [laughter] Or whatever I'm making at the time. SY: Yeah. CASEY: I always wondered how you made such good stuff that got retweeted so often. Cool things of insight. SY: Yeah. Mostly just time. [laughs] I guess, it makes me remember that I definitely want to make a video on register allocation because I love register allocation. It's such a cool thing. For those who don't know, it's like if you have a compiler which takes your code and maps it onto the hardware, your hardware only has a certain number of resources so how do you work out how to use those resources in the best manner? It maps onto some quite nice computer science algorithms like graph coloring, which means it maps quite nicely visually, I could probably make a pretty cool graph coloring visualization with some random things I have strewn around my room. CASEY: I can't imagine this yet, but I will understand that clearly soon I bet. MANDY: That's awesome. Well, I just want to wrap up by saying thank you so much for joining us today, Sy. This has been a really awesome conversation. And to folks who have been listening, thank a content creator. It takes time. It takes energy. It's a lot of work that I don't think a lot of people, unless you've done it, really understand how long and in-depth of a process it is. So thank one of us content creators, especially when we're putting this content out for you for free. To do that for us Greater Than Code, we do a Patreon page and we will invite Sy to join us and we would like you to join us as well. If you are able to donate on a monthly basis, it's awesome. It's patreon.com/greaterthancode. All episodes have show notes and transcripts, and we do a lot of audio editing. So join us if you're able. If you are still a person who is greater than code and cannot afford a monthly commitment, you are still welcome to join us in our Slack community. Simply send a DM to one of the panelists and we will let you in for free. So with that, thank you so much, Casey. Thank you again, Sy. And we'll see you all next week. Special Guest: Sy Brand.
Why is PyTorch's build so g-dang complicated. How to avoid having to deal with cmake at all? And if you have to deal with cmake, what are the most important things to know? And if you were going to improve our cmake, how would you go about doing it...Further reading.The official CMake documentation is a great help and well worth reading https://cmake.org/documentationIf you work in torch/csrc chances are you'll need to edit this file https://github.com/pytorch/pytorch/blob/master/tools/build_variables.bzlLiner notes.multiple build systems: cmake, buck, xplat buck, ovrsource buck, bazeltools/build_variables.bzl is read from cmake! append_filelistbut not used uniformly for all components! (ouch!)mashed together ATen and Caffe2 build systems (e.g., main library libtorch_cpu is defined in caffe2/CMakeLists.txt)cmake: not very much syntax, "everything is a function". This means you can look up constructs relatively easily; e.g., even if() is a commandthe general cmake model: "set a bunch of variables, run a bunch of commands". cmake is VERY GREPPABLEbut not everything is in CMakeLists.txt; check *.cmake toothe directory structure makes no sense, you really need to grep.(doing a lot of set PARENT_SCOPE to propagate stuff)renaming a file? grep for itprimary hazard of refactoring: need to make sure all the variablesare setup at the new locationmany directories are not recursive glob, beware of adding new directoriesold school cmake: literally everything is stuffed in variables (CMAKE_CXX_FLAGS). new school cmake: attach things to targets, things propagate when you depend on targets (public/private dependencies)add_library: the most important thingdon't randomly change things and pray: have hypotheses and test them
https://themummichogblog.com/sviluppo-di-linux-con-visual-studio-il-supporto-di-prima-classe-per-gdbserver-miglioramento-dei-tempi-di-costruire-con-ninja-e-gli-aggiornamenti-di-connection-manager12-06-2020/ sviluppo di Linux con Visual Studio: il supporto di prima classe per gdbserver, miglioramento dei tempi di costruire con Ninja, e gli aggiornamenti di Connection Manager Erika Erika 2 giugno 2020 Con Visual Studio 2019 è possibile costruire ed eseguire il debug C ++ progetti su un sistema Linux remoto o Windows Subsystem for Linux (WSL). Si può iniziare con lo sviluppo di Linux in Visual Studio utilizzando progetti Linux MSBuild-based o il nostro supporto nativo per CMake. CMake consente di utilizzare gli stessi script di codice sorgente e costruire per indirizzare più piattaforme ed è la nostra raccomandazione per niente cross-piattaforma o con un occhio al open-sourcing. Questo post del blog copre i recenti miglioramenti al nostro supporto Linux in Visual Studio, tra cui:
Cmake. The demo Cmake script from this episode is : cmake_minimum_required(VERSION 3.10) project(World VERSION 1.0) add_executable(World world.c) file(COPY assets DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") target_include_directories(World PUBLIC "${PROJECT_BINARY_DIR}") install(TARGETS World) install(DIRECTORY assets/ TYPE DATA) shasum -a256=74c789099ac52449393ca61624c1116a29e2ef2e48e84a8a7639dac64d0329a4
Rob and Jason are joined by David Barr (aka javidx9). They first discuss Microsoft open sourcing calculator, an update to CMake and the March 2021 ISO Mailing. Then they talk to David about his YouTube channel, One Lone Coder, what inspired him to start it, and PixelGameEngine, the 2D game engine he works on with the One Lone Coder community. News Freestanding avr-libstdc++ Calc.exe is now open source Cmake 3.20.0 available for download ISO C++ March Mailing Links javidx9 - One Lone Coder YouTube Channel javidx9 - Twitch Channel One Lone Coder Community Sponsors C++ Builder
В 17 выпуске подкаста Javaswag поговорили с Романом Кудряшовым о Graphql, Котлине, сравнении Спринга и Микронаута и преимуществах Rust 00:01:23 О себе 00:07:12 Порог входа Rust 00:13:15 Cmake (*для библиотеки надо только чтобы cmake был в path, остальное будет сделано автоматически) 00:19:28 Преимущества GraphQL 00:21:08 Идеология 00:27:58 Query, Mutation, Subscription 00:39:36 Subscriptions и нотификации 00:43:11 Легаси проект, JOOQ, Hibernate, SpringBoot 1.4 00:48:21 Делпой в кубер и девопсеры 00:56:57 Spring, Quarkus, Micronaut, Ktor 01:00:56 Котлин 01:13:46 Graphql на Rust Гость - https://twitter.com/_rkudryashov
Rob and Jason are joined by Corentin Jabot. They first talk about a Visual Studio blog post on performance improvements in the 'inner build loop', and a ray tracer built into CMake. Then they talk to Corentin about his work in the C++ ISO committee on the Library Evolution Working Group and his thoughts on what could and should make it into C++23. News f(t) Faster C++ Iteration Builds Ray Tracing in pure Cmake Is Zero a Butterfly? Links What is the standard Library P2172 - What do we want from a modularized Standard Library? Sponsors PVS-Studio. Write #cppcast in the message field on the download page and get one month license PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents Why it is important to apply static analysis for open libraries that you add to your project Use code JetBrainsForCppCast during checkout at JetBrains.com for a 25% discount
This week we chat with Isabella (Izzy) Muerte about modules, build systems and more. We talk about xyr new job (which, at the time of recording, was with Netlify), and how that still involves working on build systems - but particularly CMake, where xe has found an intriguing special use for emoji! We segue into a discussion about modules, which Izzy was definitely down on a couple of years ago, and what xe thinks of them now. To avoid spoilers don't read the title!
Rob and Jason are joined by Artem Dinaburg and Ryan Eberhardt. They first talk about a new version of CMake that was just released, an interview with Bjarne Stroustrup and another month of new ISO papers. Then they talk to Artem and Ryan who talk about fuzz testing, including a new fuzz testing project being worked at Trail of Bits to enable fuzz testing on the GPU. News Cmake 3.19 available for download How C++ became the invisible foundation for everything, and what's next November Monthly Mailing Links Let's build a high-performance fuzzer with GPUs! The Relevance of Classic Fuzz Testing: Have We Solved This One? Vectorized Emulation: Hardware accelerated taint tracking at 2 trillion instructions per second DeepState - Parameterized Unit Testing Framework MCSema - Tool to translate binaries to LLVM bitcode Remill - Library of CPU instruction semantics Anvill - Tool to make translated bitcode look closer to what a compiler would emit Rellic - Translates LLVM bitcode to C using Clang's AST library Sponsors PVS-Studio. Write #cppcast in the message field on the download page and get one month license PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents Why it is important to apply static analysis for open libraries that you add to your project Use code JetBrainsForCppCast during checkout at JetBrains.com for a 25% discount
You can read up on Deno 1.0 here.The star-studded ceremony for the 2020 Webby's can be watched on repeat here (not that we're doing that...)This is the Wired story about Lee Holloway, a brilliant coder who helped build Cloudflare, but then mysteriously fell into decline. It's a sad but beautifully written tale.Thanks to Stack Overflow user htamas for saving a question and winning a lifeboat : Gradle project refresh failed, unable to get the CMake.Ryan's piece on how coders beg, borrow, and steal can be found here.
You can read up on Deno 1.0 here.The star-studded ceremony for the 2020 Webby's can be watched on repeat here (not that we're doing that...)This is the Wired story about Lee Holloway, a brilliant coder who helped build Cloudflare, but then mysteriously fell into decline. It's a sad but beautifully written tale.Thanks to Stack Overflow user htamas for saving a question and winning a lifeboat : Gradle project refresh failed, unable to get the CMake.Ryan's piece on how coders beg, borrow, and steal can be found here.
Dave & David installing the software required for the uSupply development. Yep, one whole hour of installing software, for all you software installation aficionados. Microsoft Visual Studio Code, cMake, Ninja, OpenOCD, and ST ARM programmers. Doxygen and how to do automatically documenting code. Forum: https://www.eevblog.com/forum/blog/eevblog-1264-usupply-software-development-setup/
Rob and Jason are joined by Craig Scott. They first discuss a recent blog post from PVS-Studio analyzing some bugs in CMake. Then Craig talks about how he got involved in CMake development, and his e-book 'Professional CMake: A Practical Guide.' Craig is a CMake co-maintainer and author of the book ["Professional CMake: A Practical Guide"](https://crascit.com/professional-cmake/). He has been developing cross-platform C++ software since 2001, targeting most major platforms and working on large scale frameworks, scientific algorithm development, Qt GUI applications, backend services and embedded devices. He has been fortunate enough to work in a range of settings including government research, consumer electronics, mid-size enterprise and a startup. He derives unreasonable levels of satisfaction from automating software build and CI processes, making them more efficient, more robust and easier for developers to use. News CMake: the Case when the Project's Quality is Unforgivable PVS Studio The Last Line Effect Serenity: Graphical x86 operating system written entirely in C++ Talks and Speakers of Meeting C++ 2019 are online Links "Professional CMake: A Practical Guide" CppCon: Deep CMake for Library Authors Publishing Effective Modern C++, Part 1 Sponsors Enter #cppcast in the Message field and get a month-license instead of 7-day license PVS-Studio PVS-Studio Twitter JetBrains
Rob and Jason are joined by Vittorio Romeo from Bloomberg. They first discuss some changes in the recent Visual Studio update for cross platform linux development, and some post-Cologne ISO developments. Then Vittorio goes into more detail on his proposal for C++ epochs, which could allow the language to more easily introduce breaking changes in the future. Vittorio Romeo has been a Software Engineer at Bloomberg for more than 3 years, working on mission-critical company C++ infrastructure and providing Modern C++ training to hundreds of fellow employees. He began programming around the age of 8 and quickly became a C++ enthusiast. Vittorio created several open-source C++ libraries and games, published many video courses and tutorials, and actively participates in the ISO C++ standardization process. He is also an active member of the C++ community and has an ardent desire to share his knowledge and learn from others. When he’s not writing code, Vittorio enjoys weightlifting and fitness-related activities, competitive/challenging computer gaming and sci-fi movies/TV-series. News C++ Cross-Platform Development with VS 2019 16.3 vcpkg, Cmake config, remote headers and WSL Post-Cologne mailing Links Fixing C++ with Epochs C++ 11/14 for C++03 Developers Sponsors Enter #cppcast in the Message field and get a month-license instead of 7-day license PVS-Studio PVS-Studio Twitter
Rob and Jason are joined by Robert Maynard from Kitware to discuss CMake and VTK. Robert Maynard is a principal engineer at Kitware and spends most of his time as a primary developer of VTK-m. VTK-m is a HPC toolkit of scientific visualization algorithms for highly concurrent processor and accelerator architectures. It uses a fine-grained concurrency model for data analysis and visualization algorithms allowing for seamless execution on GPU's or many-core CPUs. When not working on VTK-m, Robert is either; writing CMake code, teaching CMake, or working to improve CMake. News In support of P1485 "Better keywords for coroutines" The power of Hidden Friends in C++ CppCon Poster Submissions 2019 To Save The Science Poster, Researchers Want To Kill It And Start Over Robert Maynard @robertjmaynard Links CMake CMake 3.15 Release Notes VTK Sponsors PVS-Studio Facebook PVS-Studio Telegram PVS-Studio Twitter Hosts @robwirving @lefticus
In this episode with special guest Keith Smiley, we cover the growing number of tools that let you build things in Swift, a few of which are made by Apple, as well as some others like CMake, Bazel and Buck.
Whats happening Ratchets. In this episode of Between Ratchet and Righteousness, we pay our respects to the late great Nipsey Hussle. We also pose a question to the fam as well......."Should we always have our family back? Even if we got it?" CMake sure to follow us on our facebook page : https://www.facebook.com/betweenRatchetandRighteousness/ Got questions? Email us at betweenratchetandrighteous@gmail.com Support Us: https://anchor.fm/BetweenRandR/support #NipseyHussle #Family #Ratchet #RIP #hiphop #HipHopPodcast #Podcast --- Send in a voice message: https://anchor.fm/BetweenRandR/message Support this podcast: https://anchor.fm/BetweenRandR/support
Rob and Jason are joined by Victor Zverovich to discuss the fmt modern formatting library and the proposal to bring it to C++20. Victor Zverovich is a software engineer at Facebook working on the Thrift RPC framework. Before joining Facebook in 2016, he worked for several years on modeling systems for mathematical optimization. He is an active contributor to open-source projects, an author of the {fmt} library and the ISO proposal P0645 to add a new formatting facility to C++. News eclipsecon: Docker Container Build/Run/Debug Support for C/C++ Projects Professional, zero-cost setup for C++ projects (1 of N) In-Editor Documentation for Cmake in Visual Studio Understanding when not to std::move in C++ Announcing CPPP - Paris 2019 Victor Zverovich @vzverovich Victor Zverovich's GitHub Links fmt - A modern formatting library P0645 - Text Formatting P1361 - Integration of chrono with text formatting Sponsors Wanna Play a Detective? Find the Bug in a Function from Midnight Commander False Positives in PVS-Studio: How Deep the Rabbit Hole Goes Hosts @robwirving @lefticus
Rob and Jason are joined by Isabella Muerte to discuss her experience presenting multiple papers at her first ISO meeting in San Diego and her thoughts on Merged Modules. Isabella Muerte is a C++ Bruja, Build System Titan, and an open source advocate. She cares deeply about improving the workflow and debugging experience the C++ community currently has and is designing and implementing an experimental next-generation build system called Coven based on ideas mentioned in her CppCon 2017 talk "There Will Be Build Systems", while also simultaneously ripping CMake apart and putting it back together again with a library titled IXM. She recently launched aliasa.io, a small URL routing service intended for the CMake FetchContent module. She enjoys playing Destiny 2, acquiring tattoos, and is currently trying to master the five elements of earth, wind, water, fire, and gun (but she makes no promises). She bows to no entity but the terrifying Eldritch Daystar we call the "sun", and hopes to one day own two german shepherds named Rip and Tear. News Modern C++ Lamentations C++ at the end of 2018 Getting you there - your C++ standardization efforts in 2019 Visual Studio Intellicode Isabella Muerte @slurpsmadrips Isabella's Twitch Isabella's GitHub Isabella's Blog Links aliasa.io P0468R1 An Intrusive Smart Pointer P1272R0 Byteswapping for fun&&nuf P1275R0 Desert Sessions: Improving hostile environment interactions P1276R0 Void Main P1279R0 std::breakpoint P1280R0 Integer Width Literals CppCon 2017: Isabella Muerte "There Will Be Build Systems: I Configure Your Milkshake" Sponsors Backtrace Hosts @robwirving @lefticus
Byproducts of reading OpenBSD’s netcat code, learnings from porting your own projects to FreeBSD, OpenBSD’s unveil(), NetBSD’s Virtual Machine Monitor, what 'dependency' means in Unix init systems, jailing bhyve, and more. ##Headlines ###The byproducts of reading OpenBSD netcat code When I took part in a training last year, I heard about netcat for the first time. During that class, the tutor showed some hacks and tricks of using netcat which appealed to me and motivated me to learn the guts of it. Fortunately, in the past 2 months, I was not so busy that I can spend my spare time to dive into OpenBSD‘s netcat source code, and got abundant byproducts during this process. (1) Brush up socket programming. I wrote my first network application more than 10 years ago, and always think the socket APIs are marvelous. Just ~10 functions (socket, bind, listen, accept…) with some IO multiplexing buddies (select, poll, epoll…) connect the whole world, wonderful! From that time, I developed a habit that is when touching a new programming language, network programming is an essential exercise. Even though I don’t write socket related code now, reading netcat socket code indeed refresh my knowledge and teach me new stuff. (2) Write a tutorial about netcat. I am mediocre programmer and will forget things when I don’t use it for a long time. So I just take notes of what I think is useful. IMHO, this “tutorial” doesn’t really mean teach others something, but just a journal which I can refer when I need in the future. (3) Submit patches to netcat. During reading code, I also found bugs and some enhancements. Though trivial contributions to OpenBSD, I am still happy and enjoy it. (4) Implement a C++ encapsulation of libtls. OpenBSD‘s netcat supports tls/ssl connection, but it needs you take full care of resource management (memory, socket, etc), otherwise a small mistake can lead to resource leak which is fatal for long-live applications (In fact, the two bugs I reported to OpenBSD are all related resource leak). Therefore I develop a simple C++ library which wraps the libtls and hope it can free developer from this troublesome problem and put more energy in application logic part. Long story to short, reading classical source code is a rewarding process, and you can consider to try it yourself. ###What I learned from porting my projects to FreeBSD Introduction I set up a local FreeBSD VirtualBox VM to test something, and it seems to work very well. Due to the novelty factor, I decided to get my software projects to build and pass the tests there. The Projects https://github.com/shlomif/shlomif-computer-settings/ (my dotfiles). https://web-cpan.shlomifish.org/latemp/ https://fc-solve.shlomifish.org/ https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/ https://better-scm.shlomifish.org/source/ http://perl-begin.org/source/ https://www.shlomifish.org/meta/site-source/ Written using a mix of C, Perl 5, Python, Ruby, GNU Bash, XML, CMake, XSLT, XHTML5, XHTML1.1, Website META Language, JavaScript and more. Work fine on several Linux distributions and have https://en.wikipedia.org/wiki/TravisCI using Ubuntu 14.04 hosts Some pass builds and tests on AppVeyor/Win64 What I Learned: FreeBSD on VBox has become very reliable Some executables on FreeBSD are in /usr/local/bin instead of /usr/bin make on FreeBSD is not GNU make m4 on FreeBSD is not compatible with GNU m4 Some CPAN Modules fail to install using local-lib there DocBook/XSL Does Not Live Under /usr/share/sgml FreeBSD’s grep does not have a “-P” flag by default FreeBSD has no “nproc” command Conclusion: It is easier to port a shell than a shell script. — Larry Wall I ran into some cases where my scriptology was lacking and suboptimal, even for my own personal use, and fixed them. ##News Roundup ###OpenBSD’s unveil() One of the key aspects of hardening the user-space side of an operating system is to provide mechanisms for restricting which parts of the filesystem hierarchy a given process can access. Linux has a number of mechanisms of varying capability and complexity for this purpose, but other kernels have taken a different approach. Over the last few months, OpenBSD has inaugurated a new system call named unveil() for this type of hardening that differs significantly from the mechanisms found in Linux. The value of restricting access to the filesystem, from a security point of view, is fairly obvious. A compromised process cannot exfiltrate data that it cannot read, and it cannot corrupt files that it cannot write. Preventing unwanted access is, of course, the purpose of the permissions bits attached to every file, but permissions fall short in an important way: just because a particular user has access to a given file does not necessarily imply that every program run by that user should also have access to that file. There is no reason why your PDF viewer should be able to read your SSH keys, for example. Relying on just the permission bits makes it easy for a compromised process to access files that have nothing to do with that process’s actual job. In a Linux system, there are many ways of trying to restrict that access; that is one of the purposes behind the Linux security module (LSM) architecture, for example. The SELinux LSM uses a complex matrix of labels and roles to make access-control decisions. The AppArmor LSM, instead, uses a relatively simple table of permissible pathnames associated with each application; that approach was highly controversial when AppArmor was first merged, and is still looked down upon by some security developers. Mount namespaces can be used to create a special view of the filesystem hierarchy for a set of processes, rendering much of that hierarchy invisible and, thus, inaccessible. The seccomp mechanism can be used to make decisions on attempts by a process to access files, but that approach is complex and error-prone. Yet another approach can be seen in the Qubes OS distribution, which runs applications in virtual machines to strictly control what they can access. Compared to many of the options found in Linux, unveil() is an exercise in simplicity. This system call, introduced in July, has this prototype: int unveil(const char *path, const char *permissions); A process that has never called unveil() has full access to the filesystem hierarchy, modulo the usual file permissions and any restrictions that may have been applied by calling pledge(). Calling unveil() for the first time will “drop a veil” across the entire filesystem, rendering the whole thing invisible to the process, with one exception: the file or directory hierarchy starting at path will be accessible with the given permissions. The permissions string can contain any of “r” for read access, “w” for write, “x” for execute, and “c” for the ability to create or remove the path. Subsequent calls to unveil() will make other parts of the filesystem hierarchy accessible; the unveil() system call itself still has access to the entire hierarchy, so there is no problem with unveiling distinct subtrees that are, until the call is made, invisible to the process. If one unveil() call applies to a subtree of a hierarchy unveiled by another call, the permissions associated with the more specific call apply. Calling unveil() with both arguments as null will block any further calls, setting the current view of the filesystem in stone. Calls to unveil() can also be blocked using pledge(). Either way, once the view of the filesystem has been set up appropriately, it is possible to lock it so that the process cannot expand its access in the future should it be taken over and turn hostile. unveil() thus looks a bit like AppArmor, in that it is a path-based mechanism for restricting access to files. In either case, one must first study the program in question to gain a solid understanding of which files it needs to access before closing things down, or the program is likely to break. One significant difference (beyond the other sorts of behavior that AppArmor can control) is that AppArmor’s permissions are stored in an external policy file, while unveil() calls are made by the application itself. That approach keeps the access rules tightly tied to the application and easy for the developers to modify, but it also makes it harder for system administrators to change them without having to rebuild the application from source. One can certainly aim a number of criticisms at unveil() — all of the complaints that have been leveled at path-based access control and more. But the simplicity of unveil() brings a certain kind of utility, as can be seen in the large number of OpenBSD applications that are being modified to use it. OpenBSD is gaining a base level of protection against unintended program behavior; while it is arguably possible to protect a Linux system to a much greater extent, the complexity of the mechanisms involved keeps that from happening in a lot of real-world deployments. There is a certain kind of virtue to simplicity in security mechanisms. ###NetBSD Virtual Machine Monitor (NVVM) NetBSD Virtual Machine Monitor The NVMM driver provides hardware-accelerated virtualization support on NetBSD. It is made of an ~MI frontend, to which MD backends can be plugged. A virtualization API is provided in libnvmm, that allows to easily create and manage virtual machines via NVMM. Two additional components are shipped as demonstrators, toyvirt and smallkern: the former is a toy virtualizer, that executes in a VM the 64bit ELF binary given as argument, the latter is an example of such binary. Download The source code of NVMM, plus the associated tools, can be downloaded here. Technical details NVMM can support up to 128 virtual machines, each having a maximum of 256 VCPUs and 4GB of RAM. Each virtual machine is granted access to most of the CPU registers: the GPRs (obviously), the Segment Registers, the Control Registers, the Debug Registers, the FPU (x87 and SSE), and several MSRs. Events can be injected in the virtual machines, to emulate device interrupts. A delay mechanism is used, and allows VMM software to schedule the interrupt right when the VCPU can receive it. NMIs can be injected as well, and use a similar mechanism. The host must always be x8664, but the guest has no constraint on the mode, so it can be x8632, PAE, real mode, and so on. The TSC of each VCPU is always re-based on the host CPU it is executing on, and is therefore guaranteed to increase regardless of the host CPU. However, it may not increase monotonically, because it is not possible to fully hide the host effects on the guest during #VMEXITs. When there are more VCPUs than the host TLB can deal with, NVMM uses a shared ASID, and flushes the shared-ASID VCPUs on each VM switch. The different intercepts are configured in such a way that they cover everything that needs to be emulated. In particular, the LAPIC can be emulated by VMM software, by intercepting reads/writes to the LAPIC page in memory, and monitoring changes to CR8 in the exit state. ###What ‘dependency’ means in Unix init systems is underspecified (utoronto.ca) I was reading Davin McCall’s On the vagaries of init systems (via) when I ran across the following, about the relationship between various daemons (services, etc): I do not see any compelling reason for having ordering relationships without actual dependency, as both Nosh and Systemd provide for. In comparison, Dinit’s dependencies also imply an ordering, which obviates the need to list a dependency twice in the service description. Well, this may be an easy one but it depends on what an init system means by ‘dependency’. Let’s consider ®syslog and the SSH daemon. I want the syslog daemon to be started before the SSH daemon is started, so that the SSH daemon can log things to it from the beginning. However, I very much do not want the SSH daemon to not be started (or to be shut down) if the syslog daemon fails to start or later fails. If syslog fails, I still want the SSH daemon to be there so that I can perhaps SSH in to the machine and fix the problem. This is generally true of almost all daemons; I want them to start after syslog, so that they can syslog things, but I almost never want them to not be running if syslog failed. (And if for some reason syslog is not configured to start, I want enabling and starting, say, SSH, to also enable and start the syslog daemon.) In general, there are three different relationships between services that I tend to encounter: a hard requirement, where service B is useless or dangerous without service A. For instance, many NFS v2 and NFS v3 daemons basically don’t function without the RPC portmapper alive and active. On any number of systems, firewall rules being in place are a hard requirement to start most network services; you would rather your network services not start at all than that they start without your defenses in place. a want, where service B wants service A to be running before B starts up, and service A should be started even if it wouldn’t otherwise be, but the failure of A still leaves B functional. Many daemons want the syslog daemon to be started before they start but will run without it, and often you want them to do so so that at least some of the system works even if there is, say, a corrupt syslog configuration file that causes the daemon to error out on start. (But some environments want to hard-fail if they can’t collect security related logging information, so they might make rsyslogd a requirement instead of a want.) an ordering, where if service A is going to be started, B wants to start after it (or before it), but B isn’t otherwise calling for A to be started. We have some of these in our systems, where we need NFS mounts done before cron starts and runs people’s @reboot jobs but neither cron nor NFS mounts exactly or explicitly want each other. (The system as a whole wants both, but that’s a different thing.) Given these different relationships and the implications for what the init system should do in different situations, talking about ‘dependency’ in it systems is kind of underspecified. What sort of dependency? What happens if one service doesn’t start or fails later? My impression is that generally people pick a want relationship as the default meaning for init system ‘dependency’. Usually this is fine; most services aren’t actively dangerous if one of their declared dependencies fails to start, and it’s generally harmless on any particular system to force a want instead of an ordering relationship because you’re going to be starting everything anyway. (In my example, you might as well say that cron on the systems in question wants NFS mounts. There is no difference in practice; we already always want to do NFS mounts and start cron.) ###Jailing The bhyve Hypervisor As FreeBSD nears the final 12.0-RELEASE release engineering cycles, I’d like to take a moment to document a cool new feature coming in 12: jailed bhyve. You may notice that I use HardenedBSD instead of FreeBSD in this article. There is no functional difference in bhyve on HardenedBSD versus bhyve on FreeBSD. The only difference between HardenedBSD and FreeBSD is the aditional security offered by HardenedBSD. The steps I outline here work for both FreeBSD and HardenedBSD. These are the bare minimum steps, no extra work needed for either FreeBSD or HardenedBSD. A Gentle History Lesson At work in my spare time, I’m helping develop a malware lab. Due to the nature of the beast, we would like to use bhyve on HardenedBSD. Starting with HardenedBSD 12, non-Cross-DSO CFI, SafeStack, Capsicum, ASLR, and strict W^X are all applied to bhyve, making it an extremely hardened hypervisor. So, the work to support jailed bhyve is sponsored by both HardenedBSD and my employer. We’ve also jointly worked on other bhyve hardening features, like protecting the VM’s address space using guard pages (mmap(…, MAPGUARD, …)). Further work is being done in a project called “malhyve.” Only those modifications to bhyve/malhyve that make sense to upstream will be upstreamed. Initial Setup We will not go through the process of creating the jail’s filesystem. That process is documented in the FreeBSD Handbook. For UEFI guests, you will need to install the uefi-edk2-bhyve package inside the jail. I network these jails with traditional jail networking. I have tested vnet jails with this setup, and that works fine, too. However, there is no real need to hook the jail up to any network so long as bhyve can access the tap device. In some cases, the VM might not need networking, in which case you can use a network-less VM in a network-less jail. By default, access to the kernel side of bhyve is disabled within jails. We need to set allow.vmm in our jail.conf entry for the bhyve jail. We will use the following in our jail, so we will need to set up devfs(8) rules for them: A ZFS volume A null-modem device (nmdm(4)) UEFI GOP (no devfs rule, but IP assigned to the jail) A tap device Conclusion The bhyve hypervisor works great within a jail. When combined with HardenedBSD, bhyve is extremely hardened: PaX ASLR is fully applied due to compilation as a Position-Independent Executable (HardenedBSD enhancement) PaX NOEXEC is fully applied (strict W^X) (HardenedBSD enhancement) Non-Cross-DSO CFI is fully applied (HardenedBSD enhancement) Full RELRO (RELRO + BINDNOW) is fully applied (HardenedBSD enhancement) SafeStack is applied to the application (HardenedBSD enhancement) Jailed (FreeBSD feature written by HardenedBSD) Virtual memory protected with guard pages (FreeBSD feature written by HardenedBSD) Capsicum is fully applied (FreeBSD feature) Bad guys are going to have a hard time breaking out of the userland components of bhyve on HardenedBSD. :) ##Beastie Bits GhostBSD 18.10 has been released Project Trident RC3 has been released The OpenBSD Foundation receives the first Silver contribution from a single individual Monitoring pf logs gource NetBSD on the RISC-V is alive The X hole Announcing the pkgsrc-2018Q3 release (2018-10-05) NAT performance on EdgeRouter X and Lite with EdgeOS, OpenBSD, and OpenWRT UNIX (as we know it) might not have existed without Mrs. Thompson Free Pizza for your dev events Portland BSD Pizza Night: Nov 29th 7pm ##Feedback/Questions Dennis - Core developers leaving illumOS? Ben - Jumping from snapshot to snapshot Ias - Question about ZFS snapshots Send questions, comments, show ideas/topics, or stories you want mentioned on the show to feedback@bsdnow.tv
Installing Linux, GCC, GDB, Git, CMake, LLVM, Clang, Boost, SFML, CodeLite, Sublime Text 3, And Dropbox On a $140 Lenovo ideapad 120S makes an ultra portable C++ programming laptop.
Rob and Jason are joined by Anders Knatten to discuss the CppQuiz.org website, it's inspiration, recent updates and more. Anders is here as the author of cppquiz.org. He's been working as a programmer since 2001, in fields ranging from multiphase flow simulations to web development. He’s been doing everything from working on compilers to being CTO, and has been using a wide variety of languages. C++ is closest to his heart, but he’s been doing other things for the last five years. He’s very happy to be back as a C++ developer from October 1, in his new job at Zivid Labs. Anders is also a father of two, and in his spare time he’s the producer and frontman of the futurepop band Modulo One. News C++ Alliance Sponsors Cpplang slack and more CMakeRC A standalone Cmake based C++ Resource Compiler Anders Knatten @knatten C++ on a Friday Links C++Quiz Non-virtual destructors Destroy All Software Lightning Talk Zivid Labs Oslo C++ Users Group Sponsors Download PVS-Studio We Checked the Android Source Code by PVS-Studio, or Nothing is Perfect Patreon CppCast Patreon Hosts @robwirving @lefticus
Insight into TrueOS and Trident, stop evildoers with pf-badhost, Flashback to FreeBSDcon ‘99, OpenBSD’s measures against TLBleed, play Morrowind on OpenBSD in 5 steps, DragonflyBSD developers shocked at Threadripper performance, and more. ##Headlines An Insight into the Future of TrueOS BSD and Project Trident Last month, TrueOS announced that they would be spinning off their desktop offering. The team behind the new project, named Project Trident, have been working furiously towards their first release. They did take a few minutes to answer some of our question about Project Trident and TrueOS. I would like to thank JT and Ken for taking the time to compile these answers. It’s FOSS: What is Project Trident? Project Trident: Project Trident is the continuation of the TrueOS Desktop. Essentially, it is the continuation of the primary “TrueOS software” that people have been using for the past 2 years. The continuing evolution of the entire TrueOS project has reached a stage where it became necessary to reorganize the project. To understand this change, it is important to know the history of the TrueOS project. Originally, Kris Moore created PC-BSD. This was a Desktop release of FreeBSD focused on providing a simple and user-friendly graphical experience for FreeBSD. PC-BSD grew and matured over many years. During the evolution of PC-BSD, many users began asking for a server focused version of the software. Kris agreed, and TrueOS was born as a scaled down server version of PC-BSD. In late 2016, more contributors and growth resulted in significant changes to the PC-BSD codebase. Because the new development was so markedly different from the original PC-BSD design, it was decided to rebrand the project. TrueOS was chosen as the name for this new direction for PC-BSD as the project had grown beyond providing only a graphical front to FreeBSD and was beginning to make fundamental changes to the FreeBSD operating system. One of these changes was moving PC-BSD from being based on each FreeBSD Release to TrueOS being based on the active and less outdated FreeBSD Current. Other major changes are using OpenRC for service management and being more aggressive about addressing long-standing issues with the FreeBSD release process. TrueOS moved toward a rolling release cycle, twice a year, which tested and merged FreeBSD changes directly from the developer instead of waiting months or even years for the FreeBSD review process to finish. TrueOS also deprecated and removed obsolete technology much more regularly. As the TrueOS Project grew, the developers found these changes were needed by other FreeBSD-based projects. These projects began expressing interest in using TrueOS rather than FreeBSD as the base for their project. This demonstrated that TrueOS needed to again evolve into a distribution framework for any BSD project to use. This allows port maintainers and source developers from any BSD project to pool their resources and use the same source repositories while allowing every distribution to still customize, build, and release their own self-contained project. The result is a natural split of the traditional TrueOS team. There were now naturally two teams in the TrueOS project: those working on the build infrastructure and FreeBSD enhancements – the “core” part of the project, and those working on end-user experience and utility – the “desktop” part of the project. When the decision was made to formally split the projects, the obvious question that arose was what to call the “Desktop” project. As TrueOS was already positioned to be a BSD distribution platform, the developers agreed the desktop side should pick a new name. There were other considerations too, one notable being that we were concerned that if we continued to call the desktop project “TrueOS Desktop”, it would prevent people from considering TrueOS as the basis for their distribution because of misconceptions that TrueOS was a desktop-focused OS. It also helps to “level the playing field” for other desktop distributions like GhostBSD so that TrueOS is not viewed as having a single “blessed” desktop version. It’s FOSS: What features will TrueOS add to the FreeBSD base? Project Trident: TrueOS has already added a number of features to FreeBSD: OpenRC replaces rc.d for service management LibreSSL in base Root NSS certificates out-of-box Scriptable installations (pc-sysinstall) The full list of changes can be seen on the TrueOS repository (https://github.com/trueos/trueos/blob/trueos-master/README.md). This list does change quite regularly as FreeBSD development itself changes. It’s FOSS: I understand that TrueOS will have a new feature that will make creating a desktop spin of TrueOS very easy. Could you explain that new feature? Project Trident: Historically, one of the biggest hurdles for creating a desktop version of FreeBSD is that the build options for packages are tuned for servers rather than desktops. This means a desktop distribution cannot use the pre-built packages from FreeBSD and must build, use, and maintain a custom package repository. Maintaining a fork of the FreeBSD ports tree is no trivial task. TrueOS has created a full distribution framework so now all it takes to create a custom build of FreeBSD is a single JSON manifest file. There is now a single “source of truth” for the source and ports repositories that is maintained by the TrueOS team and regularly tagged with “stable” build markers. All projects can use this framework, which makes updates trivial. It’s FOSS: Do you think that the new focus of TrueOS will lead to the creation of more desktop-centered BSDs? Project Trident: That is the hope. Historically, creating a desktop-centered BSD has required a lot of specialized knowledge. Not only do most people not have this knowledge, but many do not even know what they need to learn until they start troubleshooting. TrueOS is trying to drastically simplify this process to enable the wider Open Source community to experiment, contribute, and enjoy BSD-based projects. It’s FOSS: What is going to happen to TrueOS Pico? Will Project Trident have ARM support? Project Trident: Project Trident will be dependent on TrueOS for ARM support. The developers have talked about the possibility of supporting ARM64 and RISC-V architectures, but it is not possible at the current time. If more Open Source contributors want to help develop ARM and RISC-V support, the TrueOS project is definitely willing to help test and integrate that code. It’s FOSS: What does this change (splitting Trus OS into Project Trident) mean for the Lumina desktop environment? Project Trident: Long-term, almost nothing. Lumina is still the desktop environment for Project Trident and will continue to be developed and enhanced alongside Project Trident just as it was for TrueOS. Short-term, we will be delaying the release of Lumina 2.0 and will release an updated version of the 1.x branch (1.5.0) instead. This is simply due to all the extra overhead to get Project Trident up and running. When things settle down into a rhythm, the development of Lumina will pick up once again. It’s FOSS: Are you planning on including any desktop environments besides Lumina? Project Trident: While Lumina is included by default, all of the other popular desktop environments will be available in the package repo exactly as they had been before. It’s FOSS: Any plans to include Steam to increase the userbase? Project Trident: Steam is still unavailable natively on FreeBSD, so we do not have any plans to ship it out of the box currently. In the meantime, we highly recommend installing the Windows version of Steam through the PlayOnBSD utility. It’s FOSS: What will happen to the AppCafe? Project Trident: The AppCafe is the name of the graphical interface for the “pkg” utility integrated into the SysAdm client created by TrueOS. This hasn’t changed. SysAdm, the graphical client, and by extension AppCafe are still available for all TrueOS-based distributions to use. It’s FOSS: Does Project Trident have any corporate sponsors lined up? If not, would you be open to it or would you prefer that it be community supported? Project Trident: iXsystems is the first corporate sponsor of Project Trident and we are always open to other sponsorships as well. We would prefer smaller individual contributions from the community, but we understand that larger project needs or special-purpose goals are much more difficult to achieve without allowing larger corporate sponsorships as well. In either case, Project Trident is always looking out for the best interests of the community and will not allow intrusive or harmful code to enter the project even if a company or individual tries to make that code part of a sponsorship deal. It’s FOSS: BSD always seems to be lagging in terms of support for newer devices. Will TrueOS be able to remedy that with a quicker release cycle? Project Trident: Yes! That was a primary reason for TrueOS to start tracking the CURRENT branch of FreeBSD in 2016. This allows for the changes that FreeBSD developers are making, including new hardware support, to be available much sooner than if we followed the FreeBSD release cycle. It’s FOSS: Do you have any idea when Project Trident will have its first release? Project Trident: Right now we are targeting a late August release date. This is because Project Trident is “kicking the wheels” on the new TrueOS distribution system. We want to ensure everything is working smoothly before we release. Going forward, we plan on having regular package updates every week or two for the end-user packages and a new release of Trident with an updated OS version every 6 months. This will follow the TrueOS release schedule with a small time offset. ###pf-badhost: Stop the evil doers in their tracks! pf-badhost is a simple, easy to use badhost blocker that uses the power of the pf firewall to block many of the internet’s biggest irritants. Annoyances such as ssh bruteforcers are largely eliminated. Shodan scans and bots looking for webservers to abuse are stopped dead in their tracks. When used to filter outbound traffic, pf-badhost blocks many seedy, spooky malware containing and/or compromised webhosts. Filtering performance is exceptional, as the badhost list is stored in a pf table. To quote the OpenBSD FAQ page regarding tables: “the lookup time on a table holding 50,000 addresses is only slightly more than for one holding 50 addresses.” pf-badhost is simple and powerful. The blocklists are pulled from quality, trusted sources. The ‘Firehol’, ‘Emerging Threats’ and ‘Binary Defense’ block lists are used as they are popular, regularly updated lists of the internet’s most egregious offenders. The pf-badhost.sh script can easily be expanded to use additional or alternate blocklists. pf-badhost works best when used in conjunction with unbound-adblock for the ultimate badhost blocking. Notes: If you are trying to run pf-badhost on a LAN or are using NAT, you will want to add a rule to your pf.conf appearing BEFORE the pf-badhost rules allowing traffic to and from your local subnet so that you can still access your gateway and any DNS servers. Conversely, adding a line to pf-badhost.sh that removes your subnet range from the table should also work. Just make sure you choose a subnet range / CIDR block that is actually in the list. 192.168.0.0/16, 172.16.0.0/12 and 10.0.0.0/8 are the most common home/office subnet ranges. DigitalOcean https://do.co/bsdnow ###FLASHBACK: FreeBSDCon’99: Fans of Linux’s lesser-known sibling gather for the first time FreeBSD, a port of BSD Unix to Intel, has been around almost as long as Linux has – but without the media hype. Its developer and user community recently got a chance to get together for the first time, and they did it in the city where BSD – the Berkeley Software Distribution – was born some 25 years ago. October 17, 1999 marked a milestone in the history of FreeBSD – the first FreeBSD conference was held in the city where it all began, Berkeley, CA. Over 300 developers, users, and interested parties attended from around the globe. This was easily 50 percent more people than the conference organizers had expected. This first conference was meant to be a gathering mostly for developers and FreeBSD advocates. The turnout was surprisingly (and gratifyingly) large. In fact, attendance exceeded expectations so much that, for instance, Kirk McKusick had to add a second, identical tutorial on FreeBSD internals, because it was impossible for everyone to attend the first! But for a first-ever conference, I was impressed by how smoothly everything seemed to go. Sessions started on time, and the sessions I attended were well-run; nothing seemed to be too cold, dark, loud, late, or off-center. Of course, the best part about a conference such as this one is the opportunity to meet with other people who share similar interests. Lunches and breaks were a good time to meet people, as was the Tuesday night beer bash. The Wednesday night reception was of a type unusual for the technical conferences I usually attend – a three-hour Hornblower dinner cruise on San Francisco Bay. Not only did we all enjoy excellent food and company, but we all got to go up on deck and watch the lights of San Francisco and Berkeley as we drifted by. Although it’s nice when a conference attracts thousands of attendees, there are some things that can only be done with smaller groups of people; this was one of them. In short, this was a tiny conference, but a well-run one. Sessions Although it was a relatively small conference, the number and quality of the sessions belied the size. Each of the three days of the conference featured a different keynote speaker. In addition to Jordan Hubbard, Jeremy Allison spoke on “Samba Futures” on day two, and Brian Behlendorf gave a talk on “FreeBSD and Apache: A Perfect Combo” to start off the third day. The conference sessions themselves were divided into six tracks: advocacy, business, development, networking, security, and panels. The panels track featured three different panels, made up of three different slices of the community: the FreeBSD core team, a press panel, and a prominent user panel with representatives from such prominent commercial users as Yahoo! and USWest. I was especially interested in Apple Computer’s talk in the development track. Wilfredo Sanchez, technical lead for open source projects at Apple (no, that’s not an oxymoron!) spoke about Apple’s Darwin project, the company’s operating system road map, and the role of BSD (and, specifically, FreeBSD) in Apple’s plans. Apple and Unix have had a long and uneasy history, from the Lisa through the A/UX project to today. Personally, I’m very optimistic about the chances for the Darwin project to succeed. Apple’s core OS kernel team has chosen FreeBSD as its reference platform. I’m looking forward to what this partnership will bring to both sides. Other development track sessions included in-depth tutorials on writing device drivers, basics of the Vinum Volume Manager, Fibre Channel, development models (the open repository model), and the FreeBSD Documentation Project (FDP). If you’re interested in contributing to the FreeBSD project, the FDP is a good place to start. Advocacy sessions included “How One Person Can Make a Difference” (a timeless topic that would find a home at any technical conference!) and “Starting and Managing A User Group” (trials and tribulations as well as rewards). The business track featured speakers from three commercial users of FreeBSD: Cybernet, USWest, and Applix. Applix presented its port of Applixware Office for FreeBSD and explained how Applix has taken the core services of Applixware into open source. Commercial applications and open source were once a rare combination; we can only hope the trend away from that state of affairs will continue. Commercial use of FreeBSD The use of FreeBSD in embedded applications is increasing as well – and it is increasing at the same rate that hardware power is. These days, even inexpensive systems are able to run a BSD kernel. The BSD license and the solid TCP/IP stack prove significant enticements to this market as well. (Unlike the GNU Public License, the BSD license does not require that vendors make derivative works open source.) Companies such as USWest and Verio use FreeBSD for a wide variety of different Internet services. Yahoo! and Hotmail are examples of companies that use FreeBSD extensively for more specific purposes. Yahoo!, for example, has many hundreds of FreeBSD boxes, and Hotmail has almost 2000 FreeBSD machines at its data center in the San Francisco Bay area. Hotmail is owned by Microsoft, so the fact that it runs FreeBSD is a secret. Don’t tell anyone… When asked to comment on the increasing commercial interest in BSD, Hubbard said that FreeBSD is learning the Red Hat lesson. “Walnut Creek and others with business interests in FreeBSD have learned a few things from the Red Hat IPO,” he said, “and nobody is just sitting around now, content with business as usual. It’s clearly business as unusual in the open source world today.” Hubbard had also singled out some of BSD’s commercial partners, such as Whistle Communications, for praise in his opening day keynote. These partners play a key role in moving the project forward, he said, by contributing various enhancements and major new systems, such as Netgraph, as well as by contributing paid employee time spent on FreeBSD. Even short FreeBSD-related contacts can yield good results, Hubbard said. An example of this is the new jail() security code introduced in FreeBSD 3.x and 4.0, which was contributed by R & D Associates. A number of ISPs are also now donating the hardware and bandwidth that allows the project to provide more resource mirrors and experimental development sites. See you next year And speaking of corporate sponsors, thanks go to Walnut Creek for sponsoring the conference, and to Yahoo! for covering all the expenses involved in bringing the entire FreeBSD core team to Berkeley. As a fan of FreeBSD, I’m happy to see that the project has finally produced a conference. It was time: many of the 16 core team members had been working together on a regular basis for nearly seven years without actually meeting face to face. It’s been an interesting year for open source projects. I’m looking forward to the next year – and the next BSD conference – to be even better. ##News Roundup OpenBSD Recommends: Disable SMT/Hyperthreading in all Intel BIOSes Two recently disclosed hardware bugs affected Intel cpus: - TLBleed - T1TF (the name "Foreshadow" refers to 1 of 3 aspects of this bug, more aspects are surely on the way) Solving these bugs requires new cpu microcode, a coding workaround, *AND* the disabling of SMT / Hyperthreading. SMT is fundamentally broken because it shares resources between the two cpu instances and those shared resources lack security differentiators. Some of these side channel attacks aren't trivial, but we can expect most of them to eventually work and leak kernel or cross-VM memory in common usage circumstances, even such as javascript directly in a browser. There will be more hardware bugs and artifacts disclosed. Due to the way SMT interacts with speculative execution on Intel cpus, I expect SMT to exacerbate most of the future problems. A few months back, I urged people to disable hyperthreading on all Intel cpus. I need to repeat that: DISABLE HYPERTHREADING ON ALL YOUR INTEL MACHINES IN THE BIOS. Also, update your BIOS firmware, if you can. OpenBSD -current (and therefore 6.4) will not use hyperthreading if it is enabled, and will update the cpu microcode if possible. But what about 6.2 and 6.3? The situation is very complex, continually evolving, and is taking too much manpower away from other tasks. Furthermore, Intel isn't telling us what is coming next, and are doing a terrible job by not publically documenting what operating systems must do to resolve the problems. We are having to do research by reading other operating systems. There is no time left to backport the changes -- we will not be issuing a complete set of errata and syspatches against 6.2 and 6.3 because it is turning into a distraction. Rather than working on every required patch for 6.2/6.3, we will re-focus manpower and make sure 6.4 contains the best solutions possible. So please try take responsibility for your own machines: Disable SMT in the BIOS menu, and upgrade your BIOS if you can. I'm going to spend my money at a more trustworthy vendor in the future. ###Get Morrowind running on OpenBSD in 5 simple steps This article contains brief instructions on how to get one of the greatest Western RPGs of all time, The Elder Scrolls III: Morrowind, running on OpenBSD using the OpenMW open source engine recreation. These instructions were tested on a ThinkPad X1 Carbon Gen 3. The information was adapted from this OpenMW forum thread: https://forum.openmw.org/viewtopic.php?t=3510 Purchase and download the DRM-free version from GOG (also considered the best version due to the high quality PDF guide that it comes with): https://www.gog.com/game/theelderscrollsiiimorrowindgotyedition Install the required packages built from the ports tree as root. openmw is the recreated game engine, and innoextract is how we will get the game data files out of the win32 executable. pkgadd openmw innoextract Move the file from GOG setuptesmorrowindgoty2.0.0.7.exe into its own directory morrowind/ due to innoextract’s default behaviour of extracting into the current directory. Then type: innoextract setuptesmorrowindgoty2.0.0.7.exe Type openmw-wizard and follow the straightforward instructions. Note that you have a pre-existing installation, and select the morrowind/app/Data Files folder that innoextract extracted. Type in openmw-launcher, toggle the settings to your preferences, and then hit play! iXsystems https://twitter.com/allanjude/status/1034647571124367360 ###My First Clang Bug Part of the role of being a packager is compiling lots (and lots) of packages. That means compiling lots of code from interesting places and in a variety of styles. In my opinion, being a good packager also means providing feedback to upstream when things are bad. That means filing upstream bugs when possible, and upstreaming patches. One of the “exciting” moments in packaging is when tools change. So each and every major CMake update is an exercise in recompiling 2400 or more packages and adjusting bits and pieces. When a software project was last released in 2013, adjusting it to modern tools can become quite a chore (e.g. Squid Report Generator). CMake is excellent for maintaining backwards compatibility, generally accommodating old software with new policies. The most recent 3.12 release candidate had three issues filed from the FreeBSD side, all from fallout with older software. I consider the hours put into good bug reports, part of being a good citizen of the Free Software world. My most interesting bug this week, though, came from one line of code somewhere in Kleopatra: QUNUSED(gpgagentdata); That one line triggered a really peculiar link error in KDE’s FreeBSD CI system. Yup … telling the compiler something is unused made it fall over. Commenting out that line got rid of the link error, but introduced a warning about an unused function. Working with KDE-PIM’s Volker Krause, we whittled the problem down to a six-line example program — two lines if you don’t care much for coding style. I’m glad, at that point, that I could throw it over the hedge to the LLVM team with some explanatory text. Watching the process on their side reminds me ever-so-strongly of how things work in KDE (or FreeBSD for that matter): Bugzilla, Phabricator, and git combine to be an effective workflow for developers (perhaps less so for end-users). Today I got a note saying that the issue had been resolved. So brief a time for a bug. Live fast. Get squashed young. ###DragonFlyBSD Now Runs On The Threadripper 2990WX, Developer Shocked At Performance Last week I carried out some tests of BSD vs. Linux on the new 32-core / 64-thread Threadripper 2990WX. I tested FreeBSD 11, FreeBSD 12, and TrueOS – those benchmarks will be published in the next few days. I tried DragonFlyBSD, but at the time it wouldn’t boot with this AMD HEDT processor. But now the latest DragonFlyBSD development kernel can handle the 2990WX and the lead DragonFly developer calls this new processor “a real beast” and is stunned by its performance potential. When I tried last week, the DragonFlyBSD 5.2.2 stable release nor DragonFlyBSD 5.3 daily snapshot would boot on the 2990WX. But it turns out Matthew Dillon, the lead developer of DragonFlyBSD, picked up a rig and has it running now. So in time for the next 5.4 stable release or those using the daily snapshots can have this 32-core / 64-thread Zen+ CPU running on this operating system long ago forked from FreeBSD. In announcing his success in bringing up the 2990WX under DragonFlyBSD, which required a few minor changes, he shared his performance thoughts and hopes for the rig. “The cpu is a real beast, packing 32 cores and 64 threads. It blows away our dual-core Xeon to the tune of being +50% faster in concurrent compile tests, and it also blows away our older 4-socket Opteron (which we call ‘Monster’) by about the same margin. It’s an impressive CPU. For now the new beast is going to be used to help us improve I/O performance through the filesystem, further SMP work (but DFly scales pretty well to 64 threads already), and perhaps some driver to work to support the 10gbe on the mobo.” Dillon shared some results on the system as well. " The Threadripper 2990WX is a beast. It is at least 50% faster than both the quad socket opteron and the dual socket Xeon system I tested against. The primary limitation for the 2990WX is likely its 4 channels of DDR4 memory, and like all Zen and Zen+ CPUs, memory performance matters more than CPU frequency (and costs almost no power to pump up the performance). That said, it still blow away a dual-socket Xeon with 3x the number of memory channels. That is impressive!" The well known BSD developer also added, “This puts the 2990WX at par efficiency vs a dual-socket Xeon system, and better than the dual-socket Xeon with slower memory and a power cap. This is VERY impressive. I should note that the 2990WX is more specialized with its asymetric NUMA architecture and 32 cores. I think the sweet spot in terms of CPU pricing and efficiency is likely going to be with the 2950X (16-cores/32-threads). It is clear that the 2990WX (32-cores/64-threads) will max out 4-channel memory bandwidth for many workloads, making it a more specialized part. But still awesome…This thing is an incredible beast, I’m glad I got it.” While I have the FreeBSD vs. Linux benchmarks from a few days ago, it looks like now on my ever growing TODO list will be re-trying out the newest DragonFlyBSD daily snapshot for seeing how the performance compares in the mix. Stay tuned for the numbers that should be in the next day or two. ##Beastie Bits X11 on really small devices mandoc-1.14.4 released The pfSense Book is now available to everyone MWL: Burn it down! Burn it all down! Configuring OpenBSD: System and user config files for a more pleasant laptop FreeBSD Security Advisory: Resource exhaustion in TCP reassembly OpenBSD Foundation gets first 2018 Iridium donation New ZFS commit solves issue a few users reported in the feedback segment Project Trident should have a beta release by the end of next week Reminder about Stockholm BUG: September 5, 17:30-22:00 BSD-PL User Group: September 13, 18:30-21:00 Tarsnap ##Feedback/Questions Malcom - Having different routes per interface Bostjan - ZFS and integrity of data Michael - Suggestion for Monitoring Barry - Feedback Send questions, comments, show ideas/topics, or stories you want mentioned on the show to feedback@bsdnow.tv
New ZFS features landing in FreeBSD, MAP_STACK for OpenBSD, how to write safer C code with Clang’s address sanitizer, Michael W. Lucas on sponsor gifts, TCP blackbox recorder, and Dell disk system hacking. Headlines [A number of Upstream ZFS features landed in FreeBSD this week] 9188 increase size of dbuf cache to reduce indirect block decompression With compressed ARC (6950) we use up to 25% of our CPU to decompress indirect blocks, under a workload of random cached reads. To reduce this decompression cost, we would like to increase the size of the dbuf cache so that more indirect blocks can be stored uncompressed. If we are caching entire large files of recordsize=8K, the indirect blocks use 1/64th as much memory as the data blocks (assuming they have the same compression ratio). We suggest making the dbuf cache be 1/32nd of all memory, so that in this scenario we should be able to keep all the indirect blocks decompressed in the dbuf cache. (We want it to be more than the 1/64th that the indirect blocks would use because we need to cache other stuff in the dbuf cache as well.) In real world workloads, this won't help as dramatically as the example above, but we think it's still worth it because the risk of decreasing performance is low. The potential negative performance impact is that we will be slightly reducing the size of the ARC (by ~3%). 9166 zfs storage pool checkpoint The idea of Storage Pool Checkpoint (aka zpool checkpoint) deals with exactly that. It can be thought of as a “pool-wide snapshot” (or a variation of extreme rewind that doesn’t corrupt your data). It remembers the entire state of the pool at the point that it was taken and the user can revert back to it later or discard it. Its generic use case is an administrator that is about to perform a set of destructive actions to ZFS as part of a critical procedure. She takes a checkpoint of the pool before performing the actions, then rewinds back to it if one of them fails or puts the pool into an unexpected state. Otherwise, she discards it. With the assumption that no one else is making modifications to ZFS, she basically wraps all these actions into a “high-level transaction”. More information 8484 Implement aggregate sum and use for arc counters In pursuit of improving performance on multi-core systems, we should implements fanned out counters and use them to improve the performance of some of the arc statistics. These stats are updated extremely frequently, and can consume a significant amount of CPU time. And a small bug fix authored by me: 9321 arcloancompressedbuf() can increment arcloanedbytes by the wrong value arcloancompressedbuf() increments arcloanedbytes by psize unconditionally In the case of zfscompressedarcenabled=0, when the buf is returned via arcreturnbuf(), if ARCBUFCOMPRESSED(buf) is false, then arcloanedbytes is decremented by lsize, not psize. Switch to using arcbufsize(buf), instead of psize, which will return psize or lsize, depending on the result of ARCBUF_COMPRESSED(buf). MAP_STACK for OpenBSD Almost 2 decades ago we started work on W^X. The concept was simple. Pages that are writable, should not be executable. We applied this concept object by object, trying to seperate objects with different qualities to different pages. The first one we handled was the signal trampoline at the top of the stack. We just kept making changes in the same vein. Eventually W^X came to some of our kernel address spaces also. The fundamental concept is that an object should only have the permissions necessary, and any other operation should fault. The only permission separations we have are kernel vs userland, and then read, write, and execute. How about we add another new permission! This is not a hardware permission, but a software permission. It is opportunistically enforced by the kernel. the permission is MAPSTACK. If you want to use memory as a stack, you must mmap it with that flag bit. The kernel does so automatically for the stack region of a process's stack. Two other types of stack occur: thread stacks, and alternate signal stacks. Those are handled in clever ways. When a system call happens, we check if the stack-pointer register points to such a page. If it doesn't, the program is killed. We have tightened the ABI. You may no longer point your stack register at non-stack memory. You'll be killed. This checking code is MI, so it works for all platforms. Since page-permissions are generally done on page boundaries, there is caveat that thread and altstacks must now be page-sized and page-aligned, so that we can enforce the MAPSTACK attribute correctly. It is possible that a few ports need some massaging to satisfy this condition, but we haven't found any which break yet. A syslog_r has been added so that we can identify these failure cases. Also, the faulting cases are quite verbose for now, to help identify the programs we need to repair. **iXsystems** Writing Safer C with the Clang Address Sanitizer We wanted to improve our password strength algorithm, and decided to go for the industry-standard zxcvbn, from the people at Dropbox. Our web front-end would use the default Javascript library, and for mobile and desktop, we chose to use the C implementation as it was the lowest common denominator for all platforms. Bootstrapping all of this together was done pretty fast. I had toyed around with a few sample passwords so I decided to run it through the test suite we had for the previous password strength evaluator. The test generates a large number of random passwords according to different rules and expects the strength to be in a given range. But the test runner kept crashing with segmentation faults. It turns out the library has a lot of buffer overflow cases that are usually "harmless", but eventually crash your program when you run the evaluator function too much. I started fixing the cases I could see, but reading someone else's algorithms to track down tiny memory errors got old pretty fast. I needed a tool to help me. That's when I thought of Clang's Address Sanitizer. AddressSanitizer is a fast memory error detector. It consists of a compiler instrumentation module and a run-time library Let's try the sanitizer on a simple program. We'll allocate a buffer on the heap, copy each character of a string into it, and print it to standard output. + The site walks through a simple example which contains an error, it writes past the end of a buffer + The code works as expected, and nothing bad happens. It must be fine… + Then they compile it again with the address sanitizer actived So what can we gather from that pile of hex? Let's go through it line by line. AddressSanitizer found a heap buffer overflow at 0x60200000ef3d, a seemingly valid address (not NULL or any other clearly faulty value). + ASAN points directly to the line of code that is causing the problem We're writing outside of the heap in this instruction. And AddressSanitizer isn't having it. This is definitely one of my favorite indications. In addition to telling which line in the code failed and where in the memory the failure happened, you get a complete description of the closest allocated region in memory (which is probably the region you were trying to access). + They then walk through combining this with lldb, the Clang debugger, to actually interactively inspect the state of the problem when an invalid memory access happens Back to my practical case, how did I put the address sanitizer to good use? I simply ran the test suite, compiled with the sanitizer, with lldb. Sure enough, it stopped on every line that could cause a crash. It turns out there were many cases where zxcvbn-c wrote past the end of allocated buffers, on the heap and on the stack. I fixed those cases in the C library and ran the tests again. Not a segfault in sight! I've used memory tools in the past, but they were usually unwieldy, or put such a toll on performance that they were useless in any real-life case. Clang's address sanitizer turned out to be detailed, reliable, and surprisingly easy to use. I've heard of the miracles of Valgrind but macOS hardly supports it, making it a pain to use on my MacBook Pro. Coupled with Clang's static analyzer, AddressSanitizer is going to become a mandatory stop for evaluating code quality. It's also going to be the first tool I grab when facing confusing memory issues. There are many more case where I could use early failure and memory history to debug my code. For example, if a program crashes when accessing member of a deallocated object, we could easily trace the event that caused the deallocation, saving hours of adding and reading logs to retrace just what happened. News Roundup On sponsor gifts Note the little stack of customs forms off to the side. It’s like I’ve learned a lesson from standing at the post office counter filling out those stupid forms. Sponsors should get their books soon. This seems like an apropos moment to talk about what I do for print sponsors. I say I send them “a gift,” but what does that really mean? The obvious thing to ship them is a copy of the book I’ve written. Flat-out selling print books online has tax implications, though. Sponsors might have guessed that they’d get a copy of the book. But I shipped them the hardcover, which isn’t my usual practice. That’s because I send sponsors a gift. As it’s a gift, I get to choose what I send. I want to send them something nice, to encourage them to sponsor another book. It makes no sense for me to send a sponsor a Singing Wedgie-O-Gram. (Well, maybe a couple sponsors. You know who you are.) The poor bastards who bought into my scam–er, sponsored my untitled book–have no idea what’s coming. As of right now, their sensible guesses are woefully incomplete. Future books? They might get a copy of the book. They might get book plus something. They might just get the something. Folks who sponsor the jails book might get a cake with a file in it. Who knows? It’s a gift. It’s my job to make that gift worthwhile. And to amuse myself. Because otherwise, what’s the point? TCP Blackbox Recorder ``` Add the "TCP Blackbox Recorder" which we discussed at the developer summits at BSDCan and BSDCam in 2017. The TCP Blackbox Recorder allows you to capture events on a TCP connection in a ring buffer. It stores metadata with the event. It optionally stores the TCP header associated with an event (if the event is associated with a packet) and also optionally stores information on the sockets. It supports setting a log ID on a TCP connection and using this to correlate multiple connections that share a common log ID. You can log connections in different modes. If you are doing a coordinated test with a particular connection, you may tell the system to put it in mode 4 (continuous dump). Or, if you just want to monitor for errors, you can put it in mode 1 (ring buffer) and dump all the ring buffers associated with the connection ID when we receive an error signal for that connection ID. You can set a default mode that will be applied to a particular ratio of incoming connections. You can also manually set a mode using a socket option. This commit includes only basic probes. rrs@ has added quite an abundance of probes in his TCP development work. He plans to commit those soon. There are user-space programs which we plan to commit as ports. These read the data from the log device and output pcapng files, and then let you analyze the data (and metadata) in the pcapng files. Reviewed by: gnn (previous version) Obtained from: Netflix, Inc. Relnotes: yes Differential Revision: https://reviews.freebsd.org/D11085 ``` **Digital Ocean** Outta the way, KDE4 KDE4 has been rudely moved aside on FreeBSD. It still installs (use x11/kde4) and should update without a problem, but this is another step towards adding modern KDE (Plasma 5 and Applications) to the official FreeBSD Ports tree. This has taken a long time mostly for administrative reasons, getting all the bits lined up so that people sticking with KDE4 (which, right now, would be everyone using KDE from official ports and packages on FreeBSD) don’t end up with a broken desktop. We don’t want that. But now that everything Qt4 and kdelibs4-based has been moved aside by suffixing it with -kde4, we have the unsuffixed names free to indicate the latest-and-greatest from upstream. KDE4 users will see a lot of packages moving around and being renamed, but no functional changes. Curiously, the KDE4 desktop depends on Qt5 and KDE Frameworks 5 — and it has for quite some time already, because the Oxygen icons are shared with KDE Frameworks, but primarily because FileLight was updated to the modern KDE Applications version some time ago (the KDE4 version had some serious bugs, although I can not remember what they were). Now that the names are cleaned up, we could consider giving KDE4 users the buggy version back. From here on, we’ve got the following things lined up: Qt 5.10 is being worked on, except for WebEngine (it would slow down an update way too much), because Plasma is going to want Qt 5.10 soon. CMake 3.11 is in the -rc stage, so that is being lined up. The kde5-import branch in KDE-FreeBSD’s copy of the FreeBSD ports tree (e.g. Area51) is being prepped and polished for a few big SVN commits that will add all the new bits. So we’ve been saying Real Soon Now ™ for years, but things are Realer Sooner Nower ™ now. Dell FS12-NV7 and other 2U server (e.g. C6100) disk system hacking A while back I reviewed the Dell FS12-NV7 – a 2U rack server being sold cheap by all and sundry. It’s a powerful box, even by modern standards, but one of its big drawbacks is the disk system it comes with. But it needn’t be. There are two viable solutions, depending on what you want to do. You can make use of the SAS backplane, using SAS and/or SATA drives, or you can go for fewer SATA drives and free up one or more PCIe slots as Plan B. You probably have an FS12 because it looks good for building a drive array (or even FreeNAS) so I’ll deal with Plan A first. Like most Dell servers, this comes with a Dell PERC RAID SAS controller – a PERC6/i to be precise. This ‘I’ means it has internal connectors; the /E is the same but its sockets are external. The PERC connects to a twelve-slot backplane forming a drive array at the front of the box. More on the backplane later; it’s the PERCs you need to worry about. The PERC6 is actually an LSI Megaraid 1078 card, which is just the thing you need if you’re running an operating system like Windows that doesn’t support a volume manager, striping and other grown-up stuff. Or if your OS does have these features, but you just don’t trust it. If you are running such an OS you may as well stick to the PERC6, and good luck to you. If you’re using BSD (including FreeNAS), Solaris or a Linux distribution that handles disk arrays, read on. The PERC6 is a solution to a problem you probably don’t have, but in all other respects its a turkey. You really want a straightforward HBA (Host Bus Adapter) that allows your clever operating system to talk directly with the drives. Any SAS card based on the 1078 (such as the PERC6) is likely to have problems with drives larger than 2Tb. I’m not completely sure why, but I suspect it only applies to SATA. Unfortunately I don’t have any very large SAS drives to test this theory. A 2Tb limit isn’t really such a problem when you’re talking about a high performance array, as lots of small drives are a better option anyway. But it does matter if you’re building a very large datastore and don’t mind slower access and very significant resilvering times when you replace a drive. And for large datastores, very large SATA drives save you a whole lot of cash. The best capacity/cost ratio is for 5Gb SATA drives Some Dell PERCs can be re-flashed with LSI firmware and used as a normal HBA. Unfortunately the PERC6 isn’t one of them. I believe the PERC6/R can be, but those I’ve seen in a FS12 are just a bit too old. So the first thing you’ll need to do is dump them in the recycling or try and sell them on eBay. There are actually two PERC6 cards in most machine, and they each support eight SAS channels through two SFF-8484 connectors on each card. Given there are twelve drives slots, one of the PERCs is only half used. Sometimes they have a cable going off to a battery located near the fans. This is used in a desperate attempt to keep the data in the card’s cache safe in order to avoid write holes corrupting NTFS during a power failure, although the data on the on-drive caches won’t be so lucky. If you’re using a file system like that, make sure you have a UPS for the whole lot. But we’re going to put the PERCs out of our misery and replace them with some nice new LSI HBAs that will do our operating system’s bidding and let it talk to the drives as it knows best. But which to pick? First we need to know what we’re connecting. Moving to the front of the case there are twelve metal drive slots with a backplane behind. Dell makes machines with either backplanes or expanders. A backplane has a 1:1 SAS channel to drive connection; an expander takes one SAS channel and multiplexes it to (usually) four drives. You could always swap the blackplane with an expander, but I like the 1:1 nature of a backplane. It’s faster, especially if you’re configured as an array. And besides, we don’t want to spend more money than we need to, otherwise we wouldn’t be hot-rodding a cheap 2U server in the first place – expanders are expensive. Bizarrely, HBAs are cheap in comparison. So we need twelve channels of SAS that will connect to the sockets on the backplane. The HBA you will probably want to go with is an LSI, as these have great OS support. Other cards are available, but check that the drivers are also available. The obvious choice for SAS aficionados is the LSI 9211-8i, which has eight internal channels. This is based on an LSI 2000 series chip, the 2008, which is the de-facto standard. There’s also four-channel -4i version, so you could get your twelve channels using one of each – but the price difference is small these days, so you might as well go for two -8i cards. If you want cheaper there are 1068-based equivalent cards, and these work just fine at about half the price. They probably won’t work with larger disks, only operate at 3Gb and the original SAS standard. However, the 2000 series is only about £25 extra and gives you more options for the future. A good investment. Conversely, the latest 3000 series cards can do some extra stuff (particularly to do with active cables) but I can’t see any great advantage in paying megabucks for one unless you’re going really high-end – in which case the NV12 isn’t the box for you anyway. And you’d need some very fast drives and a faster backplane to see any speed advantage. And probably a new motherboard…. Whether the 6Gb SAS2 of the 9211-8i is any use on the backplane, which was designed for 3Gb, I don’t know. If it matters that much to you you probably need to spend a lot more money. A drive array with a direct 3Gb to each drive is going to shift fast enough for most purposes. Once you have removed the PERCs and plugged in your modern-ish 9211 HBAs, your next problem is going to be the cable. Both the PERCs and the backplane have SFF-8484 multi-lane connectors, which you might not recognise. SAS is a point-to-point system, the same as SATA, and a multi-lane cable is simply four single cables in a bundle with one plug. (Newer versions of SAS have more). SFF-8484 multi-lane connectors are somewhat rare, (but unfortunately this doesn’t make them valuable if you were hoping to flog them on eBay). The world switched quickly to the SFF-8087 for multi-lane SAS. The signals are electrically the same, but the connector is not. Please generate and paste your ad code here. If left empty, the ad location will be highlighted on your blog pages with a reminder to enter your code. Mid-Post So there are two snags with this backplane. Firstly it’s designed to work with PERC controllers; secondly it has the old SFF-8484 connectors on the back, and any SAS cables you find are likely to have SFF-8087. First things first – there is actually a jumper on the backplane to tell it whether it’s talking to a PERC or a standard LSI HBA. All you need to do is find it and change it. Fortunately there are very few jumpers to choose from (i.e. two), and you know the link is already in the wrong place. So try them one at a time until it works. The one you want may be labelled J15, but I wouldn’t like to say this was the same on every variant. Second problem: the cable. You can get cables with an SFF-8087 on one end and an SFF-8484 on the other. These should work. But they’re usually rather expensive. If you want to make your own, it’s a PITA but at least you have the connectors already (assuming you didn’t bin the ones on the PERC cables). I don’t know what committee designed SAS cable connectors, but ease of construction wasn’t foremost in their collective minds. You’re basically soldering twisted pair to a tiny PCB. This is mechanically rubbish, of course, as the slightest force on the cable will lift the track. Therefore its usual to cover the whole joint in solidified gunk (technical term) to protect it. Rewiring SAS connectors is definitely not easy. I’ve tried various ways of soldering to them, none of which were satisfactory or rewarding. One method is to clip the all bare wires you wish to solder using something like a bulldog clip so they’re at lined up horizontally and then press then adjust the clamp so they’re gently pressed to the tracks on the board, making final adjustments with a strong magnifying glass and a fine tweezers. You can then either solder them with a fine temperature-controlled iron, or have pre-coated the pads with solder paste and flash across it with an SMD rework station. I’d love to know how they’re actually manufactured – using a precision jig I assume. The “easy” way is to avoid soldering the connectors at all; simply cut existing cables in half and join one to the other. I’ve used prototyping matrix board for this. Strip and twist the conductors, push them through a hole and solder. This keeps things compact but manageable. We’re dealing with twisted pair here, so maintain the twists as close as possible to the board – it actually works quite well. However, I’ve now found a reasonably-priced source of the appropriate cable so I don’t do this any more. Contact me if you need some in the UK. So all that remains is to plug your HBAs to the backplane, shove in some drives and you’re away. If you’re at this stage, it “just works”. The access lights for all the drives do their thing as they should. The only mystery is how you can get the ident LED to come on; this may be controlled by the PERC when it detects a failure using the so-called sideband channel, or it may be operated by the electronics on the backplane. It’s workings are, I’m afraid, something of a mystery still – it’s got too much electronics on board to be a completely passive backplane. Plan B: SATA If you plan to use only SATA drives, especially if you don’t intend using more than six, it makes little sense to bother with SAS at all. The Gigabyte motherboard comes with half a dozen perfectly good 3Gb SATA channels, and if you need more you can always put another controller in a PCIe slot, or even USB. The advantages are lower cost and you get to free up two PCIe slots for more interesting things. The down-side is that you can’t use the SAS backplane, but you can still use the mounting bays. Removing the backplane looks tricky, but it really isn’t when you look a bit closer. Take out the fans first (held in place by rubber blocks), undo a couple of screws and it just lifts and slides out. You can then slot and lock in the drives and connect the SATA connectors directly to the back of the drives. You could even slide them out again without opening the case, as long as the cable was long enough and you manually detached the cable it when it was withdrawn. And let’s face it – drives are likely to last for years so even with half a dozen it’s not that great a hardship to open the case occasionally. Next comes power. The PSU has a special connector for the backplane and two standard SATA power plugs. You could split these three ways using an adapter, but if you have a lot of drives you might want to re-wire the cables going to the backplane plug. It can definitely power twelve drives. And that’s almost all there is to it. Unfortunately the main fans are connected to the backplane, which you’ve just removed. You can power them from an adapter on the drive power cables, but there are unused fan connectors on the motherboard. I’m doing a bit more research on cooling options, but this approach has promising possibilities for noise reduction. Beastie Bits Adriaan de Groot’s post FOSDEM blog post My First FreeNAS smart(8) Call for Testing by Michael Dexter BSDCan 2018 Travel Grant Application Now Open BSD Developer Kristaps Dzonsons interviews Linus Torvalds, about diving Twitter vote - The secret to a faster FreeBSD default build world... tmate - Instant terminal sharing Tarsnap Feedback/Questions Vikash - Getting a port added Chris Wells - Quarterly Ports Branch FreeBSD-CI configs on Github Jenkins on the FreeBSD Wiki Gordon - Centralised storage suggestions Send questions, comments, show ideas/topics, or stories you want mentioned on the show to feedback@bsdnow.tv
Rob and Jason discuss Jacksonville trip reports, April Fools posts and more. News Deprecating Raw Pointers in C++20 No new new: Raw pointers removed from C++ C++ will no longer have pointers HPX 1.1.0 Released Freestanding trip report: emBO++ and Jacksonville Oh, lock-free circular buffers, yay! Hey, no 2D graphics? Jacksonville trip report JetBrains Trip Report Clion 2018.1 release Cmake 3.11 Release Configuring C++ Intellisense and Browsing Links @robwirving @lefticus Sponsor JetBrains Listener Survey CppCast Listener Survey
Rob and Jason are joined by Jon Kalb to discuss upcoming C++ conferences, CppChat and east const. Jon does onsite training in C++ and chairs C++Now, CppCon, and the Boost Steering Committee. Next month he will be speaking at the ACCU conference in Bristol, and keynoting the C++ Russia conference in Saint Petersburg. News Market share of the most used C/C++ IDEs in 2018 A cake for your cherry, what should go in the C++ standard library Batteries not included: what should go in the C++ standard library? CMake 3.11: "addlibrary() and addexecutable() commands can now be called without any sources and will not complain as long as sources are added later via the target_sources() Jon Kalb @_jonkalb // info - Jon Kalb's blog Links C++Now C++Now 2018 Registration is Open C++Now Accepting Student/Volunteer Applications CppCon C++ Community Events A Foolish Consistency Sponsors think-cell software Embo++ Hosts @robwirving @lefticus
Rob and Jason are joined by Victor Ciura from Caphyon to talk about bringing clang tidy magic to Visual Studio C++ Developers with Clang Power Tools Victor Ciura is a Senior Software Engineer at CAPHYON and Technical Lead on the Advanced Installer team. For over a decade, he designed and implemented several core components and libraries of Advanced Installer such as: IIS, Repackager, OS virtualization and others. He’s a regular guest at Computer Science Department of his Alma Mater, University of Craiova, where he gives student lectures & workshops on “Using C++STL for Competitive Programming and Software Development”. Currently, he spends most of his time working with his team on improving and extending the repackaging and virtualization technologies in Advanced Installer, helping clients migrate their Win32 desktop apps to the Windows Store (AppX). News Simon Brand Meeting C++ Trip Report C++ Coroutines: Understanding operator co_await Cmake 3.1.0 released Launching Tech Talks in your workplace 2017 Coding Toys Victor Ciura @ciura_victor Links Advanced Installer Caphyon Clang Power Tools Clang Power Tools GitHub CppCon 2017: Victor Ciura "Bringing Clang-tidy Magic to Visual Studio C++ Developers" Sponsors Backtrace JetBrains Hosts @robwirving @lefticus
C++ är ett språk med lång historia, har alltid varit omfattande och gett stor frihet i kombination med goda chanser att skjuta sig i foten. Utvecklingen av språket gick länge långsamt, men de senaste åren har takten ökat rejält. Fredrik pratar med Hadi dels om hur C++ utvecklats, dels om hur han gått tillväga för att på ett bra sätt införa nyheter från de senaste åren i TimeEdits kodbas. Länkar C++98 C++03 C++ standardkommitté Lambda expressions Move semantics Shallow vs deep copy C++11 Type deduction C++17 Boost Shared pointer Unique pointer Clang-tidy Using namespace Clangformat libdispatch Asio epoll Cmake deb-paket RPM-paket APT DNF Vim Concepts lite Templates och templatemetaprogrammering RAII - Resource Acquisition Is Initialization C++ primer - boktips från Hadi Buckys C++-genomgångar på Youtube SFML - Simple and fast multimedia library Under utveckling är en podd av och för utvecklare, skapad i soliga (nåja) Göteborg av oss som jobbar på TimeEdit. Vi vill väldigt gärna höra dina åsikter om det vi pratar om! Vi finns på Twitter som @uupodden) och på Facebook som Under utveckling. Gillar du podden får du mer än gärna
Better known on the web as @modocache, Brian is a staple in the Swift community. From creating Quick, a Swift and Objective-C testing framework, to significantly contributing to open source Swift including commits to the apple/swift and apple/swift-corelibs-xctest, and most recently with his introductory guides to contributing to the Swift Compiler, Brian's efforts for the Swift community are invaluable. We talk about living and working in Japan, delaying your way into a new job, and how to make it easier for onboarding new Swift open source contributors. Enjoy! ANNOUCEMENTS - Listen to Fireside Swift & The Learn Swift Podcast - Support Garric on Patreon. Every $ counts! - Thinking about starting your own Learn Swift meet up? Contact me! LINKS - https://twitter.com/modocache - https://modocache.io - https://modocache.io/getting-started-with-swift-development - https://www.patreon.com/modocache - https://github.com/modocache - https://github.com/apple/swift/blob/master/docs/SIL.rst - IRC? - https://en.wikipedia.org/wiki/Internet_Relay_Chat - Cracking the Coding Interview - GYB Files - https://en.wikipedia.org/wiki/CMake - https://en.wikipedia.org/wiki/ARM_architecture - https://github.com/kiwi-bdd/Kiwi - https://www.strava.com/mobile - https://github.com/apple/swift/blob/master/docs/SwiftFormat.md - https://github.com/nicklockwood/SwiftFormat - https://github.com/realm/SwiftLint/ TIP: Keep having fun! Listen on iTunes. Support this podcast via Patreon. Questions, comments, or you just wanna say Hi? Contact your host @garricn on Twitter. This episode was recorded using the Cast platform by @JulianLepinski. Wanna start your own podcast? Try Cast!
We look at an OpenBSD setup on a new laptop, revel in BSDCan trip reports, and visit daemons and friendly ninjas. This episode was brought to you by Headlines OpenBSD and the modern laptop (http://bsdly.blogspot.de/2017/07/openbsd-and-modern-laptop.html) Peter Hansteen has a new blog post about OpenBSD (http://www.openbsd.org/) on laptops: Did you think that OpenBSD is suitable only for firewalls and high-security servers? Think again. Here are my steps to transform a modern mid to high range laptop into a useful Unix workstation with OpenBSD. One thing that never ceases to amaze me is that whenever I'm out and about with my primary laptop at conferences and elsewhere geeks gather, a significant subset of the people I meet have a hard time believing that my laptop runs OpenBSD, and that it's the only system installed. and then it takes a bit of demonstrating that yes, the graphics runs with the best available resolution the hardware can offer, the wireless network is functional, suspend and resume does work, and so forth. And of course, yes, I do use that system when writing books and articles too. Apparently heavy users of other free operating systems do not always run them on their primary workstations. Peter goes on to describe the laptops he's had over the years (all running OpenBSD) and after BSDCan 2017, he needed a new one due to cracks in the display. So the time came to shop around for a replacement. After a bit of shopping around I came back to Multicom, a small computers and parts supplier outfit in rural Åmli in southern Norway, the same place I had sourced the previous one. One of the things that attracted me to that particular shop and their own-branded offerings is that they will let you buy those computers with no operating system installed. That is of course what you want to do when you source your operating system separately, as we OpenBSD users tend to do. The last time around I had gone for a "Thin and lightweight" 14 inch model (Thickness 20mm, weight 2.0kg) with 16GB RAM, 240GB SSD for system disk and 1TB HD for /home (since swapped out for a same-size SSD, as the dmesg will show). Three years later, the rough equivalent with some added oomph for me to stay comfortable for some years to come ended me with a 13.3 inch model, 18mm and advertised as 1.3kg (but actually weighing in at 1.5kg, possibly due to extra components), 32GB RAM, 512GB SSD and 2TB harddisk. For now the specification can be viewed online here (https://www.multicom.no/systemconfigurator.aspx?q=st:10637291;c:100559;fl:0#4091-10500502-1;4086-10637290-1;4087-8562157-2;4088-9101982-1;4089-9101991-1) (the site language is Norwegian, but product names and units of measure are not in fact different). The OpenBSD installer is a wonder of straightforward, no-nonsense simplicity that simply gets the job done. Even so, if you are not yet familiar with OpenBSD, it is worth spending some time reading the OpenBSD FAQ's installation guidelines and the INSTALL.platform file (in our case, INSTALL.amd64) to familiarize yourself with the procedure. If you're following this article to the letter and will be installing a snapshot, it is worth reading the notes on following -current too. The main hurdle back when I was installing the 2014-vintage 14" model was getting the system to consider the SSD which showed up as sd1 the automatic choice for booting (I solved that by removing the MBR, setting the size of the MBR on the hard drive that showed up as sd0 to 0 and enlarging the OpenBSD part to fill the entire drive). + He goes on to explain the choices he made in the installer and settings made after the reboot to set up his work environment. Peter closes with: If you have any questions on running OpenBSD as a primary working environment, I'm generally happy to answer but in almost all cases I would prefer that you use the mailing lists such as misc@openbsd.org or the OpenBSD Facebook (https://www.facebook.com/groups/2210554563/) group so the question and hopefully useful answers become available to the general public. Browsing the slides for my recent OpenBSD and you (https://home.nuug.no/~peter/openbsd_and_you/) user group talk might be beneficial if you're not yet familiar with the system. And of course, comments on this article are welcome. BSDCan 2017 Trip Report: Roller Angel (https://www.freebsdfoundation.org/blog/2017-bsdcan-trip-report-roller-angel/) We could put this into next week's show, because we have another trip report already that's quite long. After dropping off my luggage, I headed straight over to the Goat BoF which took place at The Royal Oak. There were already a number of people there engaged in conversation with food and drink. I sat down at a table and was delighted that the people sitting with me were also into the BSD's and were happy to talk about it the whole time. I felt right at home from the start as people were very nice to me, and were interested in what I was working on. I honestly didn't know that I would fit in so well. I had a preconceived notion that people may be a bit hard to approach as they are famous and so technically advanced. At first, people seemed to only be working in smaller circles. Once you get more familiar with the faces, you realize that these circles don't always contain the same people and that they are just people talking about specific topics. I found that it was easy to participate in the conversation and also found out that people are happy to get your feedback on the subject as well. I was actually surprised how easily I got along with everyone and how included I felt in the activities. I volunteered to help wherever possible and got to work on the video crew that recorded the audio and slides of the talks. The people at BSDCan are incredibly easy to talk to, are actually interested in what you're doing with BSD, and what they can do to help. It's nice to feel welcome in the community. It's like going home. Dan mentioned in his welcome on the first day of BSDCan that the conference is like home for many in the community. The trip report is very detailed and chronicles the two days of the developer summit, and the two days of the conference There was some discussion about a new code of conduct by Benno Rice who mentioned that people are welcome to join a body of people that is forming that helps work out issues related to code of conduct and forwards their recommendations on to core. Next, Allan introduced the idea of creating a process for formally discussing big project changes or similar discussions that is going to be known as FCP or FreeBSD Community Proposal. In Python we have the Python Enhancement Proposal or PEP which is very similar to the idea of FCP. I thought this idea is a great step for FreeBSD to be implementing as it has been a great thing for Python to have. There was some discussion about taking non-code contributions from people and how to recognize those people in the project. There was a suggestion to have a FreeBSD Member status created that can be given to people whose non-code contributions are valuable to the project. This idea seemed to be on a lot of people's minds as something that should be in place soon. The junior jobs on the FreeBSD Wiki were also brought up as a great place to look for ideas on how to get involved in contributing to FreeBSD. Roller wasted no time, and started contributing to EdgeBSD at the conference. On the first day of BSDCan I arrived at the conference early to coordinate with the team that records the talks. We selected the rooms that each of us would be in to do the recording and set up a group chat via WhatsApp for coordination. Thanks to Roller, Patrick McAvoy, Calvin Hendryx-Parker, and all of the others who volunteered their time to run the video and streaming production at BSDCan, as well as all others who volunteered, even if it was just to carry a box. BSDCan couldn't happen without the army of volunteers. After the doc lounge, I visited the Hacker Lounge. There were already several tables full of people talking and working on various projects. In fact, there was a larger group of people who were collaborating on the new libtrue library that seemed to be having a great time. I did a little socializing and then got on my laptop and did some more work on the documentation using my new skills. I really enjoyed having a hacker lounge to go to at night. I want to give a big thank you to the FreeBSD Foundation for approving my travel grant. It was a great experience to meet the community and participate in discussions. I'm very grateful that I was able to attend my first BSDCan. After visiting the doc lounge a few times, I managed to get comfortable using the tools required to edit the documentation. By the end of the conference, I had submitted two documentation patches to the FreeBSD Bugzilla with several patches still in progress. Prior to the conference I expected that I would be spending a lot of time working on my Onion Omega and Edge Router Lite projects that I had with me, but I actually found that there was always something fun going on that I would rather do or work on. I can always work on those projects at home anyway. I had a good time working with the FreeBSD community and will continue working with them by editing the documentation and working with Bugzilla. One of the things I enjoy about these trip reports is when they help convince other people to make the trip to their first conference. Hopefully by sharing their experience, it will convince you to come to the next conference: vBSDCon in Virginia, USA: Sept 7-9 EuroBSDCon in Paris, France: Sept 21-24 BSDTW in Taipei, Taiwan: November 11-12 (CFP ends July 31st) *** BSDCan 2017 - Trip report double-p (http://undeadly.org/cgi?action=article&sid=20170629150641) Prologue Most overheard in Tokyo was "see you in Ottawaaaaah", so with additional "personal item" being Groff I returned home to plan the trip to BSDCan. Dan was very helpful with getting all the preparations (immigration handling), thanks for that. Before I could start, I had to fix something: the handling of the goat. With a nicely created harness, I could just hang it along my backpack. Done that it went to the airport of Hamburg and check-in for an itinerary of HAM-MUC-YUL. While the feeder leg was a common thing, boarding to YUL was great - cabin-crew likes Groff :) Arriving in Montreal was like entering a Monsoon zone or something, sad! After the night the weather was still rain-ish but improving and i shuttled to Dorval VIARail station to take me to Ottawa (ever avoid AirCanada, right?). Train was late, but the conductor (or so) was nice to talk to - and wanted to know about Groff's facebook page :-P. Picking a cab in Ottawa to take me to "Residence" was easy at first - just that it was the wrong one. Actually my fault and so I had a "nice, short" walk to the actual one in the rain with wrong directions. Eventually I made it and after unpacking, refreshment it was time to hit the Goat BOF! Day 1 Since this was my first BSDCan I didnt exactly knew what to expect from this BOF. But it was like, we (Keeper, Dan, Allan, ..) would talk about "who's next" and things like that. How mistaken I was :). Besides the sheer amount of BSD people entering the not-so-yuuge Oak some Dexter sneaked in camouflage. The name-giver got a proper position to oversee the mess and I was glad I did not leave him behind after almost too many Creemores. Day 2 Something happened it's crystal blue on the "roof" and sun is trying its best to wake me up. To start the day, I pick breakfast at 'Father+Sons' - I can really recommend that. Very nice home made fries (almost hashbrowns) and fast delivery! Stuffed up I trott along to get to phessler's tutorial about BGP-for-sysadmins-and-developers. Peter did a great job, but the "lab" couldn't happen, since - oh surprise - the wifi was sluggish as hell. Must love the first day on a conference every time. Went to Hackroom in U90 afterwards, just to fix stuff "at home". IPsec giving pains again. Time to pick food+beer afterwards and since it's so easy to reach, we went to the Oak again. Having a nice backyard patio experience it was about time to meet new people. Cheers to Tom, Aaron, Nick, Philip and some more, we'd an awesome night there. I also invited some not-really-computer local I know by other means who was completly overwhelmed by what kind of "nerds" gather around BSD. He planned to stay "a beer" - and it was rather some more and six hours. Looks like "we" made some impression on him :). Day 3 Easy day, no tutorials at hand, so first picking up breakfast at F+S again and moving to hackroom in U90. Since I promised phessler to help with an localized lab-setup, I started to hack on a quick vagrant/ansible setup to mimic his BGP-lab and went quickly through most of it. Plus some more IPsec debugging and finally fixing it, we went early in the general direction of the Red Lion to pick our registration pack. But before that could happen it was called to have shawarma at 3brothers along. Given a tight hangover it wasn't the brightest idea to order a poutine m-(. Might be great the other day, it wasn't for me at the very time and had to throw away most of it :(. Eventually passing on to the Red Lion I made the next failure with just running into the pub - please stay at the front desk until "seated". I never get used to this concept. So after being "properly" seated, we take our beers and the registration can commence after we had half of it. So I register myself; btw it's a great idea to grant "not needed" stuff to charity. So dont pick "just because", think about it if you really need this or that gadget. Then I register Groff - he really needs badges - just to have Dru coming back to me some minutes later one to hand me the badge for Henning. That's just "amazing"; I dont know IF i want to break this vicious circle the other day, since it's so funny. Talked to Theo about the ongoing IPsec problems and he taught me about utrace(2) which looks "complicated" but might be an end of the story the other day. Also had a nice talk to Peter (H.) about some other ideas along books. BTW, did I pay for ongoing beers? I think Tom did - what a guy :). Arriving at the Residence, I had to find my bathroom door locked (special thing).. crazy thing is they dont have a master key at the venue, but to have to call in one from elsewhere. Short night shortened by another 30minutes :(. Day 4 Weather is improving into beach+sun levels - and it's Conference Day! The opening keynote from Geist was very interesting ("citation needed"). Afterwards I went to zfs-over-ssh, nothing really new (sorry Allan). But then Jason had a super interesting talk on how about to apply BSD for the health-care system in Australia. I hope I can help him with the last bits (rdomain!) in the end. While lunch I tried to recall my memories about utrace(2) while talking to Theo. Then it was about to present my talk and I think it was well perceipted. One "not so good" feedback was about not taking the audience more into account. I think I was asking every other five slides or so - but, well. The general feedback (in spoken terms) was quite good. I was a bit "confused" and I did likely a better job in Tokyo, but well. Happened we ended up in the Oak again.. thanks to mwl, shirkdog, sng, pitrh, kurtm for having me there :) Day 5 While the weather had to decide "what next", I rushed to the venue just to gather Reyk's talk about vmd(8). Afterwards it was MSTP from Paeps which was very interesting and we (OpenBSD) should look into it. Then happened BUG BOF and I invite all "coastal Germans" to cbug.de :) I had to run off for other reasons and came back to Dave's talk which was AWESOME. Following was Rod's talk.. well. While I see his case, that was very poor. The auction into closing was awesome again, and I spend $50 on a Tshirt. :) + Epilogue I totally got the exit dates wrong. So first cancel a booking of an Hotel and then rebook the train to YUL. So I have plenty of time "in the morning" to get breakfast with the local guy. After that he drives me to VIARail station and I dig into "business" cussions. Well, see you in Ottawa - or how about Paris, Taipei? Bind Broker (http://www.tedunangst.com/flak/post/bind-broker) Ted Unangst writes about an interesting idea he has He has a single big server, and lots of users who would like to share it, many want to run web servers. This would be great, but alas, archaic decisions made long ago mean that network sockets aren't really files and there's this weird concept of privileged ports. Maybe we could assign each user a virtual machine and let them do whatever they want, but that seems wasteful. Think of the megabytes! Maybe we could setup nginx.conf to proxy all incoming connections to a process of the user's choosing, but that only works for web sites and we want to be protocol neutral. Maybe we could use iptables, but nobody wants to do that. What we need is a bind broker. At some level, there needs to be some kind of broker that assigns IPs to users and resolves conflicts. It should be possible to build something of this nature given just the existing unix tools we have, instead of changing system design. Then we can deploy our broker to existing systems without upgrading or disrupting their ongoing operation. The bind broker watches a directory for the creation, by users, of unix domain sockets. Then it binds to the TCP port of the same name, and transfers traffic between them. A more complete problem specification is as follows. A top level directory, which contains subdirectories named after IP addresses. Each user is assigned a subdirectory, which they have write permission to. Inside each subdirectory, the user may create unix sockets named according to the port they wish to bind to. We might assign user alice the IP 10.0.0.5 and the user bob the IP 10.0.0.10. Then alice could run a webserver by binding to net/10.0.0.5/80 and bob could run a mail server by binding to net/10.0.0.10/25. This maps IP ownership (which doesn't really exist in unix) to the filesystem namespace (which does have working permissions). So this will be a bit different than jails. The idea is to use filesystem permissions to control which users can bind to which IP addresses and ports The broker is responsible for watching each directory. As new sockets are created, it should respond by binding to the appropriate port. When a socket is deleted, the network side socket should be closed as well. Whenever a connection is accepted on the network side, a matching connection is made on the unix side, and then traffic is copied across. A full set of example code is provided There's no completely portable way to watch a directory for changes. I'm using a kevent extension. Otherwise we might consider a timeout and polling with fstat, or another system specific interface (or an abstraction layer over such an interface). Otherwise, if one of our mappings is ready to read (accept), we have a new connection to handle. The first half is straightforward. We accept the connection and make a matching connect call to the unix side. Then I broke out the big cheat stick and just spliced the sockets together. In reality, we'd have to set up a read/copy/write loop for each end to copy traffic between them. That's not very interesting to read though. The full code, below, comes in at 232 lines according to wc. Minus includes, blank lines, and lines consisting of nothing but braces, it's 148 lines of stuff that actually gets executed by the computer. Add some error handling, and working read/write code, and 200 lines seems about right. A very interesting idea. I wonder about creating a virtual file system that would implement this and maybe do a bit more to fully flesh out this idea. What do you think? *** News Roundup Daemons and friendly Ninjas (https://euroquis.nl/bobulate/?p=1600) There's quite a lot of software that uses CMake as a (meta-)buildsystem. A quick count in the FreeBSD ports tree shows me 1110 ports (over a thousand) that use it. CMake generates buildsystem files which then direct the actual build — it doesn't do building itself. There are multiple buildsystem-backends available: in regular usage, CMake generates Makefiles (and does a reasonable job of producing Makefiles that work for GNU Make and for BSD Make). But it can generate Ninja, or Visual Studio, and other buildsystem files. It's quite flexible in this regard. Recently, the KDE-FreeBSD team has been working on Qt WebEngine, which is horrible. It contains a complete Chromium and who knows what else. Rebuilding it takes forever. But Tobias (KDE-FreeBSD) and Koos (GNOME-FreeBSD) noticed that building things with the Ninja backend was considerably faster for some packages (e.g. Qt WebEngine, and Evolution data-thingy). Tobias wanted to try to extend the build-time improvements to all of the CMake-based ports in FreeBSD, and over the past few days, this has been a success. Ports builds using CMake now default to using Ninja as buildsystem-backend. Here's a bitty table of build-times. These are one-off build times, so hardly scientifically accurate — but suggestive of a slight improvement in build time. Name Size GMake Ninja liblxt 50kB 0:32 0:31 llvm38 1655kB * 19:43 musescore 47590kB 4:00 3:54 webkit2-gtk3 14652kB 44:29 37:40 Or here's a much more thorough table of results from tcberner@, who did 5 builds of each with and without ninja. I've cut out the raw data, here are just the average-of-five results, showing usually a slight improvement in build time with Ninja. Name av make av ninj Delta D/Awo compiler-rt 00:08 00:07 -00:01 -14% openjpeg 00:06 00:07 +00:01 +17% marble 01:57 01:43 -00:14 -11% uhd 01:49 01:34 -00:15 -13% opencacscade 04:08 03:23 -00:45 -18% avidemux 03:01 02:49 -00:12 – 6% kdevelop 01:43 01:33 -00:10 – 9% ring-libclient 00:58 00:53 -00:05 – 8% Not everything builds properly with Ninja. This is usually due to missing dependencies that CMake does not discover; this shows up when foo depends on bar but no rule is generated for it. Depending on build order and speed, bar may be there already by the time foo gets around to being built. Doxygen showed this, where builds on 1 CPU core were all fine, but 8 cores would blow up occasionally. In many cases, we've gone and fixed the missing implicit dependencies in ports and upstreams. But some things are intractable, or just really need GNU Make. For this, the FreeBSD ports infrastructure now has a knob attached to CMake for switching a port build to GNU Make. Normal: USES=cmake Out-of-source: USES=cmake:outsource GNU Make: USES=cmake:noninja gmake OoS, GMake: USES=cmake:outsource,noninja gmake Bad: USES=cmake gmake For the majority of users, this has no effect, but for our package-building clusters, and for KDE-FreeBSD developers who build a lot of CMake-buildsystem software in a day it may add up to an extra coffee break. So I'll raise a shot of espresso to friendship between daemons and ninjas. Announcing the pkgsrc-2017Q2 release (http://mail-index.netbsd.org/pkgsrc-users/2017/07/10/msg025237.html) For the 2017Q2 release we welcome the following notable package additions and changes to the pkgsrc collection: Firefox 54 GCC 7.1 MATE 1.18 Ruby 2.4 Ruby on Rails 4.2 TeX Live 2017 Thunderbird 52.1 Xen 4.8 We say goodbye to: Ruby 1.8 Ruby 2.1 The following infrastructure changes were introduced: Implement optional new pkgtasks and init infrastructure for pkginstall. Various enhancements and fixes for building with ccache. Add support to USE_LANGUAGES for newer C++ standards. Enhanced support for SSP, FORTIFY, and RELRO. The GitHub mirror has migrated to https://github.com/NetBSD/pkgsrc In total, 210 packages were added, 43 packages were removed, and 1,780 package updates were processed since the pkgsrc-2017Q1 release. *** OpenBSD changes of note 624 (http://www.tedunangst.com/flak/post/openbsd-changes-of-note-624) There are a bunch, but here are a few that jump out: Start plugging some leaks. Compile kernels with umask 007. Install them minus read permissions. Pure preprocessor implementation of the roff .ec and .eo requests, though you are warned that very bad things will happen to anybody trying to use these macros in OpenBSD manuals. Random linking for arm64. And octeon. And alpha. And hppa. There's some variation by platform, because every architecture has the kernel loaded with different flavors of initial physical and virtual mappings. And landisk. And loongson. And sgi. And macppc. And a gap file for sparc64, but nobody yet dares split locore. And arm7. Errata for perl File::Path race condition. Some fixes for potential link attacks against cron. Add pledge violations to acct reporting. Take random linking to the next stage. More about KARL - kernel address randomized link. As noted, a few difficulties with hibernate and such, but the plan is coming together. Add a new function reorder_kernel() that relinks and installs the new kernel in the background on system startup. Add support for the bootblocks to detect hibernate and boot the previous kernel. Remove the poorly described “stuff” from ksh. Replace usage of TIOCSTI in csh using a more common IO loop. Kind of like the stuff in ksh, but part of the default command line editing and parsing code, csh would read too many characters, then send the ones it didn't like back into the terminal. Which is weird, right? Also, more importantly, eliminating the code that uses TIOCSTI to inject characters into ttys means that maybe TIOCSTI can be removed. Revamp some of the authentication logging in ssh. Add a verbose flag to rm so you can panic immediately upon seeing it delete the wrong file instead of waiting to discover your mistake after the fact. Update libexpat to version 2.2.1 which has some security fixes. Never trust an expat, that's my motto. Update inteldrm to code based on Linux 4.4.70. This brings us support for Skylake and Cherryview and better support for Broadwell and Valleyview. Also adds MST support. Fun times for people with newish laptops. *** OPNsense 17.1.9 released (https://opnsense.org/opnsense-17-1-9-released/) firewall: move gateway switching from system to firewall advanced settings firewall: keep category selection when changing tabs firewall: do not skip gateway switch parsing too early (contributed by Stephane Lesimple) interfaces: show VLAN description during edit firmware: opnsense-revert can now handle multiple packages at once firmware: opnsense-patch can now handle permission changes from patches dnsmasq: use canned –bogus-priv for noprivatereverse dnsmasq: separate log file, ACL and menu entries dynamic dns: fix update for IPv6 (contributed by Alexander Leisentritt) dynamic dns: remove usage of CURLAUTH_ANY (contributed by Alexander Leisentritt) intrusion detection: suppress “fast mode available” boot warning in PCAP mode openvpn: plugin framework adaption unbound: add local-zone type transparent for PTR zone (contributed by Davide Gerhard) unbound: separate log file, ACL and menu entries wizard: remove HTML from description strings mvc: group relation to something other than uuid if needed mvc: rework “item in” for our Volt templates lang: Czech to 100% translated (contributed by Pavel Borecki) plugins: zabbix-agent 1.1 (contributed by Frank Wall) plugins: haproxy 1.16 (contributed by Frank Wall) plugins: acme-client 1.8 (contributed by Frank Wall) plugins: tinc fix for switch mode (contributed by Johan Grip) plugins: monit 1.3 (contributed by Frank Brendel) src: support dhclient supersede statement for option 54 (contributed by Fabian Kurtz) src: add Intel Atom Cherryview SOC HSUART support src: add the ID for the Huawei ME909S LTE modem src: HardenedBSD Stack Clash mitigations[1] ports: sqlite 3.19.3[2] ports: openvpn 2.4.3[3] ports: sudo 1.8.20p2[4] ports: dnsmasq 2.77[5] ports: openldap 2.4.45[6] ports: php 7.0.20[7] ports: suricata 3.2.2[8] ports: squid 3.5.26[9] ports: carootnss 3.31 ports: bind 9.11.1-P2[10] ports: unbound 1.6.3[11] ports: curl 7.54.1[12] *** Beastie Bits Thinkpad x230 - trying to get TrackPoint / Touchpad working in X (http://lists.dragonflybsd.org/pipermail/users/2017-July/313519.html) FreeBSD deprecates all r-cmds (rcp, rlogin, etc.) (http://marc.info/?l=freebsd-commits-all&m=149918307723723&w=2) Bashfill - art for your terminal (https://max.io/bash.html) Go 1.9 release notes: NetBSD support is broken, please help (https://github.com/golang/go/commit/32002079083e533e11209824bd9e3a797169d1c4) Jest, A ReST api for creating and managing FreeBSD jails written in Go (https://github.com/altsrc-io/Jest) *** Feedback/Questions John - zfs send/receive (http://dpaste.com/3ANETHW#wrap) Callum - laptops (http://dpaste.com/11TV0BJ) & An update (http://dpaste.com/3A14BQ6#wrap) Lars - Snapshot of VM datadisk (http://dpaste.com/0MM37NA#wrap) Daryl - Jail managers (http://dpaste.com/0CDQ9EK#wrap) ***
Tobias och Fredrik snackar nyheter från Apples nyss avslutade utvecklarkonferens WWDC. Vi fokuserar på utvecklarintressanta nyheter, men det blir ett kort snack om prylar som inledning. Tobias första inköp efter keynoten har faktiskt redan levererats. Därefter blir det nyheter i Xcode, grafik-API:er och annat i Macos, AR, VR och Mac-hårdvara. Ett stort tack till Cloudnet som sponsrar vår VPS! Har du kommentarer, frågor eller tips? Vi är @kodsnack, @tobiashieta, @iskrig och @bjoreman på Twitter, har en sida på Facebook och epostas på info@kodsnack.se om du vill skriva längre. Vi läser allt som skickas. Gillar du Kodsnack får du hemskt gärna recensera oss i iTunes! Länkar WWDC 2017 - keynoten iMac pro Det Tobias beställde Platforms state of the union - “den andra keynoten” Refactoring libclang - Clangs C-API Resharper Clion Pycharm Cmake Clang 4 Apple file system HEVC - artisten också känd som H265 Kaby lake Metal Directx 12 Vulkan ARKit AMD Ryzen Alla videos från WWDC Titlar Jag öppnar paket 34198 rader Automatiska refaktoreringar över en stor yta Hur mycket har det här sönder Cmake? Vad i hela världen är det med det namnet? Namnet får inte många plus De har fokuserat väldigt mycket på baksidan Lägga fler cores på problemet
Yazılım Projelerinin build ve deploy süreçlerini otomatize etmek için build sistemlerini kullanıyoruz. Bu videoda build sistemlerine genel bir bakış ile birlikte bu sistemlerle kol kola çalışan, sevdiğim ve kullandığım araçlardan biri olan CMake’i ele alacağız.
Rob and Jason are joined by Björn Fahller to talk about the trompeloeil Mocking Framework for Modern C++ Unit Testing. Björn Fahller is a senior developer at Net Insight, and has been developing software for a living since 1994, mostly embedded programming for communications devices. Björn learned C++ from usenet and the ARM (Annotated Reference Manual) which was the standard before there was a standard. On a hobby basis, Björn likes to find silly solutions to non-problems and to explore effects of programming constructs. Outside of programming, Björn is a member of a small group thet brews beer together, and is also a member of a volunteer organization of aviators who help with things like search and rescue operations, forest fire monitoring, and storm damage assessment. News Multithreading with C++17 and C++20 Distinguishing between maybe-null vs never-null is the important thing Going Native 56: Cmake in Visual Studio Björn Fahller @bjorn_fahller Playful Programming Links Trompeloeil Mocking Framework Björn Fahller - Mocking Modern C++ with Trompeloeil Sponsor Backtrace JetBrains
In this episode, Marian Luparu and Iyyappa Murugandi chat with Steve about CMake support in Visual Studio. Download the latest version of Visual Studio 2017 and try it out!For more information go to https://aka.ms/cmake.Timestamps:[ 00:10 ] Intro[ 01:25 ] What is CMake?[ 02:29 ] Current state of CMake in Visual Studio[ 05:46 ] Why CMake?[ 07:10 ] Demo[ 14:08 ] How does it work?[ 16:00 ] CMake and Open Folder[ 17:21 ] What are we hearing from the community and future work[ 21:26 ] Call to action
This episode of GoingNative comes to you in two parts:First, Steve chats with Augustin Popa about the latest and greatest features in Visual Studio 2017 RC. Please try it out and let us know how you like it! For deeper dives on specific features, feel free to watch the Connect(); videos, or read about it on the Visual C++ Blog.Download Visual Studio 2017 RC.Check out Steve Carroll and Daniel Moth's CppCon presentation on the future of Visual StudioSecond, Robert Schumacher talks about the new open source Windows package manager, Vcpkg. Vcpkg has been picked up enthusiastically by the community with a growing collection of supported libraries (90+ at the time this video was posted).Link to the GitHub for Vcpkg.More information on the Vcpkg blog post including a list of all packaged libraries Timestamps:[ 01:00 ] Visual Studio 2017 RC [ 01:25 ] Acquisition overhaul - new installer! [ 03:32 ] Performance improvements [ 05:05 ] Productivity enhancements [ 13:03 ] Call to action[ 13:34 ] Vcpkg [ 14:09 ] What is Vcpkg? [ 19:29 ] Community response [ 20:17 ] Vcpkg vs. NuGet for C++ [ 24:52 ] How to get it, and VS versions supported [ 26:54 ] Demo [ 27:00 ] Installing [ 28:18 ] Using Vcpkg [ 32:01 ] CMake support [ 34:09 ] Community call to action
Rob and Jason are joined by Stephen Kelley to discuss his work on the CMake Server project which will enable advanced tooling for CMake. Stephen Kelly first encountered CMake through working on KDE and like many C++ developers, did his best to ignore the buildsystem completely. That worked well for 4 years until 2011 when the modularization of KDE libraries led to a desire to simplify and upstream as much as possible to Qt and CMake. Since then, Stephen has been responsible for many core features and designs of 'Modern CMake' and now tries to lead designs for its future. News Conan virtual environments: Manager your C and C++ tools Macromancy Opt-in header only libraries Opt-in header-only libraries with CMake Stephen Kelly @steveire Steveire's Blog Stephen Kelly on GitHub Links CMake Daemon for user tools CMake Sponsor Incredibuild
David Sankel joins Rob Irving to talk about his upcoming C++Now! talk where he will be discussing the use of CMake and Git in large C++ projects. We also touch on David's expertise with functional programming.
Fredrik och Kristoffer snackar byggsystem, nya mobiler och utveckling för mobiler. Fredrik talar ut om sina äventyr med Cmake, och vi funderar över hur man får in nya rutiner och lösningar i sina jobbprojekt. Sedan snackar vi om Apples senaste presentation, dess livesändningsproblem, prylarna som presenterades och androidmobilen Oneplus one. Vi snackar också lite om att skripta sin vardag, smarta klockors plats eller avsaknad av plats i våra liv och hur mängden skärmstorlekar och enheter påverkar apputveckling. Avsnittet sponsras av Procera, som bland annat söker skarpa webbapplikationsutvecklare. Diskutera gärna avsnittet på Techworld. Länkar Byggsystem - program som hjälper en att sätta ihop ens program - har vi talat om förr C++ Linux - öppet operativsystem som distribueras i en stor mängd varianter Ubuntu - populär linuxdistribution, framför allt på persondatorer (snarare än servermaskiner) Debian - tidig och populär linuxdistribution Cmake - byggsystem MySQL - populär och öppen databas Glob - bygger en lista av filer som matchar ett visst uttryck, exempelvis alla filer med en viss filändelse i en viss mapp. Xcode - Apples utvecklingsmiljö Cmake kan generera filer för Xcode Länkning av program skapar en enda körbar fil av de många filer som skapas av kompilatorn Precompiled header Visual studio och precompiled headers Grand central dispatch apt-get - kommando för att installera paket på bland annat Debian libdispatch - biblioteket Grand central dispatch bygger på. Har portats till flera andra operativsystem GCC och precompiled headers Clang Precompiled headers och Xcode Att ersätta saker (eller personer) med mycket små shell-skript Applescript - skriptspråk för Mac OS X Service på Mac OS X Fredriks “flikar till Markdown”-skript Markdown - enkelt märkformat för rena textfiler Applescript dictionary beskriver vilka möjligheter en applikation ger via Applescript UI-skriptning med Applescript BBedit - anrik textredigerare för Mac OS X - och dess stöd för skript Acorn - bildbehandlingsprogram för Mac OS X - och dess stöd för skript Gus Mueller JSTalk - alternativt skriptspråk för Mac OS X Javascript och skriptande i Yosemite (Mac OS X 10.10) TV truck schedule - bilden vi alla fick se när sändningen strulade Videoströmmen av Apples presentation Artikeln om varför livesändningen gick dåligt - ifrågasatt av folk med kunskap Akamai CDN - content delivery network - system av utspridda servrar som kan användas för att snabbare leverera data till slutanvändare Tommy Krul - killen med den häftiga sjalen Super evil megacorp utvecklar spelet Vainglory Iphone 6 och 6 plus Apple watch Watchkit - Apples ännu inte släppta ramverk för att utveckla olika typer av appar för Apple watch M7 och M8 - kretsar i nyare modeller av Iphone som registrerar rörelse Den magnetiska laddaren för Apple watch Pebble - smart klocka Galaxy gear - Samsungs familj smarta klockor E-ink - skärmteknik som ser ut som bläck på papper och som (i många versioner) inte kräver ström för att visa en bild Dick Tracy Oneplus one - stor och välgjord androidtelefon Hur skärmen renderas på Iphone 6 plus Skärmrendering på retinamacar Iphone 6 plus i landskapsläge Rykten kring “Ipad pro” Square Apple pay - nyss presenterat system för att betala med applemobiler Izettle GB glace Swift är nu 1.0 Cocoa - Apples övergripande ramverk för Mac- och IOS-utveckling Saker Apple släppt som öppen källkod Block för C libimobiledevice - linuxbibliotek för att prata med Iphone Cyanogenmod - androidbaserat operativsystem för mobila enheter Android 4.4 Android L Androids fula progress bar - Video som visar den fula progressbaren (och en ersättare) Alien Dalvik - virtuell maskin använd av bland annat Jolla för att köra androidapplikationer Dalvik - Androids virtuella maskin. Ersatt av ART från och med Android L Bittorrent sync - decentraliserat system för filsynkronisering, lite som Dropbox fast bara mellan datorer du delar din information med Anpassning för olika skärmstorlekar och upplösningar på Android Humble bundle - köp spelpaket och ge pengar till välgörande ändamål Double fine - spelutvecklingsstudio Brütal legend Nexus 7 - Googles sjutumsplatta HTC Desire Z - Kristoffers första Android-telefon Launchers för Android - programmet som visar enhetens huvudvy och startar andra program Quasseldroid - IRC-klient till Android Kodkata - övning för att bli en bättre programmerare genom träning och upprepning Fontrendering på Android Chet Haase Filthy rich clients - bok om att skapa fräcka gränssnitt med Java Massive - malmöbaserad spelstudio World in conflict - realtidsstrategispel från 2007 TAT - The astonishing tribe - malmöbaserad designstudio som köptes av Blackberry 2010 Blackberry 10 - Blackberrys senaste operativsystem för mobila enheter Androids 2D-grafik har haft stöd för hårdvaruacceleration sedan 3.0. Near-field communication - NFC - trådlös kortdistanskommunikationsstandard
Tobias berättar om hur Plex hanterar sin fork av XBMC - från mergestrategier till kodredigering. Vi diskuterar byggsystem och diffverktyg, får spel över GNUs autohell, mediterar över tidszoner och jagar svårfångade buggar. Länkar ------ * [XBMC](http://xbmc.org "XBMC") * [Plex](http://plexapp.com) * [HTTP live streaming](https://tools.ietf.org/html/draft-pantos-http-live-streaming-10) * [Kaleidoscope](http://www.kaleidoscopeapp.com/) * [ccache](https://ccache.samba.org/) * [distcc](https://code.google.com/p/distcc/) * [Cmake](http://www.cmake.org/) * [Ninja](http://martine.github.com/ninja/) * [waf](https://code.google.com/p/waf/) * [scons](http://www.scons.org/) * [Jenkins](http://jenkins-ci.org/) * [Ant](https://ant.apache.org/) * [Maven](https://maven.apache.org/) * [Leiningen](http://leiningen.org/) * [Escape from GNU Autohell](http://www.shlomifish.org/open-source/anti/autohell/) * [GNU Auto*hell](http://harmful.cat-v.org/software/GNU/auto-hell) * [GNU M4](https://www.gnu.org/software/m4/) * [LLDB](https://en.wikipedia.org/wiki/LLDB_(debugger))
I det här avsnittet pratar vi om byggsystem. Kristoffer och Tobias har en lång utläggning om varför Automake är det sämsta och varför kanske CMake är det bästa. Länkar för avsnittet: Automake SCons WAF CMake Tobias CMake funktioner The Walking Dead