Language Selection

English French German Italian Portuguese Spanish

Development

Programming With Dtrace, Python and LLVM Founder Picks RISC-V

Filed under
Development
  • On The Benefits of Static Trace Points

    Years ago IBM coined the term First Failure Data Capture (FFDC). Capture enough data about a failure, just as it occurs the first time, so that reproducing the failure is all but unnecessary. An observability framework is a set of tools that enable system administrators to monitor and troubleshoot systems running in production, without interfering with efficient operation. In other words, it captures enough data about any failure that occurs so that a failure can be root-caused and possibly even fixed without the need to reproduce the failure in vitro.

    Of course, FFDC is an aspirational goal. There will always be a practical limit to how much data can be collected, managed, and analyzed without impacting normal operation. The key is to identify important exceptional events and place hooks in those areas to record those events as they happen. These exceptional events are hopefully rare enough that the captured data is manageable. And the hooks themselves must introduce little or no overhead to a running system.

    The trace point facility

    The trace point facility, also known as ftrace, has existed in the Linux kernel for over a decade. Each static trace point is an individually-enabled call out that records a set of data as a structured record into a circular buffer. An area expert determines where each trace point is placed, what data is stored in the structured record, and how the stored record should be displayed (i.e., a print format specifier string). The format of the structured record acts as a kernel API. It is much simpler to parse than string output by printk. User space tools can filter trace data based on values contained in the fields (e.g., show me just trace events where "status != 0").

    Each trace point is always available to use, as it is built into the code. When triggered, a trace point can do more than capture the values of a few variables. It also records a timestamp and whether interrupts are enabled, and which CPU, which PID, and which executable is running. It is also able to enable or disable other trace points, or provide a stack trace. Dtrace and eBPF scripts can attach to a trace point, and hist triggers are also possible.

    Trace point buffers are allocated per CPU to eliminate memory contention and lock waiting when a trace event is triggered. There is a default set of buffers ready from system boot onward. However, trace point events can be directed into separate buffers. This permits several different tracing operations to occur concurrently without interfering with each other. These buffers can be recorded into files, transmitted over the network, or read from a pipe. If a system crash should occur, captured trace records still reside in these buffers and can be examined using crash dump analysis tools.

  • Announcing Mu version 1.0.3

    We didn’t intend to cut this release but changes in the way the latest OSX works meant that code highlighting didn’t work correctly. We also managed to apply a fix to an annoying bug relating to where Mu set the current working directory for scripts run in Python3 mode.

    OSX Catalina has posed a number of problems, from the incorrect rendering mentioned above, to the way the application should be installed and problems with permissions when flashing a BBC micro:bit.

    The simple answer to the installation story is, once you’ve installed Mu in your Applications folder, you should first open it with CTRL-click (not a double click) and select the “Open” button in the resulting pop-up. Subsequent runs of Mu can be started in the usual “double click” way. If you don’t do the “CTRL-click” trick you’ll see a pop-up complaining about Mu not being checked for malicious software.

  • Mike Driscoll: PyDev of the Week: Thomas Wouters

    I’m a self-taught programmer, a high school dropout, a core CPython developer, and a former PSF Board Director from Amsterdam, The Netherlands. I’ve been playing with computers for a long time, starting when my parents got a Commodore 64 with a couple books on BASIC, when I was 6 or 7. I learned a lot by just playing around on it. Then in 1994 I discovered the internet, while I was still in high school. This was before the days of the World Wide Web or (most) graphics, but I was sucked in by a programmable MUD, a text-based “adventure” environment, called LambdaMOO. LambdaMOO lets you create your own part of the world by making rooms and objects, and programming their behaviour, in a programming language that was similar to Python (albeit unrelated to it). One thing led to another and I dropped out of high school and got a job at a Dutch ISP (XS4ALL), doing tech support for customers. A year later I moved to the Sysadmin department, where I worked for ten years. I gradually moved from system administration to programming, even before I learned about Python.

    Besides working with computers I also like playing computer games of all kinds, and non-computer games like board games or card games. I do kickboxing, and I have a bunch of lovely cats, about whom I sometimes tweet. I’m pretty active on IRC as well, and I’m a channel owner of #python on Freenode. I also keep ending up in administration-adjacent situations, like the PSF Board of Directors and the Python Steering Council, not so much because I like it but because I don’t mind doing it, I’m apparently not bad at it, and it’s important stuff that needs to be done well.

  • Dividing Deep Into Enhancing Photos With Python

    Python is the most reliable and renowned content management system for websites of any kind to create dynamically attractive web resources for their uses.

    Python has got everything that developers can ask for to provide reliable user experience to end consumers and develop the business online.

    For any website, maintaining the quality of the images becomes challenging because the high-quality image would result in the slow loading speed of the landing pages, which might result in poor user experience.

    There are many tools available online that can compress the images and makes them uploadable on the website. However, the resulted images would often lose all the visual appeal after they are compressed through an online tool.

  • Text Translation with Google Translate API in Python

    Unless you have been hiding under a rock, you have probably used Google Translate on many occasions in your life. Whenever you try to translate a word or a sentence from a certain language to another, it is the Google Translate API which brings you the desired results in the background. Though you can translate anything by simply going to the Google Translate web page, you can also integrate Google Translate API into your web applications or desktop programs. The best thing about the API is that it is extremely easy to set up and use.

    You can actually do a lot of things with the help of the Google Translate API ranging from detecting languages to simple text translation, setting source and destination languages, and translating entire lists of text phrases. In this article, you will see how to work with the Google Translate API in the Python programming language.

  • Python Community Interview With Kelly and Sean of Teaching Python

    This week I’m joined by Kelly Paredes and Sean Tibor, the hosts of the Teaching Python podcast. Join us as we discuss the benefits of learning Python outside of the code itself, and what it’s like to learn Python when you’re not planning to become a professional developer. So, without further ado, let’s meet Kelly and Sean!

  • With SiFive, We Can Change the World

    My quest is to build beautiful things that help change the world, and I’ve been fortunate to spend the last 15 years in Silicon Valley, working with some of the major players shaping all sorts of technology. Today, I’m super excited to join SiFive - the company I believe is best positioned to transform the silicon industry, to lead the Platform Engineering team. With experience building and leading large-scale production systems that power our industry, I’m looking forward to making the dream of customized chips a reality with SiFive’s amazing team of engineers.

    The end of Moore’s Law is a profound time, leading to new accelerators, new demand for custom ASICs, and new opportunities - and I believe that it is time for the semiconductor industry to change its approach to innovation. This industry has been defined by proprietary technologies that are difficult to use, don’t interoperate well, and have poor user experience. I believe that open tooling, world class engineering, and a focus on end-to-end user experience can transform the industry. Similarly, the RISC-V architecture pro-vides unique opportunities for SoC customization at every level. This is only possible with SiFive’s ambi-tious design methodology, which is unmatched in the industry.

    My background includes experience creating and leading a number of large-scale technologies, including compiler technologies like the LLVM Compiler Infrastructure project, the Clang C and C++ compiler, the MLIR machine learning infrastructure, and others. I also spearheaded the creation of Swift - a program-ming language that powers Apple’s ecosystem - and led a team at Tesla that applies a wide range of tech in the autonomous driving space. Most recently, I built and managed an array of AI-related compiler, runtime, and programing language teams for Google Brain and TensorFlow.

  • LLVM Founder Chris Lattner Joins SiFive To Lead Platform Engineering

    This move for Chris comes after serving at Apple more than a decade where he led their LLVM-based toolchain efforts as well as developing the Swift programming language, a brief stint at Tesla focusing on their Autopilot software, and then for the past two and a half years has been at Google. At Google is where he was working on TensorFlow and the Machine Learning IR and other compiler-related efforts.

Programming and Security Patches

Filed under
Development
Security
  • A little hidden gem: QStringIterator

    The code above is broken.

    It falls into the same trap of endless other similar code: it doesn’t take into account that QString does not contain characters/code points, but rather UTF-16 code units.

    All operations on a QString (getting the length, splitting, iterating, etc.) always work in terms of UTF-16 code units, not code points. The reality is: QString is Unicode-aware only in some of its algorithms; certainly not in its storage.

    For instance, if a string contains simply the character “A” — that is, MATHEMATICAL BOLD CAPITAL A (U+1D400) — then its QString storage would actually contain 2 “characters” reported by size() (again, really, not characters in the sense of code points but two UTF-16 code units): 0xD835 and 0xDC00.

    The naïve iteration done above would then check whether those two code units are uppercase, and guess what, they’re not; and therefore conclude that the string is not uppercase, while instead it is. (Those two code units are “special” and used to encode a character outside the BMP; they’re called a surrogate pair. When taken alone, they’re invalid.)

  • How to get started with test-driven development

    I am often approached by software developers who are on board with the switch to test-driven development (TDD). They understand that describing expectations first and then writing code to meet those expectations is the best way to write software. And they agree that writing tests first does not introduce any overhead since they must write tests anyway. Still, they find themselves stuck, not being clear on what to test, when to test it, and how to test it. This article will answer those questions.

    [...]

    One way to the test custom-made car battery would be to hire a testing crew, ship the car with the battery to Portland, and then get the testing crew to drive the car from Portland to Seattle. If the car arrives in Seattle, you can confirm that, yes, the car battery functions as expected.

    Another way to test the custom-made car battery would be to install it in the car and see if the engine turns over. If the engine starts, you can confirm that, yes, the car battery functions as expected.

    Still another way would be to use a voltmeter and connect the positive (+) and the negative (-) terminals to see if the voltmeter registers voltage output in the range of 12.6 to 14.7 volts. If it does, you can confirm that, yes, the car battery functions as expected.

  • Perl Weekly Challenge 44: Only 100, Please, and Make it $200

    These are some answers to the Week 44 of the Perl Weekly Challenge organized by Mohammad S. Anwar.

    [...]

    For solving this task, we first use a recursive combine subroutine that generates all possible strings by inserting between the digits of the “123456789” string the + plus addition, the - subtraction operator, or the '' empty string (i.e. no operator). We then use the evaluate subroutine with each string to perform the various arithmetic operations and compute whether the total is 100.

    [...]

    You have only $1 left at the start of the week. You have been given an opportunity to make it $200. The rule is simple with every move you can either double what you have or add another $1. Write a script to help you get $200 with the smallest number of moves.

    Obviously, doubling your asset is a faster way to go high values than just adding 1. But, if you only double your asset, you get powers of 2, leading you to 128, and then you have to go all the way from 128 to 200, which is most probably not the fastest way to get to 200. In fact, if you first go to three (for example by adding 1 twice), then multiplying by 2 six times, you get to 192, which is much closer to 200. That’s 16 moves, which seems not bad at all. But there may be a yet faster way, let’s see.

  • Wine Debugger Improvements Are On The Way, Start Of LLVM LLDB Support

    With Wine 5.0 having released and the Git tree back open for feature work, we're quite looking forward to see what new material will land following this feature freeze that was in effect the past two months.

    One of the new patch series out by CodeWeavers' Rémi Bernon is improving Winedbg, the Wine debugger. Winedbg is used for debugging Windows applications and among its many debug capabilities is a proxy mode for interacting with the GNU Debugger (GDB). It's that GDB integration that is being improved upon while also starting to support LLVM's Debugger (LLDB).

  • Security updates for Monday

    Security updates have been issued by Debian (jsoup and slirp), Fedora (community-mysql, elog, fontforge, libuv, libvpx, mingw-podofo, nodejs, opensc, podofo, thunderbird-enigmail, transfig, and xfig), openSUSE (arc, libssh, and libvpx), Red Hat (git, java-1.8.0-openjdk, java-11-openjdk, python-reportlab, and sqlite), Slackware (thunderbird), and SUSE (java-1_8_0-openjdk, python, and samba). 

Programming and Security Patches

Filed under
Development
Security
  • A little hidden gem: QStringIterator

    The code above is broken.

    It falls into the same trap of endless other similar code: it doesn’t take into account that QString does not contain characters/code points, but rather UTF-16 code units.

    All operations on a QString (getting the length, splitting, iterating, etc.) always work in terms of UTF-16 code units, not code points. The reality is: QString is Unicode-aware only in some of its algorithms; certainly not in its storage.

    For instance, if a string contains simply the character “

Qt 5.14.1 Released

Filed under
Development
KDE

I am happy to announce we have released Qt 5.14.1 today. As a patch release, Qt 5.14.1 does not add any new functionality but provides many bug fixes and other improvements.

Compared to Qt 5.14.0, the new Qt 5.14.1 contains around 220 bug fixes including security issue fixes for both Qt (CVE-2020-0570) and 3rd party components (CVE-2019-19244, CVE-2019-19603, CVE-2019-19242, CVE-2019-19645, CVE-2019-19646 & CVE-2019-19880). Also in QtWebEngine there are many CVE fixes from Chromium. For details of the most important changes, please check the Change files of Qt 5.14.1.

Read more

Also: Qt 5.14.1 Released With 200+ Bug Fixes, Including Security Fixes

The 20 Best Linux Debuggers for Modern Software Engineers

Filed under
Development
Software

Debuggers are a group of software used to analyze computer programs. They are very important from a software engineering point of view since they allow us to find problems in our code. There are several kinds of Linux debuggers, including memory debuggers, source debuggers, profilers, and so on. Common usage of these tools includes finding bugs, optimizing codebases, controlling runtime parameters, etc. Today, our editors have compiled a helpful resource outlining 20 of the best debuggers for Linux-based developers and software engineers. Take a look at them below to find out the perfect toolkit for your programming arsenal.

Read more

Python Programming

Filed under
Development
  • Prettier logging with Rich

    There are a few things going on here. Important fields are rendered in their own column to make it easier to scan. To reduce visual clutter, the time field is only rendered if it changes and I've set the date format to time only, which is fine for local development (if you forget what day it is you need a vacation). The message column has some syntax highlighting applied to it, tuned for web development, but more importantly it is word-wrapped. Finally there is a column for the python file and line that called the log method.

    This would be my ideal logging for web-development, your mileage may vary and you may want to tune it for your domain.

  • Release of Relatorio 0.9.1

    We are glad to announce the release of Relatorio version 0.9.1.

    Relatorio is a templating library mainly for OpenDocument using also OpenDocument as source format.

  • How to write a very simple calculator in Python as a complete beginner programmer

    As I progress with my journey as a computer coder, I have realized that for one to master the art of writing scripts and applications, hours of practice matter more than months of study being spent on How To Program books. Reading theory about computer programming matters, but it does not make one a code writer. Based on such conclusion, I have decided to share real world scenarios materialized in computer code, mostly Python.

    Through this article you're going to learn how to put in practice basic concepts in Python with the main purpose of pushing your skills to the next level as a doer, instead of just a thinker.

    Although once finished you will end up with a simple calculator which supports basic maths, at least you will know how to properly make use of builtin utilities such as input, def statements and the while True loop.

  • How to create image quotes from scratch with nider open source python package

    Being a blogger, I have needs on tools which can ease my job as a content producer. Having knowledge on the Python programming language I have discovered an open source package which fits my needs when it comes to generating images with text.

    As an 'advanced' terminal user, I truly like automating stuff on the console. Before launching a fresh command prompt on your own computer, make sure you meet the requirements shown below in order to follow me through the rest of this blog post.

  • An open source alternative to Internet Download Manager written in Python, pyIDM

    Most of the computer geeks are familiar with the Internet Download Manager tool. Although it is one of the best among download managers; being a soldier of open source software, I decided to share pyIDM as an alternative for anyone who is passionate about computer programming.

    According to the official documentation shared on the Github platform, pyIDM supports multi-connections at a high speed due to its download engine which relies entirely on LibCurl.

Programming Leftovers

Filed under
Development
  • Python 3.9.0a3
  • Python 3.9.0a3 now available for testing

    Python 3.9 is still in development. This releasee, 3.9.0a3 is the third of six planned alpha releases. Alpha releases are intended to make it easier to test the current state of new features and bug fixes and to test the release process. During the alpha phase, features may be added up until the start of the beta phase (2020-05-18) and, if necessary, may be modified or deleted up until the release candidate phase (2020-08-10). Please keep in mind that this is a preview release and its use is not recommended for production environments.

  • Weekly Python StackOverflow Report: (ccxii) stackoverflow python report
  • Perl Weekly Challenge 044: One Hundred, Two Hundred

    We can populate each place “between digits” with one of three possible values: a plus sign, minus sign, or nothing. To check all the possible permutations, we’ll use an indicator function similarly to The Knapsack Problem. In this case, though, there are three possible values, so we need to loop over numbers in the ternary numeral system.

    The only operation we’ll need will be the increment, so we don’t need the full support for arithmetic in base 3. We can implement the increment ourselves: we start from the right of the number, change any 2 into 0 and move left. Once we find 0 or 1, we increment it and we’re done.

    To create the expression, we just need to intersperse the digits with the operators. See the apply subroutine below.

    To evaluate the expression, we won’t use eval, as we don’t want to introduce security problems into our code. As the operations are just addition and subtraction, we can transform the expression into a large sum of positive and negative numbers (the latter correspond to the numbers being subtracted). We’ll use a regexp match to split the expression.

  • Confessions of a Recovering Proprietary Programmer, Part XVII

    One of the gatherings I attended last year featured a young man asking if anyone felt comfortable doing git rebase “without adult supervision”, as he put it. He seemed as surprised to see anyone answer in the affirmative as I was to see only a very few people so answer. This seems to me to be a suboptimal state of affairs, and thus this post describes how you, too, can learn to become comfortable doing git rebase “without adult supervision”.

    [...]

    Fortunately, one of my colleagues pointed me at tig, which provides a dynamic ASCII-art display of the selected commits. This is again not as good as gitk, but it is probably as good as it gets in a text-only environment.

    These tools do have their limits, and other techniques are required if you are actively rearranging more than a few hundred commits. If you are in that situation, you should look into the workflows used by high-level maintainers or by the -stable maintainer, who commonly wrangle many hundreds or even thousands of commits. Extreme numbers of commits will of course require significant automation, and many large-scale maintainers do in fact support their workflows with elaborate scripting.

    Doing advanced git work without being able to see what you are doing is about as much a recipe for success as chopping wood in the dark. So do yourself a favor and use tools that allow you to see what you are doing!

Easy Librem 5 App Development: Flashlight

Filed under
Development
Gadgets
HowTos

In my first post on easy application development on the Librem 5 I discussed how to turn a simple shell script that takes a screenshot into a full graphical app with only a few extra lines of code. In this post I will follow up with an even simpler application that took about twenty minutes to write with much of that time involved in reading documentation.

My Bright Idea

The interesting thing about smart phones is how many other devices they have replaced beyond a regular phone. For instance, there used to be a market for small, pocket-sized digital cameras, but now many people just use the cameras on their smart phones. While some people still do keep a pocket flashlight with them, many people just use the light on their smart phone.

I realized that a flashlight app would be another great way to showcase just how easy it is to develop applications for the Librem 5. As applications go the requirements are pretty simple: you need a button to turn on the light, a button to turn off the light, and a button to close the app.

Read more

Programming: Perl/Raku, Python and More

Filed under
Development

Perl / Raku

  • GPW2020 - Keynote, accepted talks and extension of the submission deadline

    We are really happy to announce that Curtis “Ovid” Poe will present a keynote at the 22nd Perl/Raku workshop in March in Erlangen!

    Curtis runs Tau Station and is a long time contributor to the workshop.

    The list of accepted talks has grown, with varied topics from “Progressing from Humans to Developers”, “A new Lisp, in Perl” and “Querying the Etherum Blockchain Nodes with Raku”. All accepted talks are listed here .

    Since we still have some slots free for talks, we have extended the deadline for talk submission to the 3rd February 2020. If you have a topic you want to present, please submit your talk .

  • Announcing MooX::Pression

    Kind of like Moops but with less hacky parsing.

  • Paws L (A little party planned)

    Well it looks like a wrap for PAWS XML as the last thing I am working on is getting the test suite to pass

Python

  • Release 1.1.0 of python-sql

    We are proud to announce the release of the version 1.1.0 of python-sql.

    python-sql is a library to write SQL queries in a pythonic way. It is mainly developed for Tryton but it has no external dependencies and is agnostic to any framework or SQL database.

  • Talk Python to Me: #248 Climate change and your Python code

    The most critical issue of our time is climate change. Yet, when you think about our carbon impact in the software industry, what comes to mind? Business travel? Commuting to the office so you don't miss filing that TPS report? Yeah, those are bad. But data centers, servers, and our apps consume a substantial portion of the total energy used by modern humans.

    In this episode, you'll meet Chris Adams. He has been advocating for a greener software environment and has concrete advice to make your Python program more climate-friendly.

  • Python 3 Functions - Learn Python Programming Tutorial

    What is a function? A function is a block of code used to perform a specific task. It can be a collection of many tasks strung together to perform a single task. It is a block of code which can be re-used elsewhere inside a Software application, helping to build the application, brick by brick, function by function. Python programming language provides the capabilities to build software applications using functions. Through using Python you can build your own functions or use the Python 3 standard library which contains pre-written functions. These functions can help you build your software faster without the reliance on having to build everything from scratch.

Misc.

  • RcppArmadillo 0.9.800.4.0

    Armadillo is a powerful and expressive C++ template library for linear algebra aiming towards a good balance between speed and ease of use with a syntax deliberately close to a Matlab. RcppArmadillo integrates this library with the R environment and language–and is widely used by (currently) 680 other packages on CRAN.

    A second small Armadillo bugfix upstream update 9.800.4 came out yesterday for the 9.800.* series, following a similar bugfix release 9.800.3 in December. This time just one file was changed (see below).

  • What 2020 brings for the developer, and more industry trends

    As part of my role as a senior product marketing manager at an enterprise software company with an open source development model, I publish a regular update about open source community, market, and industry trends for product marketers, managers, and other influencers. Here are five of my and their favorite articles from that update.

  • Anybody can write good bash (with a little effort)

    A gentle admonishment to accept that shell scripts will appear in your codebases and to lean heavily on automated tools, modern features, safety rails, and best practices whenever possible.

Programming Leftovers

Filed under
Development
  • Remi Collet: PHP version 7.2.27, 7.3.14 and 7.4.2

    RPMs of PHP version 7.4.2 are available in remi-php74 repository for Fedora ≥ 29 and Enterprise Linux ≥ 7 (RHEL, CentOS).

    RPMs of PHP version 7.3.14 are available in remi repository for Fedora 30-31 and remi-php73 repository for Fedora 29 and Enterprise Linux ≥ 6 (RHEL, CentOS).

    RPMs of PHP version 7.2.27 are available in remi repository for Fedora 29 and remi-php72 repository for Enterprise Linux ≥ 6 (RHEL, CentOS).

  • Remi Collet: PHP version 7.2 required

    So, now, some noarch packages in the remi repository require 7.2 as the minimal required version.

    foo requires php(language) >= 7.2
    Despite the remi repository still provides the PHP 5.6, 7.0 and 7.1, and even if I still plan to maintain these versions for some time (backporting some security patches, when some other repositories just planned to drop them), this doesn't suite the main goal of my repository: provide the latest versions of PHP and promote their adoption by developers and users.

  • Smalltalk-Inspired Pharo 8.0 Released

    Pharo is based on thus general concepts of Smalltalk. Thuss it is strongly object-oriented and everything in the Pharo language is an object. The language is dynamically typed; inheritance is simple; memory management is automatic via a garbage collector and its syntax is very simple and small.

    There's an enthusiastic collection of developers using Pharo, and the developers make regular commits and provide almost daily bug fixes. The language has a number of ways to interface with C, and there are Java and JavaScript libraries.

    The first change of note in Pharo 8 is the move to 64-bit as the recommended version for Windows - it already was the main version for Unix and OSX. Iceberg, the git client for Pharo, has also been improved in this release, with better management of projects and repositories management, improved merging, and faster loading and comparison for projects with big packages.

  • HackSpace’s 25 ways to use a Raspberry Pi

    The latest issue of HackSpace magazine is out today, and it features a rather recognisable piece of tech on the front cover.

  • Delete Files with Java 8

    A friend asked me to help him with the following in Bash -- delete all files but a whitelisted and use mix / max depth for directory traversal. It's probably possible in Bash with some crazy find, grep, etc one-liner.

  • Asynchronous Tasks in Ansible

    Most users know Ansible well for its ability to perform configuration management as well as orchestrate complex software deployment. However, Ansible also has a reasonable arsenal of features that lend themselves to operational tasks. There are modules that can handle simple tasks such as creating user accounts and restarting daemons. But more than just modules, some core features of Ansible make it a great tool for any systems administrator.

    [...]

    You might think that Ansible will eventually timeout on long-running jobs. You would be correct in the default case. However, with a little configuration, you can still have Ansible take care of these tasks for you! Ansible offers the ability to asynchronously execute tasks. You have the option of configuring Ansible check back on a regular interval or you can even have Ansible “fire and forget” if you so choose. This can help you get around pesky ssh timeouts among other things!

    What is especially great about the asynchronous task feature is that it is really easy to use! There are only two flags affiliated with the feature. The -B flag is used to set our task timeout value. We pass a number of seconds with the flag.

  • 'Thousands Of Tools Have Come & Gone, But Ansible & Bash Have Stood The Test Of Time'
  • Container debugging minihint

    What’s in my container?

  • Bdale Garbee: Digital Photo Creation Dates

    I thought briefly about hacking Piwigo to use the GPS time stamps, but quickly realized that wouldn't actually solve the problem, since they're in UTC and the pictures from our phone cameras were all using local time. There's probably a solution lurking there somewhere, but just fixing up the times in the photo files that were wrong seemed like an easier path forward.

    A Google search or two later, and I found jhead, which fortunately was already packaged for Debian. It makes changing Exif timestamps of an on-disk Jpeg image file really easy. Highly recommended!

    Compounding my problem was that my wife had already spent many hours tagging her photos in the Piwigo web GUI, so it really seemed necessary to fix the images "in place" on the Piwigo server. The first problem with that is that as you upload photos to the server, they are assigned unique filenames on disk based on the upload date and time plus a random hash, and the original filename becomes just an element of metadata in the Piwigo database. Piwigo scans the Exif data at image import time and stuffs the database with a number of useful values from there, including the image creation time that is fundamental to aligning images taken by different cameras on a timeline.

    [...]

    At this point, all the files on disk were updated, as a little quick checking with exif and exiv2 at the command line confirmed. But my second problem was figuring out how to get Piwigo to notice and incorporate the changes. That turned out to be easier than I thought! Using the admin interface to go into the photos batch manager, I was able to select all the photos in the folder we upload raw pictures from Karen's camera to that were taken in the relevant date range (which I expressed as taken:2019-12-14..2021), then selected all photos in the resulting set, and performed action "synchronize metadata". All the selected image files were rescanned, the database got updated...

Syndicate content

More in Tux Machines

Type Title Author Replies Last Postsort icon
Story Fedora and Red Hat: UEFI Nextcloud, OpenShift, Open Virtual Network (OVN) and Microsoft Roy Schestowitz 27/01/2020 - 8:41pm
Story MPV 0.32 Released Roy Schestowitz 27/01/2020 - 8:38pm
Story Programming With Dtrace, Python and LLVM Founder Picks RISC-V Roy Schestowitz 27/01/2020 - 8:21pm
Story Leftovers: IBM, MicroK8s and Devices Roy Schestowitz 27/01/2020 - 8:01pm
Story Android Leftovers Rianne Schestowitz 27/01/2020 - 7:58pm
Story Programming and Security Patches Roy Schestowitz 27/01/2020 - 7:57pm
Story Programming and Security Patches Roy Schestowitz 27/01/2020 - 7:55pm
Story Solus 4.1 Fortitude Released Roy Schestowitz 5 27/01/2020 - 7:47pm
Story Andrew Tridgell and Genevieve Bell awarded Australia Day honors Roy Schestowitz 1 27/01/2020 - 7:40pm
Story Chrome OS 81 to allow Linux username selection for Crostini Rianne Schestowitz 27/01/2020 - 7:38pm