Eric Vitiello

Eric Vitiello

@pixel.oldbytes.space.ap.brid.gy

Sentient Machine Therapist. My job is Computer. he/him. Engineering Manager. Be Curious, Not Judgmental. Photography: https://www.perceive.net/photography/ […] 🌉 bridged from ⁂ https://oldbytes.space/@pixel, follow @ap.brid.gy to interact

41 followers7 following1K posts

Eric Vitiello reposted

"The idea of a grown man crying over something that's beautiful, artistic, or creative — we almost never see it. [...] Media where men show vulnerability, where they get choked up or teary-eyed over something small and beautiful, should not be unique. They shouldn't be rare. It should be […]

social.coopOriginal post on social.coop

Eric Vitiello reposted

Open Source hot take: A software project is allowed to be *done*. Not everything needs to add features or rewrite things. You can just be happy with functionality and focus on just maintainance. "Maintenance mode" is not always bad but can just show a mature product.

Eric Vitiello reposted

💔 FBI Warns ICE Agents Not to Trust Any Woman Willing to Date Them https://gizmodo.com/fbi-warns-ice-agents-not-to-trust-any-woman-willing-to-date-them-2000814283

gizmodo.comgizmodo.comCue another interminable entry in the annals of right-wingers complaining they can’t get dates, though this time there’s a twist! The FBI issued a warning in February of this year that “as of late January 2026, a small group of women allegedly were creating fictitious online dating profiles with the purpose of attracting and then doxxing law enforcement participating in immigration enforcement,” according to documents obtained by Property of the People and shared with The Guardian. The memo implied that ICE officers should be wary of any woman that knows they’re an ICE agent, especially if they go out of their way to seem cool with ICE agents or identify themselves as tradwives. (Those are conservative women who dress like the women in _The Sound of Music_ , but without the opposition to the Anschluss. They’re rare enough in reality that the going rate for a professional matchmaker to find one is reportedly $25k). “These profiles were incorporating imagery of a ‘traditional wife’ aesthetic and listing specific interests in an attempt to appeal to … individuals in law enforcement,” the FBI wrote. “The objective was to lure affiliated law enforcement personnel into an online or in-person interaction under the guise of a date, after which the individuals would be publicly exposed and doxed online.” “The tactic is intended to generate public embarrassment and deter immigration enforcement activity,” the FBI added. It did not provide any specifics on where or when it observed the supposed doxxing operation, and conceded all information in the memo was “not finally evaluated intelligence.” The origin of the warning may well be a thinly sourced January 2026 post by the New York Post, which cited two TikTok posts from women stating they were using dating apps to identify ICE agents, as well as a single post by another female user urging gay men on Grindr to do the same. That post itself was inspired by another post from LibsOfTikTok, a homophobic and racist account that is ultra-popular with conservatives. The FBI wrote in the memo its information came from a “collaborative source.” At the time, Homeland Security spokesperson Tricia McLaughlin claimed that identifying a federal officer via their dating app profiles is “a felony.” (It is not. The Constitution protects publishing the names of federal officers or information about how they conduct their official duties, and ICE has failed to make good on some of its threats to prosecute doxxers before. Just don’t escalate to releasing private information, encouraging third-party harassment, or physical stalking.) In a statement to The Guardian, the FBI wrote it “regularly shares information” with other agencies and aims to ensure police are “safe from threats or violence while performing their duties.” Former FBI agent Mike German mocked the warning, telling the paper, “The rightwing echo chamber creates threats and the government’s intelligence apparatus just repeats those threats without any context… They must have run out of other threats.” It should surprise no one to learn that dating apps are much riskier for undocumented immigrants than a random ICE officer. An internal ICE memo from 2012 obtained by the Brennan Center for Justice claims to forbid agents from using fake online identities to communicate with suspects, but times have changed. The agency has shown virtually no restraint under Trump and escalated its usage of ruses. The League of United Latin American Citizens has called attention to rumors that ICE agents use dating apps to locate individuals they suspect of immigration violation, citing rumors that the agency offers financial incentives for agents with higher arrest rates. (FactCheck.org reported that DHS denies this, although ICE does offer local police who join immigration task forces performance-based bonuses, and the agency is allegedly facing ever-increasing quotas.) What’s likely more of a risk for undocumented individuals is face recognition and commercial ad data. ICE officers can feed a photo of anyone into a facial recognition app called “Mobile Fortify,” monitor social media with apps like SocialNet, and look at vast troves of commercially available location data without a warrant. One surveillance app that includes ICE on its client list is Penlink’s Webloc, a tool which can pull advertising geolocation data for entire neighborhoods and search through photos to locate individuals with face recognition. Penlink explicitly advertises one of its data sources as Tinder. In May, Politico reported that ICE published a request for information (indicating interest in a vendor) to expand use of “commercial Big Data and Ad Tech providers” in investigations.

I’ve been rewatching Arrested Development and completely forgot about a character they brought in season 3, played by Scott Baio, named Bob Loblaw. 😂 And in the last episode they mentioned he has a Law Blog. The Bob Loblaw Law blog. LOL

landonswartz.github.ioBill Atkinson and Dithering AlgorithmsSimple algorithms are one of my favorite things. They’re quick to learn, elegant, and fun to play with. But importantly, simple algorithms are often the simple solution to a simple problem. Nothing exemplifies this idea more than the _Atkinson Dithering_ algorithm. It is neither the first or best dithering algorithm, but it was a perfect solution for the problem right in front of it on Apple’s original Macintosh. It’s creator, Bill Atkinson, recently passed1 (I know one year is not recently but I am slow at writing so forgive me). I think it’s only fair to honor him with a quick look at one simple algorithm. ## Dithering Dithering a signal is to intentionally add noise in some form or fashion that results in randomizing the quaternization error. Quaternization is when you take something with many inputs, such as 256 colors, and reduce it down to a smaller set of outputs, like 16 colors. Much like it’s literary definition: > To act nervously or indecisively2 Dithering a signal allows for one to take a function that maps inputs to outputs and make it act a little more nervous in the way it processing pixels to present a more normal looking operation. When dithering images, a by-product of dithering is adding depth to colors. Dithering algorithms became important in early computer graphics because of limitations of the time. Computer screens could only have so many colors on screen at a time (like black and white or 8 bits of color). Therefore, it became very important to not just be able to display images with the limited color sets but also keep their depth and color. In a few years, this same problem came up on the early internet where images needed to conform to a limited color palette and keep their depth. One famous example of this is the GIF standard that limits color palettes to 256 colors. Without dithering, quaternization of reducing an image to 256 colors produces the artifact of color banding. It’s ugly, noticeable, and very easy to fix with dithering. ## A sampling of algorithms ### Floyd-Steinberg There are many methods to perform dithering for various applications. One can do simple thresholding for a basic solution. Halftoning could be done as well for supporting dot printer operations. A real-time application could reach for a ordered approach that uses a fixed threshold matrix for rendering (like the _Return to Obra Dinn_3). For our purposes, we will focus on the branch of dithering explored by Bill Atkinson with the original Macintosh: error-diffusion. Error-diffusion dithering focuses on dithering by “pushing” the error of the quantization process to neighboring pixels and processing the area of pixels versus a singular pixel at a time. It allows for sharper borders and generally cleaner images on early monitors. I just want to explore two algorithms and leave the others for readers to explore (maybe even create your own!). The first is _Floyd-Steinberg (FS) dithering_. The FS algorithm was proposed way back in 1976 by Robert W. Floyd and Louis Steinberg. In case, you were wondering when I brought up the GIF standard earlier, this is the dithering algorithm used in the GIF standard. It is simple and efficient. The best way to understand the process of it to me is to work through the code step by step: # This code is for black and white images for simplicity import numpy as np from PIL import Image def find_closest_palette_color(pixel: np.float64) -> np.float64:     if(pixel < 128):         return 0     else:         return 255 def Floyd_Steinberg_Dithering(src_image: np.array) -> np.array: # create an output image     dst_image = np.copy(src_image).astype(np.float64)     # Find the bounds of the input     height, width = src_image.shape[:2] # Perform dithering operation in raster order (by row then column)     for row in range(height):         for col in range(width):             old_pixel = dst_image[row, col]             # Find closest match the old pixel color             new_pixel = find_closest_palette_color(old_pixel)             # Set output to closest match new pixel             dst_image[row, col] = new_pixel             # Find the error from old to new pixel color             quant_error = old_pixel - new_pixel             # Diffuse the error to neighboring pixels             if col + 1 < width:                 dst_image[row, col + 1] += quant_error * 7/16             if col - 1 >= 0 and row + 1 < height:                 dst_image[row + 1, col - 1] += quant_error * 3/16             if row + 1 < height:                 dst_image[row + 1, col] += quant_error * 5/16             if col + 1 < width and row + 1 < height:                 dst_image[row + 1, col + 1] += quant_error * 1/16     return dst_image Dithering starts by creating an output image of the same size and shape. The process is about taking something visually complex and making it simpler for later processing and displaying. It is important to keep track of bounds and other parameters that should change. The process of dithering is performed in raster order. Or in simpler terms, from pixel 0 in the image sequentially left to right to the last pixel. One of the weirdest things to me when I started looking into dithering was understanding raster order (especially with Pillow’s reverse row-column (y,x) accessing). When the quantization error is diffused, it is diffused into the future of the raster order. That means the error only ever diffuses to the right (increasing column number) or down (increasing row number). Every error-diffused dithering algorithm is processed this way. Moreover, processing sequentially is one of the main reason dithering is performed on the CPU and not the GPU. The algorithm starting at pixel 0. To find what the pixel will be, the algorithm finds the closest color on whatever palette it is given. In this example, it is either black or white. If the image is given in color, the programmer must take that into account. After finding the closest related color, the actual quantization error is found. It is simply the Euclidean distance from the old color to the new color. But here comes the diffusion part of the error-_diffusion_. That error value is then divided into slices of a pie and added to it’s neighboring pixels. An example is provided below. There are two ramification of this process. The first is that the new output pixel will affect what the next output pixel will be. The second is that the diffusion matrix is wildly important in shaping the output. For the FS dithering algorithm the diffusion matrix is (with * denote the current pixel): \\[\begin{bmatrix} & * & \frac{7}{16} \\\ \frac{3}{16} & \frac{5}{16} & \frac{1}{16} \end{bmatrix}\\] But other algorithms will play with this diffusion matrix to fine-tune their approaches. Every pixel is then process in this same way sequentially until the last pixel is reached. Now you’ve taken an image of 256 colors and made it an image of 2 colors in the matter of milliseconds. To see the dithering effect alittle more clearly, here is the image zoomed in to the center. ### Atkinson The Macintosh was released in the mythical year of 1984 with a 512x342 pixel screen. The Mac paved the way for modern computers as we know them. It was all-in-one. A mouse and keyboard allow users to interact with both the command-line and a new graphical interface. But the only problem was that the graphical interface was only a CRT monochrome (one color with 0 to 255 values) display. And an engineer at Apple Computer named Bill Atkinson had to make everything look good on this display, no matter what it was. Atkinson built off the Floyd-Steinberg dithering algorithm with a few modification. The first was that the error would be spread over a larger area rather than just immediate neighbors, like in FS. The second was that only 3/4 of the error would be diffused. The resulting diffusion matrix is below: \\[\begin{bmatrix} & * & \frac{1}{8} & \frac{1}{8} \\\ \frac{1}{8} & \frac{1}{8} & \frac{1}{8} \\\ & \frac{1}{8} & & \end{bmatrix}\\] The result of these two modification was objectively better looking dithering to the human eye. Since only 75% of the quantization error is diffused in the process in a larger area, the effect of the dithering is more localized. Another side effect being that areas of mostly black and white are preserved (so that effects over detail are emphasized4). The difference of the error diffusion step really emphasizes Atkinson’s changes. The implementation barely changes as well except for accounting for bounds two rows and columns away. def Atkinson_Dithering(src_image: np.array) -> np.array: dst_image = np.copy(src_image).astype(np.float64) height, width = src_image.shape[:2] # Same pixel iteration as before for row in range(height): for col in range(width): old_pixel = dst_image[row, col] new_pixel = find_closest_palette_color(old_pixel) dst_image[row, col] = new_pixel quant_error = old_pixel - new_pixel # 3/4 Error Diffusion with expanded bounds if x + 1 < width: dst_image[row, col + 1] += quant_error * 1/8 if x + 2 < width: dst_image[row, col + 2] += quant_error * 1/8 if row + 1 < height: if x - 1 >= 0: dst_image[row + 1, col - 1] += quant_error * 1/8 dst_image[row + 1, col] += quant_error * 1/8 if col + 1 < width: dst_image[row + 1, col + 1] += quant_error * 1/8 if row + 2 < height: dst_image[row + 2, col] += quant_error * 1/8 return dst_image ### Some others Other variations exist with dithering for different purposes. Minimize Average Error Dithering from Jarvis, Judice, and Ninke (dibs on that 70’s prog band name) distributes the quaternization error even further than the Atkinson algorithm to preserve more details but at the cost of more computation time. Stucki dithering improved on JJN dithering’s computational time by making the kernel all divisible by 2. And so many more! Explore with creating your own kernels5 and become apart of the Ditherpunk movement6. ## Simple Algorithms are best I hope you came away with an appreciation for the simple. Dithering is just one example of something that I think computing has lost in this current age. We want complexity. We want to rush to new technologies because they solve hard things. I myself am guilty of this mindset. I’ll spend days vibe-coding away on problems with hundreds of tokens. But I found, in the end, all it needed was a simple algorithm that took 5 minutes to implement because of the work of a great engineer before me. RIP Bill Atkinson. ## Sources Code for the project can be found at this repo if you want to explore further. 1. Bill Atkinson, Who Made Computers Easier to Use, Is Dead at 74 ↩ 2. Merriam Website definition of dither ↩ 3. Return of the Obra Dinn graphics deep-dive ↩ 4. Stop Drawing Objects – Draw the Effect We See ↩ 5. Bad Dithering Algorithms ↩ 6. Ditherpunk — The article I wish I had about monochrome image dithering ↩

Eric Vitiello reposted

RE: https://c.im/@cdarwin/117111434874670566 I think that when a politician or other big mouth rejects some "left wing socialist idea", follow-up questions should go hard on "Just exactly which people do not deserve [whatever]. Exactly which people should not have safe affordable housing? […]

mastodon.socialOriginal post on mastodon.social
Chuck Darwin@cdarwin.c.im.ap.brid.gy

RE: https://c.im/@msbellows/117111418882412210 Hakeem Jeffries Rejects Medicare for All, and doesn't support the DSA Agenda https://www.newsweek.com/hakeem-jeffries-rejects-medicare-for-all-dsa-agenda-12328842