Say Goodbye to Finder.Meet Marta.

β€” macOS Productivity

Say Goodbye to Finder.
Meet Marta.

Why the dual-pane Marta file manager is the upgrade your Mac workflow has been waiting for.

macOS Finder has served Mac users faithfully since 1984 β€” but its age is showing. For anyone who regularly moves files between folders, manages projects with complex directory structures, or simply wants a more keyboard-friendly workflow, Finder’s single-pane design quickly becomes a bottleneck. Marta is a modern, native macOS file manager that addresses every one of these frustrations head-on.

Best of all? It’s free.

πŸ—‚ What is Marta?

Marta is a dual-pane, keyboard-driven file manager built exclusively for macOS. Developed by Yan Zhulanow, it borrows the powerful two-panel paradigm from classic file managers like Total Commander and Midnight Commander β€” but wraps it in a clean, native macOS interface. It feels right at home on your Mac while giving you superpowers that Finder simply cannot match.

It is highly customisable, supports themes, and even has its own plugin and scripting ecosystem. But even out of the box, the difference is immediately noticeable.

βš™οΈ How to Install Marta

Getting Marta up and running takes under two minutes. You have two options:

1
Option A β€” Direct Download (Recommended) Head to the official Marta website and download the latest release directly.
β†’ marta.sh
2
Option B β€” Install via Homebrew If you use Homebrew, install Marta with a single terminal command:
brew install --cask marta
3
Move to Applications & Launch If you used the .dmg file, drag Marta into your Applications folder and open it. macOS may ask you to confirm β€” click Open.
4
Grant Full Disk Access (Optional but Recommended) Go to System Settings β†’ Privacy & Security β†’ Full Disk Access and toggle Marta on. This ensures no folder is off-limits.

✨ Why Marta Beats Finder

Here are the features that make Marta a genuine step-change in your file management experience:

πŸͺŸ

Dual-Pane Navigation β€” The Game Changer

The single biggest advantage Marta has over Finder is its side-by-side dual-pane view. Your screen is split into two independent file panels, each showing a different folder. You can see your source and destination simultaneously β€” copy or move files between them without ever losing your place or juggling multiple Finder windows.

Marta β€” Dual Pane View
πŸ“ ~/Documents/Projects
πŸ“‚ report-2024
πŸ“„ summary.pdf
πŸ“„ data.csv
πŸ“‚ archive
πŸ“ ~/Desktop/Submissions
πŸ“‚ week-01
πŸ“‚ week-02
πŸ“„ notes.txt
πŸ“„ README.md

For power users β€” developers, academics, content creators β€” this alone is worth the switch. No more shuffling windows. No more losing track of where you’re copying to.

πŸ“

Create New Folders in Seconds

In Finder, creating a new folder means right-clicking and hunting through a context menu. In Marta, it’s a single keyboard shortcut β€” press it and a new folder appears inline, ready to be named. No mouse required, your workflow never breaks stride.

New Folder shortcut: ⌘ + ⇧ + N β†’ New folder created inline
⌨️

Fully Keyboard-Driven

Navigate, open, rename, copy, move, and delete files without ever touching the mouse. Marta’s keyboard-first design means experienced users can fly through file operations far faster than any GUI-only workflow allows.

πŸ—ƒοΈ

Tabs & Bookmarks

Keep multiple folder locations open as tabs within each panel. Bookmark your most-used directories and jump to them instantly β€” particularly powerful for large project hierarchies.

🎨

Themeable & Configurable

Marta supports custom themes and a powerful configuration file (conf.marco). You can remap shortcuts, add plugins, and tailor the entire interface to match your exact preferences.

πŸ’‘

Pro tip: You don’t have to remove Finder β€” it remains the system default for things like the Desktop and disk operations. Simply use Marta as your primary navigation tool for day-to-day file work, and enjoy the best of both worlds.

🏁 The Verdict

Marta won’t replace Finder for every macOS task β€” but as a daily driver for navigating, organising, and moving files, it is simply in a different league. The dual-pane view alone transforms how you work with files, and features like instant folder creation and keyboard navigation make it feel like a tool built for people who actually use their computer seriously.

If you’ve ever felt frustrated waiting on Finder’s slow animations, losing track of copy destinations, or clicking through five menus just to create a folder β€” give Marta five minutes. You won’t go back.

macOS Productivity File Manager Marta Workflow

Written for macOS power users Β· Marta is free & open-source

marta.sh β†’

✦ This article was generated with the assistance of Claude by Anthropic ✦

Dario Amodei β€”Β The Adolescence of Technology

https://www.darioamodei.com/essay/the-adolescence-of-technology

In “The Adolescence of Technology,” Anthropic CEO Dario Amodei argues that humanity is entering a high-stakes “technological puberty” with the imminent arrival of expert-level AI. He outlines a pragmatic strategy to counter existential risksβ€”ranging from biological threats to digital authoritarianismβ€”stressing that through surgical regulation and rigorous safety engineering, we can navigate this dangerous transition toward a future of immense global benefit.

MakeUseOf: Microsoft finally fixed File Explorer β€” but only if you disable this manually

https://www.makeuseof.com/microsoft-fixed-file-explorer-only-disable-manually/

TLDR, the steps are as follows:

  1. Open File Explorer and click the ellipses menu at the top right.
  2. ClickΒ Options.
  3. Under theΒ GeneralΒ tab, findΒ Open File Explorer to.
  4. Change the setting fromΒ HomeΒ toΒ This PC.
  5. ClickΒ Apply, thenΒ OK.

The Cost of Garbage in Quantum Computing

The Hidden Witness

Why You Must Clean Up “Junk Bits” with Uncomputation

1. The “Observer” Effect

In quantum computing, anything that “knows” what a qubit is doing acts as a Witness. Leftover data (Junk Bits) on an ancilla qubit act as witnesses, destroying the interference your algorithm needs to work.

Case A: Ideal (No Junk)

H
H
|0>
|0>

100% Interference

Case B: Broken (With Junk)

H
+
H
|0>
|0>
?
|junk>

Random 50/50 Noise

2. Mathematical Working

Ideal Case: (1/2) ( |0> + |1> + |0> – |1> ) = |0>
(Identical paths cancel perfectly.)

Junk Case: (1/2) ( |00> + |10> + |01> – |11> )
(Terms cannot cancel because the ancilla bit is different. Interference is destroyed.)

3. The Solution: Uncomputation

To restore interference, we follow the Compute-Copy-Uncompute pattern. This resets our ancilla to |0> and removes the “witness.”

Input |x>
Ancilla |0>
Target |0>
COMPUTE
+
UNCOMPUTE
|x> (Clean)
|0> (Clean)
|f(x)> (Result)

4. Qiskit Implementation

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

qc = QuantumCircuit(3)
qc.h(0) 
qc.cx(0, 1) # COMPUTE: Create Junk on q1
qc.cx(1, 2) # COPY Result to q2
qc.cx(0, 1) # UNCOMPUTE: Clean Junk back to |0>
qc.h(0)     # Interference Restored!

qc.measure_all()
counts = AerSimulator().run(transpile(qc, AerSimulator())).result().get_counts()
print(f"Resulting state: {counts}")

Built with Qiskit 1.x β€’ Quantum Series 2025

Reversible Computation in Quantum Computing

Reversible Computation in Quantum Computing

Mastering Reversibility, Ancilla Bits, and Unitary Logic

1. The Necessity of Reversibility

In classical logic, gates like AND are inherently irreversible. Because they compress two input bits into a single output bit, information is physically destroyed. For example, if an AND gate outputs ‘0’, you cannot distinguish if the original inputs were (0,0), (0,1), or (1,0). This “many-to-one” mapping results in information loss that manifests as heat dissipation.

In quantum computing, thermodynamics and the laws of physics require all operations to be Unitary (U†U = I). This means every quantum gate must be a 1-to-1 (bijective) mapping; no information is ever lost, and the entire computation can be run in reverse to recover the initial state.

AND
Out: 0

The Logic Gap: If the output is 0, the input could be (0,0), (0,1), or (1,0). The path back is lost.

2. Ancilla Bits & Uncomputation

Because we cannot erase information, we use Ancilla bits as temporary “scratch space.” However, if these qubits are left in an arbitrary state, they remain entangled with the computation. Uncomputation (running gates in reverse) resets them to |0>, “cleaning” the quantum workspace.

The Toffoli Gate (CCX)

The Toffoli gate is reversible because its mapping is bijective. No two inputs result in the same output.

+
In: A
In: B
In: C
Input (A, B, C) Output (A, B, C βŠ• AB) Status
0, 0, 00, 0, 0Unique
1, 1, 01, 1, 1Flipped (AND)
1, 1, 11, 1, 0Flipped Back

The Fredkin Gate (CSWAP)

The Fredkin gate is a controlled-swap operation. It swaps the states of the two target qubits (T1 and T2) if and only if the control qubit (C) is in the state |1>. It is conservative, meaning it preserves the Hamming weight (number of 1s) from input to output.

Because it is a universal gate, we can simulate all standard classical logic by fixing certain inputs:

  • NOT: Set T1=0, T2=1. Output T2 becomes NOT C.
  • AND: Set T2=0. Output T2 becomes C AND T1.
  • OR: Set T1=B, T2=1. Output T1 becomes C OR B.
βœ•
βœ•
In: C
In: T1
In: T2

3. Mathematics: Unitary vs. Hermitian

Proof: Is Pauli-Y Unitary?

Y =
0i
i0
Y† =
0i
i0

Pauli-Y is Unitary (Y†Y = I). Because Y = Y†, it is also Hermitian.

Unitary but NOT Hermitian: The S Gate

S =
10
0i
β‰ 
S† =
10
0i

Since S β‰  S†, you must apply the S-Dagger gate to reverse an S rotation.

4. Qiskit Verification

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

qc = QuantumCircuit(3)
qc.x([0, 1]) # Controls to |1>

# Toffoli is Hermitian (U = U†), so applying it twice cleans the ancilla
qc.ccx(0, 1, 2) # Calculation step
qc.ccx(0, 1, 2) # Uncomputation step

qc.measure_all()
counts = AerSimulator().run(transpile(qc, AerSimulator())).result().get_counts()
print(f"Resulting state: {counts}") # Expect {'011': 1024}
            

Built with Qiskit 1.x β€’ Quantum Series 2025

Deutsch Algorithm Revisited: Quantum vs Classical Implementation in Qiskit

Deutsch Algorithm Revisited: Quantum vs Classical Implementation in Qiskit

A practical comparison showing the quantum advantage with working code

Introduction

In the previous post on the Deutsch algorithm, we explored the theoretical foundations of this groundbreaking quantum algorithm. Today, we’re taking it further by implementing both the quantum and classical approaches in Qiskit, allowing us to see the quantum advantage in action.

This hands-on implementation demonstrates why the Deutsch algorithm is considered the first example of quantum computational superiorityβ€”solving a problem with fewer oracle queries than any classical algorithm can achieve.

The Challenge

Given a black-box function f: {0,1} β†’ {0,1}, determine whether it is:

  • Constant: f(0) = f(1) (always returns 0 or always returns 1)
  • Balanced: f(0) β‰  f(1) (returns 0 for one input, 1 for the other)
πŸ”‘ Key Question: How many times must we query the function?
  • Classical: 2 queries required
  • Quantum: 1 query required

Complete Qiskit Implementation

Oracle Functions

First, we create the oracle functions representing all possible single-bit Boolean functions:

from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_aer import AerSimulator

def create_constant_oracle(constant_value):
    """Creates a constant oracle (returns 0 or 1 for all inputs)"""
    oracle = QuantumCircuit(2, name=f"Constant_{constant_value}")
    if constant_value == 1:
        oracle.x(1)  # Flip the output qubit
    return oracle

def create_balanced_oracle(balance_type):
    """Creates a balanced oracle"""
    oracle = QuantumCircuit(2, name=f"Balanced_{balance_type}")
    if balance_type == 'identity':
        # f(x) = x
        oracle.cx(0, 1)
    elif balance_type == 'negation':
        # f(x) = NOT x
        oracle.x(0)
        oracle.cx(0, 1)
        oracle.x(0)
    return oracle

Classical Approach: Two Queries Required

The classical algorithm must query the oracle twiceβ€”once for f(0) and once for f(1):

def classical_deutsch_query1(oracle):
    """First query: Evaluate f(0)"""
    qr = QuantumRegister(2, 'q')
    cr = ClassicalRegister(1, 'c')
    qc = QuantumCircuit(qr, cr)
    
    # Input: x = 0 (already initialized to |0⟩)
    qc.barrier()
    qc.compose(oracle, inplace=True)
    qc.barrier()
    qc.measure(1, 0)  # Measure output to get f(0)
    
    return qc

def classical_deutsch_query2(oracle):
    """Second query: Evaluate f(1)"""
    qr = QuantumRegister(2, 'q')
    cr = ClassicalRegister(1, 'c')
    qc = QuantumCircuit(qr, cr)
    
    qc.x(0)  # Input: x = 1
    qc.barrier()
    qc.compose(oracle, inplace=True)
    qc.barrier()
    qc.measure(1, 0)  # Measure output to get f(1)
    
    return qc

Quantum Approach: One Query Suffices

The quantum Deutsch algorithm uses superposition and interference to determine the answer with a single oracle query:

def deutsch_algorithm(oracle):
    """Implements the Deutsch algorithm - requires only ONE query"""
    qr = QuantumRegister(2, 'q')
    cr = ClassicalRegister(1, 'c')
    qc = QuantumCircuit(qr, cr)
    
    # Step 1: Initialize q[1] to |1⟩
    qc.x(1)
    qc.barrier()
    
    # Step 2: Apply Hadamard gates (create superposition)
    qc.h(0)
    qc.h(1)
    qc.barrier()
    
    # Step 3: Apply the oracle (SINGLE QUERY!)
    qc.compose(oracle, inplace=True)
    qc.barrier()
    
    # Step 4: Apply Hadamard to input qubit
    qc.h(0)
    qc.barrier()
    
    # Step 5: Measure
    qc.measure(0, 0)
    
    return qc

Running the Comparison

Now let’s test all four possible oracles with both approaches:

oracles = [
    ("Constant 0", create_constant_oracle(0)),
    ("Constant 1", create_constant_oracle(1)),
    ("Balanced (Identity)", create_balanced_oracle('identity')),
    ("Balanced (Negation)", create_balanced_oracle('negation'))
]

simulator = AerSimulator()

for name, oracle in oracles:
    # Classical: 2 queries
    qc1 = classical_deutsch_query1(oracle)
    result1 = simulator.run(qc1, shots=1).result()
    f_0 = int(list(result1.get_counts().keys())[0])
    
    qc2 = classical_deutsch_query2(oracle)
    result2 = simulator.run(qc2, shots=1).result()
    f_1 = int(list(result2.get_counts().keys())[0])
    
    classical_result = "CONSTANT" if f_0 == f_1 else "BALANCED"
    
    # Quantum: 1 query
    qc_quantum = deutsch_algorithm(oracle)
    result_quantum = simulator.run(qc_quantum, shots=1000).result()
    counts = result_quantum.get_counts()
    
    quantum_result = "CONSTANT" if '0' in counts else "BALANCED"
    
    print(f"{name}: Classical={classical_result}, Quantum={quantum_result}")

Circuit Diagrams

Below are visual representations of the three circuit implementations. The classical approach requires two separate queries, while the quantum approach accomplishes the same task with a single query.

Classical Query 1: Evaluating f(0)

q[0]:
q[1]:
|0⟩
|0⟩
Oracle (Constant_0)
f(0)

Classical Query 1: Input qubit q[0] remains in state |0⟩ β†’ Oracle processes the input β†’ Output qubit q[1] is measured to obtain f(0)

Classical Query 2: Evaluating f(1)

q[0]:
q[1]:
|0⟩
|0⟩
X
|1⟩
Oracle (Constant_0)
f(1)

Classical Query 2: X gate flips q[0] from |0⟩ to |1⟩ β†’ Oracle processes the input β†’ Output qubit q[1] is measured to obtain f(1)

Quantum Deutsch Algorithm (Single Query)

q[0]:
q[1]:
|0⟩
|0⟩
X
H
H
Oracle (Constant_0)
H
0 or 1

Quantum Deutsch: Initialize |01⟩ β†’ Hadamard gates create superposition β†’ Oracle query (single query!) β†’ Final Hadamard on q[0] β†’ Measure q[0] to determine function type

πŸ’‘ Understanding the Circuit Elements

πŸ”΅ Oracle Box: Represents the black-box function we’re querying

🟠 H Gates: Hadamard gates create quantum superposition

πŸ”΄ X Gates: Flip qubit states (NOT gate)

πŸ“Š Measurement: Extracts classical information from qubits

πŸ“ Qubit Lines: Horizontal lines represent quantum bits

πŸ“ Input/Output: |0⟩, |1⟩ show quantum states

πŸ” Key Observation

Notice that the classical circuits measure the output qubit (q[1]) to get the function values f(0) and f(1), while the quantum circuit measures the input qubit (q[0]) after interference. This fundamental difference allows the quantum algorithm to extract global properties of the function with a single query!

Sample Output

======================================================================
Testing: Constant 0 Oracle
======================================================================

[CLASSICAL APPROACH - Requires 2 queries]
  Query 1: f(0) = 0
  Query 2: f(1) = 0
  Result: Function is CONSTANT
  Total queries needed: 2

[QUANTUM APPROACH - Requires only 1 query]
  Measurement results: {'0': 1000}
  Result: Function is CONSTANT
  Total queries needed: 1

  βœ“ Both methods agree: True

======================================================================
Testing: Balanced (Identity) Oracle
======================================================================

[CLASSICAL APPROACH - Requires 2 queries]
  Query 1: f(0) = 0
  Query 2: f(1) = 1
  Result: Function is BALANCED
  Total queries needed: 2

[QUANTUM APPROACH - Requires only 1 query]
  Measurement results: {'1': 1000}
  Result: Function is BALANCED
  Total queries needed: 1

  βœ“ Both methods agree: True

Understanding the Quantum Advantage

Classical Approach

  • Evaluate f(0) explicitly
  • Evaluate f(1) explicitly
  • Compare the two results
  • 2 queries required

Must check both inputs individually

Quantum Approach

  • Query with superposition of both inputs
  • Use interference to extract global property
  • Measure to get answer
  • 1 query required

Exploits quantum parallelism

🎯 The Key Insight

The quantum algorithm queries the oracle with a superposition of both inputs simultaneously (|0⟩ + |1⟩), then uses quantum interference to extract global properties of the function without ever evaluating it on individual inputs. The measurement result directly tells us whether the function is constant or balanced.

Measurement Interpretation

Measurement Result Function Type Explanation
|0⟩ Constant Constructive interference – f(0) βŠ• f(1) = 0
|1⟩ Balanced Destructive interference – f(0) βŠ• f(1) = 1

Running the Code

To run this code yourself, you’ll need to install Qiskit:

pip install qiskit qiskit-aer

The complete code is available as a Python script that you can run directly. It will output the comparison for all four oracle types and display the results.

Conclusion

This implementation demonstrates the Deutsch algorithm’s quantum advantage in concrete terms:

  • Quantum speedup: 2x reduction in oracle queries (from 2 to 1)
  • First proof of concept: First algorithm to show quantum advantage over classical
  • Foundational technique: Introduces key quantum concepts (superposition, interference, phase kickback)

While the speedup may seem modest for this toy problem, the techniques demonstrated hereβ€”querying a function with superposition and extracting global properties through interferenceβ€”scale to more complex algorithms like Deutsch-Jozsa, Simon’s algorithm, and ultimately Shor’s algorithm for factoring.

πŸš€ Next Steps:
  • Experiment with the code and modify the oracles
  • Try visualizing the quantum states at each step
  • Explore the Deutsch-Jozsa algorithm (generalization to n-bit functions)
  • Study the mathematical foundations of quantum interference

Have questions or want to discuss quantum algorithms? Drop a comment below!

Happy quantum coding! πŸŽ―βš›οΈ

Deutsch’s Algorithm in Quantum Computing: The 4 Cases

Deutsch’s Algorithm: Complete Guide

From Initialization to Measurement.

Deutsch’s Algorithm determines if a function f(x) is Constant or Balanced using only a single query. First, we examine how these functions are physically built.

The 4 Possible Functions

In these examples, we set the bottom input to 0 so the output is exactly f(x).

1. Constant Zero Function: f(x) = 0
x
0
Identity (No Gates)
2. Constant One Function: f(x) = 1
X
3. Balanced ID Function: f(x) = x
+
4. Balanced NOT Function: f(x) = Β¬x
+
X

The General Oracle (Uf)

x
y
Uf
x
y βŠ• f(x)

The Complete Circuit

To detect the function type, we initialize the bottom wire to |1⟩ and use Hadamard gates to create superposition.

|0⟩
|1⟩
H
H
Uf
KICKBACK ↑
H
|Οˆβ‚€βŸ©
|Οˆβ‚βŸ©
|Οˆβ‚‚βŸ©

Mathematical Proof

1. Initialization: |Οˆβ‚€βŸ© = |0⟩|1⟩

2. Superposition: |Οˆβ‚βŸ© = |+⟩|-⟩ = Β½(|0⟩+|1⟩)(|0⟩-|1⟩)

3. The Kickback Effect: Applying Uf to |x⟩|-⟩ results in:
Uf |x⟩|-⟩ = (-1)f(x) |x⟩|-⟩

This means the output of the function is shifted into the phase of the first qubit.

4. Global State |Οˆβ‚‚βŸ©:
|Οˆβ‚‚βŸ© = 1/√2 [ (-1)f(0)|0⟩ + (-1)f(1)|1⟩ ] βŠ— |-⟩

Final Measurement

If f(0) = f(1) (Constant) β†’ State is Β±|+⟩ β†’ Measure 0
If f(0) β‰  f(1) (Balanced) β†’ State is Β±|-⟩ β†’ Measure 1

Understanding Phase Kickback in Quantum Computing

How the target controls the controller.

In standard classical logic, a Control Bit dictates what happens to a target. However, in quantum mechanics, the relationship is symmetric. When the target qubit is in an eigenstate of the operator, the phase is “kicked back” to the control qubit.

|+⟩
|−⟩
|−⟩
|−⟩
CNOT CIRCUIT

Notice above: The Target qubit remains unchanged (|−⟩), but the Control qubit flips from |+⟩ to |−⟩.

STEP 1: DEFINE INITIAL STATE

0⟩ = |+⟩ ⊗ |−⟩

= (1/√2) (|0⟩ + |1⟩)  ⊗  (1/√2) (|0⟩ − |1⟩)

STEP 2: EXPAND TERMS

Multiplying coefficients gives 1/2:
0⟩ = ½ [ |00⟩ − |01⟩ + |10⟩ − |11⟩ ]

STEP 3: APPLY CNOT GATE

Target flips (0↔1) only if Control is 1:
1⟩ = ½ [ |00⟩ − |01⟩ + |11⟩ − |10⟩ ]

STEP 4: FACTOR & REARRANGE

Group terms by the control qubit:
1⟩ = ½ [ |0⟩(|0⟩ − |1⟩) − |1⟩(|0⟩ − |1⟩) ]
∴ |ψ1⟩ = |−⟩ ⊗ |−⟩

Why is this important?

The math shows that while we applied the gate to the target, the relative phase of the control qubit changed from positive to negative. This mechanism is the foundation of quantum algorithms like Shor’s and Grover’s.

Does Challenging AI Make It Smarter?

A recent Medium article claims that adding challenge phrases like “I bet you can’t solve this” to AI prompts improves output quality by 45%, based on research by Li et al. (2023).

Quick Test Results

Testing these techniques on academic tasksβ€”SQL queries, code debugging, and research synthesisβ€”showed mixed but interesting results:

What worked: Challenge framing produced more thorough, systematic responses for complex multi-step problems. Confidence scoring (asking AI to rate certainty and re-evaluate if below 0.9) caught overconfident answers.

What didn’t: Simple factual queries showed no improvement.

The Why

High-stakes language doesn’t trigger AI emotionsβ€”it cues pattern-matching against higher-quality training examples where stakes were high.

Bottom Line

Worth trying for complex tasks, but expect higher token usage. Results are task-dependent, not universal.


Source: Li et al. (2023), arXiv:2307.11760

“`

Source: Li et al. (2023), arXiv:2307.11760