Posted by: didiksoft | June 22, 2009

SMS Marketing Software (SMARS)

SMARS adalah software yang memanfaatkan teknologi SMS sebagai medianya. Tentu Saja teknologi SMS lebih Cepat & Efektif menjangkau Calon – calon customer Anda Dibandingkan dengan menggunakan Browsur bukan???

Anda Ingin memberitahu banyak orang mengenai produk – produk yang Anda Jual? Dan jika Anda menginginkan CEPAT, MUDAH, dan MURAH maka Salah Satu Produk Kami yaitu SMS Marketing Software (SMARS) adalah Solusinya!

Bagaimana Bisa???

  1. Software saya mampu mengirimkan sms yg berisi informasi mengenai apa saja kepada semua calon pelanggan Anda secara CEPAT & MUDAH!

    Lihat Screenshot SMARS:

    Anda Hanya perlu Browse

    Lalu klik “All” Maka seluruh daftar nomor hp yg ada pada database Anda masuk ke Daftar Penerima

    Langkah Terakhir Klik “Send” maka Semua nomor akan mendapat “SMS” yg anda ketik. Mudah Bukan!

  2. Murah Bahkan Gratis! Untuk biaya sms ke semua orang tanpa batasan dengan tips dari kami setelah Anda membeli Software ini!.

Masih Kurang puas???

Tenang Bagi Anda yg kurang puas kami masih mempunyai feature – feature lainnya yg sangat canggih, apa saja?

  1. Notifikasi Saat pengiriman berlangsung

    Dengan adanya notifikasi yg memberikan status pengiriman, maka anda dapat melihat status pengirimannya tanpa mengganggu aktifitas lainnya, missal sambil Anda membuat dokumen.

  2. SMS Terjadwal

    Jika Anda ingin melakukan sms yang routine missal setiap hari pada jam tertentu, maka feature ini akan sangat membantu Anda. Dengan Feature ini maka sekali anda “set” maka sms promosi produk anda akan terkirim otomatis sesuai jadwal yg anda tetapkan tanpa merepotkan Anda! Sangat Membatu bukan!!! Lihat Tampilan:

  3. Anda Ingin import Daftar nohp? Mudah Feature kami sudah meng-cover ini!

    Ini Dia Tampilannya:

  4. Butuh Laporan?? Ini Juga Sudah kami Atasi, Ini tampilannya:

Dengan Feature yang sangat Canggih tersebut Kami membandrol dengan harga yang sangat Terjangkau untuk Anda yaitu Rp. 700.000 (TUJUH RATUS RIBU RUPIAH). Tunggu Apalagi!!! Pesan Sekarang & Hematlah biaya Marketing Anda!!!

Semoga dapat memecahkan masalah Anda!

Untuk pemesanan Hub: Didik Rawandi di uchiha_didik@yahoo.com , Phone: 628999851448(>18.00WIB)

Terima Kasih ya!

Posted by: didiksoft | October 29, 2008

Menerima Pembuatan SMS Gateway+Source Code

Menerima pembuatan applikasi sms gateway+source code menggunakan bahasa pemrograman java untuk berbagai keperluan, dengan dukungan applikasi paket  sebagai berikut:

1. Terdapat Fitur: login, setup database, setup communication port, searching member, Broadcast, Auto SMS Engine, Report.

2. Lima Buah request sesuai permintaan Anda.

Kondisi :

1. Applikasi dibuat menggunakan Java Standard Edition (Desktop base), untuk web base (menggunakan Servlet atau pun Applet dikenakan biaya tambahan)

2. Waktu pengerjaan 2 minggu

3. Logika Request Dan ERD dari Anda, jika penambahan request dikenaan biaya tambahan.

Dengan Total Biaya Rp 3.000.000 Anda sudah memiliki applikasi+source code yang sudah, jd tinggal call saya (>18.00 WIB) di 08999851448 (Didik Rawandi)

Posted by: didiksoft | March 31, 2009

Merauk Keuntungan dengan Menjadi Partner saya

Anda Punya waktu Luang??

Ingin mendapatkan uang tambahan??

Jadilah partner saya dengan menjualkan software2 smsgateway yang bisa dicustom penggunaannya untuk keperluan apapun,,

ada pun item yg anda jual saat ini saya membuka 2 dulu saja yaitu :

1. sms gateway application(.exe)

2. sms gateway application+source code (java)

Setiap penjualan software yang berhasil Anda Lakukan, maka anda akan mendapatkan bagian 10% dari harga jual yg disepakati. Misal Anda menjual item yg ke 2:

Rp. 2.500.000 * 10% = Rp 250.000

Lumayan bukan itu baru satu, jika anda menjual pada saat musim TA (Tugas Akhir) maka kemungkinan anda bisa menjual sampai ke 10 orang atau lebih:

10 * Rp 2.500.000 * 10%= Rp 2.500.000 (perhitungan untuk 10 orang)

Sangat menguntungkan bukan???

nah apa yg perlu anda lakukan??

1. menjadi partner saya dengan mengirimkan email ke Didik.Rawandi@yahoo.com cc ke uchiha_didik@yahoo.com dengan format

Subject: Reg [nohp] [nama]

2. tunggu beberapa saat maka Anda akan menerima balasan email konfirmasi, dengan format:

Anda telah sukses terdaftar menjadi partner http://didiksoft.wordpress.com dengan No Anggota: [xxxxxxx]

3.  lalu cari teman atau kerabat yang ingin membeli software saya lalu hubungi saya setelah deal dan dp diberikan maka saya akan langsung memberikan bagian anda(10% dari dp), setelah finishing(+/- 3hari) dan pembayaran dilunasi maka saya akan memberikan bagian anda sisanya.

Tunggu apa lagi daftar dan mulai menjadi partner saya!!!

Salam Partner.

Didik Rawandi

I found very easy way to do cluster in JBoss AS from http://viewvc.jboss.org/cgi-bin/viewvc.cgi/seam/trunk/clustering-howto.txt?view=markup

The procedure outlined in this tutorial has been validated with an seam-gen application and the Seam booking example.

In the tutorial, I assume that the IP addresses of the master and slave servers are 192.168.1.2 and 192.168.1.3,
respectively. I am intentionally not using the mod_jk load balancer so that it's easier to validate that both nodes are
responding to requests and interchanging sessions.

The log messages shown below were generated from the deployment of a WAR application named vehicles.war and its
cooresponding datasource named vehiclesDatasource. The booking example fully supports this process and you can find instructions on how to deploy it to a cluster in the examples/booking/readme.txt file.

I'm using the farm deployment method in these instructions, though you could also deploy the application normally and
allow the two servers to negotiate a master/slave relationship based on startup order.

All timestamps have been zeroed out to reduce noise.

== A note about SELinux ==

You might run into problems getting your nodes to see one another if they are on different machines and the machines are
running RHEL/Fedora. JBoss AS clustering relies on UDP multicasting provided by jGroups. The SELinux configuration that
ships with RHEL/Fedora blocks these packets by default. You can allow them to pass by modifying the iptables rules (as
root). The following commands apply to an IP address that matches 192.168.1.x.

  /sbin/iptables -I RH-Firewall-1-INPUT 5 -p udp -d 224.0.0.0/4 -j ACCEPT
  /sbin/iptables -I RH-Firewall-1-INPUT 9 -p udp -s 192.168.1.0/24 -j ACCEPT
  /sbin/iptables -I RH-Firewall-1-INPUT 10 -p tcp -s 192.168.1.0/24 -j ACCEPT
  /etc/init.d/iptables save

== A note about SFSBs ==

If you are deploying an application with SFSBs and HTTP session replication to a JBoss AS cluster, you must ensure that your SFSB classes are annotated with @Clustered (from the JBoss EJB 3 annotation API) or marked as clustered in the jboss.xml descriptor. See the booking example for details.

With that out of the way, it's time to get started.

== Tutorial ==

1. Create two instances of JBoss AS (just extract the zip twice)
2. Deploy the JDBC driver to server/all/lib/ on both instances if not using HSQLDB
3. Add <distributable/> as the first child element in WEB-INF/web.xml
4. Set the distributable property on org.jboss.seam.core.init to true to enabled the ManagedEntityInterceptor
  (i.e., <core:init distributable="true"/> in WEB-INF/components.xml)
5. Have two IP addresses available (two computers, two network cards, or two IP addresses bound to the same interface).

On *nix, you can bind a new IP address to a network interface using the following command:

  /sbin/ifconfig eth1:2 192.168.1.3

Replace eth1 with your interface name and make the IP address conform to your network.

If you're on Windows, follow these steps:

  - Open your network adapter
  - Click Properties
  - Select Internet Protocol (TCP/IP) then click Properties
  - Click Advanced...
  - Select the IP settings tab and click Add...
  - Type in an IP address, click Add
  - Click OK on all open windows

6. Start the master JBoss AS instance on the first IP:

  ./bin/run.sh -c all -b 192.168.1.2

You should see the following in the log:

00:00:00,000 INFO  [DefaultPartition] Number of cluster members: 1
00:00:00,000 INFO  [DefaultPartition] Other members: 0
00:00:00,000 INFO  [DefaultPartition] Fetching state (will wait for 30000 milliseconds):
00:00:00,000 INFO  [DefaultPartition] State could not be retrieved (we are the first member in group)

7. Verify that the server/all/farm directory is empty in the slave JBoss AS instance
8. Start the slave JBoss AS on second the IP

  ./bin/run.sh -c all -b 192.168.1.3

Should see the following in the log:

00:00:00,000 INFO  [DefaultPartition] Number of cluster members: 2
00:00:00,000 INFO  [DefaultPartition] Other members: 1
00:00:00,000 INFO  [DefaultPartition] Fetching state (will wait for 30000 milliseconds):
00:00:00,000 INFO  [DefaultPartition] state was retrieved successfully (in 120 milliseconds)

Back in the first instance's log you should see acknowledgement of the new member:

00:00:00,000 INFO  [DefaultPartition] I am (192.168.1.2:1099) received membershipChanged event:
00:00:00,000 INFO  [DefaultPartition] Dead members: 0 ([])
00:00:00,000 INFO  [DefaultPartition] New Members : 1 ([192.168.1.3:1099])
00:00:00,000 INFO  [DefaultPartition] All Members : 2 ([192.168.1.2:1099, 192.168.1.3:1099])

9. Deploy the -ds.xml to server/all/farm of the master instance

In the log of the master instance you should see acknowlegement of this deployment:

00:00:00,000 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=vehiclesDatasource' to JNDI name 'java:vehiclesDatasource'
00:00:00,000 INFO  [ClusterFileTransfer] Start push of file vehicles-ds.xml to cluster.
00:00:00,000 INFO  [ClusterFileTransfer] Finished push of file vehicles-ds.xml to cluster.

In the log of the slave instance you should see a complimentary message:

00:00:00,000 INFO  [FarmMemberService] farmDeployment(), deploy locally: farm/vehicles-ds.xml
00:00:00,000 INFO  [ConnectionFactoryBindingService] Unbound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=vehiclesDatasource' from JNDI name 'java:vehiclesDatasource'

10. Deploy the application to the server/all/farm directory

In the log of the master instance you should see acknowlegement of this deployment after the normal application startup
messages have finished:

00:00:00,000 INFO  [ClusterFileTransfer] Start push of file vehicles.war to cluster.

Wait ~3 minutes for the deployed archive to be transferred (I don't know why it takes so long)

In the log of the master instance you should see acknowlegement of this deployment prior to the normal application
startup messages:

00:00:00,000 INFO  [FarmMemberService] farmDeployment(), deploy locally: farm/vehicles.war

Once the application is transfered, you should see confirmation in the log of the master instance:

00:00:00,000 INFO  [ClusterFileTransfer] Finished push of file vehicles.war to cluster.

Then you should see the application startup messages appear in the slave instance.

You're application is now running in a cluster with HTTP session replication! But, of course, you are going to want to
validate that the clustering actually works.

= Validating the distributable services of an application running in a cluster =

It's all well and fine to see the application start successfully on two different JBoss AS servers, but seeing is
believing. You likely want to validate that the two instances are exchanging HTTP sessions to allow the slave to take
over when the master instance is stopped.

Start off by visiting the application running on the master instance in your browser. That will produce the first HTTP
session. Now, open up the JBoss AS JMX console on that instance and navigate to the following MBean:

category: jboss.cache
entry: service=TomcatClusteringCache
method: printDetails()

Invoke the printDetails() method. You will see a tree of active HTTP sessions. Verify that the session your browser is
using corresponds to one of the sessions in this tree. Here is a shortcut for invoking that method:

  http://192.168.1.2:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.cache%3Aservice%3DTomcatClusteringCache&methodName=printDetails

Now switch over to the slave instance and invoke the same method in the JMX console. You should see an identical list
(at least underneath this application's context path). Here's the shortcut to that method.

  http://192.168.1.3:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.cache%3Aservice%3DTomcatClusteringCache&methodName=printDetails

So you can see that at least both servers claim to have identical sessions. Now, time to test that the data is
serializing and unserializing properly.

Here are the steps I follow when I test the booking example:

1. Remove all cookies in your browser (or at least the JSESSIONID cookie for the domain 192.168.1.2)

2. Open the booking example on the master instance:

  http://192.168.1.2/seam-booking

3. Sign in using gavin/foobar, then click on the Find Hotels button

4. Get a booking started:

  a. Choose one of the hotels and click its View Hotel link
  b. Click on the Book Hotel button

5. Build a URL to access the application on the slave instance

  a. Copy the URL in the workspace list at the bottom of the page
  b. Change 192.168.1.2 to 192.168.1.3
  c. Get the value of the JSESSIONID cookie from the current page
  d. Insert ;jsessionid= plus the value of the JSESSIONID cookie before the ? in the URL

6. Visit the URL in a browser that has cookies disabled (the easiest way to ensure the session id in the URL is used)

  links "http://192.168.1.3/seam-booking/book.seam;jsessionid=****?cid=4

7. Complete the booking form and click the Proceed button

8. Now return to the first browser and change the URL to match the confirm page, keeping the cid request parameter

  http://192.168.1.2/seam-booking/confirm.seam?cid=4

9. (optional) Verify you can continue w/o the slave instance running. Go into the JMX console and execute the shutdown() method on jboss.system:type=Server

10. Confirm the booking.

Here's another approach that I wrote before I did the step-by-step:

Sign in using using the URL of the master instance. Then, construct a URL for the second instance by putting the
;jsessionid=XXXX immediately after the servlet path and changing the IP address. You should see that the session has
carried over to the other instance. Now kill the master instance and see that you can continue to use the application
from the slave instance. Remove the deployments from the server/all/farm directory and start the instance again. Switch
the IP in the URL back to that of the master instance and visit the URL. You'll see that the original session is still
being used.

One way to watch objects passivate and activate is to create a session- or conversation-scoped Seam component and
implement the appropriate life-cycle methods. You can either use methods from the HttpSessionActivationListener
interface (Seam automatically registers this interface on all non-EJB components):

  public void sessionWillPassivate(HttpSessionEvent e);
  public void sessionDidActivate(HttpSessionEvent e);

or you can simply mark two no-argument public void methods with @PrePassivate and @PostActivate, respectively. Note that
the passivation step occurs at the end of every request, while the activation step occurs when a node is called upon.

The really nice part about Seam is that it is working very hard to make replication transparent by automatically keeping
track of dirty object and ensuring that they are propagated. All you need to do is maintain a dirty flag on your
session- or conversation-scoped component. Seam automatically takes care of JPA entity instances for you.

= Notes and outstanding issues =

* transient fields aren't always reinitialized, required a fix to SecurityInterceptor; might show up elsewhere
Posted by: didiksoft | May 12, 2009

SELECT DISTINCT and ORDER BY

Let’s look at an example.  Suppose we have the following data:

Letter  Value
—-    ——
A       1
A       1
B       3
B       3
C       2

From that, let’s say we’d like see only DISTINCT letters, ordered by value.  Clearly, this means we want to return:

A
C
B

… right?  “A” has the lowest values of 1, followed “C” with a value of 2, and finally “B” with values of 3.  Yet, if we write:

select distinct letter
from x
order by Value

we receive back the above error message.  Why?

Remember, the “rules” of what is allowed and not allowed in SQL is not determined by how your data looks at a particular point in time; it is a constant.  Just because one set of data seems to be perfectly orderable in this scenario does not mean that all data is always going to be perfectly orderable as well.  What if we had this set of data instead:

Letter  Value
—-    —–
A       1
A       1
B       3
B       0
C       2

Look carefully at the above, and think about what should be returned when asking for distinct Letters ordered by Value.

The answer is …. there is no correct answer!  B contains a value of both 0 and 3, so should it appear first, or should it appear last?  The answer is — who knows?!  It is not specified when simply asking for distinct Letters ordered by Value.   It is not a clear, complete, deterministic question that you are asking SQL Server to answer; it is like asking someone “what color is it when you add 4 and 3?”  — the question makes no sense and cannot be conclusively answered as stated.

Now, one person might say, “well, clearly, we want to B to be returned first, since it has the value of 0 and that is lower than all the other values”, and another might say “well, clearly, we want B to be returned last, since it has the value of 3 and that is clearly higher than all the other values.”  And both people would technically be right, and both are entitled to their logic and their needs — but that logic and those requirements need to be specified; they cannot be implied, since there is more than one way to interpret the question.  Computers are funny that way, right? They are pretty darn smart, but they always insist on being told exactly what it is we want.   How annoying!

(I often use this analogy regarding users or programmers who refuse to express their requirements or needs logically and completely: It is like a magic Genie saying “you can have anything in the world, all you need to do is tell me specifically what you want and make it perfectly clear and you will get it!”, and the users thinking about it, and eventually concluding “nahh… not worth it, sounds like too much work; can’t you just figure out what I want?”)

So, what is the solution here? To make the error “just go away”, we can try just adding the Value column to the SELECT clause like this:

select distinct Letter, Value
from x
order by Value

In our original set of data, this works fine — it returns the results we want and expect, only with an additional column.  If your data has a 1-1 relation between the ORDER BY columns and the SELECT columns, then simply adding the ORDER BY columns to your SELECT does the trick.

However, running that SELECT on the second set of data (in which “B” has values of 0 and 3) results in “B” being repeated twice:

B    0
A    1
C    2
B    3

To solve this, like usual, we simply must decide what we want, and explicitly tell SQL Server what that is.  If we want to order by the letter using the lowest associated value, then we simply ask for that … not by using DISTINCT, but by using GROUP BY:

select Letter
from x
group by Letter
order by min(Value)

This results in:

B
A
C

… And if we want to do the opposite, and order by the Letter with the greatest associated value, then we write:

select Letter
from x
group by Letter
order by max(Value)

A
C
B

We may even want to add up all of the values for each letter and order by that, or maybe there is some other rule. The key is that SQL Server cannot help you until you specifically express what you are looking for.  And that is what this error message is all about — “Hey, what you are asking for can be interpreted many different ways; can you be more specific?”

SQL (and any other programming language) really is like the magic Genie; it can give you whatever you want, but there is a catch — you need to ask for it!

Older Posts »

Categories