Android Kargo Takip Uygulaması

Günümüzde bir çoğumuz Internet üzerinden alış veriş yapıyoruz. Özellikle yurt dışından yapılan alış verişlerde kargonun nerede olduğunu takip etmek zor oluyor. PTT’nin takip sayfası oldukca kullanışsız ve yurt dışından yapılan bir gönderinin PTT takip sayfasında çıkması biraz vakit alıyor. Bazı alış veriş siteleri de kargo takip numarasını mail ile göndermeyip kendi siteleri üzerinden hesabınıza girip kendi sağladıkları arayüz üzerinden bu bilgiyi veriyorlar. Ben de kargom nerede diye kontrol etmeyi kolaylaştıracak bir Android uygulaması geliştirdim. Bu uygulama Türkiye’de hizmet veren bütün kargo şirketlerini kapsadığı gibi, UPS, Fedex, DHL ve China Post (Çin’den gelen postalar/kargolar için) gibi uluslar arası gönderi yapan kargo şirketlerini destekliyor. Uygulamayı Android Market’den indirebilirsiniz, ismi “Kargo Takibi”.

Uygulama en son girdiğiniz takip numaralarını da saklıyor ve tekrar sorgulama yapmak için sadece listeden takip numarasını seçmeniz yeterli oluyor. Kargo şirketini kendisi tamamlıyor.

Uygulama siz takip numarasını yazdığınız zaman girdiğiniz formattan hangi kargo şirketine ait olduğunu çoğu zaman anlayabiliyor ve otomatik olarak şirket seçeneğini dolduruyor. Bu uygulamayı yaparken tabiki farklı kargo şirketlerinin farklı farklı takip numarası kullandıklarını farkettim ve bu formatları da sizler ile paylaşmak istedim. Uygulama dışında da işe yarar olduğunu düşünüyorum çünku takip bu numara fatura no vb. diğer bilgiler ile karıştırılabiliyor.

ARAS Kargo: Aras Kargo takip numarası 13 tane rakamdan oluşur. Örnek:4208993503499

China Post(Çin’den yapılan posta gönderileri için): China Post takip numarası R ile başlar ve CN ile biter. R’den sonra bir harf daha vardır ve 9 tane rakam içerir. Örnek:RA697576059CN

DHL: DHL takip numarası 10 tane rakamdan oluşur. Örnek:2217900993

Fedex: FEDEX takip numarası 12 tane rakamdan oluşur. Örnek:802416569979

MNG Kargo: MNG Kargo takip numarası iki adet harf ile başlar ve ardından genellikle 6 tane rakam gelir. Tamamen rakamlardan oluştuğu veya 2 harften sonra 4 rakam gelen takip numaraları da olabilir. Örnek:DB501983

PTT Kargo: PTT Kargo takip numarası genellikle 13 adet rakamdan oluşur. 2 adet harfin ardından 11 adet rakam gelecek şekilde de olabilir. Örnek:AP00869174550 veya 2789339611984

PTT Kargo Yurt Dışı: PTT Yurt Dışı takip numarası R ile başlar ardından 1 tane harf gelir ve bunu 9 adet rakam izler. İki adet harf ile biter. Bu harf gönderinin yapıldığı ülkeye göre değişir. Mesela Çin’den yapılan gönderilerin takip kodu CH ile biter. Örnek:RS915119275CH

Sürat Kargo: Sürat Kargo takip numarası 12 adet rakam ve harfden oluşur. Örnek:2aca211a3b5b

UPS Türkiye: UPS takip numarası H veya U ile başlar. Harf ve ramaklardan oluşur. Toplamda 16 karakter uzunluktadır. Örnek:U34B519G2533391

Yurtiçi Kargo: Yurtiçi Karg takip numarası 12 tane rakamdan oluşur. Örnek:608993503499

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

Component Level Versioning and Bundle of Components in JIRA

Each project in JIRA has its own set of components and versions. Versions are defined at project level so any version is valid for any component of the project. For a very long time ability to use component specific version numbers within the JIRA is one of the most requested feature. There are various feature requests opened just for this feature, like JRA-3501. If your project contains components that have different version numbers you have two choices:

You may make your each component a different project

Advantage of this approach is you may have finer level of detail in managing the project. You may assign different issue schemas, workflows or assign different persons to different roles. Disadvantage is your project administration may become more complex. Also you have to define special filters to see all issues of higher level project.

You may use “Component and Bundle Versions for JIRA” plugin

This plugin allows you to assign different versions to different components within your JIRA project. This component specific version is enforced on every issue operation like create, edit, inline edit, workflow screens. Possibility of selecting incorrect component and version pair for an issue is greatly reduced. This plugin also allows you to group different version of different components into a bundle. Bundles has different versions than components. In any issue screen if no component is selected, plug-in only allows versions that are assigned to a bundle. You can also filter issues using two new JQL functions; affectsBundle and fixedInBundle. affectsBundle function takes a list of bundle names and returns all issues that are affecting the components in the bundle or directly entered for bundle without specifying any component. fixedInBundle JQL function works similar to affectsBundle but works for “fix version” field. You may have more detailed explanation of plug-in at its home page and help pages. You can also visit the plug-in’s page at Atlassian Marketplace.

Use following links to take advantage of a limited time promotions:

Component and Bundle Versions for JIRA

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)

CMMI, Scrum, Kanban

I have just checked trend of 3 popular process. As you can see, CMMI goes down for a long time. The interesting part is CMMI is very popular in India, China, Pakistan, Taiwan then it is in the other parts of the world. On the other hand scrum is more popular in Europe.
Google Trends for Scrum, Kanban, CMMI

Google Trends for Scrum, Kanban, CMMI

Popularity of CMMI by Country

Popularity of CMMI by Country

Popularity of Scrum by Country

Popularity of Scrum by Country

VN:F [1.9.22_1171]
Rating: 8.0/10 (2 votes cast)

Minecraft 1.6.2′ye Nasıl Mod Yüklenir

Oğlum Ata uzun bir süredir Minecraft oynuyordu ve çok seviyordu, önce Ipad verisyonunu aldık, daha sonra desktop versiyonunu. Bu yaz tatilinde ben de onun ile beraber oynadım ve oyun tek kelimeyle mükemmel. Ata’nın söylediği gibi, “güzel grafik sevenler için değil, ama oyun çok zevkli”. Şimdi tatilde olduğu ve mod yüklemek istediği için ben de onun için adım adım Minecraft Modu nasıl yüklenir  anlatmak istedim ve yazmışken de diğer çocuklarada faydası olur diye buradan paylaşmak istedim. Bu oyunu genelde küçük çocuklar çok seviyor. Hatta 3 yaşındaki kızım bile biz oynarken çoğu zaman bize eşlik ediyor, kendine pembe ev istemeyi de ihmal etmiyor. Çocuklar bu oyunu çok sevdiği için yazdığım bu yazıyı buradan paylaşmak istedim.

Minecraft Mod Kurulumu

Öncelikle yüklemek istediğiniz modun kullandığınız Minecraft ile uyumlu olmasına dikkat etmeniz gerekiyor, aksi takdirde sorun yaşama olasılığınız yüksek. Bu bilgiyi genellikle modu indirdiğiniz web sayfasında verilir, verilmiyorsa çok bilinen bir mod yüklemiyorsunuz demektir ve bu durumda yüklemenizi tavsiye etmiyorum.

Örnek olarak sağ üst köşede küçük harita üzerinde bulunduğumuz yeri gösteren bir mod yükleyeceğiz. Bu modun adı Rei’s Minimap Mod. Bu modu http://www.9minecraft.net/reis-minimap-mod/ adresinden indirebilirsiniz. Küçük harita üzerinde hangi bilgilerin de görüneceğini ayarlayabiliyorsunuz, mesela düşmanların yerleri, en son öldüğünüz nokta gibi.

Winrar Kurulumu

Bu işlem sırasında Winrar programına ihtiyacımız olacağı icin Winrar uygulaması kurulu değilse aşağıdaki adımları takip ederek Winrar’ın kurulumunu yapmanız gerekiyor. http://www.rarlab.com/rar/wrar420tr.exe linkine tıklayıp Winrar’ı indermeye başlayabilirsiniz. Dosya indikten sonra üzerine çift tıklayıp kurulumu başlatıyoruz, ilk açılan ekranda “Yükle” seçeneğini, daha sonraki ekranda “Tamam” seçeneğini, en son olarak da “Tamam” seçeneğini seçerek kurulumu tamamlıyoruz. Bu indirdiğimiz Winrar’ın deneme sürümü olduğu için arada sırada sizi satın almanız için uyaracaktır. 

Mod Dosyasının İndirilmesi

Öncelikle http://www.9minecraft.net/reis-minimap-mod/ adresine gidip mod dosyasını indirmemiz gerekiyor. Sayfaya gitdiginizde biraz aşağılara doğru kayarsanız mod ile ilgili indirme linklerini bulacaksınız. Burada Minecraft versiyonunuz ile uygulu bölümü seçmeniz gerekiyor, örneğin benim Minecraft versiyonum 1.6.2 olduğu için ben “For 1.6.2” bölümünü kullanıyorum. Sşağıdaki ekran görüntüsünde olduğu gibi sarı renkli alandaki linklerin bir tanesine basın. Kırmızı ve büyük düğme sizi bir reklam sayfasına yönlendirecektir, ona basmayın.

Image

Buradaki linklerin birisine bastığınızda aşağıdaki gibi bir sayfa açılacaktır, burada büyük download düğmesine basarsanız dosyayı indirmeye başlayacaktır. Modun büyüklüğü ve internet hızınıza göre indirme süresi değişecektir.

Image

Minecraft Kurulum Dizininin Açılması ve Değiştirilmesi

Image (Windows + R ) tuşları ile aşağıdaki çalıştırma ekranını açın ve Open/Aç etiketli alana %appdata% yazıp Ok düğmesine basın. 

Image

Karşınıza içinde .minecraft dizininin de olduğu bir pencere açılacaktır. Bundan sonraki adımlar Minecraft versiyonunuzun 1.6 olup olmadığına göre değişiyor. Minecraft versiyonunuza göre aşağıdaki mavi veya yeşil kısımlardan bir tanesini seçip devam etmeniz gerekiyor.

1.6.0 ve Daha Yeni Minecraft’lar İçin

.Minecraft dizini altında “versions” her bir minecraft versiyonu için ayrı bir dizin bulunacaktır. Örneğin 1.6.2 Minecraft versiyonu icin 1.6.2 dizini bulunacaktır. Öncelikle bu dizinin bir kopyasıni oluşturmamız gerekiyor. Bunun için 1.6.2 dizinine sağ tuş ile tıklayıp “Copy/Kopyala” seçeneğini seçiyoruz, daha sonra boş bir alana sağ tuş ile tıklayıp “Past/Yapıştır” seçeneğini seçiyoruz. Bu işlemi doğru yaptığınızda aşağıdaki gibi aynı dizinin iki tane kopyası oluşacaktır. Eğer kurulum sonunda Minecraft’da sorun yaşarsanız bu yeni oluşturduğumuz dizini silip sadece 1.6.2 dizinini bırakırsanız Minecraft’ınız orjinal haline dönecektir.

Image

1.6.2 – Copy dizinine yine sağ tuş ile tıklayıp “Rename/Yeniden adlandır” seçeneğini seçiyoruz ve bu dizini 1.6.2MP olarak isimlendiriyoruz. Aslinda 1.6.2 den sonra herhangi bir ismi yazabilirsiniz ben MP eklemeye karar verdim. Neyi seçerseniz seçin bundan sonraki adımlarda da büyük küçük harfe dikkat ederek aynı eklentiyi kullanmanız gerekiyor. Unutmayın, büyük küçük harf ayrımı önemli. 


Daha sonra yeni oluşturduğumuz 1.6.2MP dizini içine giriyoruz. Burada 1.6.2.json ve 1.6.2.jar isimli iki adet dosya olacak, bunları 1.6.2MP.jar ve 1.6.2MP.json olarak yeniden adlandırıyoruz. Bunun için yine sağ tuş ile üzerine tıklayıp “Rename/Yeniden adlandır” seçeneğini seçiyoruz. Eğer sizin bilgisayarınızda .json ve .jar eklentileri görünmezse önemsemeyin ve işleme yukarıda anlatıldığı şekilde devam edin.

Image  ———>  Image


Notepad uygulamasını açıp (“Windows + R” Image ile açılan ekrana notepad yazıp enter a basarak açabilirsiniz) 1.6.2MP.json dosyasını sürükle bırak ile içine atıyoruz ve daha sonra bu dosyanın hemen başındaki 1.6.2 yi 1.6.2MP ile değiştirip kaydediyoruz ve notepad uygulamasını kapatıyoruz. 

Image


Image


Daha sonra 1.6.2MP.jar dosyasına sağ tuş ile tıklayıp “Open With/Birlikte aç” seçeneği altında olan Winrar ile aç seçeneğini seçiyoruz. Burada meta-inf dizini üzerine sağ tuş ile tıklayıp açılan menüden “Delete/Sil” seçeneğini seçiyoruz. Benzer şekilde internetten indirdiğimiz mod dosyasını da Winrar ile açmamız gerekiyor. Büyük olasılıkla chrome/interner explorer vb. Ile inderdiğiniz dosya Downloads dizini içinde olacaktır. “Windows + E” tuşu ile yeni bir dosya tarayıcısı/explorer penceresi açıp Downloads dizinine tıkayın ve bu dizindeki mod dosyasını (bizim mod dosyamız için ismi Rei-Minimap-Mod-1.6.2) yine üzerine sağ tuş ile tıklayıp Winrar ile aç diyerek Winrar ile açıyoruz. 

Ekranda iki Winrar klasörü yan yana açıp bir mod dosyası içindeki bütün dosyaları 1.6.2MP dosyasının içini gösteren Winrar penceresine sürükle bırak ile bırakın. 

Image



1.6’dan Daha Eski Minecraft’lar İçin

Öncelikli olarak kuracağımız modun sorun çıkarma ihtimaline karşı mevcut “.minecraft” dizinin bir yedeğini alacağız. .Minecraft dizinine sağ tuş ile tıklayıp açılan menüden Copyala/Copy seçeneğini seçiyoruz.

Image


Daha sonra aşağıdaki ekran görüntüsünde görüldüğü gibi New Folder/Yeni Klasör seçeneği ile yeni bir dizin oluşturup ismini “yedek” olarak değiştiriyoruz.

 

Image

Bu dizinin ismi tam olarak yedek olmak zorunda değil, sadece ne isim verdiğinizi hatırlayın yeter. Eğer Minecraft çalışmazsa .Minecraft dizinini silip bu yeni oluşturduğumuz dizini .Minecraft olarak tekrar isimlendirin düzelecektir. Bunun için sağ tuşla açılan menüyü kullanabilirsiniz. Eğer herşey normal giderse yeni oluşturduğumuz yedek dizinine ihtiyacımız olmayacaktır.

Image

Daha sonra .Minecraft dizinine gidip buradaki bin dizinine girip burada bulunan minecraft.jar dosyasını daha önce kurduğumuz Winrar uygulaması ile açıyoruz. Bunun için minecraft.jar dosyasına sağ tuş ile tıklayıp “Birlikte Aç/Open With” alt menüsünden “Winrar ile Aç” seçeneğini seçiyoruz. Bundan sonraki adımlar 1.6.2 için verilen kurulum ile neredeyse aynı, indirdiğimiz mod dosyasi içindeki bütün dosyaları minecraft.jar dosyası içine atıyoruz.

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)

Gorgeus UI Timely Android Application

Timely Android application is actually a very basic application with alarms, timer, stop watch and clock functionality. There are a lot of mobile applications with these functionalities. What makes Timely special is its beautiful user interface and animations. It can not be explained you have to see it yourself. 

In addition to its amazing UI it has a very interesting promotion strategy. Every functionality of the application can either be purchased with money or using share point. You earn share points if any one installs Timely using your promotion code. For example removing adds either $1.07 or 5 share points.

You can install it from Play Store and get a theme free with code JAPK-YXRW-92Q5. This will also gain me share points :)

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

How to Align Images in Markdown

Most markdown processors support HTML content within a markdown document. Basically you could embed your markdown markup within a div which will centre its content. Following sample centers the image on the document.

<div style="text-align:center" markdown="1">

![Alt Text](/path/to/image "Caption")

</div>
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

caniuse.com

http://caniuse.com/ is a very handy web site for web developers. It shows browser support for every HTML/CSS/JavaScript feature. Information is very detailed and shows current support level and estimated support level in future version of browsers. Partial supports are also shown with color codes.

Screen Shot 2013 07 07 at 2 11 58 PM

VN:F [1.9.22_1171]
Rating: 6.0/10 (1 vote cast)

Introduction to MongoDB:Part 2

MongoDB Shell = Build-in MongoDB Client

MongoDB comes with a build in mongodb client called mongo. It is a JavaScript interpreter with build-in MongoDB client capabilities.

starscream-5:bin starscream$ ./mongo localhost:27017
MongoDB shell version: 2.4.4
connecting to: localhost:27017/test
Server has startup warnings:
Mon Jun 24 00:16:12.835 [initandlisten]
> db
test
> db.messagemodels.findOne()
{
    "to" : "Ata Oğuz",
    "subject" : "Furby",
    "body" : "Furby yi aldım oğluş.",
    "_id" : ObjectId("51d01bb444f791b21f000001"),
    "deliveryTime" : ISODate("2013-06-30T11:51:16.126Z"),
    "__v" : 0
}

db variable is set to current database. You can access collections in current database with “.” notation, as in the example above: db.messagemodels.

Creating New Documents and Saving Them

> mail = {to:"test@google.com", from : "Ada Oğuz", subject : "Furby", message : "Ben de pembe Furby istiyorum!!!", deliveryTime:new Date()}
{
    "to" : "test@google.com",
    "from" : "Ada Oğuz",
    "subject" : "Furby",
    "message" : "Ben de pembe Furby istiyorum!!!",
    "deliveryTime" : ISODate("2013-07-02T20:03:46.263Z")
}
> db.messagemodels.insert(mail)

Since this is a JavaScript environment we could create documents a JavaScript objects and assign them to variables as in the above example. After creating the object we could save it using insert method of collection.

Querying Existing Documents

> db.messagemodels.find({from:"Ada Oğuz"})
{ "_id" : ObjectId("51d33242cd860ef98403dc6d"), "to" : "test@google.com", "from" : "Ada Oğuz", "subject" : "Furby", "message" : "Ben de pembe Furby istiyorum!!!", "deliveryTime" : ISODate("2013-07-02T20:03:46.263Z") }
>

You could query existing documents by using find method on the collection. You could supply a simple query also as a document/JS Object. As you can see, an _id field is automatically created and saved with our document.

> use local
switched to db local

You can switch between different databases using use command.

Updating Documents

> newMail = {to:"test@google.com", from : "Ada Oğuz", subject : "Furby", message : "Ben de 1 pembe, 1 tane de mor  Furby istiyorum!!!", deliveryTime:new Date()}
{
    "to" : "test@google.com",
    "from" : "Ada Oğuz",
    "subject" : "Furby",
    "message" : "Ben de 1 pembe, 1 tane de mor  Furby istiyorum!!!",
    "deliveryTime" : ISODate("2013-07-02T21:07:50.743Z")
}
> db.messagemodels.find({from:"Ada Oğuz"});
{ "_id" : ObjectId("51d3417bcd860ef98403dc6e"), "to" : "test@google.com", "from" : "Ada Oğuz", "subject" : "Furby", "message" : "Ben de 1 pembe, 1 tane de mor  Furby istiyorum!!!", "deliveryTime" : ISODate("2013-07-02T21:07:50.743Z") }

To update an existing document, apply your changes to JS Object/document and give it to update function with a criteria that shows which documents should be updated.

Deleting Documents

> db.messagemodels.remove({from:"Ada Oğuz"})
> db.messagemodels.find({from:"Ada Oğuz"});
>

Removing documents is performed with remove method of the collection instance. As in the case of find and update you give it a criteria in the form of a document.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

Introduction to MongoDB:Part 1

Short Information on MongoDB

MongoDB is one the most popular NOSQL databases. It is a document oriented database. That means you will be inserting/deleting/updating/querying documents instead of rows. Documents allows you to represent hierarchical relationships within a single document and this naturally fits the way how we use objects in an object oriented programming language. Also you do not have to use a strict schema for your documents, you can evolve structure of your documents when you need. For example this is a document:

{'name' : 'Deniz Oguz'}

Documents are stored in collections which are analogical to tables in relational databases except each document could be different even within a collection. Using different collections for each category of documents makes it easier to develop programs. MongoDB also supports subcollections as a syntactical sugar. You can create namespaces using ‘.’ notation to group your schemas. For example: school.courses, school.students are different collections but just they share a common prefix as their collection name. Each installation of MongoDB can contain multiple databases each of which consist of collections.

Later we will dive details of documents and collections but before we proceed I would like to get MongoDB running and save and query documents from it.

Prepare Your Environment

We will prepare our development environment by downloading and installing neccesssary tools.

  • MongoDB server
  • Database frontend
  • Driver for your programming language

Server

Download MongoDB Server. Instructions for installing MongoDB on all three platforms are available at http://docs.mongodb.org/manual/installation so we do not need to repeat it here.

Database Frontend

MongoDB has its own commandline interface but since you are reading this introduction you should use one of the following GUI tools.

Mac OS X

MongoHub: It is free and could be downloaded from http://mongohub.todayclose.com/. It even has import/export capability from MySQL.

Screenshot of MongoHub

Windows

MongoVUE: It has a free single user version and can be downloaded from http://www.mongovue.com/downloads/.

Screenshot of MongoVUE

Screenshot of MongoVUE

Linux & Platform Independt Frontend

UMongo is a java based MongoDB frontend. You can download it from http://www.girbal.net/umongo/

Screenshot of Umongo

Screenshot of Umongo

Eclipse Plugin

You can use MonjaDB plugin. Download it from here.

Screenshot of MonjaDB

Screenshot of MonjaDB

Drivers

You can download MongoDB drivers from http://docs.mongodb.org/ecosystem/drivers/. Since we will use Node.js and JavaScript for this tutorial I will give instructions for Mongoose. Mongoose is actually not a driver, it is object mapping library build on top of MongoDB Node.js driver. Of course you should install Node.js first. Grap the Node.js installar of your platform from http://nodejs.org/download/ and install it. After Node.js is installed install Mongoose using npm.

npm install mongoose

This command will install mongoose and its dependencies into node_modules folder in the directory you invoke the command. Parent directory of node_modules directory will be our working folder.

Development with MongoDB

Most basic example of using a database is saving something to it and reading it back. So will save a document to MongoDB and query this document back from it. Of course we have to start MongoDB server before.

Starting MongoDB Server

mongod assumes default data folder as /data/db so make sure it is exist or give a path of existing directory with –dbpath. It uses default port 27017 for connections, it will also start an admin web console on port 28017. Since this is an introductory tutorial there is nothing interesting in web console for us. It given extensive statistics on MongoDB server.

starscream-5:bin starscream$ ./mongod --dbpath ~/mongodb-osx-x86_64-2.4.4/data/
Mon Jun 24 00:13:56.309 [initandlisten] MongoDB starting : pid=532 port=27017 dbpath=/Users/starscream/mongodb-osx-x86_64-2.4.4/data/ 64-bit host=starscream-5.local
Mon Jun 24 00:13:56.310 [initandlisten]
Mon Jun 24 00:13:56.310 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
Mon Jun 24 00:13:56.310 [initandlisten] db version v2.4.4
Mon Jun 24 00:13:56.310 [initandlisten] git version: 4ec1fb96702c9d4c57b1e06dd34eb73a16e407d2
Mon Jun 24 00:13:56.310 [initandlisten] build info: Darwin bs-osx-106-x86-64-2.10gen.cc 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
Mon Jun 24 00:13:56.310 [initandlisten] allocator: system
Mon Jun 24 00:13:56.310 [initandlisten] options: { dbpath: "/Users/starscream/mongodb-osx-x86_64-2.4.4/data/" }
Mon Jun 24 00:13:56.316 [initandlisten] journal dir=/Users/starscream/mongodb-osx-x86_64-2.4.4/data/journal
Mon Jun 24 00:13:56.316 [initandlisten] recover begin
Mon Jun 24 00:13:56.317 [initandlisten] recover lsn: 54971
Mon Jun 24 00:13:56.317 [initandlisten] recover /Users/starscream/mongodb-osx-x86_64-2.4.4/data/journal/j._0
Mon Jun 24 00:13:56.319 [initandlisten] recover skipping application of section seq:0 < lsn:54971
Mon Jun 24 00:13:56.320 [initandlisten] recover create file /Users/starscream/mongodb-osx-x86_64-2.4.4/data/test.ns 16MB
Mon Jun 24 00:13:56.370 [initandlisten] recover create file /Users/starscream/mongodb-osx-x86_64-2.4.4/data/test.0 64MB
Mon Jun 24 00:13:56.546 [initandlisten] recover cleaning up
Mon Jun 24 00:13:56.546 [initandlisten] removeJournalFiles
Mon Jun 24 00:13:56.548 [initandlisten] recover done
Mon Jun 24 00:13:56.704 [websvr] admin web console waiting for connections on port 28017
Mon Jun 24 00:13:56.704 [initandlisten] waiting for connections on port 27017

Saving Document to MongoDB

Create a file saveToMongoDB.js with your favorite text editor. We will write a most basic thing with MongoDB, save a simple document to it.

    1 var mongoose = require('mongoose');
    2 
    3 //like all nodejs libraries mongoose also works asynchronously with call back functions
    4 //result of connect function will be available to our callback function
    5 //connect takes URL of the DB and a callback. Name of DB we are connecting is test
    6 //DB does not have to be exist, it will be created automatically
    7 var connection = mongoose.connect('mongodb://localhost/test', function(err) {
    8   if (err) {
    9     throw err;
   10   }
   11   console.log('Connected to MongoDB');
   12   
   13   //Define a schema for your document
   14   var messageSchema = new mongoose.Schema({
   15     from : String,
   16     to: String,
   17     subject : String,
   18     body : String,
   19     deliveryTime : { type: Date, default: Date.now }
   20   });
   21   
   22   //create Model class for your model
   23   var MessageModel = mongoose.model('MessageModel', messageSchema);
   24   
   25   //create an instance of your actual model/document
   26   var message = new MessageModel({
   27     from : 'Deniz Oğuz',
   28     to : 'Ata Oğuz',
   29     subject : 'Furby',
   30     body : 'Furby yi aldım oğluş.',
   31     deliveryTime : new Date()
   32   });
   33   
   34   //save your document/model to MongoDB
   35   //again we have supply call back function to process result
   36   message.save(function(err, msg) {
   37     if (err) {
   38       throw err;
   39     }
   40     console.log("Saved:" + msg._id);//every document has '_id' field generated by mongodb
   41   });
   42 });
   43 
Screenshot of our newly saved document

Screenshot of our newly saved document

Query Documents from MongoDB

Now create a new file queryMongoDB.js. We will query MongoDB and find all documents matching our query and print subject of each document. It is very similar to above so I am not repeating the common parts, everything up to MessageModel.save will be the same. Replace call to save method with the following code block.

    1   console.log('querying...');
    2   MessageModel.find({}, function(err, messages) {
    3     if (err) {
    4       throw err;
    5     }
    6     for (i = 0; i < messages.length; i++) 
    7       console.log('message:' + messages[i].subject);
    8   });
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

JIRA:Automatically Linking Issues with a Script During Create Transition

We want to follow which issues found in which test and review sessions. In order to do this we have defined 2 new issue types called “Review Task”  and “Test Task”. We have also defined a new relation called “found in”.  As a  improvement we also do not want to manually link issues found during a test or review to its parent task. To make the process a little bit strait forward we have added a new custom field called “Parent Task ID” to our bug issue type. While creating a bug we just enter the parent task id to this field and a workflow post function automatically links two issues with each other. Also we check validly of parent task id field with another workflow validation script. The only problem is we do not have autocomplete for parent issue id field. Any improvement is welcome.

  • First of all you should install Script Runner plugin. This plugin allows you to customise your workflows with groovy scripts without writing a whole custom plugins.
  • Define a parent issue type and customise it in the way you want. We use Review Task and Test Task issue types.
  • Define a custom field named “Parent Task ID” and add it to every other issue type that you want to automatically associate with a parent issue type (the ones you have defined above).
  • For the Create transition of workflow add following validator to validate correctness of entered “Parent Task ID” field.
    def parentTaskID = cfValues['Parent Task ID'];
    if (parentTaskID == null || parentTaskID == '') {
        return true;
    } else {
        def parentIssue = ComponentAccessor.getIssueManager().
    		getIssueObject(parentTaskID);
        def isValid = parentIssue != null && 
             parentIssue.projectObject.key == issue.projectObject.key &&
              (parentIssue.issueObject.name == 'Review Task' || 
                parentIssue.issueObject.name == 'Test Task');
        return isValid;
    }

  • Create a linkIssues.groovy file with below scrip content and put it to home folder of your JIRA installation. For the default installation on windows it is the bin folder. After that add script post function to invoke linkIssues.groovy file for Create transition. As you see in the last screen shoot this step should come after “Create the issue originally” step otherwise you will not have an issue id for linking.
    def ComponentManager componentManager = ComponentManager.getInstance();
    def customFieldManager = componentManager.getCustomFieldManager();
    def parentTaskIDCF = customFieldManager.
            getCustomFieldObject('customfield_10517');//write your own custom field id here
    def parentTaskID = issue.getCustomFieldValue(parentTaskIDCF);
    if (parentTaskID == null || parentTaskID == '') {
        return true;
    } else {
        def issueManager = ComponentAccessor.getIssueManager();
        def parentIssue = issueManager.getIssueObject(parentTaskID);
        def isParentIssueValid = parentIssue != null && 
                parentIssue.projectObject.key == issue.projectObject.key && 
                (parentIssue.issueObject.name == 'Review Task' || 
                        parentIssue.issueObject.name == 'Test Task');
        if (isParentIssueValid) {
            def issueLinkManager = ComponentAccessor.getIssueLinkManager();
            def issueLinkTypeManager = componentManager.
                    getComponentInstanceOfType(IssueLinkTypeManager.class);
            def issueLinkType = issueLinkTypeManager.
                    getIssueLinkTypesByName('Found In').get(0);
            def authenticationContext = componentManager.
                    getComponentInstanceOfType(JiraAuthenticationContext.class);
            issueLinkManager.createIssueLink(
                    issue.id, parentIssue.id, issueLinkType.id, 1L, authenticationContext.user);
        }
    }

fdfafa

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)