Language Selection

English French German Italian Portuguese Spanish

Programming: Rust Turns 4, GCC, Go and Python

Filed under
Development
  • 4 years of Rust

    On May 15th, 2015, Rust was released to the world! After 5 years of open development (and a couple of years of sketching before that), we finally hit the button on making the attempt to create a new systems programming language a serious effort!

    It’s easy to look back on the pre-1.0 times and cherish them for being the wild times of language development and fun research. Features were added and cut, syntax and keywords were tried, and before 1.0, there was a big clean-up that removed a lot of the standard library. For fun, you can check Niko’s blog post on how Rust's object system works, Marijn Haverbeke’s talk on features that never made it close to 1.0 or even the introductory slides about Servo, which present a language looking very different from today.

    Releasing Rust with stability guarantees also meant putting a stop to large visible changes. The face of Rust is still very similar to Rust 1.0. Even with the changes from last year’s 2018 Edition, Rust is still very recognizable as what it was in 2015. That steadiness hides that the time of Rust’s fastest development and growth is now.

  • Three Ways of Storing and Accessing Lots of Images in Python

    Why would you want to know more about different ways of storing and accessing images in Python? If you’re segmenting a handful of images by color or detecting faces one by one using OpenCV, then you don’t need to worry about it. Even if you’re using the Python Imaging Library (PIL) to draw on a few hundred photos, you still don’t need to. Storing images on disk, as .png or .jpg files, is both suitable and appropriate.

    Increasingly, however, the number of images required for a given task is getting larger and larger. Algorithms like convolutional neural networks, also known as convnets or CNNs, can handle enormous datasets of images and even learn from them. If you’re interested, you can read more about how convnets can be used for ranking selfies or for sentiment analysis.

    ImageNet is a well-known public image database put together for training models on tasks like object classification, detection, and segmentation, and it consists of over 14 million images.

    Think about how long it would take to load all of them into memory for training, in batches, perhaps hundreds or thousands of times. Keep reading, and you’ll be convinced that it would take quite awhile—at least long enough to leave your computer and do many other things while you wish you worked at Google or NVIDIA.

  • A Linaro Developer Has Taken Up The Effort Of Converting GCC's SVN To Git

    The lengthy battle of converting the GNU Compiler Collection (GCC) to using a Git workflow from SVN might be getting closer to finally culminating... Linaro developer Maxim Kuvyrkov has jumped on the task of converting the GCC repository from SVN to Git and did so without much fuss.

    Eric S. Raymond has been working for what feels like ages on converting GCC SVN to Git using his "Reposurgeon" tool but given the massive size of the GCC code-base and long development history, it's been a slow process. There were roadblocks in his approach of converting the SVN history to Git that were blamed on high RAM prices and other obstacles. Most recently he was working on porting his tool to Golang but that it would take months to complete.

  • Friendlier tracebacks

    When beginners run programs that generate Python tracebacks, they are almost always confused by what the information shown and have no clue as to what this all means. More experienced programmers can sometimes extract enough information directly from tracebacks to figure out what what wrong, but they will often have to resort to inserting a few print calls and running their program again to truly figure out what went wrong and how to fix it. (A minority of programmers might eschew using print calls and use a debugger instead.)

    In order to make tracebacks more useful for them, some advanced programmers have designed tools to add more information so that simply looking at the enhanced traceback might be sufficient to diagnose properly the problem. These tools include better_exchook, infi.traceback, rich-traceback, stackprinter, as well as the beautiful better-exceptions, and many others including Python's own cgitb module. While there is no doubt that the additional information provided by these tools is useful for advanced programmers, it would likely only add to their confusion if it were used by beginners.

  • The Price of the Hallway Track

    There are many good reasons to not go to every talk possible when attending conferences. However increasingly it became hip to boast with not going to talks at all – encouraging others to follow suit. As a speaker, that rubs me the wrong way and I’ll try to explain why.

    This article started at PyCon US 2019, the biggest Python conference in the world with roughly 3,500 attendees. Over lunch on day one, I’ve noticed tweets encouraging people to not go to talks and instead do the infamous hallway track (= socializing in the hallways) or go to open spaces, and watch the videos later on YouTube. Sometimes even claiming that it doesn’t make any sense to go to talks in the first place.

  • Data Science Dojo Blog: Network Theory and Game of Thrones - A Perfect Combination

    Game of Thrones is arguably one of the biggest pop culture phenomena to hit the public consciousness in the last decade. Since the hype for the final season's arrival has gone down a bit, especially mine after episode three , I thought I could use this time to finally explore a side of Data Science that has always intrigued me - Network Theory, and combine it with a topic I am very invested in - Game of Thrones. Just to be clear I won't be making any claims or predictions about the plot of the show - No Spoilers. I just want to use Game of Thrones as a hopefully relatable context for discussing the analysis techniques.

    At a high level, Network Theory is the study of relationships between objects, more specifically it is a subfield of Graph Theory with extra attributes attached to the nodes and edges. If you're confused by these terms, don't worry I'll explain everything in a bit. For the rest, you might be familiar with graph theory and have not-so-fond memories associated with it, but bear with me for a while. I first learned basic graph theory in my university's algorithms course and, I'll be honest, I found absolutely nothing of interest in the entire topic. Sure, I could find the shortest path between two cities or find the best way to lay down routers in a computer network, but these topics never seemed fun to me. That is until I started exploring data science and learned about network analysis. That really opened my eyes to what the graph theory concepts were capable of. I encourage you to check out this video about exploring opposing factions and their effects on each other using graphs.

  • Go Baby Go

    I’m starting a new job next month and their language of choice is Go. Which means I have a good reason to finally get around to learning it (far too many years after I saw Marga talk about it at DebConf). For that I find I need a project - it’s hard to find the time to just do programming exercises, whereas if I’m working towards something it’s a bit easier. Naturally I decided to do something home automation related. In particular I bought a couple of Xiaomi Mijia Temperature/Humidity sensors a while back which also report via Bluetooth. I had a set of shell scripts polling them every so often to get the details, but it turns out they broadcast the current status every 2 seconds. Passively listening for that is a better method as it reduces power consumption on the device - no need for a 2 way handshake like with a manual poll. So, the project: passively listen for BLE advertisements, make sure they’re from the Xiaomi device and publish them via MQTT every minute.

    One thing that puts me off new languages is when they have a fast moving implementation - telling me I just need to fetch the latest nightly to get all the features I’m looking for is a sure fire way to make me hold off trying something. Go is well beyond that stage, so I grabbed the 1.11 package from Debian buster. That’s only one release behind current, so I felt reasonably confident I was using a good enough variant. For MQTT the obvious choice was the Eclipse Paho MQTT client. Bluetooth was a bit trickier - there were more options than I expected (including one by Paypal), but I settled on go-ble (sadly now in archived mode), primarily because it was the first one where I could easily figure out how to passively scan without needing to hack up any of the library code.

    With all those pieces it was fairly easy to throw together something that does the required steps in about 200 lines of code. That seems comparable to what I think it would have taken in Python, and to a large extent the process felt a lot closer to writing something in Python than in C.

  • Paul Ganssle: Time Zones In The Standard Library
  • Russell Keith-Magee: Python On Other Platforms
  • The 2019 Python Language Summit
  • What's an Engineering Workstation, in Your Opinion?

More in Tux Machines

Programming Leftovers

  • Excellent Free Books to Learn Java

    Java is a general-purpose, concurrent, class-based, object-oriented, high-level programming language and computing platform first released by Sun Microsystems in 1995. It is related in some ways to C and C++, in particular with regard to its syntax, and borrows a few ideas from other languages. Java applications are compiled to bytecode that can run on any Java virtual machine (JVM) regardless of computer architecture. Java is designed to be simple enough that many programmers can quickly become proficient in the language. It’s one of the most popular programming languages especially for client-server web applications.

  • GFX-RS Portability 0.7 Released With Vulkan Events, Binding Model Improvements

    The GFX-RS high performance graphics API for the Rust programming language and based on Vulkan while mapping to Metal when on Apple systems is out with a new release. GFX-RS continues to be about being a cross-platform API for Rust that is bindless and high performance while retaining the traits of Vulkan but with back-ends as well for Direct3D 11/12, Metal, and even OpenGL 2 / GLES2.

  • Use the Requests module to directly retrieve the market data

    Hello and welcome back to our cryptocurrency project. In the previous article I had mentioned before that I want to use the cryptocompy module to create our new cryptocurrency project, however, after a closer look at the CriptoCompare API I think we have better used the original API to make the rest call instead of using the wrapper module because the original API seems to provide more returned data type than the one offered by the cryptocompy module.

  • Eli Bendersky: Faster XML stream processing in Go

    XML processing was all the rage 15 years ago; while it's less prominent these days, it's still an important task in some application domains. In this post I'm going to compare the speed of stream-processing huge XML files in Go, Python and C and finish up with a new, minimal module that uses C to accelerate this task for Go. All the code shown throughout this post is available in this Github repository the new Go module is here.

  • How to Use Binder and Python for Repoducible Research

    In this post we will learn how to create a binder so that our data analysis, for instance, can be fully reproduced by other researchers. That is, in this post we will learn how to use binder for reproducible research. In previous posts, we have learned how to carry out data analysis (e.g., ANOVA) and visualization (e.g., Raincloud plots) using Python. The code we have used have been uploaded in the forms of Jupyter Notebooks.

  • Wingware Blog: Introducing Functions and Methods with Refactoring in Wing Pro

    In this issue of Wing Tips we explain how to quickly create new functions and methods out of existing blocks of Python code, using Wing Pro's Extract Method/Function refactoring operation. This is useful whenever you have some existing code that you want to reuse in other places, or in cases where code gets out of hand and needs to be split up to make it more readable, testable, and maintainable. Wing supports extracting functions and methods for any selected code, so long as that code does not contain return or yield statements. In that case automatic extraction is not possible, since Wing cannot determine how the extracted function should be called from or interact with the original code.

  • How to Use Binder and Python for Reproducible Research

    In this post we will learn how to create a binder so that our data analysis, for instance, can be fully reproduced by other researchers. That is, in this post we will learn how to use binder for reproducible research. In previous posts, we have learned how to carry out data analysis (e.g., ANOVA) and visualization (e.g., Raincloud plots) using Python. The code we have used have been uploaded in the forms of Jupyter Notebooks. Although this is great, we also need to make sure that we share our computational environment so our code can be re-run and produce the same output. That is, to have a fully reproducible example, we need a way to capture the different versions of the Python packages we’re using.

  • NumPy arange(): How to Use np.arange()

    NumPy is the fundamental Python library for numerical computing. Its most important type is an array type called ndarray. NumPy offers a lot of array creation routines for different circumstances. arange() is one such function based on numerical ranges. It’s often referred to as np.arange() because np is a widely used abbreviation for NumPy. Creating NumPy arrays is important when you’re working with other Python libraries that rely on them, like SciPy, Pandas, Matplotlib, scikit-learn, and more. NumPy is suitable for creating and working with arrays because it offers useful routines, enables performance boosts, and allows you to write concise code.

  • Cogito, Ergo Sumana: Beautiful Soup is on Tidelift

    I've been doing a tiny bit of consulting for Tidelift for a little over a year now, mainly talking about them to open source maintainers in the Python world and vice versa. (See my October 2018 piece "Tidelift Is Paying Maintainers And, Potentially, Fixing the Economics of an Industry".) And lo, in my household, my spouse Leonard Richardson has signed up as a lifter for Beautiful Soup, his library that helps you with screen-scraping projects.

  • Chris Moffitt: Automated Report Generation with Papermill: Part 1

    This guest post that walks through a great example of using python to automate a report generating process. I think PB Python readers will enjoy learning from this real world example using python, jupyter notebooks, papermill and several other tools.

  • Cryptocurrency user interface set up

    As mentioned above, in this article we will start to create the user interface of our latest cryptocurrency project. Along the path we will also use the CryptoCompare API to retrieve data.

  • Python Snippet 2: Quick Sequence Reversal
  • 10x Evilgineers | Coder Radio 367

    Mike rekindles his youthful love affair with Emacs and we debate what makes a "10x engineer". Plus the latest Play store revolt and some of your feedback.

BlueStar Linux 5.2.1

Today we are looking at BlueStar Linux 5.2.1. This release of BlueStar is an Arch rolling distro and comes with Linux Kernel 5.2.1 and KDE Plasma 5.16.3 and uses about 700MB of ram when idling. Bluestar Linux is a beautiful Arch/KDE distro that works great out of the box and is receiving a lot of love from their very active developer. Read more Direct/video: BlueStar Linux 5.2.1 Run Through

GNU Parallel 20190722 ('Ryugu') released

GNU Parallel 20190722 ('Ryugu') has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ GNU Parallel is 10 years old next year on 2020-04-22. You are here by invited to a reception on Friday 2020-04-17. Read more

today's howtos