home.social

Search

333 results for “jni”

  1. jeuneafrique.com/1521560/polit

    Bien qu’ils ne constituent que 15 % de la population malienne et 8 à 10 % de celles du #BurkinaFaso et du #Niger, les #Peuls représentent plus de la moitié des civils tués par l’armée et les milices de ces deux pays au cours des deux dernières années. Un ciblage et une disproportion dont le lien avec l’évolution des effectifs des groupes jihadistes présents dans la région – l’EIGS et le JNIM – est évident.
    #racismeetviolencesdetat

  2. jeuneafrique.com/1521560/polit

    Bien qu’ils ne constituent que 15 % de la population malienne et 8 à 10 % de celles du #BurkinaFaso et du #Niger, les #Peuls représentent plus de la moitié des civils tués par l’armée et les milices de ces deux pays au cours des deux dernières années. Un ciblage et une disproportion dont le lien avec l’évolution des effectifs des groupes jihadistes présents dans la région – l’EIGS et le JNIM – est évident.
    #racismeetviolencesdetat

  3. jeuneafrique.com/1521560/polit

    Bien qu’ils ne constituent que 15 % de la population malienne et 8 à 10 % de celles du #BurkinaFaso et du #Niger, les #Peuls représentent plus de la moitié des civils tués par l’armée et les milices de ces deux pays au cours des deux dernières années. Un ciblage et une disproportion dont le lien avec l’évolution des effectifs des groupes jihadistes présents dans la région – l’EIGS et le JNIM – est évident.
    #racismeetviolencesdetat

  4. Hawkmoth is a tool to incorporate documentation comments from C and C++ source into Sphinx based documentation.

    I just released Hawkmoth v0.17.0. There's much improved Doxygen/Javadoc comment support for compatibility, the option to add links to source code, and more.

    Go check it out!

    jnikula.github.io/hawkmoth/sta

  5. Mesa now uses Hawkmoth, my humble pet project, to document its developer API in Sphinx. 🥳

    Hawkmoth replaces the Doxygen+Breathe combo in the job.

    This is one small step for Mesa, one giant leap for Hawkmoth.

    Thanks to @kusma for getting the switch started, and for all the help along the way!

    github.com/jnikula/hawkmoth/

  6. Współpracuj komercyjnie z sekurakiem – dwa różne ~stanowiska: teksty / prowadzenie szkoleń

    Przejdźmy od razu do szczegółów. Jeśli chcesz regularnie lub okazjonalnie pracować dla sekuraka, czytaj dalej :-) Lub od razu wypełnij formularz. W jakich obszarach poszukujemy współpracowników? 1. Opracowywanie newsów i/lub tekstów W obu obszarach proponujemy regularną lub luźną współpracę (np. 1 tekst na miesiąc), chociaż w przypadku newsów może być...

    #WBiegu #Praca #Sekurak

    sekurak.pl/wspolpracuj-komercy

  7. 🧶👀🧶 KNITTERATI!! 🧶👀🧶

    Stumbled upon E15 of Chelle C.'s #YouTube channel "KnittingAndSewing."

    Gets off to a slow start, but then she shares her quite informed perspective, from the general ethos of the '70s to interior design trends and how this all ties in with the Stephen West #MKAL #Geogradient. West took his design inspiration for the shawl from 1970s wallpapers. So interesting, her take!

    #Knitting @Knitting #Knitstodon #FiberArts #FibreArts Crochet #Weaving Sewing

    Https://youtu.be/yxI5CxInVUI?s

  8. Islamist Terrorism: The Enemy with a Theology, Not a Territory

    Just yesterday, I got into an argument with a colleague about “who” or “what” exactly qualifies as a terrorist. Being an avid geopolitical observer and policy analyst, I couldn’t just let the confusion slide. Needless to say, the conversation went south. It mirrored a disturbing pattern I’ve seen across media, academia, and even public discourse: we’re increasingly intellectualizing terror, blurring its distinctions, and excusing its ideologies, and for what? To appear cool, modern, tolerant, and clever? It’s time to set this straight.

    Between 1979 and April 2024, Islamist groups were responsible for 66,872 attacks and over 249,000 deaths worldwide (Fondapol). In 2024 alone, ISIS and its affiliates killed over 1,800 people across 22 countries. JNIM, Al-Shabaab, and TTP together accounted for another 2,400+ deaths (Global Terrorism Index 2025).

    The vast majority of global terrorism today is perpetrated by Islamist groups.

    Let’s begin with this: not all violence by non-state actors is equal. And not all groups we label as “terrorist” are the same.

    • India – Naxals: Maoist ideology, tribal base, anti-state. Confined to Indian forests.
    • Colombia – FARC: Marxist, fought for land reform. Signed peace accords in 2016.
    • Sri Lanka – LTTE: Ethnonationalist. Wanted a Tamil homeland. Defeated in 2009.
    • Spain – ETA: Basque separatists. Mostly domestic targets.
    • Philippines – NPA: Communist insurgency. Confined within national borders.

    Each of these groups had/have brutal records. But none justified mass murder through a global religious mandate. Comparing Islamist terrorism to regional political insurgencies isn’t just flawed, it’s dangerously misleading. Islamist terror is distinct in its theology, scale, ambition, and cruelty.

    1. The Islamist Ideological Engine

    Islamist terrorism is driven by a radical interpretation of Islam that views violence as divinely sanctioned. Groups like ISIS, Al-Qaeda, Hamas, and Boko Haram believe that their war is sacred, a duty to impose Sharia, cleanse the world of non-believers, and restore a global Islamic caliphate. Their targets are chosen not for political pressure, but as acts of religious devotion.

    This is fundamentally different from insurgents like India’s Naxalites, who are motivated by Marxist-Leninist ideology and fight to overthrow a class-based system. They don’t wage war to fulfill a religious prophecy. They fight for what they consider political justice.

    2. Terrorism Without Borders

    Islamist terror is transnational by nature. Al-Qaeda’s leadership may sit in Afghanistan, but its operatives strike in New York, Nairobi, and Paris. ISIS declared a caliphate that drew fighters from over 100 countries. Boko Haram operates in Nigeria but coordinates with ISIS in Iraq.

    Contrast that with Naxalites, FARC (Colombia), or ETA (Spain). Their violence is brutal, yes, but geographically confined. They have local goals, limited to borders.

    3. Who They Kill

    According to the Global Terrorism Index (2023), over 85% of victims of Islamist terror attacks between 2007–2022 were civilians. Mass casualty events like the 2015 Paris attacks, 2019 Sri Lanka Easter bombings, 2020 Kabul maternity ward attack, 2019 Pulwama suicide bombing (that killed 40 Indian paramilitary personnel), the 2024 Reasi terror attack (where Hindu pilgrims were targeted in Jammu and Kashmir), and the 2025 Pahalgam massacre where 26 Hindus were asked their religion and recite the kalma before being gunned down, specifically targeted non-combatants and non-Muslims. Just coincidences? Hell, no.

    Naxals, LTTE, or the New People’s Army (Philippines) have attacked civilians too, but most of their targets have been state actors, police forces, or specific class enemies. Their violence is selective, not total. Government of India reports indicate that over 70% of Naxal attack victims are uniformed personnel, not civilians.

    4. The Theology of Permanence

    You can negotiate with an insurgent. You cannot negotiate with an Islamic jihadist who’s led by a book.

    Insurgent movements often have clear political demands, land rights, autonomy, wealth redistribution, and history shows they can be pacified or disarmed when those demands are addressed. The FARC in Colombia signed a peace accord in 2016 after decades of armed conflict. Even the LTTE, though militarily defeated, had a defined political goal of Tamil sovereignty.

    Islamist terrorism, however, doesn’t negotiate for policy changes or political inclusion. It demands total submission to a theological order. Groups like ISIS and Al-Qaeda don’t seek reforms. They seek religious domination. To them, peace with secular or pluralistic systems is heresy.

    That’s what makes Islamist terrorism uniquely dangerous: its theological foundation sees war as a divine command, not a situational choice. You can offer a Maoist a constitution. But you can’t offer heaven to someone who thinks he’s earning it by killing you.

    Media’s selective silence is no less than complicity

    One of the most troubling aspects of this entire discourse is how mainstream media underplays Islamist terrorism, or worse, rationalizes it. From terminology like “militants” or “freedom fighters” to the disproportionate coverage of right-wing violence compared to global jihadist campaigns, there’s a deliberate editorial caution that borders on appeasement.

    Why? Part of it stems from fear, fear of being labeled Islamophobic, fear of violent backlash, fear of offending identity politics. Another part is ideological alignment in liberal media spaces, where criticizing religiously driven violence, especially from non-Western actors, is seen as morally suspect.

    The result? A sanitization of facts. A refusal to name Islamist terror for what it is. A reluctance to probe mosques, madrasas, or social media networks where radicalization brews. Meanwhile, the victims pile up.

    When journalists obfuscate and commentators relativize, they don’t protect pluralism, they enable violence. We must call out not just the terrorists, but the narrative engineers who whitewash their crimes.

    Clarity Is Not Bigotry

    We can’t fight what we don’t define properly. And we definitely can’t win if we’re more worried about sounding ‘tolerant’ than telling the truth.

    Islamist terrorism is unique. It is not just another form of political violence. It is theological totalitarianism cloaked in faith, global in ambition, and apocalyptic in vision.

    Islamist Terrorism Is a global war. Let’s start calling it out, clearly, honestly, and without being apologetic.

    #AlQaeda #counterterrorismNarrative #ETA #FARC #globalJihad #globalTerrorThreats #globalTerrorismStats #ISISAttacks #IslamicExtremism #IslamistTerrorism #IslamistViolence #jihadVsInsurgency #jihadistIdeology #LTTE #MaoistInsurgency #mediaBiasTerrorism #NaxalInsurgency #PahalgamMassacre #PulwamaAttack #radicalIslam #ReasiTerror #religiousTerrorism #Taliban #terrorIdeology #terrorismComparison #terrorismOpinionPiece #theologicalTerrorism

  9. Raspberry Pi and Frontline SMS

    shkspr.mobi/blog/2012/06/raspb

    (I think I'm the first person to try this - so I decided to document the process.)

    A few weeks ago, I won a Raspberry Pi at the #OTA12 hackday. It arrived on Friday, so I thought I would turn it into an SMS server using the incredible FrontlineSMS.

    0. Setting up the Pi

    This is the easy part. Follow the excellent guide on the eLinux wiki. Essentially, download the Debian image, extract, and dd it onto an SD card.

    The hardest part was finding a full sized SD! In the end, I found an old adapter and stuck in a 2GB micro SD card.

    1. First Boot

    My first boot was a failure. Nothing appeared on the screen. So, I switched off the power, unplugged every lead, plugged them back in, and powered it on. Success!

    The first thing I did was ensure the operating system was up to date.

    Check for updates:

    sudo apt-get update

    Then, apply those updates

    sudo apt-get upgrade

    This took a few minutes.

    Finally, set up SSH or VNC if you plan on using the machine remotely.

    2. Dongle Hardware

    FrontlineSMS maintains a list of USB dongles which work with its service. I used a Vodafone branded Huawei E220. Sold as Vodafone K3565The Raspberry Pi only has 2 USB slots - the dongle was slim enough not to interfere with the other USB cable, but it did mean I could only run either a keyboard or a mouse without using a hub. It's recommended that you use a powered USB hub - although my keyboard and mouse didn't seem to draw too much power.

    3. Frontline SMS

    Downloading Frontline SMS via the commandline (using v1.6 because v2 isn't ready for Linux yet)

    wget http://frontlinesms.com/download/secure/FrontlineSMS-distribution-1.6.16.3-linux_i686-dist.zip

    Unzip

    unzip FrontlineSMS-distribution-1.6.16.3-linux_i686-dist.zip

    Run

    cd FrontlineSMS-distribution-1.6.16.3./FrontlineSMS.sh

    Gave an error - FrontlineSMS requires Java.

    4. Installing Java

    The Java install takes about 140MB of disk space. After downloading and extracting FrontlineSMS, I only had about 220MB of free space. I deleted the FrontlineSMS zip file and had 234MB free. Just about enough room!

    sudo apt-get install openjdk-6-jdk

    Wait several minutes and you'll be good to go.

    5. Running for the First Time

    Frontline SMS requires a GUI.

    Running a GUI is as easy as typing

    startx

    The resolution was set at the slightly odd dimensions of 1264*672 - which meant there was a large black border around the screen.

    Open a terminal (Start, Accessories, LXTerminal, then type

    cd FrontlineSMS-distribution-1.6.16.3./FrontlineSMS.sh

    After several minutes of waiting, FrontlineSMS started!

    However, no matter what I tried, I couldn't get FrontlineSMS to detect the dongle. The OS could see it fine (using "lsusb" and "dmesg"), but it just didn't appear to be detected by FrontlineSMS.

    A delve into the commandline, showed this error:

    librxtxSerial.so: cannot open shared object file: No such file or directory(Possible cause: can't load IA 32-bit .so on a ARM-bit platform)thrown while loading gnu.io.RXTXCommDriver

    6. Installing the Correct Libraries

    We need to load the correct (ARM) version of rxtx.

    sudo apt-get install librxtx-java

    Find where the install process has dumped it

    find . -name "librxtxSerial.so"

    It should show you two location - the first being where the correct version is, the second where the FrontlineSMS version is.

    ./usr/lib/jni/librxtxSerial.so./home/pi/Desktop/FrontlineSMS-distribution-1.6.16.3/librxtxSerial.so

    All we need to do is overwrite the incorrect version.

    cp /usr/lib/jni/librxtxSerial.so /home/pi/Desktop/FrontlineSMS-distribution-1.6.16.3/

    Then, run

    ./FrontlineSMS.sh

    And, after some warnings and waitings, you should see

    Hey Presto! FrontlineSMS up and running on a Raspberry Pi!

    (Oh! I finally worked out how to do screenshots! install scrot and run "scrot -d 10" to take a screenshot after 10 seconds.)

    7. Manually Sending an SMS

    Running FrontlineSMS via Java on a 700MHz ARM device is very slow. It is possible to talk directly to the dongle and manually tell it to send SMS.

    First, I installed picocom.

    sudo apt-get install picocom

    To find out where the dongle has been installed, type:

    dmesg

    Which will give an long output, which should contain some text like this like this:

    option 1-1.2:1.1: GSM modem (1-port) converter detectedusb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0option 1-1.2:1.0: GSM modem (1-port) converter detectedusb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1

    The dongle installs itself in two places - ttyUSB0 & 1. It's the first one we want.

    Connect by issuing this command

    picocom /dev/ttyUSB0 -b 115200 -l

    Which will give you the output

    port is        : /dev/ttyUSB0flowcontrol    : nonebaudrate is    : 115200parity is      : nonedatabits are   : 8escape is      : C-anoinit is      : nonoreset is     : nonolock is      : yessend_cmd is    : ascii_xfr -s -v -l10receive_cmd is : rz -vvTerminal ready

    From now on in, we're typing commands directly into the dongle. You cannot press the delete key! Copy & paste, or be careful when typing!

    First, to make sure everything is working, we type

    AT

    We should see this response

    OK

    Next, set the dongle to text mode

    AT+CMGF=1

    Again, the response should be

    OK

    Let's send our first SMS!

    AT+CMGS="+447700900123"

    This will not say "OK", rather, it will prompt us to type a message

    > 

    Type your message, so the screen looks like

    > This is a test

    DO NOT HIT ENTER. Instead, hit CTRL and Z at the same time.

    You should see a response like

    +CMGS: 193OK

    The number is the "sent items" reference. Within a few moments, the SMS should have been received.

    You can send an SMS to the dongle. To check for messages, type the command

    AT+CMGL="ALL"

    You should see all the messages in the inbox

    +CMGL: 0,"REC READ","+447700900000",,"12/06/19,13:53:19+04"Received+CMGL: 1,"REC READ","+447700900321",,"12/06/23,17:16:29+04"Testing+CMGL: 2,"REC UNREAD","+447700900555",,"12/06/23,23:27:48+04"This is another test

    To quit picocom, hold down CTRL, then hold down A, then hold down X.

    Useful Links

    A collection of links I found useful when writing this blog post

    #frontlinesms #hack #hacking #hardware #linux #ota12 #RaspberryPi #sms

  10. A while ago I mentioned I use Android-10 with the built in SIP stack and that the Google stack was pretty buggy and I had to fix it simply to get it to function without disconnecting all the time. Since then I’ve upported my fixes to Android-11 (the jejb-11 branch in the repositories) by using LineageOS-19.1. However, another major deficiency in the Google SIP stack is its complete lack of security: both the SIP signalling and the media streams are all unencrypted meaning they can be intercepted and tapped by pretty much anyone in the network path running tcpdump. Why this is so, particularly for a company that keeps touting its security credentials is anyone’s guess. I personally suspect they added SIP in Android-4 with a view to basing Google Voice on it, decided later that proprietary VoIP protocols was the way to go but got stuck with people actually using the SIP stack for other calling services so they couldn’t rip it out and instead simply neglected it hoping it would die quietly due to lack of features and updates.

    This blog post is a guide to how I took the fully unsecured Google SIP stack and added security to it. It also gives a brief overview of some of the security protocols you need to understand to get secure VoIP working.

    What is SIP

    What I’m calling SIP (but really a VoIP system using SIP) is a protocol consisting of several pieces. SIP (Session Initiation Protocol), RFC 3261, is really only one piece: it is the “signalling” layer meaning that call initiation, response and parameters are all communicated this way. However, simple SIP isn’t enough for a complete VoIP stack; once a call moves to in progress, there must be an agreement on where the media streams are and how they’re encoded. This piece is called a SDP (Session Description Protocol) agreement and is usually negotiated in the body of the SIP INVITE and response messages and finally once agreement is reached, the actual media stream for call audio goes over a different protocol called RTP (Real-time Transport Protocol).

    How Google did SIP

    The trick to adding protocols fast is to take them from someone else (if you’re open source, this is encouraged) so google actually chose the NIST-SIP java stack (which later became the JAIN-SIP stack) as the basis for SIP in android. However, that only covered signalling and they had to plumb it in to the android Phone model. One essential glue piece is frameworks/opt/net/voip which supplies the SDP negotiating layer and interfaces the network codec to the phone audio. This isn’t quite enough because the telephony service and the Dialer also need to be involved to do the account setup and call routing. It always interested me that SIP was essentially special cased inside these services and apps instead of being a plug in, but that’s due to the fact that some of the classes that need extending to add phone protocols are internal only; presumably so only manufacturers can add phone features.

    Securing SIP

    This is pretty easy following the time honoured path of sending messages over TLS instead of in the clear simply by using a TLS wrappering technique of secure sockets and, indeed, this is how RFC 3261 says to do it. However, even this minor re-engineering proved unnecessary because the nist-sip stack was already TLS capable, it simply wasn’t allowed to be activated that way by the configuration options Google presented. A simple 10 line patch in a couple of repositories (external/nist_sip, packages/services/Telephony and frameworks/opt/net/voip) fixed this and the SIP stack messaging was secured leaving only the voice stream insecure.

    SDP

    As I said above, the google frameworks/opt/net/voip does all the SDP negotiation. This isn’t actually part of SIP. The SDP negotiation is conducted over SIP messages (which means it’s secured thanks to the above) but how this should be done isn’t part of the SIP RFC. Instead SDP has its own RFC 4566 which is what the class follows (mainly for codec and port negotiation). You’d think that if it’s already secured by SIP, there’s no additional problem, but, unfortunately, using SRTP as the audio stream requires the exchange of additional security parameters which added to SDP by RFC 4568. To incorporate this into the Google SIP stack, it has to be integrated into the voip class. The essential additions in this RFC are a separate media description protocol (RTP/SAVP) for the secure stream and the addition of a set of tagged a=crypto: lines for key negotiation.

    As will be a common theme: not all of RFC 4568 has to be implemented to get a secure RTP stream. It goes into great detail about key lifetime and master key indexes, neither of which are used by the asterisk SIP stack (which is the one my phone communicates with) so they’re not implemented. Briefly, it is best practice in TLS to rekey the transport periodically, so part of key negotiation should be key lifetime (actually, this isn’t as important to SRTP as it is to TLS, see below, which is why asterisk ignores it) and the people writing the spec thought it would be great to have a set of keys to choose from instead of just a single one (The Master Key Identifier) but realistically that simply adds a load of complexity for not much security benefit and, again, is ignored by asterisk which uses a single key.

    In the end, it was a case of adding a new class for parsing the a=crypto: lines of SDP and doing a loop in the audio protocol for RTP/SAVP if TLS were set as the transport. This ended up being a ~400 line patch.

    Secure RTP

    RTP itself is governed by RFC 3550 which actually contains two separate stream descriptions: the actual media over RTP and a control protocol over RTCP. RTCP is mostly used for multi-party and video calls (where you want reports on reception quality to up/downshift the video resolution) and really serves no purpose for audio, so it isn’t implemented in the Google SIP stack (and isn’t really used by asterisk for audio only either).

    When it comes to securing RTP (and RTCP) you’d think the time honoured mechanism (using secure sockets) would have applied although, since RTP is transmitted over UDP, one would have to use DTLS instead of TLS. Apparently the IETF did consider this, but elected to define a new protocol instead (or actually two: SRTP and SRTCP) in RFC 3711. One of the problems with this new protocol is that it also defines a new ciphersuite (AES_CM_…) which isn’t found in any of the standard SSL implementations. Although the AES_CM ciphers are very similar in operation to the AES_GCM ciphers of TLS (Indeed AES_GCM was adopted for SRTP in a later RFC 7714) they were never incorporated into the TLS ciphersuite definition.

    So now there are two problems: adding code for the new protocol and performing the new encyrption/decryption scheme. Fortunately, there already exists a library (libsrtp) that can do this and even more fortunately it’s shipped in android (external/libsrtp2) although it looks to be one of those throwaway additions where the library hasn’t really been updated since it was added (for cuttlefish gcastv2) in 2019 and so is still at a pre 2.3.0 version (I did check and there doesn’t look to be any essential bug fixes missing vs upstream, so it seems usable as is).

    One of the really great things about libsrtp is that it has srtp_protect and srtp_unprotect functions which transform SRTP to RTP and vice versa, so it’s easily possible to layer this library directly into an existing RTP implementation. When doing this you have to remember that the encryption also includes authentication, so the size of the packet expands which is why the initial allocation size of the buffers has to be increased. One of the not so great things is that it implements all its own crypto primitives including AES and SHA1 (which most cryptographers think is always a bad idea) but on the plus side, it’s the same library asterisk uses so how much of a real problem could this be …

    Following the simple layering approach, I constructed a patch to do the RTP<->SRTP transform in the JNI code if a key is passed in, so now everything just works and setting asterisk to SRTP only confirms the phone is able to send and receive encrypted audio streams. This ends up being a ~140 line patch.

    So where does DTLS come in?

    Anyone spending any time at all looking at protocols which use RTP, like webRTC, sees RTP and DTLS always mentioned in the same breath. Even asterisk has support for DTLS, so why is this? The answer is that if you use RTP outside the SIP framework, you still need a way of agreeing on the keys using SDP. That key agreement must be protected (and can’t go over RTCP because that would cause a chicken and egg problem) so implementations like webRTC use DTLS to exchange the initial SDP offer and answer negotiation. This is actually referred to as DTLS-SRTP even though it’s an initial DTLS handshake followed by SRTP (with no further DTLS in sight). However, this DTLS handshake is completely unnecessary for SIP, since the SDP handshake can be done over TLS protected SIP messaging instead (although I’ve yet to find anyone who can convincingly explain why this initial handshake has to go over DTLS and not TLS like SIP … I suspect it has something to do with wanting the protocol to be all UDP and go over the same initial port).

    Conclusion

    This whole exercise ended up producing less than 1000 lines in patches and taking a couple of days over Christmas to complete. That’s actually much simpler and way less time than I expected (given the complexity in the RFCs involved), which is why I didn’t look at doing this until now. I suppose the next thing I need to look at is reinserting the SIP stack into Android-12, but I’ll save that for when Android-11 falls out of support.

    https://blog.hansenpartnership.com/securing-the-google-sip-stack/

    #android #lineageos #lineageos181 #SDP #secureSip #sip #SRTP #TLS

  11. Excellent job opportunity: community developer at Earthmover PBC:

    github.com/pydata/xarray/discu

    US-only 😞, but remote available 😊. And the Earthmover folks are awesome!

  12. @steventdennis My theory is the victor for a post-Twitter Virtual Gathering Place will be determined by a) ease of migration, like apps like DeBirdify; and b) exclusives, ie - Person X is only on Post but Person Y only on here. #FNZ is a "good get."

  13. @ocefpaf I don’t know if repodata patching is *the* best feature of , but it sure is a contender.

  14. So, I’m going to be in northern Spain on Aug 12 for the total solar , my first. 🤩 Can any random eclipse glasses from Amazon do or are there more reputable sources for them? I don’t want to be a statistic on Google’s “why do my eyes hurt” search map. (I use Kagi anyway but still.)

  15. As academic jobs in Australia go, this one is pretty good: Microscopy Platform Applications Specialist at UniMelb Biological Optical Microscopy Platform.

    jobs.unimelb.edu.au/caw/en/job

    The BOMP team is very nice, and continuing positions are really hard to find in Oz right now. (I do not have one.) Advertised at Academic Level A (geared at someone recently out of PhD).

  16. Any scikit-image fans in Vienna? The team would like to meet in Vienna for a code sprint Aug 14-16 ahead of EuroSciPy. We'd super appreciate it if someone's workplace can host us! All we need is electricity, natural light, and (most important) walking distance to coffee. ☕️😂🙏

  17. @ratamero YASSSS 🦞 🦀 reminder that the scans are available for all to download on Monash's FigShare instance: bridges.monash.edu/articles/da 😃

  18. RE: fediscience.org/@petersuber/11

    I’ve been reading a lot about cooperatives over the past year for image.coop, and am totally convinced that all universities should change to a cooperative governance model.

  19. Any scikit-image fans in Vienna? The #skimage team would like to meet in Vienna for a code sprint Aug 14-16 ahead of EuroSciPy. We'd super appreciate it if someone's workplace can host us! All we need is electricity, natural light, and (most important) walking distance to coffee. ☕️😂🙏

  20. Any scikit-image fans in Vienna? The #skimage team would like to meet in Vienna for a code sprint Aug 14-16 ahead of EuroSciPy. We'd super appreciate it if someone's workplace can host us! All we need is electricity, natural light, and (most important) walking distance to coffee. ☕️😂🙏

  21. Any scikit-image fans in Vienna? The #skimage team would like to meet in Vienna for a code sprint Aug 14-16 ahead of EuroSciPy. We'd super appreciate it if someone's workplace can host us! All we need is electricity, natural light, and (most important) walking distance to coffee. ☕️😂🙏

  22. Any scikit-image fans in Vienna? The #skimage team would like to meet in Vienna for a code sprint Aug 14-16 ahead of EuroSciPy. We'd super appreciate it if someone's workplace can host us! All we need is electricity, natural light, and (most important) walking distance to coffee. ☕️😂🙏