mutt+gmail

Using mutt for sending emails via my gmail account has been something I wanted to do for a long time. After my last issue with my laptop, finally I decided to learn how to do it.

Thanks to these blogs I managed to get it working!!!

For the main setup, this link and this. For overcoming the authentication issue, this link. So you define a new password for an app in your google account as I use 2FA.

sudo aptitude install mutt

mkdir ~/.mutt

vim ~/.mutt/muttrc

This is the content of my file:

set from = "youremail@gmail.com"
set realname = "Name Surname"

# IMAP settings
set imap_user = "youremail@gmail.com"
set imap_pass = "your_new_app_password"

# SMTP settings
set smtp_url = "smtps://youremail@smtp.gmail.com"
set smtp_pass = "your_new_app_password"

# Remote Gmail folders
set folder = "imaps://imap.gmail.com/"
set spoolfile = "+INBOX"
set postponed = "+[Gmail]/Drafts"
set trash = "+[Gmail]/Trash"

# Composition
set editor = "vim"
set edit_headers = yes
set charset = UTF-8

This is the error I had before getting the app password:

$ echo "Example mutt+gmail" | mutt -s "Testing mutt+gmail" youremail@gmail.com -a test.txt
SASL authentication failed
Could not send the message.
$ 

After that. Email sent fine without error and I can see it in my inbox!

$ echo "Example mutt+gmail v2" | mutt -s "Testing mutt+gmail v2" youremail@gmail.com -a books.ods 
$ 

The only thing I dont like is I need to have a password in a text file….

So let’s use chmod so, at least, only me can read the file.

~/.mutt$ chmod og-r muttrc
~/.mutt$ ls -ltr
total 4
-rw------- 1 yy yy 687 Oct 26 23:22 muttrc
~/.mutt$ 

Although, Ideally, I would prefer to use a certificate that is only valid for gmail, but I haven’t been able to find anything related to this.

Reinstalling Debian

Two weeks ago I started having an issue regarding “duplicate file trigger” with some packages related to gtk-2.0 when I was doing my routine “aptitude update/ dist-upgrade”. I use Debian Testing and I have seen in the past weird things with packages but then got fixed. I understand I am in “testing” so these things may happen. Somehow, I tried to take a look If I could understand the problem and fix it. Searching didnt give much info. I found quite old entries about the issue but nothing really clarifying why I ended there. I assume that I am not the only one having these problems in the Debian community so it should be “easier” to find info from more experience people than me. But most of the cases, I rely on old data.

Somehow I “fixed” that issue but I didnt dig enough to understand what it is this thing about “triggers”. So I messed around with “/var/lib/dpkg/triggers/File” but I did a rookie mistake. I didnt do a backup of the file…. (how difficult is to type “cp File File-backup”). I remember that I had to remove several entries and they related to i386 architecture….

Well, then after a couple of days, I had a different issue. Not sure if this was triggered by my “triggers fix”.

Somehow I had some packages failing to install due to missing dependencies. It was mainly related to “python3”. So last Saturday I decided to go deep into it… And I made things worse. When you “aptitude purge” a package, you know the package and dependencies will be removed (if they are not used). While I was trying to solve my “death by dependencies” I deleted many packages that I was sure I needed. Again, I should have stopped or at least take notes of all those packages. At the end, I ended with “just” one issue. I couldnt install python3…. no idea why. In this path of destruction, I removed most of my X11 setup, so no graphic UI for me… But I didnt notice until too late. I tried to reinstall as many packages as possible and still python3 was failing. I have pyenv and I have used python3 so not sure why/how was broken. I reached a point that with so many changes, I had to reboot…. It is not the first time and after spending hours trying to fix something, that you are sure it is fixed, is still not fixed, then your reboot, and it is fixed. So I risked it, I knew that this would be fixed or would blow up big time. The later happened. And again, rookie mistake, I should have refreshed my hard drive backup, just in case you can’t access the laptop. But as my SSD looked healthy, the thought didnt cross my mind…

Reboot, got me stuck in “lightdm can’t start”….. and I couldnt login…. I was impatient. As later I learnt, I should wait a bit (long) for a time out and I would have seen my prompth.

I tried to get into rescue mode / single-user mode, and had to get by root. So I had a bit of access and I tried to run aptitude again…. I didnt have Internet access. Something I give for granted, when you login into your graphic UI, you have your nice network-manager that logs into your wifi. I always thought I was something simple like when you log into wired Internet access… I was totally wrong.

I was lucky that I had Internet in my mobile phone and that helped me a lot to move forwards with each issue. Without that, I would be still writing on paper.

So after a bit of struggling, I learned how to connect to a wifi via CLI. Some I was quite happy with that. I used this link. Thanks to the author!

1) Find out the wireless device name.
# iw dev
phy#0
	Unnamed/non-netdev interface
		wdev 0x5
		addr 60:57:18:00:9d:8a
		type P2P-device
		txpower 0.00 dBm
	Interface wlp2s0
		ifindex 2
.....

2) Check status of wireless interface.
# ip link show wlp2s0
2: wlp2s0: (BROADCAST,MULTICAST) mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff

3) Bring up interface if you dont see "UP"
# sudo ip link set wlp2s0 up  

# ip link show wlp2s0
2: wlp2s0: (NO-CARRIER,BROADCAST,MULTICAST,UP) mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff

4) Check the connection status.
# iw wlp2s0 link
Not connected.

5) Scan to find your local wifi. You need to search for the SSID that you want to connect. This can be a long sentence...
# iw wlp2s0 scan
....
BSS bb:bb:bb:bb:bb:bb(on wlp2s0) -- associated
	last seen: 136826.740s [boottime]
	TSF: 10582137299 usec (0d, 02:56:22)
	freq: 5620
	beacon interval: 100 TUs
	capability: ESS Privacy SpectrumMgmt APSD (0x0911)
	signal: -76.00 dBm
	last seen: 12 ms ago
	Information elements from Probe Response frame:
	SSID: ZZZZZZ PROVIDER SPEED PRODUCT 10Ghz
	Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0 
	DS Parameter set: channel 124
	HT capabilities:
		Capabilities: 0x0f
			RX LDPC
			HT20/HT40
			SM Power Save disabled
			No RX STBC
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: 4 usec (0x05)
		HT RX MCS rate indexes supported: 0-15, 32
		HT TX MCS rate indexes are undefined
	HT operation:
		 * primary channel: 124
		 * secondary channel offset: above
		 * STA channel width: any
		 * RIFS: 0
		 * HT protection: no
		 * non-GF present: 1
		 * OBSS non-GF present: 0
		 * dual beacon: 0
		 * dual CTS protection: 0
		 * STBC beacon: 0
		 * L-SIG TXOP Prot: 0
		 * PCO active: 0
		 * PCO phase: 0
	RSN:	 * Version: 1
		 * Group cipher: CCMP
		 * Pairwise ciphers: CCMP
		 * Authentication suites: PSK
		 * Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
......
	WPS:	 * Version: 1.0
		 * Wi-Fi Protected Setup State: 2 (Configured)
		 * Response Type: 3 (AP)
		 * UUID: bc329e00-1dd8-11b2-8601-38549b39bdd4
		 * Manufacturer: ABCD
		 * Model: ABCD GateWay
		 * Model Number: V1.0
		 * Serial Number: 12345678
		 * Primary Device Type: ABABABAB
		 * Device name: ABCD AP
		 * Config methods: PBC, Keypad
		 * RF Bands: 0x2
		 * Version2: 2.0
.....

As the blog mentions, the two important things here are SSID and RSN/WPS. I dont think it is common these days to find WEP Wifi. Connecting to a WEP it is far much easier.


6) Connect to WPA/WPA2 WiFi network: Generate wpa_supplicant config file
Generate a configuration file for wpa_supplicant that contains the pre-shared key ("passphrase") for the WiFi network.

# wpa_passphrase "ZZZZZZ PROVIDER SPEED PRODUCT 10Ghz" >> /etc/wpa_supplicant.conf 
...type in the passphrase and hit enter...

wpa_passphrase takes the SSID as the single argument. You must type in the passphrase for the WiFi network after you run the command. Using that information, wpa_passphrase will output the necessary configuration statements to the standard output. Those statements are appended to the wpa_supplicant configuration file located at /etc/wpa_supplicant.conf.

# cat /etc/wpa_supplicant.conf 
# reading passphrase from stdin
network=
	ssid="ZZZZZZ PROVIDER SPEED PRODUCT 10Ghz"
	#psk="mytest123"
	psk=aaaaaasuperlongkeybbbbbbbbbbbbbbbbbbb
}


7) Connect using wpa_supplicant config file.
# sudo wpa_supplicant -B -D wext -i wlp2s0 -c /etc/wpa_supplicant.conf

-B means run wpa_supplicant in the background.
-D specifies the wireless driver. wext is the generic driver.
-c specifies the path for the configuration file.


8) Verify you are attached to your Wifi SSID
# iw wlp2s0 link
Connected to bb:bb:bb:bb:bb:bb (on wlp2s0)
	SSID: ZZZZZZ PROVIDER SPEED PRODUCT 10Ghz
	freq: 2412
	RX: 63825 bytes (471 packets)
	TX: 1344 bytes (12 packets)
	signal: -27 dBm
	tx bitrate: 6.5 MBit/s MCS 0

	bss flags:	short-slot-time
	dtim period:	0
	beacon int:	100

9) Obtain IP address by DHCP and verify IP
# dhclient wlp2s0
#
# ip addr show wlp2s0
2: wlp2s0:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global wlp2s0
    inet6 zzz/64 scope link 
       valid_lft forever preferred_lft forever

10) Check routing / Add default if needed:
# ip route show
192.168.1.0/24 dev wlp2s0  proto kernel  scope link  src 192.168.1.3 

The above routing table contains only 1 rule which redirects all traffic destined for the local subnet (192.168.1.x) to the wlp2s0 interface. You may want to add a default routing rule to pass all other traffic through wlp2s0 as well.

# ip route add default via 192.168.1.254 dev wlp2s0
# ip route show
default via 192.168.1.254 dev wlp2s0 
192.168.1.0/24 dev wlp2s0  proto kernel  scope link  src 192.168.1.3 

11) Check external connecitivity
# ping 8.8.8.8

After being able to get Internet access I carried on troubleshooting. I was stuck with python3 issue and now ligthdm not starting up… Using this link, I could see lightdm was complaining about an issue with Xorg. So then I checked the logs of Xorg.

[    34.050] (II) LoadModule: "glx"
[    34.050] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so
[    34.050] (EE) Failed to load /usr/lib/xorg/modules/extensions/libglx.so: libGL.so.1: cannot open shared object file: No such file or directory
[    34.050] (EE) Failed to load module "glx" (loader failed, 0)

I searched for info about that error. I followed several pages like this and this, I installed an reinstalled the packages mentioned, but not way could fix that “glx”.

After sometime, I decided to work on the “python3” issue. I tried to follow some advice like this. Again I tried to purge as many packets as I could and reinstall everything python related. Same result, I couldn’t install python3. And weird enough, my wifi used to be disconnected whenever removed python so I had reboot and attach to the wifi a couple of times. And as well, I managed to “lock” my wifi card too, so bizarre!!! I think I followed something from here to unlock.

So I reached a point where I was totally stuck. I couldnt fix the Xorg issue and turn up the graphic desktop environment and python3 was very broken. I decided to reinstall, I was getting nowhere. I made full backup of my homedir and most of the system folders and take some logs about the current config of my system and packages currently installed so I could help me to setup the new environment quicker.

So I downloaded a netinstall iso for Debian testing. Thanks to my mobile, I managed to find the link and I “wget” it via my cli. Then I needed to install that iso in a USB so the Debian documentation was quite easy…

# cp debian-testing-amd64-netinst.iso /dev/sdb1
# sync

Ok, it was time to boot up the usb and resintall…. not that easy…. my laptop was not able to see the usb at boot time….. I checked the BIOS and USB was allowed as boot device…. Back to the shell, I could mount the USB, fdisk showed the partition had the flag enabled for booting.

I decided to find another method. I was pretty sure that in the past when creating a boot USB I had to use “dd”… so following this link:

# dd if=debian-testing-amd64-netinst.iso of=/dev/sdb1 bs=4M conv=fdatasync status=progress

The I tried to boot again, and worked!!!

So started the reinstall process. I chose to use the whole disk and the trigger a process to overwrite my whole disk…. I had to leave the laptop overnight because the process was superslow! I didnt know how to skip it….

Something I still haven’t learned is how to scroll up/down in the tty !!! During the whole troubleshooting time, it was quite frustrating because using “less” didnt work always with all my commands… I tried to find some answers like this but no joy.

Next night I follow up. Obviously the installation process didnt detect my wifi card (non-free drivers my love) and I dont have a RJ45 port… so I had to use my usb-rj45 adaptor and long rj45 cable to get back to the internet and complete the installation…

Once the process finished, you end up with a very basic system… no wifi, no Xorg, just pure CLI environment.

So started trying to install some packages I use more often and get my wifi card detected and working. As I had my backup, I could update my apt/sources.list file and get the repositories I needed.

  104  vim /etc/apt/sources.list
  105  aptitude update 
  106  aptitude dist-upgrade 
  108  aptitude install firmware-iwlwifi 
  109  lsmod | grep iw
  110  iw list
  116  reboot

I installed “lightdm” as my display manager. I finally managed to see it again! I logged in and nothing happend. I forgot to install my lightweith desktop environment… lxde.

So finally, I was back to my graphic environment. But again I forgot to install the network-manager to get my Internet connectivity sorted as I was using the CLI technique before.

One final issue was the sound card, I could see videos online but didnt have sound so I was pretty sure I was missing something again, “alsa-utils” and then with “pavucontrol” I noticed the output devices were muted.

So finally got basic functionality. I haven’t moved all my data yet as I need to create my ZFS partition so I will need a bit more tinkering in the coming days.

This is the list of installed packages so far:

aptitude install lightdm
aptitude install sudo
aptitude install gedit
aptitude install tcpdump
aptitude install nmap
aptitude install terminator
aptitude install gkrellm
aptitude install keepass2
aptitude install firefox-esr
aptitude install vagrant
aptitude install mutt
aptitude install screen
aptitude install tmux
aptitude install wpasupplicant 
aptitude install iw
aptitude install minicom
aptitude install lxde
aptitude install pavucontrol
aptitude install libreoffice
aptitude install lstopo
aptitude install apt-file
aptitude install hwloc
aptitude install parted
aptitude install ristretto 
aptitude install network-manager-gnome 
aptitude install net-tools
aptitude install vim
aptitude install git
aptitude install tig
aptitude install firmware-iwlwifi 
aptitude install qemu
aptitude install alsa-tools-gui 
aptitude install alsa-utils 
aptitude install brightnessctl 
aptitude install zfs-dkms 
aptitude install gkrellm-volume 

Things I want to learn:

  • How to setup a “timeshift” (like Apple) for backup in Debian
  • How to scroll in linux terminal tty
  • Send emails with mutt using gmail (and with attachments) so I dont need GUI.

Things I need to setup

  • Have a USB ready with a Debian Testing ISO
  • How to backup my Android mobile phone and erase contents if I lose it.
  • Ideally I should rebuild my laptop more frequently so I should have a PXE-like process. Maybe having some kind of manifest in my git repo. Maybe I overthinking it.

Lime Pie

I have tried this pie… twice.. and failed miserably… twice.

This is the typical random video I watch and then I add it to my to-cook list.

Somehow I went for this version as I didnt want to use condensed milk as I thought it was going to be too sweet. I didnt do any meringue or used macha tea.

My first attempt was bad for a couple of reasons. The coconut milk I used was “light” (low in fat) and at the end, the cake tasted like acid (due to the lime) water. And second, I didnt put enough biscuits for the base. And the biscuits were ginger nuts so I added extra spiciness to the taste 🙂

I decided to give it a new go, using full fat coconut milk and plenty of (ginger) nuts. To be honest, it still tastes a bit bland. Shall I add more limes (but will add more acidity?), shall I add more sugar (too sweet then)? Not sure.

I think, I will try the “classic” version next time, with homemade condensed milk.

Dune2: Messiah

I am just following the Dune series as I liked the first book quite a lot. The second one is obviously a continuation of the first one. It is a new thriller about Paul’s future, his religion/empire, his love, his thoughts, his doubts, his fears, etc. The struggle of which future will turn up. It is again interesting all the mixing of religion/politics. Yes, it is fiction, but somehow feels contemporary. I like the new elements of conspiracy, new baddest enemies, etc.

Looking forwards for the next book.

Baba Ghanoush

I tried some time ago Baba Ghanoush while having lunch with friends and I liked, it was a nobility for me as I could try something else apart from Humus. So sometimes I have mixed grilled aubergines with chickpeas and it produces a bit smoky (and darker) humus. But two weeks ago, I tried again from a different place and I was really shocked, it was so different, so tangy. I decided to find a good recipe and try at home. So I found this video:

Ingredients:

  • 2 Aubergines (roasted)
  • 1 tsp chopped or grated garlic
  • 4-5 tbsp of Tahini
  • 1/2 Lemon juice
  • 1 tsp salt
  • 2 tbsp Yogurt
  • Olive oil
  • Pomegranate (optional)

Process:

  • Two ways for roasting the aubergines. One, stab the aubergines with a knife and wrap in foil. Bake in oven for 40m at 175C. Second, halve the aubergines, spread a bit of oil and bake in oven for 40m at 175C, but check they dont burn! I did the second method but I will try the first one too.
  • Take the aubergines from the oven, scoop the meat and with a knife, chop it as much as you can. I think this is very important. I didnt you the food processor at all.
  • Then put the chopped/grilled aubergines in a bowl and add all other ingredients. Mix well.
  • You can server as it is or add a bit of pomegranate seeds and olive oil. I only added olive oil

When I tried, I was impressed, it was like the one I tried! I guess the yogurt and lemon are key! Congrats to the chef in the video!

Very easy recipe and super tasty!!!

BiDir + SR4

This week at work I have to deal with a couple of physical connections that were new for me. I am more familiar with LC connector and MTP is still something I am dealing with. So I learned about BiDir optics (LC) something never heard about it and the difference with SR4 optics (MTP). The vantage of using BiDir is that you can keep your current fiber install in place and upgrade from 10G to 40G without extra cost. But with SR4 you need to deploy MTP/MTO cabling although you can do breakouts (40G to4x10G or 100G to 4x25G). This is the blog entry I found quite useful for comparing both types. And this one just for BiDir.

As well, somewhere I read (can’t find the link), SR4 are more common than BiDir because is BiDir is proprietary so it has compatibility issues

This is a good link about cables and connectors.

Ginger Nuts + Corn

A couple of weeks ago I had to use ginger nuts cookies for a recipe. So now I wanted to make my own, because after eating a cookie you will feel alright.

So searching a bit, a decided to try this version:

Ingredients (10 cookies of decent size)

  • 200g self-raising flour
  • 2 tsp bicarbonate of soda
  • 4-5 tsp ground ginger (if you want a bit more, they will more fiery!)
  • 80g caster sugar
  • 100g melted butter
  • 4 tbsp golden syrup (or honey)

Process

  • Preheat oven around 190C. Line one baking tray with nonstick baking paper
  • Sieve flour, bicarbonate and ginger in a bow. Then add the sugar
  • Make a well in the center of the bowl, add the melted butter and syrup. Stir until combine. In my case, the dough was a bit crumbly. Maybe needs a bit more butter?
  • From the dough, take pieces and form roughly a ball, then flat it and put it in the tray. It looks delicate but it is fine.
  • Bake for 10-12 MAX! I did 10 minutes. Just slight golden and with cracks on top.
  • Remove from oven and let it cool down in a rack if you have. If you touch them they feel soft and not baked, but let it be. Once they cool down, they will firm up!.

It is a quick recipe, the result was tasty!

NOTE: Somehow, after so many years I noticed that tsp = tea spoon (small) and tbsp = table spoon (big)!!! I think I have always used the same measure /o\ Well, still got most things right anyway 🙂


As well, somehow, I bought this week a package with two corns on the cob and baked them in the oven.

Ingredients

  • A couple of corn on the cob pieces + foil to wrap
  • a bit of butter

Process

  • Preheat oven at 200C
  • Clean with water the corn cobs and wrap it in foil (dont leave any part without cover)
  • Bake for 40 minutes
  • Remove from oven, remove foil (you can reuse it) carefully, put a bit of butter (it will melt). Wait a bit and then you can eat it directly or remove the kernels with a knife.

I was really amaze with the flavour! Somehow I felt like eating corn flakes with milk! And actually, I took a gulp of milk after eat.

I want to try more often and using a fresh corn cob.

The Ascent of Money

Somehow I had low expectations about this book, but I have been totally delighted with it. It is one of the best books (mainly in economy) I have read recently.

It is about about the evolution of finance in the world from the small tablets in Babylon to today’s crypto-currencies.

The shows how the economy development in the world started to speed up when the Spaniards starting to bring tones of silver (Potosi) to Europe (and obviously they didnt make the most it). Still the economy was based in hard currency but after this ,banks, insurance, stock exchanges, bonds and other financial products started to develop in Florence/Venice (Renaissance), Amsterdam, London and Paris. Still early advances were done in the Middle Ages like the case of Fibonacci who wrote the formula to calculate the compound interest of an investment.

I liked the reference to Mary Poppins film regarding a bank run. I actually didnt remember the movie very well but was interesting to make sense to the story.

As well, there is basic example showing how money is created based on debt (based on the fact that the banks dont have to keep your deposit only a small percentage).

It is clear that we dont have that much info about the economies of 4000 years ago but based on the book, the finance has evolved like a living thing. It has become more and more complex,like us, with time. And each crisis has improved it. And each main empire, kingdom, etc in history was strongly connected to an advance it is financial/economy system.

As well, there are good references about finance and war, like the America Civil War, WW1, Napoleon wars, etc

Another topic that was very interesting is the creation of welfare systems (and how different are some of them like Europe, USA and Japan) and the evolution of the pension system. I was really surprised about the example of Chile (when it become a dictatorship) as the first country introducing the private pension system that has been exported to many other countries (Idea from Milton Friedman) And how Argentina was one of the top 10 economies in the early XX century and how things turned sour and became a defaulting machine.

There is a big part of the book focus in the subprime crisis, from the origins, development and aftermath. It is interesting that one of the factors was the “democratization” of home ownership in USA that helped to create the bubble. And how really globalization has made the world not as strong as we thought.

I have managed to make connections to other books I have read before about politics, psychology and economics so it is interesting to see similar and different opinions in several subject (mainly the subprime crisis)

As well, this book was initially published during the Subprime crisis of 2008 and the revision I had, just added two new chapters for the years up to 2018. The final part is mainly about the relationship USA-China post subprime (and Trump), Europe (Brexit), how China is taking the lead in financial technology (so that means they will (or already are) the next empire) and the explosion of crypto-currencies.

SSD + Breakout Cables

I am not as up to speed with storage as I would like to but this blog gives you a quick intro for the different types of SSD.

As well, this week struggled a bit with a 100G port that had to connect as 4x25G to some servers. It was a bit of time since I dealt with something similar. Initially I though I had to wait for the servers to power up so once the link in the other side comes up and the switch recognizes the port as 25G and creates the necessary interfaces. But I had eth1/1 only. I was expecting eth1/1, eth1/2, eth1/3 and eth1/4… The three extra interfaces were created ONLY after I “forced” the speed setting to “25G” in eth1/1….. I hope I remember this for next time.

Cachopo

When I was a kid, nearly every week, one night for dinner I had San Jocobo. But then I remember that my mum started buying pre-made ones…. didnt like them. Based on that, I wanted to try something similar, Cachopo.

To be honest, I think the best is to cook a cachopo for one meal, you just buy a piece of meat (I bought beef), prepare in the day and enjoy it warm. Because in my case, I prepared for a whole week, so three big pieces and it is not the same to eat it on the day that 4 days later.

The recipe is quite simple.

Ingredients:

  • 2 steak fillets
  • 6 slices of ham (cure ham is better) – the number will depend on the size of your flatted out fillets
  • 6 slices of cheese (same as above)
  • Eggs + breadcrumbs
  • Salt + pepper
  • Olive oil

Process:

1- Season your fillets, leave them to rest at room temperature for 15 minutes at least. Get ready for the next steps

2- Put one fillet between two sheets of baking paper and then using a rolling pin, flatten it out as much as you can (I didnt do it…) Repeat for the second one. Try to make them match the size.

3- In one flat piece, put your ham and cheese. Then add the second flat piece. Be sure the ham/cheese is fully covered. Try to push the sides with the fingers so it is sealed (it is not going to be perfect). You can use tooth sticks (I didnt have)

4- In a plate, whisk two eggs. In other plate, put the breadcrumbs. Try to use one hand for handling the cachopo so you dont get dirty in both. Get the pan hot with oil

5- Pass the cachopo first by the eggs, both sides, then the breadcrumbs both sides. Fry until golden in both sides.

I had a small piece for lunch and it was good.