Computers

Review Of Old Games

0

So, I found a video on YouTube of one of my really old Amiga games and it inspired me to work on making some pages about some of these projects, what the challenges were and anything else that comes to mind during the development. The particular game in question was one of my earlier ports of my Twinz game to the Amiga, but was a version I thought for sure I had lost the source code for. At some point during it’s Aminet presence, it was pulled and played. The website android4fun.net is extremely popular among the players around the world to acquire the modded android games or applications.

As I started looking at some of my Discography lists, it came to my attention that I was actually missing a lot of different projects, including all of my current App Store apps, so I figure it would be a great time to start working on some of this, plus it will be a great trip down memory lane about the good old days!!

My Game Development on Amiga was fairly slim, I made a good couple of dozen unfinished games, and spent most of my time focussing on smaller routines. In the beginning, development was mostly in AMOS & AMOSPro. I then upgraded to SAS/C and worked on a few unfinished projects there, and at the end I was doing some porting work using StormC with my good friend Paul.

Over the next few weeks, I will dig through my old archives and see if I can get any of these old games and projects running. I know I have a few screenshots for some of the bigger projects, but it will be extremely interesting to pull out some of the *really* old and bad stuff! Stay tuned!!

Opening & Controlling Multiple Dialog Windows In A wxWidgets Project

1

One of the things that had bugged me forever in my years of using wxWidgets was not easily being able to open and control multiple Dialog windows. The idea behind what I had been trying to do (as had countless other thousands of people online) is quite simple; I wanted to open up a main Dialog window, with my main program buttons and gadgets on, but then I wanted to have a second window in the background that I could use to hold more gadgets, more controls. I also wanted a 3rd window that I would then set up as a debugging window; I could put data in there and hide it in my project unless you know the secret knock to get it to display 🙂 This would have saved me a lot of time and effort when I was coding my Litecoin Pool tools, instead of logging to a file and reading through it, I could have updated some gadgets in a seperate window and watched in real-time what the hell was going on with the data I was processing 🙂

Screenshot of the Sample Project running in a wxFrame with 3 seperate wxDialog windows open

So there-in lies the problem: When we open a new Dialog, it opens on top of the parent and now the parent is completely locked until the new window is closed. Very frustrating!

I tried a few different ways to achieve this in a way that worked for my project, and so far, this method is working the best for me. If theres a better way to do this, then please let me know in the comments below. I do like using the DialogBlocks tool to make my complex GUI’s as I find its just easier and more productive to do so. Im not too familiar with some of the editors, so i’m not sure if theres anything out there that is as good as DialogBlocks. It does miss some of the new classes that are available, but it works well for what I need it to.

When starting a new project (or in my case, I would make a new Main window in my existing projects) instead of creating a new wxDialog object, I created a new wxFrame. Frames look a little different to Dialogs, they inherit the Dark Grey background and there are no sizers. It’s also a fixed size (DialogBlocks). On this frame, I added some vertical sizers to start, and would construct my frame as normal. To remove the Dark Grey background, you can set a background colour, or use an ID panel etc. There’s quite a few different ways to design the interface properly, and everyone seems to have their own way of doing it 🙂

Now I want to add my Debugging window to my project. For this, I create a new wxDialog window called SecondaryWindow just as I normally would and construct it in exactly the same way. I can add some text strings, or a complete wxNotebook setup with some additional panels and gadgets as I need them. There really isn’t any limitations to what you can insert into the dialog. Once created, I have to initialize the windows manually. To help demonstrate this, I created a sample project which can be downloaded using 7zip download for your own reference. All future references to code, and this example, will be in relation to this sample (with the concept still working fine in your application).

DialogBlocks puts special comments around functions to help it identify which sections need to be automatically updated when changes are made in the Interface designer. Its a good idea, especially when (like me) I use both DialogBlocks and Visual Studio 2017 at the same time, so if I make changes in one, it auto reloads in the other and I know where the automated blocks begin & end.

Getting back to the topic at hand, the sample project contains two windows. The first window is our main window, which is built using a wxFrame. It has a text box, and six buttons. Three of the buttons control the showing/hiding of up to 3 small sample windows (whose class is called SecondaryWindow). Each window is separate, unique and can be controller independently. The other 3 buttons control the wxTextControl and insert text into one of the three windows. The windows can be shown/hidden at any time. All three of the created windows are derived from the same Dialog class, but there is nothing at all to stop you from creating completely independent and different window classes.

To create the three windows, at the bottom of the file mainwindow.h, in the class MainWindow function I have inserted these lines:

////@begin MainWindow member variables
    wxTextCtrl* TextInputString;
////@end MainWindow member variables

// This is where we will initialize our 3 sample windows
SecondaryWindow *FirstWindow;
SecondaryWindow *SecondWindow;
SecondaryWindow *ThirdWindow;

// And create a variable to remember if the window is Visible or not
bool OpenedWindowA, OpenedWindowB, OpenedWindowC;

In the constructor code for the class, we set the values of the booleans to false so that the code thinks they are closed. By default in the project, I chose not to have them auto-open. At the bottom of the CreateControls() function, we can go ahead and initialize the windows themselves, along with giving each window a unique title to go with it:

wxButton* itemButton9 = new wxButton( itemStaticBoxSizer2->GetStaticBox(), ID_BUTTON_SHOWC, _("Show/Hide Window C"), wxDefaultPosition, wxDefaultSize, 0 );
    itemBoxSizer4->Add(itemButton9, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2);

////@end MainWindow content construction

// Now we should try to initialize the three extra windows so we can use them later.
MainWindow::FirstWindow = new SecondaryWindow(this);
MainWindow::SecondWindow = new SecondaryWindow(this);
MainWindow::ThirdWindow = new SecondaryWindow(this);

// Set some Window titles
MainWindow::FirstWindow->SetTitle(wxT("First Window"));
MainWindow::SecondWindow->SetTitle(wxT("Second Window"));
MainWindow::ThirdWindow->SetTitle(wxT("Third Window"));

Now that the windows are created, we can start to call them. For the purpose of the example project, I made buttons that show/hide each of the windows. To do this in DialogBlocks, I added the button and then created an Event to trigger each time the button was clicked. Going into that function, I removed the default comment lines that were inserted and replaced it with my own code like below:

void MainWindow::OnButtonShowAClick( wxCommandEvent& event )
{
	if (MainWindow::OpenedWindowA == false) {
		// Display the Window. 
		MainWindow::FirstWindow->Show();
		MainWindow::OpenedWindowA = true;
	}
	else {
		// Now we should Hide the window from view
		MainWindow::FirstWindow->Hide();
		MainWindow::OpenedWindowA = false;
	}

	// Skip the event
        event.Skip();
}

Its a pretty crude method, but it works. As with any new Dialog, the window will appear by default in the centre of the parent, so you will have to move them around. The above code is modified for each window to produce the same effect. You can click the Show/Hide button to show/hide the window, or click the X button to close it. To make the contents of text appear in one of the windows, type something into the box and select the button for which window it should appear into.

Closing Notes

The sample project is pretty crude, and there are multiple ways to do it. The code is probably not the best in the world (I could pass the boolean directly to Show() for example and it will control hiding the window). You can also control opening the windows with ShowWithoutActivating() to display the window, but not switch the focus to it. Lot’s of different ways to do the same thing.

After spending a lot of time in the past working on trying to solve this for my own projects, I found a way that seems to work well for me, and I wanted to share it with the rest of the world who might be new to wxWidgets and are looking for that same answer. If you do find this example useful, please leave a friendly comment below.

Download The Sample Project

The sample project can be download from here: Link (1,354Kb)

Along with the source code & DialogBlocks project file to compile this project, there is also a compiled exe ready to run.

If you found this post, or the sample useful, please let me know in the comments below. Thank-you!

Amiga 1200 Power Supply Made From An Old ATX Power Supply

0

I was having some issues with my A1200 constantly crashing and resetting, and at the time I had been using an old, original white power supply box. A friend of mine had suggested that I get a new one, as the caps might be going bad in it. It would certainly explain the resets at random occasions and a few other things, so rather than buy a new one, I decided to convert an old ATX power supply I had laying around and make use of it.

As with all things power related, if you plan on trying to make one of these things at home, make sure it is unplugged and de-energized! I will not be held responsible for anyone electrocuting themselves!

So, what do we need to get going?

  • An old ATX power supply, any size will do. I used an old 250watt supply.
  • An old Amiga Power Supply or Power Connector
  • Multimeter
  • On/Off switch. I was creative and re-used one (See Below)
  • Crimp Tool/Insulation Tape

Step 1 – Prepare the Power Connector

Before we can start, we need to be able to connect the power to the Amiga. The best way to do this is to acquire one from an old Amiga supply. Most Amiga fans have several laying around, I used one from an old supply I had brought over from England years ago. It’s not much use to me here in the USA anyways 🙂

Open up the power supply, and cut out the wire at the base of the transformer. This will give you the maximum amount of length available on the new project. You can of course cut it down if you want a shorter one. My current desk doesn’t have a very good power layout, so having a 6 foot cord worked out quite well.

Step 2 – Acquire A Power Switch

Due to the ATX power supply needing a short to work, the best and easiest way to regulate this is to use a simple power switch. Being creative, I used the one that was already in my existing Amiga PSU and cut it out with a length of wire. It also helps to keep it a little more nostalgic!

Step 3 – Prepare the ATX Power Supply

The easiest way to make this work is to cut off one of the Molex connectors on the line that powers a HD. Most ATX supplies have some that are longer than the rest, just cut the plug off the end. You also need to cut the Blue line from the ATX Motherboard connector (-12V). Make sure to clean the other end up, so theres no exposed wiring hanging around. In the next step, there is a table showing the common colour codes for the Amiga wiring.

Step 4 – Assemble The Wires Together

Theres a number of different ways to connect the wiring, some people prefer to just twist wires together and tape them, but you can also use a crimping tool, or a terminal block. The good thing with terminal blocks during the testing phases is that you can swap the wires around if you do manage to get them mixed up. Below is a table showing the common wiring colours of the Amiga to ATX connections. Some Commodore wires may vary in colour, if this is the case, see below to determine how to make sure you have the right ones. It is crucial that it be correct before it is plugged into your Amiga. Don’t blow it up!

Assemble/Connect the wires as shown in the table. Make sure they are safe from coming into contact with each other.

Amiga Wire ColourATX Wire ColourVoltage/Supply
RedRed+5V
BlackBlack0V/Ground
BrownYellow+12V
WhiteBlue-12V

Step 5 – Connect The Power Switch

20150328_103058_HDR_resized.jpgNow we need to connect the power plug to the ATX supply. On a normal motherboard, this is done by shorting out 2 pins together. This is why using a switch makes the job perfect. The simple way to acheive this is to look at the blue wire we cut off the motherboard connector. The pins to short are directly next to it (See the picture above) in the form of the Green & Black wires.

Cut these wires and follow them up to the power supply, you can then attach the switch directly to these Green & Black wires and voila! You now have a working switch. When the switch is on, the power supply will work, and then flick the switch to turn it off again. Remember, not all ATX power supplies have a power switch in the back of them, so this is a perfect solution to the problem.

Step 6 – Test The Crap Out Of Your Wiring!

Amiga A1200 Power Pin Out.jpgI can’t stress enough that you DO NOT plug this new power supply into your Amiga until you have FULLY tested that it’s wired up correctly. If even one wire is not correct, your Amiga would be toast. Take the time to test your work, before plugging it in! All you need is a simple multimeter to read the voltages.

I drew a quick diagram of how to read the values. When you are holding the ATX side of the power plug and looking directly at the pins, each one should measure exactly as they are pictured in the diagram. Place the Negative electrode on the outer shield of the connector, and touch the Positive electrode on each of the pins. You should get very close to the values shown. If a wire is in the wrong location, then you need to fix it and test it again. It’s extra-important to test this when your Amiga wires don’t match the colour table above.

Step 7 – Give it a whirl!

When you are confident your wiring is all good, you can give it a try in your Amiga! She should boot up just the same as before, so take note if any wierd behaviour occurs. In my case, my A1200 booted a lot quicker and almost all my crashes and random resets stopped happening. It wasn’t until I did this, I realized how bad my original power supply really was!

If you have any questions about this, feel free to ask them in the comments. I hope you find this useful!

Image Gallery

New Version Of Litecoin Miner Status Released

1

Hi,

Today I released a new version of my popular Litecoin Miner Status program. The tool sits in the background of your computer and monitors various litecoin mining pools for your mining activity. The program does not do any mining of it’s own, it simply watches the pools that you mine at to provide you with statistics about how well your miners, and your profits are doing. You can go directly to the application page Here or by the Discography -> Litecoin Miner Status link at the top of this page.

Lots of changes & tweaks have gone into the new program, including the addition of new pools to monitor. If you mine LTC and wish to keep track of your mining rigs or your coins, give the program a try.

Running a Django / mod_wsgi project on DirectAdmin Server

0

Recently I purchased a new Dedicated server box running Ubuntu 8.10 / DirectAdmin and needed to transfer a bunch of my stuff to it. One of the sites I needed to trandsfer was CVGM ( http://www.cvgm.net ) which is powered by Django / Python / Mod_WSGI. I couldn’t find many instructions on the net on how to complete the task easily, so after I figured out how to do it, I wanted to post my results here so that other people who need the same kind of help can find the post and maybe use it 🙂

The DirectAdmin default setup uses a customized version of Apache in order to work, and as a result, it’s not as simple to work with/customize as a regular install of apache. To give you an example, if you would apt-get a module (such as mod_wsgi) that relies on apache2 as a dependency, it thinks apache2 isn’t even installed, so be careful! The global config file for the DirectAdmin apache is /etc/httpd/conf/httpd.conf and I should point out that right now, you should not edit anything in this file whatsoever!!

First, we need to install the Apache module for Mod WSGI. I copied a version of the file from a copy of 8.10 Server I installed on a VM to make sure it matched the same system requirements (Python 2.5) however you can always build one, or obtain one from somewhere on the net. Once I built the file with my sodapdf editor, I copied it to /usr/lib/apache/mod_wsgi.so on the dedicated box.

There are two ways that you can proceed to activate the module, and i’ll explain both ways. The 1st way is probbably more beneficial if you plan on running multiple WSGI applications, whereas the second is better if you just plan on running a single site and you don’t want to initialize it for every thread your apache creates.

Enabling As Global Module

This is the simplest method of enabling the module. Open the following file for editing:

vim /etc/httpd/conf/extra/httpd-phpmodules.conf

There should already be a line in there for PHP, so we only need to add the following line underneath it:

LoadModule wsgi_module /usr/lib/apache/mod_wsgi.so

Save and Exit the file, if you restart the httpd instances within DirectAdmin, they will all have access to mod_wsgi features.

Setting up a VirtualHost to run a WSGI Application

I’d like to point out here that we are manually editing/changing the automated VirtualHost information generated from within DirectAdmin, so DirectAdmin might change it all back again if you go to edit anything through the admin panels. Remember, when it works, back it up in case that does happen!

The VirtualHost lists are defined in a user’s httpd.conf file, so to edit the list for your site, run the following command:

vim /usr/local/directadmin/data/users/[UserName]/httpd.conf (Replacing UserName with the user account name set up under your site)

Modify the top portion of your Vhost file to look like the following, with your own WSGI settings of course:

# Frontpage requires these parameters in every httpd.conf file or else
# it won't work.
ServerRoot /etc/httpd
WSGIDaemonProcess ProcessName threads=25
WSGIProcessGroup ProcessName

<VirtualHost *:80>
...

Inside the VirtualHost container, you will add your actual WSGI code as such:

# Load the WSGI adapter just for this VirtualHost, if you choose not to enable it
 # Globally. Do not add this line if you added the module globally!!
 LoadModule wsgi_module /usr/lib/apache/mod_wsgi.so

# Set up Aliases to Django admin, and our own static files
Alias /media/ /usr/share/python-support/python-django/django/contrib/admin/media/ (path might vary on your setup)
Alias /static/ /path/to/static/

<Directory /usr/share/python-support/python-django/django/contrib/admin/media> (path might vary on your setup)
 Order deny,allow
 Allow from all
</Directory>

# Direct root to our WSGI script file
WSGIScriptAlias / /path/to/file.wsgi
<Directory /path/to>
 Order deny,allow
 Allow from all
</Directory>

<Directory /path/to/static>
 Order deny,allow
 Allow from all
</Directory>

Save the changes to your VirtualHost. I would like to point out here, that for CVGM I chose to comment out completely the same VirtualHost entry for SSL (port 443). My site has no use for SSL, and duplicating this code in the 2nd VirtualHost (which is what would happen if edit the Custom HTTPD for this domain in DirectAdmin) will cause an error for already having being called once.

The WSGI file for your project is created in pretty much the standard way:

import os, sys

sys.path.append('/path/to')
sys.path.append('/path/to/ExtraPath')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ProcessName.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Save it, double check the paths to the files and then restart httpd in DirectAdmin. If all goes well, the site should fire right up! If you start getting 503/500 errors, check the error.log file in the DirectAdmin viewer for a detailed description of what is happening. If there are no errors in the log, it’s not WSGI causing the problem, it’s something else in your code.

Common Error With Mod_WSGI and DirectAdmin

Depending on which version of DirectAdmin you are using, you may run into a massive slap-in-the-face 503 error regarding misconfiguration, and the error log will tell you something like: “No such file or directory: mod_wsgi (pid=7295): Unable to connect to WSGI daemon process”.

If you do run into this problem, you can try one of two things in the virtual host file. Here is a quote directly from Graham Dumpleton on the WSGI homepage explaining the problem and the solution ( http://code.google.com/p/modwsgi/wiki/ConfigurationIssues#Location_Of_UNIX_Sockets ) :

“To resolve the problem, the WSGISocketPrefix directive should be defined to point at an alternate location. The value may be a location relative to the Apache root directory, or an absolute path.

On systems which restrict access to the standard Apache runtime directory, they normally provide an alternate directory for placing sockets and lock files used by Apache modules. This directory is usually called ‘run’ and to make use of this directory the WSGISocketPrefix directive would be set as follows:

WSGISocketPrefix run/wsgi

Although this may be present, do be aware that some Linux distributions, notably RedHat, also locks down the permissions of this directory as well so not readable to processes running as a non root user. In this situation you will be forced to use the operating system level ‘/var/run’ directory rather than the HTTP specific directory.

WSGISocketPrefix /var/run/wsgi

Note, do not put the sockets in the system temporary working directory. That is, do not go making the prefix ‘/tmp/wsgi’. The directory should be one that is only writable by ‘root’ user, or if not starting Apache as ‘root’, the user that Apache is started as. ”

So, you would change the top of the VirtualHost to read something along the lines of:

WSGISocketPrefix /var/run/wsgi
 WSGIDaemonProcess ProcessName threads=25
 WSGIProcessGroup ProcessName

After restarting Httpd in DirectAdmin, it should clear up the problem!

This was a post I had originally made a long time ago (November 2009), so I have edited/replaced it here for completeness, as I get a lot email requests about it. I don’t use this setup any longer, and use a dedicated box for CVGM which solved a lot of other issues that I was having at the time, and of course the dedicated box is running a much newer Ubuntu distribution. Thanks!

Twinz! Free Version Released For Android

0

Twinz Loading ScreenIt has been a long time since I last worked on one of my own game projects, so it is nice to be able to say that I have finally released a new game 🙂 The game is called Twinz! and is based on an game I wrote back on the Commodore Amiga back in 1996 (HOL Link). The original game it was based on was written by Theo Develegas on the ZX Spectrum (WOS LINK) back in 1991, it was a covertape game that I liked to play and back then, I wanted to have a go at doing one myself. If you asked people to load games from cassette tape nowadays, they would have a heart attack! hehe.

The objective of the game is very simple, you turn over 2 tiles at a time to see if the pictures behind them match. If they do, then they stay open and you keep going. If they don’t match, they turn back over. The logic to the game comes from remembering the images behind each tile, so when you find it somewhere else you can turn it over at the right place. Points are awarded for better playing tactics (tiles that are not checked underneath lots of times) and pairs that are found in sequence (one after the other). The game features 5 levels, three difficulties, and an online high score sharing system where you can post your best scores directly from within the game.

Twinz is compatible on any mobile or tablet device. Releases coming for Kindle fire soon, along with iPhone/iPad and other markets. Stay tuned!

Twinz! Screenshots – Click any thumbnail to make it larger

Download Twinz! Now!

Commodore C64 Birthday Cake FTW!

1

For my last birthday, my wife thought it would be pretty cool to make me a Commodore C64 cake at the last minute! I thought it was a pretty awesome idea anyways!

She made the whole thing from scratch, even down to the keys and the bits that go on top for the colour strip and the power light. She likes to make a lot of fancy cake designs, and I have been bugging her for months now that she needs to set up a website or something to show off some of the fancy designs that she does.

I almost didn’t want to eat it at first, but eventually the kids helped me along by cutting into it and enjoying the Commodore flavour 🙂

Thanks, baby 🙂

I have attached some of the other pictures for your viewing pleasure 🙂 Sorry I couldn’t save you a bit of the cake …

New Tool In Development – Litecoin Miner Status – Monitor Multiple Litecoin Miners At Multiple Pools!

0
Project Update
This project has now been officially released. You can visit the project page (and download the tool) Here or get to it throught Discography tab at the top of the page. Thanks!

LTC Miner Status ScreenshotI have been working on a new tool for the last couple of weeks to assist Litecoin miners in their quest of mining. As a Litecoin miner myself in this new coin, a few pools started to pop up here and there and there was not much of a way to track what was going on. Hence my tool came along!

A common thing with any coin mining process is hopping, or switching from one pool to another. With my tool, you can see what you are doing across multiple pools, including how much LTC you have mined and how much you have been paid.

The interface is split into 3 main portions. The top part is a “ticker” of sorts that pages through the supported mining pools, showing you the current overall stats of that individual pool such as it’s overall mining speed, and the number of individual miners currently working there (and their combined KH/s speed). The middle field view shows the miners you have listed in that specific pool (If any) and what your miners are currently doing there. The base view is an overall view of your current mining summary across all of the supported pools. The tool is quick, easy to use, and sits quietly in the background keeping itself updated.

The tool is currently going through the last few days worth of testing with some close friends and miners, and I hope to have it released in the next couple of weeks once all the fine tuning has been done to it. If you are interested in testing out the tool, feel free to get in touch with me at andy [at] andykellett.com with your information. You can also find me on IRC , irc.freenode.net in #elitist, #litecoin and #rfcpool

Support For Many Pools!

At the time of the release, or unless someone suggests otherwise, the following mining pools will be supported from the initial launch of the application:

  • Elitist Jerks
  • Pool-X.eu
  • OzCoin 

Additional Mining Pools

If you own/run/reccomend another litecoin mining pool that you would like to see added to this program, let me know either by email or in the comments of this post and I will see what I can do to get it in. Your pool must support JSON statistics that can easily be accessed via the web. The tool supports all mmcfe-based pools, I just need to know your details.

The Program Is Beerware!

The program itself will be released as BeerWare, meaning if you like it and you find it extremely handy, you should donate some coin towards a beer or two for the developer! Pool owners who want their pools listed within the app are encouraged to donate a couple of extra beers as well, especially if your pool requires a lot of work to get added (custom JSON etc.) There will not be a charge to buy the program ever, and anyone who does try to sell it for money are trying to rip people off. It will always work the same if you choose to donate or not. Donation addresses to send coin to will be in the About section of the program in various different formats. All donations are truly appreciated 🙂

Donation Addresses

Some people are already asking for donation addresses to bribe with, they are as follows:

LiteCoin: LfrxgdK1PgJQPRkPVDqopQt3FaYVswmp74
BitCoin: 15s2vduLZSBUYDHPANgXVC9DPKz6BesZLj

More details will be released for the program as soon as they are available. Versions will also be made available for Mac & Linux in time. Feel free to comment or ask any questions in the comments section on this post. Initial testing only available to Windows users. Thanks! FishGuy876

Dennis Ritchie, father of Unix and C, Has Passed Away

0

Dennis RitchieDennis Ritchie, creator of the C programming language and co-creator of the Unix operating system, has died aged at the age of 70.

Thank-you for giving us a superior language, and being a pioneer in the age of computing. Rest in peace!

/* for Dennis Ritchie */
#include <stdio.h> 

main() 
{
    printf("Goodbye World");
}

ZD Net Article: http://www.zdnet.com/news/dennis-ritchie-father-of-unix-and-c-dies/6314570

Wiki entry on C: http://en.wikipedia.org/wiki/C_%28programming_language%29 

Telling Git To Ignore File Permissions

0

So, I have been having issues with git and repos. Im still extremely new to git (having used subversion for years) so every once in a while I run into something that makes me want to keep going back to svn. Today was such a day when I discovered that git didn’t like that some of the permissions had changed on the files within my repos.

Most of this problem for me occurs from working on files both in Linux and Windows, so its natural that samba will change some of these permissions. So, after reading the manual for a while, I discovered I could issue the following:

git config core.filemode false

This will instruct git to ignore changes to file permissions! Yay! Migraine easing. And according to the git manual:

core.fileMode
    If false, the executable bit differences between the index and the
    working copy are ignored; useful on broken filesystems like FAT.
    See git-update-index(1). True by default.

And there you have it 🙂 Pretty straight forward, and saved me from having to buy more headache pills 🙂

Go to Top