האשכול מסומן כ"פתור", מה היה בסוף?
תלחץ על הוי הירוק ותגיע לתשובה הנכונה.
פורסם במקור בפורום CODE613 ב09/03/2014 19:37 (+02:00)
האשכול מסומן כ"פתור", מה היה בסוף?
תלחץ על הוי הירוק ותגיע לתשובה הנכונה.
פורסם במקור בפורום CODE613 ב09/03/2014 19:37 (+02:00)
אפשרות ראשונה ברשת פנימית.
מחברים את כל המחשבים לראוטר אחד. ומגדירים למחשב ששם נמצא הsqlserver . כתובת ip קבוע מגדירים כתובת שמתחת לטווח כתובת של הקצאת ip אוטומטי (dhcp) .
ואז מגדירים בחיבור את הכתובת ip של השרת הזה.
אפשרות שניה להציב את זה ברשת באינטרנט. עדיף ע"י שרת vps או יעודי עם ip יחודי. או ע"י no-ip במקרה שהשרת עומד מאחורי ראוטר אז צריך לעשות לו הפנית פורטים בגלל שלראוטר יש כתובת חיצונית אחת ממלא אם הוא מקבל חבילה שפותחת את פרוטוקול tcp. הוא לא יודע לאיזה מחשב להעביר את זה. בגלל שלראוטר יכולים להיות מחוברים כמה מחשבים. בשביל זה עושים הפנית פורטים שמגדירים שאם נפתח tcp בפורט מסויים זה ילך למחשב מסויים לפי הip שלו או לפי השם שלו. את זה עושים בהגדרות של הראוטר.
פורסם במקור בפורום CODE613 ב03/03/2014 16:12 (+02:00)
לגבי הרעיון עם BASE 64, השאלה אם מי שמשנה את התוכן לא ישנה גם את הBASE 64 (וזה באמת כבר לא שייך למשתמש הרגיל, אני דן כאן לגוף העניין של חתימה דיגיטלית בHTML), זה יכול להיות רעיון אדיר, אם נשתמש גם במפתח פרטי וציבורי + הצפנה.
אני דיברתי על חתימה אלקטרונית תראה ששמתי שם גם את סוג האלגוריטם. שזה הכי טוב בחתימה דיגיטלית. זה אותו סוג של חתימה כמו הביטקוין.
למה צריך + הצפנה.
אני יודע שרשות המיסים יש להם אפשרות לשלוח אילהם מסמכים חתומים בחתימה דיגיטלית. זה אומר שאתה קונה כרטיס חכם. כמו סים. שיש עליו מפתח פרטי. ואתה נותן את המפתח הציבורי לרשות המיסים. ואז הם יכולים לבדוק שבאמת זה אתה שחתמת על המסמך.
אולי אפשר להרחיב את זה ולעשות שאפשר לחתום על html בשיטה שאני אמרתי. ואז לא יהיו צריכים את הpdf הקניייני :lol: .
לגבי השאלה המקורית, בהנחה שבאמת מדובר בקבלה (ואני לא נכנס כאן לפיתרון המצויין שמג'יקוד בהיא, אלא לעצם העניין) לא יותר נכון ליצור את הקובץ על השרת ולהביא אותו למכשיר במקום להסתמך על דברים שיעבדו או לא על המכשיר?
נראה לי שזה פרוייקט גמר. אז אל תשאל שאלות.
פורסם במקור בפורום CODE613 ב04/03/2014 13:27 (+02:00)
חוקי מס הכנסה כתובים כאן והטעם שלא יוכלו לזייף מסמכים. למעשה מס הכנסה לא יודעים שכל קובץ אפשר לשנות, כל ערך במסד נתונים ניתן לשינוי, או שהם בונים על זה שמתכנתים מרוויחים מעט מידי ואין להם זמן לזייף מסמכים :lol: :lol: :lol:
בpdf כנראה יש מנגנון חתימה אלקטרונית מובנה. אולי זה הטעם.
עלה לי רעיון לעשות בhtml תקן של חתימה אלקטורנית על מקטעים
הרי כל מקטע הולך ככה
<html> תוכן</html>
אפשר לעשות מאפיין שיכיל את התוכן של החתימה ב base64 למשל ככה
<html signature="YWRzZ2dycnJycnJycnJycnJycnZhZHNkdmFmZ2hldGh3ZQ==" signature-algorithm="secp256k1">
תוכן
</html>
בעצם זה חתימה לתוכן שמכיל ה html
ואם התוכן לא זהה לחתימה אז אפשר לדעת שנעשה שינוי.
פורסם במקור בפורום CODE613 ב26/02/2014 18:35 (+02:00)
תנסו להכניס לכרטיס sd של האנדרואיד. את פונט אריאל.
ולעשות ככה.
BaseFont unicode = BaseFont.createFont(Environment.getExternalStorageDirectory().getAbsolutePath() + "/arial.ttf",
BaseFont.IDENTITY_H , BaseFont.EMBEDDED);
תגידו מה יוצא מזה.
פורסם במקור בפורום CODE613 ב26/02/2014 14:44 (+02:00)
ואגב פעם הבאה שאתם שמים קוד.
תבחרו תחביר ככה לדוגמא.
כדי שהקוד יהיה ברור.
private void createPdf() {
String emailAddress[] = {transaction.getEmail(),company.getMail()};
createPDF();
File externalStorage = Environment.getExternalStorageDirectory();
Uri uri = Uri.fromFile(new File(externalStorage.getAbsolutePath() + "/PDF/okTransaction.pdf"));
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, emailAddress);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "OK Transaction");
emailIntent.putExtra(Intent.EXTRA_TEXT, transaction.getName());
emailIntent.setType("application/pdf");
emailIntent.putExtra(Intent.EXTRA_STREAM, uri );
startActivity(Intent.createChooser(emailIntent, "Send email using:"));
}
public void createPDF()
{
Document doc = new Document();
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/PDF";
File dir = new File(path);
if(!dir.exists())
dir.mkdirs();
Log.d("PDFCreator", "PDF Path: " + path);
File file = new File(dir, "okTransaction.pdf");
FileOutputStream fOut = new FileOutputStream(file);
PdfWriter.getInstance(doc, fOut);
//open the document
doc.open();
/* Create Paragraph and Set Font */
Paragraph p1 = new Paragraph("אישור עסקה");
/* Create Set Font and its Size */
Font paraFont= new Font(Font.HELVETICA);
paraFont.setSize(16);
p1.setAlignment(Paragraph.ALIGN_CENTER);
p1.setFont(paraFont);
//add paragraph to document
doc.add(p1);
Paragraph p2 = new Paragraph(company.getUsername()+","+company.getMerchantNum());
paraFont= new Font(Font.HELVETICA);
paraFont.setSize(14);
p2.setAlignment(Paragraph.ALIGN_CENTER);
p2.setFont(paraFont);
doc.add(p2);
PdfPTable table=new PdfPTable (2);
table.setWidths(new float[]{2.6f, 2.6f});
Font font = new Font(Font.HELVETICA, 14, Font.BOLD, harmony.java.awt.Color.BLACK);
PdfPCell cell = new PdfPCell(new Phrase("HMKCODE.com - iText PDFTable Example",font));
cell.setColspan(2);
PdfPCell cell1 = new PdfPCell(new Phrase(company.getUsername()+","+company.getMerchantNum(),font));
// Paragraph pp=new Paragraph("מספר קבלה");
// BaseFont unicode = BaseFont.createFont("c:/windows/fonts/arial.ttf", BaseFont.IDENTITY_H , BaseFont.EMBEDDED);
// Font fontHebrew = new Font(unicode, 12, Font.NORMAL);
// pp.setAlignment(Paragraph.ALIGN_CENTER);
// pp.setFont(fontHebrew);
// table.addCell(pp);
table.addCell("מספר קבלה");
// table.addCell(new String(("מספר קבלה").getBytes(), "UTF-16"));
table.addCell("0");//לשנות מספר חשבונית
table.addCell("שם הלקוח");
// String data = "\u092a\u093e\u0932\u094d\u092a\u093e\u0915\u093e \u092c\u0928\u094d\u0926\u0940\u0939\u0930\u0942 \u0915\u093e\u0930\u093e\u0917\u093e\u0930\u092d\u093f\u0924\u094d\u0930\u0948 \u0905\u0938\u0941\u0930\u0915";
// byte[] bute = null;
// String asd = null;
// bute = data.getBytes("מייל");
// try {
// asd= new String(bute, "UTF-8");
//
// System.out.println(asd);
// } catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// table.addCell(asd);
table.addCell(transaction.getName());
table.addCell("mail");
table.addCell(transaction.getEmail());
// table.addCell("טלפון");
table.addCell("phone");
table.addCell(transaction.getPhone());
// table.addCell("כרטיס שמספרו");
table.addCell("Numbered card");
table.addCell((transaction.getCreditNum().substring(transaction.getCreditNum().length()-4)));
// table.addCell("חברת האשראי");
table.addCell("Credit card company");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap bitmap = null ;
switch (transaction.getImgCredit()) {
case 1:bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(), R.drawable.isracard);break;
case 2:bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(),R.drawable.visa);break;
case 3:bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(),R.drawable.diners);break;
case 4:bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(),R.drawable.amex);break;
case 6:bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(),R.drawable.leumicard);break;
default:
break;
}
bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , stream);
Image myImg = Image.getInstance(stream.toByteArray());
myImg.setAlignment(Image.MIDDLE);
table.addCell(myImg);
// table.addCell("סוג עסקה");
table.addCell("Type of transaction");
switch (Integer.parseInt(transaction.getTypeTrans())) {
case 01: table.addCell(" Required deal");break;
case 51: table.addCell("Right deal");break;
// case 01: table.addCell(" עסקת חובה");break;
// case 51: table.addCell("עסקת זכות");break;
default:
break;
}
// table.addCell("סכום עסקה");
table.addCell("Transaction amount");
table.addCell(transaction.getPrice().toString());
// table.addCell("סוג תשלום");
table.addCell("Type of Payment");
switch (Integer.parseInt(transaction.getTypeCredit())) {
// case 1:table.addCell("רגיל");break;
// case 6:table.addCell("קרדיט");break;
// case 8:table.addCell("תשלומים");break;
case 1:table.addCell("Standard");break;
case 6:table.addCell("Credit");break;
case 8:table.addCell("Payments");break;
default:
break;
}
// table.addCell("מספר תשלומים");
table.addCell("Number of payments");
table.addCell(transaction.getNumPayments()+"");
// table.addCell("תשלום ראשון");
table.addCell("Downpayment");
table.addCell(transaction.getFirstPay()+"");
// table.addCell("חתימה");
table.addCell("Signature");
table.addCell("Signature ccc");
doc.add(table);
//set footer
} catch (DocumentException de) {
Log.e("PDFCreator", "DocumentException:" + de);
} catch (IOException e) {
Log.e("PDFCreator", "ioException:" + e);
}
finally
{
doc.close();
}
}
פורסם במקור בפורום CODE613 ב25/02/2014 19:44 (+02:00)
מה זה לא עבד?
הייתה שגיאה?
יש לכם פונט בתוך האנדרואיד (לא במחשב הפיתוח) שתומך עברית?
פורסם במקור בפורום CODE613 ב25/02/2014 19:41 (+02:00)
@magicode
אני לא יודע מה המטרה של השליחה של הpdf אבל תשקלו אולי לשלוח ישר בתוך הhtml של המייל את הנתונים. זה לדעתי יותר קל מלבנות pdf וגם אין בעיה שם עם עברית.זה קבלה, ולא כ"כ פשוט לפי חוקי מס הכנסה ליצור את זה עם HTML, כי אפשר לשנות את הקובץ.
אא"כ ליצור HTML, ואז לסגור את הקובץ לPDF.
איפה כתובים החוקים האלו. ומה הטעם.
פורסם במקור בפורום CODE613 ב25/02/2014 17:17 (+02:00)
אני לא יודע מה המטרה של השליחה של הpdf אבל תשקלו אולי לשלוח ישר בתוך הhtml של המייל את הנתונים. זה לדעתי יותר קל מלבנות pdf וגם אין בעיה שם עם עברית.
פורסם במקור בפורום CODE613 ב25/02/2014 15:08 (+02:00)
לפי מה שמצאתי באינטרנט. המחלקה זה http://itextpdf.com/
יש שם דוגמא איך לעשות שיעבוד unicode.
http://itextpdf.com/examples/iia.php?id=199
ראיתי בקוד שניסתם להשתמש עם BaseFont.createFont . אבל לא ברור לי איך יש כתובת כזאת
"c:/windows/fonts/arial.ttf" באנדרואיד.
אנדרואיד מבוסס על לינוקס וכל הכתובות שלו מתחילות ב / .אין כזה דבר c:.
לפי מה שמצאתי באינטרנט התקיה ששם נמצא הפונטים באנדרואיד זה.
/system/fonts
פורסם במקור בפורום CODE613 ב25/02/2014 15:03 (+02:00)
אם תכתבו לנו באיזה מחלקה אתם משתמשים כדי ליצור את ה pdf אולי נוכל לעזור.
פורסם במקור בפורום CODE613 ב24/02/2014 19:21 (+02:00)
יש לי חבר שכתב אפליקציה לסמארטפון עם וובסרויס, אתה שולח לווב סרוויס - והווב סרוויס מורה למכשיר (הטרייף)שלו לשלוח.
אהבתי את הרעיון.
פורסם במקור בפורום CODE613 ב19/02/2014 13:28 (+02:00)
(נראה לי,[אני לא בטוח] שדרופבוקס משתמשים בSQL למימוש הענן שלהם)
לי זה ממש לא נראה. שהם משתמשים בSQL.
אולי בזה.
http://he.wikipedia.org/wiki/Hadoop
או משהו בסגנון.
פורסם במקור בפורום CODE613 ב16/02/2014 17:45 (+02:00)
טוב אז כנראה הבעיה נגרמת בגלל שהקרנל משנה את הפורט בשכבת network layer .
יעוין פה.
http://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
אבל מצאתי דרך לפתוח סוקט שישתמש ישר בשכבת link layer .
ככה פותחים אותו.
socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
זה מצריך להגדיר interface ולהדגיר כתובות mac כי בשכבה הזאת אין ניתוב אוטמטי.
פורסם במקור בפורום CODE613 ב18/02/2014 14:54 (+02:00)
אז בוינדוס זה גם לא יתקמפל, נכון ?
אגב אם אני רוצה להתקין את לינוקס [במחשב וירטואלי] איך עושים את זה?
יכול להיות שזה יתקמפל אני לא יודע.
אם אתה רוצה להקין על וירטואלי אני חושב שזה הדרך הכי טובה.
תוריד את התוכנה הזאת.
http://www.vmware.com/products/player
אני חושב שהיא הכי מהירה בוירטואלי.
פה אתה יכול להוריד בחינם
http://www.vmware.com/go/downloadplayer
אם אתה רוצה משהו שזה קוד פתוח תוריד את זה.
https://www.virtualbox.org/
את הiso של לינוקס מפה.
http://www.linuxmint.com/
אני ממליץ על ההפצה הזאת לדעתי זה הפצה ממש טובה.
קח את גירסת קינמון.
ב vmware אתה יוצר שם מכונה חדשה מגדיר לה בדיסקים את ה iso וזה ממשק פשוט להתקנה כמו וינדוס.
אפשר להתקין גם בעברית.
פורסם במקור בפורום CODE613 ב15/02/2014 22:06 (+02:00)
זה עובד בלינוקס.
כל מה שצריך לעשות כדי להריץ את זה.
לכתוב את זה בקובץ נניח app.c ולקמפל את זה ככה. בשורת הפקודה.
gcc app.c -o app
אחרי זה מריצים את זה ככה.
sudo ./app
צריך להריץ את זה עם sudo כי לשלוח חבילות בraw מצריך הרשאות מנהל.
את התוצאה של החבילות אני בודק עם wireshark
פורסם במקור בפורום CODE613 ב15/02/2014 21:49 (+02:00)
עשיתי שרת udp שמקבל מערך של בתים שמייצג חבילות raw והוא צריך לשלוח את זה לרשת בצורה של raw.
עכשיו הבעיה שזה שולח חבילות dns אז אחרי זה הקרנל משנה את הפורט מקור מ53 ל1.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <linux/types.h>
#include <errno.h>
#include <limits.h>
#include <netinet/udp.h>
#include <netinet/ip.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <arpa/inet.h>
void printBufHex(unsigned char* buf,int len){
int i;
for(i = 0;i<len;i++){
printf("0x%02x ,",buf[i]);
if((i%16) == 16-1) printf("\n");
}
printf("\n");
}
int main(int argc, char**argv)
{
int sockfd,n;
int raw_socket;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char mesg[10000];
sockfd =socket(AF_INET,SOCK_DGRAM,0);
raw_socket = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.7.7");
servaddr.sin_port=htons(7777);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
//int flag = 0;
//int setsockoptr = setsockopt(raw_socket, IPPROTO_IP, IP_HDRINCL, &flag, sizeof(flag));
//printf(">>>>>> setsockoptr %d \n",setsockoptr);
for (;;)
{
len = sizeof(cliaddr);
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);
struct iphdr *out_ip_header = (struct iphdr *)&mesg;
struct sockaddr_in outaddr;
outaddr.sin_port = 0;
outaddr.sin_family = AF_INET;
memcpy(&outaddr.sin_addr, &out_ip_header->daddr, sizeof(struct in_addr));
int sendto_in = sendto(raw_socket , mesg, n ,
MSG_DONTWAIT, (struct sockaddr *)&outaddr, sizeof(struct sockaddr_in));
printf(">>>>>> sendto In %d \n",sendto_in);
printBufHex((unsigned char*)&mesg, n);
}
}
אם אני עושה את זה ככה בלי שרת אלא שולח מערך של בתים כאילו קיבלתי מהשרת. אז הקרנל משנה את הפורט יעד.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <linux/types.h>
#include <errno.h>
#include <limits.h>
#include <netinet/udp.h>
#include <netinet/ip.h>
#include <string.h>
char buf[] = {
0x45 ,0x00 ,0x00 ,0x62 ,0x00 ,0x00 ,0x40 ,0x00 ,0x3c ,0x11 ,0x1f ,0x72 ,0x08 ,0x08 ,0x08 ,0x08 ,
0x0a ,0x05 ,0x05 ,0x05 ,0x00 ,0x35 ,0xe8 ,0xd3 ,0x00 ,0x4e ,0x00 ,0x00 ,0x61 ,0xda ,0x81 ,0x80 ,
0x00 ,0x01 ,0x00 ,0x02 ,0x00 ,0x00 ,0x00 ,0x00 ,0x04 ,0x74 ,0x61 ,0x6c ,0x6b ,0x06 ,0x67 ,0x6f ,
0x6f ,0x67 ,0x6c ,0x65 ,0x03 ,0x63 ,0x6f ,0x6d ,0x00 ,0x00 ,0x01 ,0x00 ,0x01 ,0xc0 ,0x0c ,0x00 ,
0x05 ,0x00 ,0x01 ,0x00 ,0x00 ,0x54 ,0x4d ,0x00 ,0x09 ,0x04 ,0x74 ,0x61 ,0x6c ,0x6b ,0x01 ,0x6c ,
0xc0 ,0x11 ,0xc0 ,0x2d ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x00 ,0x01 ,0x19 ,0x00 ,0x04 ,0x4a ,0x7d ,
0x88 ,0x7d
};
int main(int argc, char **argv)
{
struct iphdr *_udp_ip_header ;
_udp_ip_header = (struct iphdr *)&buf;
int udp_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
printf("socket %d \n",udp_socket);
struct sockaddr_in sin;
sin.sin_port = 0;
sin.sin_family = AF_INET;
memcpy(&sin.sin_addr, &_udp_ip_header->daddr, sizeof(struct in_addr));
int i =0;
int sendto_i;
for(;i<7;i++){
sendto_i = sendto(udp_socket , buf, sizeof(buf),
MSG_DONTWAIT, (struct sockaddr *)&sin, sizeof(struct sockaddr_in));
printf("sendTo %d Bytes \n",sendto_i);
}
exit(0);
}
איך אפשר לשלוח חבילות בלי שהקרנל ישנה לי את התוכן שלהם.
פורסם במקור בפורום CODE613 ב14/02/2014 12:35 (+02:00)
למה שלא תורידו את זה.
http://clients2.google.com/service/update2/crx?response=redirect&x=id%3Dpnjaodmkngahhkoihejjehlcdlnohgmp%26uc%26lang%3Den-US&prod=chrome
זה תוסף לכרום שקורא rss מכל אתר שתומך בזה.
פורסם במקור בפורום CODE613 ב13/02/2014 18:28 (+02:00)
הסיפור שם קשור לכתובות בזיכרון וסוגי דברים כאלו שממש קשורים לטרחני C++ ולא לאנשים אשר כמונו.....
העיקרון הוא פשוט. ברגע שהמערכת הפעלה מקצה קטע בזיכרון לתוכנה. היא שולחת פרמטר מספר שמיצג כתובת בזיכרון.
אם יש לך 4 גיגה אז כאילו הזיכרון זה משתנה גלובלי מערך של בתים באורך 4 גיגה. והמספר זה מספר האיבר במערך שמתחילה ההקצאה.
את האורך ההקצאה התוכנה יודעת כי היא ביקשה הקצאה של X בתים אז מספיק שחוזר המיקום, במקרה אין מקום בזיכון חוזרת כתובת 0 שזה מסמל על שגיאה
במערכות 32 ביט המספר שמיצג את הכתובת בזיכרון הוא uint32 שזה אומר שהכתובת המקסימלית זה בערך 4 מליארד. ולכן זה הסיבה ש32ביט לא משתמש ביותר מ4 גיגה זיכרון ראם. במערכות 64 הכתובת היא uint64 ולכן צריך לשנות את הטיפוס לזה.
פורסם במקור בפורום CODE613 ב12/02/2014 21:15 (+02:00)
כנראה זה מה שמותקן לו (לארכיטקט) במחשב.
אתה רוצה שהוא יתקין 32 רק בשביל זה או אולי מכונה ורטואלית. רק בשביל להחליף utf16 ל utf8 .
פורסם במקור בפורום CODE613 ב12/02/2014 17:56 (+02:00)