הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מפגש עולמות - או מדוע כדי לבצע פקודת SQL אתה לא אמור להוריד כלי של 150MB.
אחת הבעיות הגדולות ביותר של מפתח הרגיל לעבוד בסביבת לינוקס ומפתח הרגיל לעבוד בסביבת חלונות הוא לא השינוי של שפות, תוכנה או ה־API הוא שינוי של תפיסת עולם שלמה. לפיתוח חוצה פלטפורמה יש מספיק כלים טובים ונוחים להתמודד איתם:
- לפיתוח ממשקים יש לך כלים מצויינים כמו Qt - שגם בעולם חלונות הופכים למובילים. כמובן גם כלים כמו Java Swing או Java SWT הם מעולים.
- לפיתוח web - כמעט כל דבר: PHP, Rails, Django, JSP/Java אפילו Asp.Net הופך ליותר זמין בזכות (או באשמתה תלוי איך רואים) של Mono.
- פיתוח רכיבי תשתית ב־C++ עם כלים כמו Boost הופכים לשקופים, וכמובן אסור לשכוח את Java, Python, Perl ושפות רבות אחרות שנותנות SDK עשיר חוצה פלטפורמה.
אבל הבעיה עדיין נשארת פתוחה - אם אתה לא מתאמץ ולא מכיר את שני העולמות - קשה לפתח משהו שהוא ייראה טבעי ונוח בשני העולמות.
הסיפור
תוך כדי פיתוח CppDB ובניית תמיכה ב־ODBC רציתי לבדוק עבודה מול MS SQL Server בגלל הגישה "המיוחדת" שלו ל־Unicode. מה יותר פשוט:
- יש מכונה וירטואלית מוכנה.
- יש גרסת SQL Server Express 2008 חינמית.
- יש odbcunix ו־freetds מותקנים.
לא אמור להיות מסובך. מתוך אפשרויות ההתקנה בחרתי את הקטנה והפשוטה ביותר - להתקין רק את המנוע ששוקל רק 70MB בלי תוספות משוכללות כמו Management Studio ודברים מיותרים אחרים.
הורדתי, התקנתי - תוך כדי התקנה הגדרתי משתמש ניהול - בסה"כ next->next->next וזה מוכן. אחר כך הגדרתי תקשורת מעל TCP/IP הגדרתי קישוריות מ־VirtualBox ו־host הגדרתי ODBC מתחבר... לא מצליח לבצע login.
אחרי חקירה קצרה ובדיקת Event Log מתברר השמשתמש שהגדרתי בהתקנה לא מוגדר. להגדיר משתמש זה אמור להיות די פשוט (בסה"כ להריץ פקודת SQL פשוטה) אבל נפלתי במלכוד 22:
- כדי להגדיר משתמש חדש אני צריך קישוריות לבסיס הנתונים.
- כדי שתהיה לי קישוריות לבסיס הנתונים אני צריך משתמש.
אחרי חיפושים ובדיקות הבנתי שעדיין יש משתמש XP שאמור להיות מסוגל לבצע login ואפילו הצלחתי לבצע login ולהריץ שאילת עם איזשהו כלי import המגיע עם SQL Server. כל מה שנותר לי זה להתחבר לבסיס הנתונים עם משתמש XP של מתוך המכונה עצמה ולבצע login... השאלה כיצד?
הכלי שאני מכיר להתחברות הוא sql management studio ששוקל 150MB... אבל אני צריך להריד סה"כ פקודה או שניים? חייב להיות אישזהו כלי שאפשר להריץ בשורת פקודות כדי להתחבר לשרת SQL ולהריץ פקודה.
מכיוון שאני לא מכיר את Microsoft SQL Server מספיק, שאלתי שאלה ב־Serverfault:
כיצד להגדיר משתמש בשרת SQL ללא שימוש ב-Management Studio.
קיבלתי תשובה, אכן היה כלי כמו שחיפשתי, סידרתי login והצלחתי להתחבר לשרת ללא בעיות מיוחדות.
אבל זה לא מה שמעניין בסיפור, מה שמעניין זה הערות שקיבלתי על השאלה שלי: הנה דוגמאות:
Top rated(3 votes)
> It seems silly to not use
> the purpose built tools that
> come packaged with the product
> just to save a few hundred MB
Another one, very good:
> As someone who manages numerous SQL
> Server instances from Sql 2000 - 2008,
> creating a VM to throw XP (at least)
> just to run SSMS makes sense. SSMS is your
> friend..not the enemy you're making it out to be..
כיצד להסביר לאנשים האלה, שזה לא נראה לי הגיוני להוריד 150MB כדי לבצע שתי פקודות?
הבעיה במעבר בין שני העולמות זה לא כלים, זה לא שפות זה סוג החשיבה; וזה המחסום הגדול במעבר בין עולמות.
אני רואה מפתחי חלונות לא מבינים בצורך להיכנס לשורת פקודות, לא מבינים כיצד אפשר לפתח ללא IDE או לעבוד מול SQL ללא כלי משוכלל. מצד שני אני רואה את עצמי ומפתחי לינוקס אחרים נגעלים בכל פעם מחדש מה"כלים המשוכללים" שלא עובדים כמו שצריך שעושים דברים לא ברורים מאחורי הקלעים ולא מאפשרים לא לדבג בעיות בצורה שקופה, כלים שאי אפשר להריץ אותם מתוך סקריפט ועוד.
האמת... לא נכון, מרבית כלי Microsoft באים עם כלי שורת פקודות. למשל ,אני עובד הרבה יותר עם CMake+NMake+CL מאשר עם IDE של Visual C++ ואני מבין הרבה יותר טוב איך הדברים עובדים. רק שבעולם ההוא זה לא מקובל.
לך תבין! בגלל זה המעבר בין העולמות הוא הרבה מעבר למעבר בין Posix API ל־Win32 API הרבה מעבר למעבר מ־cl ל־gcc ולהפך, לעבר מ־Visual Studio ל־KDevelop או מעבר בין דיאלקט SQL של MS SQL לבין זה של PostgreSQL או MySQL.
הבעיה היא הרבה יותר עמוקה שאני לא חושב שבלי ניסיון של שנים אפשר לפצות עליה.
תגובות
לא מספיק ניסיון, לדעתי. צריך להתחיל מהבסיס - שהלימוד הבסיסי והראשוני יתרכז בכך ובחשיבות של זה, ורק מי שיודע לעשות זאת טוב בצורה כזו, יהיה לו "מותר" לפתוח IDE...
אחת הסיבות שאני מת על לזרוס (למעט העבודה של הכלים המצויינים שהוא מביא איתו), הוא שהוא "משכולל" עד כמה שאתה בוחר. כלומר אתה בוחר עד כמה קל או קשה לעבוד איתו. אתה בוחר אם בזמן ריצה אתה מחובר למסד נתונים או לא וכו' ... אתה בוחר עד כמה הסביבה תהיה פרודקטיבית בשבילך ולא הסביבה בוחרת בשבילך איך תעבוד.
זו הסיבה שאני מוצא את לזרוס כל כך פרודקטיבי, כי יש לו המון כלים והרחבות, ואני מחליט מתי ואיך אני אשתמש בהם, וגם מה שדלוק בברירת מחדל אני יכול לכבות כשזה לא נוח לי, ואם אתה מוסיף על זה את התמיכה בפיתוח מרובה סביבות ויצירת תוכנות טבעיות בכל סביבה, זה יתרון עצום.
ד"א כמו שאמרתי לך בפוסט הקודם, יש לי את כל הכלים לעבודה עם המסדי נתונים השונים כולל odbc ואם אני ממש רוצה גם אני יכול להתקין תמיכה ב MS SQL.
ועוד נקודה: אלו שמפתחים בטכנולוגיות של מייקרוסופט בלבד, לא מבינים שיש בעולם עוד כמה דברים מעבר לאפשרויות הקיימות במינשקים הגרפיים אותם מייקרוסופט פיתחה. הם לא מבינים דבר בתקשורת, בפרוטוקולים ובכל דבר אחר למעט תכונות הקיימות במינשק הגרפי בתוכנה שמייקרוסופט פיתחה. מבחינתם, "מה שמיקרוסופט לא פיתחו, לא קיים".
אלו שלומדים את הטכנולוגיות האלו, אינם לומדים לתכנת, אינם לומדים לבנות אתרים. הם לומדים "איך להשתמש בתוכנה של מייקרוסופט".
אל תגזים, אני מכיר מספיק מתכנתים מבריקים שגדלו על הדברים האלה. אבל גם מבינים דברים שמלמטה בצורה טובה.
הבעיה שהם עדיין לא מבין את העולם שלנו כמו שאני לא מבין את העולם שלהם.
עד כמה שאני יודע עבור גישה מהטרמינל לממשק הODBC בממשק CLI : tsql - osql יש גם את sqlcmd (רק שאני לא יודע עם הוא יכול להגיע לבד).
תהיה מוכן לבעיות של שינוי צורת התעבורה בין בסיסי נתונים שונים (לא רק הסינטקס משתנה) - אם אתה לא צריך לדאוג לתמיכה מתחת ל 2000 אז אתה במצב טוב.
בסוף זה מה שהשתמשתי בו וזה מה שהציעו בתשובה הקיבלתי.
הסיבה היחידה שבכלל נכנסתי לזה היא העובדה שהוא היחיד שלא תמוך ב־UTF-8 ודורש שימוש ב־Wide API, בסוף הסתבר ש־FreeTDS לא תומך בו אבל ב־XP עצמו אחרי מלחמות זה עבד.
בעבר לזה MS SQL לא ממש מעניין אותי.
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.