אודות שלמה שוורץ, מפתח תוכנה ומנכ"ל מגהסופט

קצת עליי – אודות שלמה שוורץ

שלמה שוורץ
Shlomo Schwarcz

הגעתם הנה כי אתם מחפשים איש פיתוח חזק ובעל נסיון במספר רב של עולמות ודומיינים. וזה אני 🙂

לי קוראים שלמה ואני אוהב לכתוב קוד. למעשה, אני כותב קוד למחייתי ב17 שנה האחרונות אבל מי סופר. כיום אני פרילנסר עצמאי, מעורב במספר פרוייקטים וגם מעסיק צוות קטן של מתכנתים נלהבים. אני אוהב קוד פתוח וכשאני מתכנת משהו זה בדרך כלל יהיה Full Stack, כלומר פתרון מקצה לקצה. פעם המושג הזה התייחס למי שיודע סרבר וקצת web קליינטי. היום אני מאמין שfull stack הוא הרבה יותר: זה לבחור את הלוח והחיישנים בפרוייקט IoT, לחבר אותם בפרוטוקול תקשורת מתאים, לתפור פתרון ענן כמו שצריך עם AWS וEC2 או כל ספק אחר. המידע יזרום מהDevice וכמובן מאפליקציית אנדרואיד וiOS, משם הוא יגיע לשרת. את השרת אני בדרך כלל אכתוב בnode.js אבל ב12 שנה האחרונות כתבתי בעיקר בג’אווה עם כל הפרימוורקים החביבים: Spring, Hibernate בילדים עם Maven ואני אפילו ביליתי כמה שנים עם J2EE, JSP, GWT הודעות עם JMS וגם EJB הזכור לטוב (או לרע…).

אז היום אני אעדיף node או פיתון או שילוב של שניהם. Node כי הוא קליל ומהיר וpython כי הוא פשוט מהנה לכתיבה. וגם כמובן כי יש עושר של ספריות ויכולות באופן חסר תחרות כמעט.

את המידע אני אשמור בdatabase מטבע הדברים. שנים עבדתי עם MySQL ואורקל על שלל גרסאותיו. לאחרונה העברנו הרבה פרוייקטים לmongoDB שם נהנים מהיתרונות של NoSQL ובעיקר משוחררים ממגבלות הschema והACID שיש שRDBMS רגיל. תענוג!

כמובן שביג דאטה (Big Data באנגלית נשמע טוב יותר) בשימוש אצלינו. מhadoop ומערכות Map Reduce אחרות, דרך Neo4J עבור גרפים, ועד Elastic Search ובשמו הקודם: Lucene.

הקליינט הוא סיפור בפני עצמו. אני מאלה שאוהבים גם את הצד הזה ומקדישים לו חשיבות רבה (בניגוד לנטיית חלק ממתכנתי הסרבר שמזניחים את ה"סקריפטים האלה"). בעבר כתבנו עם Jquery ורפימוורקים שונים ומשונים כמו YUI, DOJO, Sencha Ext-JS ומה לא. בשנתיים האחרונות עברנו לאנגולר 1 ומבחינתי זו ספריה מעולה. לאחרונה עברנו לangular 2 עם לא מעט חששות ובחלק מהפרוייקטים גם React JS אז אני די משייט בין העולמות האלה.

כמובן כמובן שאני כותב את הפוסט הזה על מחשב לינוקס. כל מכונות הפיתוח שלנו הם לינוקס וכך גם השרתים, מכונות הטסטים (כן, אנחנו כותבים Unit tests, חשבתם אחרת?).

אם הגעתם עד לכאן כנראה שחפרתי מספיק ואם אתם רוצים לראות כמה מהפרוייקטים והלקוחות שלי אתם מוזמנים להציץ בדף הבית או פשוט לפנות אליי בלינקדאין או במייל.

אני תמיד שמח לקבל פניות בכל עניין: התיייעצויות, שותפויות, שיתופי פעולה, פרוייקטים והצעות מעניינות אז תרגישו חופשי לפנות.

תודה,

שלמה

shlomo@megasoft.co.il

https://il.linkedin.com/in/shlomoschwarcz

Build Version אוטומטי באמצעות Maven

רוצים שכל קומפילציה/Deploy תקדם את מספר הבילד? שתמיד יהיה מספר גרסה עדכני בכל בנייה של הקוד? הנה הדרך עם Maven.

ראשית, נשתמש בפלאגין בשם buildnumber. התוסף הזה מיועד ליצור משתנה בזמן הרצת הסקריפט ולשמור אותו במשתנה סביבה (בתוך maven) לשימוש בהמשך.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.4</version>
    <configuration>
        <revisionOnScmFailure>no.scm.config.in.pom</revisionOnScmFailure>
    </configuration>
    <executions>
        <execution>xml
            <id>create-timestamp-id</id>
            <phase>validate</phase>
            <goals>
                <goal>create-timestamp</goal>
            </goals>
            <configuration>
                <timestampFormat>yyyy.MM.dd.HH.mm</timestampFormat>
                <timestampPropertyName>buildNumber</timestampPropertyName>
            </configuration>
        </execution>
    </executions>
</plugin>

כעת ניצור את הקובץ שבו נרצה לשתול את המספר הבילד שאותו נציג באפליקציה. ניצור את /static/js/version.js בספריה הראשית של הweb של הפרוייקט.

בקובץ נשים את השורה הבאה:

var version = ‘1’;

כעת נשתמש בתוסף נוסף בשם replacer שיודע להחליף טקסט בקובץ לפי RegEx:

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>replace</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <file>${project.build.resources[0].directory}/static/js/version.js</file>
        <replacements>
            <replacement>
                <token>(["'])(?:(?=(\\?))\2.)*?\1</token>
                <value>'${buildNumber}'</value>
            </replacement>
        </replacements>
    </configuration>
</plugin>

שימו לב שאנו משתמשים במשתנה buildNumber ובביטוי רגולרי שמשמעותו להחליף את הערך שבין הגרשיים הבודדים (‘’).