Install LaTeX on Mac with Brew

latexThis post will show you how to install LaTeX easily on a Mac with the package manager Homebrew.

You can directly install MacTex or BasicTex from https://tug.org/mactex/ and follow the instructions from 3 to 4. But I prefer brew for its ease.

1. First you should install Homebrew;
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

You may look at brew.sh for newer or additional installation methods. After you have installed brew you can easily search for packages with

brew search wget

or install found packages by

brew install wget

You may use brew for installing various packages, command line tools, applications etc.

2. There is a small twist while installing MacTex or BasicTex packages. Because they are supplied at the Homebrew Cask repository. Cask is a community contributed repository for large binaries and applications. So you should add cask command before installing MacTex or BasicTex.

brew cask install basictex
to install basictex or
brew cask install mactex
for mactex.

MaxTex is more than a GB and BasicTex is around 90MBs. There are many packages that you will never use in MacTex thus I prefer the BasicTex.

3. Now you will need a simple text editor to write LaTeX. Then simply use the command line to convert your raw latex code to pdf. You may also use a latex editor like TexMaker if you prefer a GUI. MacTex readily comes with some tex editors.

4. As BasicTex is very lightweight it is missing some essential packages. If you get errors like “multirow.sty not found” while compiling tex then you should install the missing modules. The package tlmgr is used to install the missing modules.

For example;

sudo tlmgr install multirow

tlmgr comes with BasicTex.

I have used the following resources to summarize the installation process and install latex myself on El Capitan.

  1. http://www.pydanny.com/setting-up-latex-on-mac-os-x.html
  2. http://www.bilalakil.me/getting-started-and-productive-with-latex-basictex-on-os-x-terminal/
  3. http://tex.stackexchange.com/questions/974/why-is-the-mactex-distribution-so-large-is-there-anything-smaller-for-os-x

Android Keystore Alias ve Şifremi Unuttum

Şifrelerimi düzenli bir şekilde saklarım ama acil kodlu işlerde yeni açtığım hesapları, kullanıcı adlarını ve şifreleri sonra kayıt altına almak üzere bir kenara not alırım. İşte o notları düzenlemezsem…

Eğer sizde keystore alias ve şifrenizi unutursanız ikisinin kombinasyonuyla denemeler yapmak yerine vaktinizi sadece olası şifreleri denemek için kullanabilirsiniz.

Aşağıdaki komut keystore içerisine kayıtlı aliasların hepsini listeleyecektir. Tabi ki doğru şifreyi girmeyi başarırsanız.

keytool -list -keystore /dizin/dizin/ornek.jks

Not: Ben başardım 🙂

MySQL Decimal, Double, Float Rounding Problem

When importing CSV with decimal values to MySQL, the numbers are rounded. I have searched on google but didn’t find a solution so I have come up with my own.

In CSV file decimal part is seperated with a comma “,” , however MySQL accepts a dot “.”.
So just replace commas with dots in your CSV file. That easy 😉


sed -i 's/,/./g' your_file.csv

Single S3 Bucket Policy

It requires two different policies to be assigned to the group or user. With this policy setup the user can’t list other buckets.

1st Policy


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "XXX",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::<bucketname>"
]
}
]
}

2nd Policy


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "XXX",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::<bucketname>/*"
]
}
]
}

The only difference between these two policies are the ARN (Resource) Part. The second has the * wildcard.
If you just use the 1st policy then the user can not make any changes inside the bucket but can list the files. If you just use the 2nd policy the user can not login to the bucket at all. That’s why both are required.

If you have discovered an easier way please share at the comments.

Update:

Similar solution at Blog AWS.


{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket" ],
"Resource": [ "arn:aws:s3:::test"]
},
{
"Effect": "Allow",
"Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
"Resource": [ "arn:aws:s3:::test/*"]
}
]
}

Mysql Veri Tiplerinde Length Parametresi

MySql veri tipleri hakkındaki bir yanlışımı az önce öğrendim ve bir çok kişinin de bu konuyu yanlış bildiğini düşünüyorum.

Bildiğiniz gibi char, varchar, tinyint, int, bigint gibi veri tiplerinin hepsi length (size veya uzunluk olarak da geçer) parametresi alır. char ve varchar tipleri için bu değeri tanımladığınız zaman, tanımlanan değer kadar karakter saklanır. Örnek olarak varchar(3) olarak tanımlarsak saklanan değerler aşağıdaki gibi olabilir;

  • abc
  • tef
  • ağa

Doğal olarak int(3) değeri için de saklanacak değerin -999 ve 999 arasında olabileceği aklımıza geliyor. Halbuki int(3)’ün sakladığı değer (4 byte) değişmiyor. Değişen tek şey verinin gösterim uzunluğu oluyor. Yani kayıt ettiğiniz int değeri veritabanında yine 4 byte kaplarken yalnızca sayının 3 hanesi gösteriliyor.

Peki o zaman uzunluk tanımlamanın ne faydası var. Eğer uzun tanımlarsanız; sayısal tipler için tanımlanan uzunluk değeri, zerofill (sıfırla doldur) özelliği ile birlikte kullanıldığında aşağıdaki gibi getirilir. (Aşağıdaki örnek int(4) için verilmiştir.)

  • 0005
  • 0004
  • 0011

Kaynaklar:
http://dev.mysql.com/doc/refman/5.0/en/numeric-type-attributes.html
http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

Geçerli-Basit Tar Komutları

http://xkcd.com/1168/

c: oluştur
v: verbose
f: bundan sonra gelen arşiv adı
z: gzip filtresi
j: bzip filtresi

Tar oluşturma

tar -cvf arsiv_adi.tar dizin_adi

Gzip Tar Oluşturma

tar -zcvf arsiv_adi.tar.gz dizin_adi

Bzip Tar Oluşturma

tar -jcvf arsiv_adi.tar.bz2 dizin_adi

Tar’dan çıkarma

tar -xvf arsiv_adi.tar
tar -zxvf arsiv_adi.tar.gz
tar -jxvf arsiv_adi.tar.bz2

Virtualbox Mac Host Ubuntu Guest Shared Folders

Mac veya Windows host altında, Ubuntu veya başka bir Unix tabanlı sisteme dosya paylaştırmak isterseniz öncelikle VirtualBox ayarlarından paylaşılan dosyaları ayarlamalısınız. (Guest Additions kurulu olmalı!)

Bu işlemden sonra paylaşılan klasörler /media/sf_dosyaadi dizini altında listelenir. Yalnız bu dosyaya erişim hakkı vermek istediğiniz kullanıcıları, VirtualBox kullanıcı grubuna eklemeden ulaşamazsınız.

Paylaşım dosyalarını ayarladıktan sonra, guest sistemindeki vboxfs kullanıcı grubu altına bu dosyalara erişmek isteyen kullanıcıları eklemelisiniz.


sudo adduser www-data vboxfs

Yukarıdaki örnekte www-data (apache server kullanıcısı) kullanıcısını vboxfs grubu altına ekledik. Bu şekilde www-data kullanıcısı paylaşılan klasörlerdeki dosyalara ulaşabilir hale geldi.

Temel prensip aynı olmakla beraber diğer unix sistemler için adımlar farklı olabilir. Yukarıdaki adımların aynısını Ubuntu guest sistemlerde uygulayabilirsiniz.

Apache Dosyaları İçin Dosya İzinleri (Apache Permissions)

Kopyalama veya taşıma sırasında internet dosya ve dizinlerinin izinleri bozulabilir. Web dosyalarınızın Apache web sunucunuzda çalışması için, internet dizini altında (Ör: cd /var/www) aşağıdaki komutu çalıştırmanız yeterlidir.

find . -type f -exec chmod 644 {} \; && find . -type d -exec chmod 755 {} \;

Bu komut bütün dizinlere ve dosyalara ihtiyaç duyulan izinleri sağlar.
Dosyalar için 644
Dizinler için 755