Freelancing

Hello people who are interesting in this post. Today, in the century of technology, most of young people try to find jobs as freelancers. In this post, I will try to be succinct in explaining why is freelancing good.

Firstly, it seems comfortable when you are at home and work remotely. What are benefits of this ? First of all it is very comfortable if you can to relax when you want, it is totally impossible at office. At work you are obliged to be 8 hours from 10:00 till 18:00 or different range (it doesn’t matter).

Then, everyone has a private life besides career and job. Sometimes there is an urgent situation when you have to leave office and be with family or solve private problem. At work it is very uncomfortable to ask to your boss about leaving office because you have a private problem. As a freelancer, when you work remotely you can leave working any time you are in a trouble and continue it later, maybe at midnight.

Finally, I think freelancing is new challenge of young people. Being freelancer helps us to be known not only our country but also abroad. It helps us to know different people and to do good thing not only locally but globally.

კერძო დაზღვევა და მისი პრობლემები

მე თქვენ მოგიყვებით პატარა ამბავს ციკლიდან, მინდა უკეთეს ქვეყანაში ცხოვრება. ევექსი • EVEX კლინიკა, რომელშიც საერთოდ აღარ მივალ. ჩემი ამბავი ასეთია:

Insurance-dice-copy.jpg

ევექსის ერთ-ერთ ფილიალში (მთაწმინდის) ჩავეწერე ნევროლოგთან კონსულტაციაზე. მისულს მითხრეს, რომ შეცდომა დაუშვა იმედი L • Imedi L-მა ჩაწერისას და დღეს ის კონკრეტული ექიმი არ იქნებოდა. ამიტომ შემომთავაზეს სხვა ექიმი, რომელსაც დავთანხმდი მხოლოდ და მხოლოდ იმის გამო, რომ დროში შეზღუდული ვიყავი და სხვა დღეს ვერ მივიდოდი. კონსულტაციის დაწყებიდან 5 წუთში ჩემთვის სასურველი ექიმი მოვიდა. კონსულტაციის დასრულების შემდეგ რეგისტრატურაში მივედი და ვუთხარი თუ რატომ შემიყვანეს შეცდომაში. გოგონამ შემიყვანა მენეჯერთან, რომელსაც ავუხსენი ის, რომ კლინიკამ დაუშვა შეცდომა და ვხოვდი უბრალოდ ჩემთვის სასურველ ექიმთან უფასო კონსულტაციას დღესვე. მენეჯერმა შეცდომა აღიარა და გამოსწორების გზა მარტივად მონახა, სიტყვა “ბოდიში”. ჩემი დამარწმუნებელი მაგალითები რომ მოვუყვანე, უბრალოდ მენეჯერმა ოპონირება ვერ გამიწია და მეტიც, ოთახიდან გამოსულს ჩუმად მომესმა, რომ ერთმანეთში ლაპარაკობდნენ “ჩვენი შეცდომაა და ეს ბიჭი მართალია და სწორი მოთხოვნა აქვს”-ო. მენეჯერის ოთახიდან გამოვედი სიტყვებით “აზრი არ აქვს თქვენთან ლაპარაკს და ნერვების შლას”. ამ დროს გამაჩერა კლინიკის ადმინისტრაციის უფროსმა და მკითხა თუ რა მოხდა, მეც დაღლილმა ხელმეორედ ავუხსენი სიტუაცია და შემიყვანა თავის ოთახში. იქ დაიწყეს ლაპარაკი იმაზე, რომ თუ ვიყავი ექიმით უკმაყოფილო. გარკვევით ავუხსენი, რომ არ აქვს აზრი ექიმის კმაყოფილი ვიყავი თუ არა, მე ვიყავი ჩაწერილი სხვა ექიმთან და თქვენივე შეცდომის გამო ვერ მივედი იმასთან მეთქი. ავუხსენი, რომ დაზღვევაში ვიხდი ფულს და შესაბამის სერვისს ვერ ვიღებდი და ექიმით აპელირება უბრალო თავისმართლება იყო. მითხრეს, რომ ბოდიშს იხდიდნენ, წუხდნენ და მეორედ არ განმეორდებოდა იგივე, თუმცა ხაზგასმით ვუთხარი, რომ მეორედ მე თქვენს კლინიკაში არ მოვალ მეთქი, ასევე მაგალIთად მოვუყვანე ის შემთხვევა, როცა ამავე ქსელის სხვა ფილიალში ნევროლოგმა ერთ-ერთ ჩემს მეგობარს რადიკალურად სხვა და შეცდომითი დიაგნოზი დაუსვა და სწორედ ამის გამო ჰქონდა ჩემთვის ექიმს მნიშვნელობა. საბოლოოდ წამოვედი იმ სიტყვებით, რომ ამ კლინიკაში საერთოდ არ მივალ. კლინიკა, რომელიც თავის შეცოდმაზე პასუხისმგებლობას ვერ იღებს, არ უნდა არსებობდეს. დიახ, უნდა დაიხუროს. შეცდომისგან არავინაა დაზღვეული და ესეც ვუთხარი, თუმცა ასეთი მარტივი შემთვევიდან რომ ყველაზე მარტივ გამოსავალს, რომელსაც მე ვთავაზობდი, ვერ იპოვი, უბრალოდ სირცხვილია.

წამოსვლიდან 1 საათში, როცა სამსახურში დავბრუნდი, დამირეკა ამავე ფილიალის მენეჯერმა და მითხრა, რომ უფასოდ გამატარებდნენ ჩემთვის სასურველ ექიმთან კონსულტაციას. მას გასაგებად ავუხსენი, რომ სამსახურში დავბრუნდი და ამდენჯერ ვეღარ გავენთავისუფლებოდი, გარდა ამისა, რამდენიმე საათის წინანდელი გამოცდილების გამო არ მქონდა სურვილი მანდ მისვლის. კიდევ ერთხელ არგუმენტირებულად ავუხსენი თავისი შეცდომა და მივუთითე იმაზე, რომ არანაირი გართულება არ მოხდებოდა თუ მაშინვე მიიღებდნენ იმ გადაწყვეტილებას, რომლითად დამირეკეს უკვე 1 საათის მერე.

განვლილი გამოცდილების გათვალისწინებით, ვთვლი, რომ დაზღვევა უბრალოდ ბიზნესადაა ამ ქვეყანაში ქცეული (კერძო დაზღვევაზე ვსაუბრობ). მე მინდა კარგ, განვითარებულ, მოწესრიგებულ ქვეყანაში ცხოვრება და ამის გამო ბრძოლას ვაპირებ, თუმცა ხალხის მენტალიტეტში უპასუხისმგებლობა ისე გამჯდარი რომ რთული ბრძოლა მელის წინ. გიწვევთ ყველას, ვისაც სურვილი გაქვთ განვითარების, ვისაც გინდათ მოწესრიგებული იყოს ყველა სერვისი.  ჯერჯერობით ისეთი სიტუაციაა, რომ მეტეორს ვიმსახურებთ.

HashMap Java 8-ში

ეს პოსტი ერთ-ერთ ბლოგზე ვნახე და ვიფიქრე კარგი იქნებოდა თუ გადავთარგმნიდი და გავუზიარებდი ჩემი ბლოგი მკითხველებს.

როგორც ვიცით Java 8-მ წინა ვერსიებთან შედარებით პროგრესი განიცადა და ბევრი რამ გააუმჯობესა. საკმაოდ ბევრი კლასი განახლდა, ამ მხრივ არც HashMap ყოფილა გამონაკლისი. ამ პოსტში განხილულია ერთ-ერთი მნიშვნელოვანი ფუნქცია რომელიც Java 8-ში გამოჩნდა hash კოდების კოლიზიისას.

რა არის ყველაზე ამრტივი გზა რომ მოვახდინოთ კოლიზია HashMap-ში ? რა თქმა უნდა, უნდა შევქმნათ კლასი რომელსაც ექნება თავისი hashCode() ფუნქცია, რომელიც დააბრუნებს მუდმივ მნიშვნელობას. გასაუბრებებზე კანდიდატები ხშრად უშვებენ შეცდომას, რომ map შეიცავს მხოლოდ და მხოლოდ ერთ ელემენტს, რადგან ძველი ჩანაწერს ყოველთვის გადაეწერება ახალი ერთნაირი hash კოდის შემთხვევაში. რა თქმა უნდა, ეს არ არის სიმართლე. Hash კოლიზია არ იწვევს ჩანაწერების ერთმანეთზე გადაწერას, ეს ხდება მაშინ და მხოლოდ მაშინ როცა ორი ელემენტი ტოლია equals() ფუნქციით. ჩანაწერები არა ტოლი გასაღებებით და ერთი და იგივე hash კოდით იქნება ერთი და იგივე hash კალათაში. სურათზე მოცემულია მაგალითი Java 7-ში.

aa

დავწეროთ პატარა აპლიკაცია, რომელიც მოახდენს კოლიზიის სიმულაციას. მაგალითი ცოტა გაზვიადებულია, რადგან მიზანია, რომ დააგენერიროს რაც შეიძლება მეტი კოლიზია, თუნდაც იმაზე მეტი რაც რეალურ აპლიკაციებშია, თუმცა ეს საჭიროა შედეგის დასამტკიცებლად.

მაგალითში, ვიყენებთ Person ობიექტს როგორც map-ის გასაღებს, ხოლო მნიშვნელობები არის String-ები. ვნახოთ იმპლემენტაცია Person ობიექტის.


public class Person {

private String firstName;

private String lastName;

private UUID id;

public Person(String firstName, String lastName, UUID id) {

this.firstName = firstName;

this.lastName = lastName;

this.id = id;

}

@Override

public int hashCode() {

return 5;

}

@Override

public boolean equals(Object obj) {

// ... pertty good equals here taking into account the id field...

}

}

ახლა კი დავაგენერიროთ კოლიზიები


private static final int LIMIT = 500_000;

private void fillAndSearch() {

Person person = null;

Map<Person, String> map = new HashMap<>();

for (int i=0;i<LIMIT;i++) {

UUID randomUUID = UUID.randomUUID();

person = new Person("fn", "ln", randomUUID);

map.put(person, "comment" + i);

}

long start = System.currentTimeMillis();

map.get(person);

long stop = System.currentTimeMillis();

System.out.println(stop-start+" millis");

}

როგორც ამ პოსტის დედანის ავტორი გვეუბნება, მან ეს კოდი გაუშვა საკმაოდ კარგ მანქანაზე და map-ის შევსებას მოუნდა 2.5 საათი, ხოლო ბოლო ძებნას დასჭირდა ~40 მილიწამი.  ახლა ყოველგვარი ახსნა-განმარტების გარეშე Person კლასში შევიტანოთ პატარა ცვლილება: მოვახდინოთ Comparable<Person>-ის იმპლემენტაცია და დავამატოთ შემდეგი მეთოდი


@Override

public int compareTo(Person person) {

return this.id.compareTo(person.id);

}

ახლა გავუშვათ map-ის შემვსები მეთოდი კიდევ ერთხელ. ისევე ამ პოსტის დედანის ავტორის ინფორმაციით, map-ის შევსებას დასჭირდა 1 წუთამდე, ხოლო ბოლო ძებნას მოუნდა თითქმის 0 მილიწამი. ასე რომ ამან დაახლოებით 150-ჯერ ააჩქარა აპლიკაცია.

 

როგორც დასაწყისში აღვნიშნეთ, Java 8-ში ბევრი რამ გაუმჯობესდა. Java 7-ში ისეთი ჩანაწერები, რომლების კოლიზიაც მოხდებოდა ინახებოდა LinkedList-ად bucket-ში. Java 8-დან , თუ კოლიზიების რიცხვი მეტია კონკრეტულ ზღურბლზე (threshold) (8) და map-ის მოცულობა მეტია სხვა ზღურბლზე (threshold) (64), HashMap-ის იმპლემენტაცია გადაიყვანს LinkedList-დან ორობით ხეში.

ისმის კითხვა თუ რატომ მივიღეთ ასეთი შედეგები რაც მივიღეთ. იმიტომ რომ non-comparable გასაღებების შემთხვევაში რეზულტატი ხე იყო არაბალანსირებული, ხოლო comparable ის იყო უკეთ ბალანსირებული  ? არა. ხის იმპლემენტაცია HashMap-ში არის წითელ-შავი ხეები, რაც გულისხმობს იმას, რომ ის ყოველთვის ბალანსირებულია. მაშინ ისმის კითხვა ? აბა საიდან მივიღეთ ასეთი დიდი განსხვავება ? როცა HashMap ცდილობს იპოვოს ახალი ჩანაწერისთვის ადგილი ხეში, პირველ რიგში ადარებს მიმდინარე და ახალი მნიშვნელობები არის თუ არა ადვილად შესადარებელი (Comparable interface) . უკანასკნელ შემთხვევაში, ის უბრუნდება შესადარებელ მეთოდ tieBreakOrder(Object a, Object b)ს. ეს მეთოდი ცდილობს პირველად შეადაროს კლასის სახელით, და შემდეგ იყენებს System.identityHashCodeს. როცა გასაღები იმპლემენტირებას უკეთებს Comparable-ს, პროცესი არის გაცილებით მარტივი. გასაღები თვითონ განსაზღვარს როგორ უნდა შეედაროს სხვა გასაღებს, რაც მთლიან ჩასმა/ამოღების ოპერაციებს აჩქარებს. უნდა აღინიშნოს, რომ იგივე tieBreakOrder  გამოიყენება, როცა ორი Comparable გასაღები არის ტოლი compareTo მეთოდზე დაყრდნობით (ანუ ეს compareTo  მეთოდი აბრუნებს 0-ს).

 

Google Matrix For PageRanking

Google Matrix არის სტოქასტური მატრიცის კერძო შემთხვევა, რომელსაც გუგლი იყენებს PageRank-ის ალგორითმში. მატრიცა წარმოადგენს გრაფს, რომლის წიბოებიც წარმოადგენენ კავშირებს წიბოებს შორის. თითოეული გვერდის რანკი/რეიტინგი შეიძლება დაგენერირდეს იტერაციულად Google Matrix-დან ახარისხების მეთოდით.

 

რომ დავაგენერიროთ Google Matrix G, პირველ რიგში უნდ ადავაგენერიროთ მოსაზღვრეობის მატრიცა A, რომელიც წარმოადგენს კავშირებს გვერდებს ან წვეროებს (nodes) შორის. ჩავთვალოთ, რომ გვაქვს N ცალი გვერდი, ჩვენ შეგვიძლია შევავსოთ A შემდეგი წესის მიხედვით:

  • A მატრიცის ელემენტი A[i][j] იქნება 1-ის ტოლი თუ კვანძ j-ს აქვს კავშირი/ლინკი კვანძ i-თან, წინააღმდეგ შემთხვევაში იქნება 0-ის ტოლი. ეს არის კავშირების მსოაზღვრეობის მატრიცა.
  • დაკავშირებული მატრიცა S წარმოადგენს გადასვლებს მოცემული ქსელის მარკოვის ჯაჭვში. S იგება A-გან , j სვეტის ელემენტების გაყოფით k[j]-ზე, სადაც k[j] არის j წვეროდან გამავალი კავშრების/ლინკების ჯამური რაოდენობა. სვეტები, რომლებსაც აქვს 0-ები, ანუ არ აქვს გამავალი კავშირები, იცვლება მუდმივი მნიშვნელობით 1/N

as

საბოლოოდ Google Matrix G შეიძლება გამოვსახოთ S-ის გამოყენებით

a

სადაც b არის ჩახშობის კოეფიციენტი. როგორც წესი S არის მეჩხერი მატრიცა და თანამედროვე მიმართული ქსელისთვის მას აქვს დაახლოებით 10 არანულოვანი ელემენტი თითოეულ სვეტში ან სტრიქონში, აქედან გამომდინარე დაახლოებით 10N გადამრავლების ოპერაციაა საჭირო G მატრიცის ვექტორზე გადამრავლებისას.

#აჩუქეერთიდღეგიორგის

გამარჯობა ჩემო მკითხველო,

ეს ის პოსტია, რომლის მსგავსიც ამ ბლოგზე არასდროს დამიწერია, მაგრამ ახლა გადავწყვიტე რომ დავწერო და იმედს ვიტოვებ, რომ მსგავში შინაარსის პოსტების დაწერა აღარ მომიწევს, რადგან ამბავი, რომელსაც მოკლედ მოგიყვებით, არც ისე სასიამოვნო, მეტიც ძალიან მძიმე მოსასმენია.

ეს ამბავი ეხება ერთ-ერთ ჩემს ნაცნობს. მე საკმაოდ პატარა ვიყავი. ფეხბურთზე დავდიოდი საფეხბურთო სკოლა იმედში, მეკარე ვიყავი და იმ დროს თბილისის დინამოს ბავშვთა აკადემიის 1990 წლიანებში იმედიდად ახალი გადასული იყო მეკარე გიორგი ლოსაბერიძე. ამის შემდეგ გიორგი დინამოს დუბლებშიც თამაშობდა. მასთან გარდა “კოლეგიალური” ურთიერთობისა, მეგობრული ურთიერთობაც მქონდა. მაშინ ჯერ კიდევ ბავშვს, თავის გამოცდილებას მიზიარებდა ხოლმე და რაღაცებს მასწავლიდა კიდეც. მე მეტს აღარ მოვყვები და ვიტყვი ერთს, რომ დღეს გიორგის ჩვენი დახმარება ესაჭიროება.

26 წლის გიორგი ლოსაბერიძემმ, 4 აპრილს, იოსებიძის ქუჩაზე მდებარე საფეხბურთო სტადიონზე, ფეხბურთის თამაშის დროს თავის მძიმე ტრავმა მიიღო. ტრავმის მიღების შემდეგ უგონო მდგომარეობაში მიიყვანეს კლინიკაში, სადაც ორი ტრეპანაცია გაუკეთდა. მას შემდეგ, გიორგი ღრმა კომაშია და ამჟამად ინგოროყვას მაღალტექნოლოგიური საუნივერსიტეტო კლინიკის რეანიმაციულ განყოფილებაში გადის მკურნალობას.
გიორგის დიაგნოზი ძალიან მძიმეა – ქალა-ტვინის მძიმე ტრავმა. მარცხნივ საფეთქლის წილის სუბდურული ჰემატომა, დაჟეჟილობა. ტრავმული სუბარაქნოიდული ჰემორაგია,თავის ტვინის შეშუპება. გულ-სისხლღძარღვთა და სუნთქვის მწვავე უკმარისობა. ორმხრივ სუბდურული ჰემატომების ევაკუაციის დეკომპრესიული ტრეპანაციის შემდგომი პერიოდი.
სამწუხაროდ ექიმები ამ ეტაპზე ამ მდგომარეობის სამომავლო პროგნზირებას ვერ ახერხებენ. აქედან გამომდინარე, ვერ ხერხდება იმის დადგენა, თუ რა დრო არის საჭირო მკურნალობასა და რეაბილიტაციისათვის.
გიორგისა და მისი ოჯახის უამრავი ახლობელი გამოთქვას დახმარების სურვილს. ამიტომაც გადავწყვიტეთ ახლა, როდესაც ყველაზე უფრო ესაჭიროებათ მათ ეს დახმარება შევქმნათ ეს გვერდი სადაც მითითებულია გიორგის დედის, ეკას საბანკო ანგარიში. ნებისმიერი თანხა გიორგისა და მისი ოჯახისათვის ძალიან მნიშვნელოვანია !
მადლობას გიხდით გულისხმიერებისთვის.
სს თი-ბი-სი ბანკი
GE10TB7009026365100063
ეკატერინე გილაშვილი-ლოსაბერიძე

‪#‎აჩუქეერთიდღეგიორგის‬

 

„შეთქმულების თეორია“ ანუ სიტყვას ამოფარებული ურთიერთობა

ერთი შეხედვით „შეთქმულების თეორია“ თავისი განმარტების მიხედვით ასოცირდება პოლიტიკასთან, მაგრამ ის რასაც ამ პოსტში დავწერ არაფერ კავშირშია პოლიტიკასთან.

ადამიანები ყველაფერს აკეთებენ, რათა საკუთარ მიზანს მიაღწიონ. ეს ასეც უნდა იყოს, მაგრამ ეს უნდა მოხდეს ადამიანობის და სინდისის ფარგლებში. ის რაც ცდება ადამიანობის და სინდისის პრინციპებს, უკვე ბინძური თამაშია. ე.წ. „შეთქმულების თეორიის“ ერთ-ერთი სახე არის „მეგობრობა“. სწორედ ეს არის ის სიტყვა, რომელსაც უბრალოდ იყენებენ საკუთარი მიზნების მისაღწევად.

ცხოვრებისეული გამოცდილებიდან რამდენიმე ტიპის ადამიანი შემხვედრია:

20

ერთნი არიან ადამიანები, რომლებიც მეგობარს გიწოდებენ, ცდილობენ ახლო ურთიერთობა ჰქონდეთ შენთან, მაგრამ როგორც კი იმ შედეგს მიაღწევს, რომელსაც შენგან გამოელის, ახლო ურთიერთობა ქრება.

არიან ასევე ადამიანები, რომლებიც ნიღბად ასევე მეგობრობას იყენებენ, აქვთ შენთან ურთიერთობა, გეკითხებიან მუდმივად იმას, თუ რა ხდება ახალი, იგებენ სიახლეებს და მერე მას ავრცელებენ დამახინჯებული სახით. ესენი არიან ადამიანები, რომლებიც წარმოადგენენ ე.წ. ჭორიკანათა ჯგუფს და ავრცელებენ დამახინჯებულ ინფორმაციას იმ განზრახვით, რომ თვითონ ვიღაცებთან ქულები ჩაიწერონ, ხოლო შენ ან დაგძირონ ან უბრალოდ ცუდი რეპუტაცია შეგიქმნან.

ადამიანთან შემდეგი ჯგუფი არიან ისინი, ვინც ერთი შეხედვით თითქოს გუნდურობის პრინციპით მოქმედებს, მაგრამ გუნდში ლიდერობის მოპოვებისთვის ირჩევს ისეთ ტაქტიკას, რომელიც როგორც ზემოთ აღვნიშნე ცდება ადამიანობის და სინდისის პრინციპებს. ისინი ცდილობენ შესაბამის დროსა და შესაბამის ადგილას ისეთი ინფორმაციის, ან თუნდაც ვარაუდის მტკიცებას, რომელზეც არც კი უფიქრია და მეტიც, ინფორმაცია საერთოდ არ აქვს. ამით ეს ადამიანები ცდილობენ, რომ თავი გამოიჩინონ და შენ დაგჩრდილონ და ჩაგძირონ.

და რაშია გამოსავალი ?! ერთია აჰყვე მათ თამაშს და შენც ეთამაშო, თუმცა ამ შემთხვევაში შენც გაიგივებული ხარ იგივე ტიპის ადამიანებთან და ფაქტობრივად შენც ცდები ადამიანობის და სინდისის პრინციპებს. და მეორე, უბრალოდ გამოიჩინო სიძლიერე და ასეთ პიროვნებებს უთხრა ყველაფერი და ისიც, რომ მათთან ურთიერთობას არ არ აპირებ არანაირი ფორმით.

ფაილის დამალვა სურათში

როგორი გასაკვირიც არ უნდა იყოს, ფაილის ან ფაილების სურათში დამალვა შესაძლებელია და ეს მარტივი გასაკეთებელია JPEG, GIF და PNG ფორმატის სურათის შემთხვევაში.

ერთი წინადადებით რომ ვთქვათ, სურათის შიგთავსს (ბაიტებს) ბოლოში ემატება საიდუმლო ფაილის შიგთავსი. მიღებულ ფაილს კომპიუტერი მაინც ფოტოსურათად აღიქვამს.

Read More »